diff --git a/.gitignore b/.gitignore index 9e82b91..f33a2b6 100644 --- a/.gitignore +++ b/.gitignore @@ -26,5 +26,7 @@ bin/ .env tmp/ -/pkgdash +cmd/pkgdash/pkgdash +cmd/pkgdashctl/pkgdashctl *.sqlite +*.db \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/3rdpartylicenses.txt b/cmd/pkgdash/assets/ui/3rdpartylicenses.txt deleted file mode 100644 index b1fc0de..0000000 --- a/cmd/pkgdash/assets/ui/3rdpartylicenses.txt +++ /dev/null @@ -1,284 +0,0 @@ -@angular/animations -MIT - -@angular/common -MIT - -@angular/core -MIT - -@angular/material -MIT -The MIT License - -Copyright (c) 2021 Google LLC. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -@angular/platform-browser -MIT - -@angular/router -MIT - -rxjs -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -tslib -0BSD -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -zone.js -MIT -The MIT License - -Copyright (c) 2010-2022 Google LLC. https://angular.io/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/cmd/pkgdash/assets/ui/index.html b/cmd/pkgdash/assets/ui/index.html index 09519ca..eaea879 100644 --- a/cmd/pkgdash/assets/ui/index.html +++ b/cmd/pkgdash/assets/ui/index.html @@ -1,15 +1,16 @@ - + + + UI - - - + + + - - - \ No newline at end of file + + diff --git a/cmd/pkgdash/assets/ui/main.5a9218fbdfa97527.js b/cmd/pkgdash/assets/ui/main.5a9218fbdfa97527.js deleted file mode 100644 index 1bcb05f..0000000 --- a/cmd/pkgdash/assets/ui/main.5a9218fbdfa97527.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkui=self.webpackChunkui||[]).push([[179],{727:()=>{function re(t){return"function"==typeof t}function vi(t){const n=t(r=>{Error.call(r),r.stack=(new Error).stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}const Ls=vi(t=>function(n){t(this),this.message=n?`${n.length} errors occurred during unsubscription:\n${n.map((r,i)=>`${i+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=n});function Di(t,e){if(t){const n=t.indexOf(e);0<=n&&t.splice(n,1)}}class mt{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._teardowns=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;const{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(const s of n)s.remove(this);else n.remove(this);const{initialTeardown:r}=this;if(re(r))try{r()}catch(s){e=s instanceof Ls?s.errors:[s]}const{_teardowns:i}=this;if(i){this._teardowns=null;for(const s of i)try{Ff(s)}catch(o){e=e??[],o instanceof Ls?e=[...e,...o.errors]:e.push(o)}}if(e)throw new Ls(e)}}add(e){var n;if(e&&e!==this)if(this.closed)Ff(e);else{if(e instanceof mt){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._teardowns=null!==(n=this._teardowns)&&void 0!==n?n:[]).push(e)}}_hasParent(e){const{_parentage:n}=this;return n===e||Array.isArray(n)&&n.includes(e)}_addParent(e){const{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e}_removeParent(e){const{_parentage:n}=this;n===e?this._parentage=null:Array.isArray(n)&&Di(n,e)}remove(e){const{_teardowns:n}=this;n&&Di(n,e),e instanceof mt&&e._removeParent(this)}}mt.EMPTY=(()=>{const t=new mt;return t.closed=!0,t})();const Pf=mt.EMPTY;function xf(t){return t instanceof mt||t&&"closed"in t&&re(t.remove)&&re(t.add)&&re(t.unsubscribe)}function Ff(t){re(t)?t():t.unsubscribe()}const zn={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},Vs={setTimeout(...t){const{delegate:e}=Vs;return(e?.setTimeout||setTimeout)(...t)},clearTimeout(t){const{delegate:e}=Vs;return(e?.clearTimeout||clearTimeout)(t)},delegate:void 0};function Of(t){Vs.setTimeout(()=>{const{onUnhandledError:e}=zn;if(!e)throw t;e(t)})}function $s(){}const Uw=sl("C",void 0,void 0);function sl(t,e,n){return{kind:t,value:e,error:n}}let qn=null;function js(t){if(zn.useDeprecatedSynchronousErrorHandling){const e=!qn;if(e&&(qn={errorThrown:!1,error:null}),t(),e){const{errorThrown:n,error:r}=qn;if(qn=null,n)throw r}}else t()}class ol extends mt{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,xf(e)&&e.add(this)):this.destination=Gw}static create(e,n,r){return new al(e,n,r)}next(e){this.isStopped?ul(function zw(t){return sl("N",t,void 0)}(e),this):this._next(e)}error(e){this.isStopped?ul(function Hw(t){return sl("E",void 0,t)}(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?ul(Uw,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}class al extends ol{constructor(e,n,r){let i;if(super(),re(e))i=e;else if(e){let s;({next:i,error:n,complete:r}=e),this&&zn.useDeprecatedNextContext?(s=Object.create(e),s.unsubscribe=()=>this.unsubscribe()):s=e,i=i?.bind(s),n=n?.bind(s),r=r?.bind(s)}this.destination={next:i?ll(i):$s,error:ll(n??kf),complete:r?ll(r):$s}}}function ll(t,e){return(...n)=>{try{t(...n)}catch(r){zn.useDeprecatedSynchronousErrorHandling?function qw(t){zn.useDeprecatedSynchronousErrorHandling&&qn&&(qn.errorThrown=!0,qn.error=t)}(r):Of(r)}}}function kf(t){throw t}function ul(t,e){const{onStoppedNotification:n}=zn;n&&Vs.setTimeout(()=>n(t,e))}const Gw={closed:!0,next:$s,error:kf,complete:$s},cl="function"==typeof Symbol&&Symbol.observable||"@@observable";function Gn(t){return t}function Lf(t){return 0===t.length?Gn:1===t.length?t[0]:function(n){return t.reduce((r,i)=>i(r),n)}}let Ce=(()=>{class t{constructor(n){n&&(this._subscribe=n)}lift(n){const r=new t;return r.source=this,r.operator=n,r}subscribe(n,r,i){const s=function Kw(t){return t&&t instanceof ol||function Qw(t){return t&&re(t.next)&&re(t.error)&&re(t.complete)}(t)&&xf(t)}(n)?n:new al(n,r,i);return js(()=>{const{operator:o,source:a}=this;s.add(o?o.call(s,a):a?this._subscribe(s):this._trySubscribe(s))}),s}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return new(r=Vf(r))((i,s)=>{let o;o=this.subscribe(a=>{try{n(a)}catch(l){s(l),o?.unsubscribe()}},s,i)})}_subscribe(n){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(n)}[cl](){return this}pipe(...n){return Lf(n)(this)}toPromise(n){return new(n=Vf(n))((r,i)=>{let s;this.subscribe(o=>s=o,o=>i(o),()=>r(s))})}}return t.create=e=>new t(e),t})();function Vf(t){var e;return null!==(e=t??zn.Promise)&&void 0!==e?e:Promise}const Zw=vi(t=>function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let Ht=(()=>{class t extends Ce{constructor(){super(),this.closed=!1,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){const r=new $f(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Zw}next(n){js(()=>{if(this._throwIfClosed(),!this.isStopped){const r=this.observers.slice();for(const i of r)i.next(n)}})}error(n){js(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;const{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){js(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=null}get observed(){var n;return(null===(n=this.observers)||void 0===n?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){const{hasError:r,isStopped:i,observers:s}=this;return r||i?Pf:(s.push(n),new mt(()=>Di(s,n)))}_checkFinalizedStatuses(n){const{hasError:r,thrownError:i,isStopped:s}=this;r?n.error(i):s&&n.complete()}asObservable(){const n=new Ce;return n.source=this,n}}return t.create=(e,n)=>new $f(e,n),t})();class $f extends Ht{constructor(e,n){super(),this.destination=e,this.source=n}next(e){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===r||r.call(n,e)}error(e){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===r||r.call(n,e)}complete(){var e,n;null===(n=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===n||n.call(e)}_subscribe(e){var n,r;return null!==(r=null===(n=this.source)||void 0===n?void 0:n.subscribe(e))&&void 0!==r?r:Pf}}function jf(t){return re(t?.lift)}function Me(t){return e=>{if(jf(e))return e.lift(function(n){try{return t(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}class Ae extends ol{constructor(e,n,r,i,s){super(e),this.onFinalize=s,this._next=n?function(o){try{n(o)}catch(a){e.error(a)}}:super._next,this._error=i?function(o){try{i(o)}catch(a){e.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(o){e.error(o)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var e;const{closed:n}=this;super.unsubscribe(),!n&&(null===(e=this.onFinalize)||void 0===e||e.call(this))}}function K(t,e){return Me((n,r)=>{let i=0;n.subscribe(new Ae(r,s=>{r.next(t.call(e,s,i++))}))})}function Wn(t){return this instanceof Wn?(this.v=t,this):new Wn(t)}function Jw(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,r=n.apply(t,e||[]),s=[];return i={},o("next"),o("throw"),o("return"),i[Symbol.asyncIterator]=function(){return this},i;function o(f){r[f]&&(i[f]=function(h){return new Promise(function(p,g){s.push([f,h,p,g])>1||a(f,h)})})}function a(f,h){try{!function l(f){f.value instanceof Wn?Promise.resolve(f.value.v).then(u,c):d(s[0][2],f)}(r[f](h))}catch(p){d(s[0][3],p)}}function u(f){a("next",f)}function c(f){a("throw",f)}function d(f,h){f(h),s.shift(),s.length&&a(s[0][0],s[0][1])}}function eE(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,e=t[Symbol.asyncIterator];return e?e.call(t):(t=function Hf(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(s){n[s]=t[s]&&function(o){return new Promise(function(a,l){!function i(s,o,a,l){Promise.resolve(l).then(function(u){s({value:u,done:a})},o)}(a,l,(o=t[s](o)).done,o.value)})}}}const zf=t=>t&&"number"==typeof t.length&&"function"!=typeof t;function qf(t){return re(t?.then)}function Gf(t){return re(t[cl])}function Wf(t){return Symbol.asyncIterator&&re(t?.[Symbol.asyncIterator])}function Qf(t){return new TypeError(`You provided ${null!==t&&"object"==typeof t?"an invalid object":`'${t}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const Kf=function nE(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function Zf(t){return re(t?.[Kf])}function Yf(t){return Jw(this,arguments,function*(){const n=t.getReader();try{for(;;){const{value:r,done:i}=yield Wn(n.read());if(i)return yield Wn(void 0);yield yield Wn(r)}}finally{n.releaseLock()}})}function Xf(t){return re(t?.getReader)}function en(t){if(t instanceof Ce)return t;if(null!=t){if(Gf(t))return function rE(t){return new Ce(e=>{const n=t[cl]();if(re(n.subscribe))return n.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(t);if(zf(t))return function iE(t){return new Ce(e=>{for(let n=0;n{t.then(n=>{e.closed||(e.next(n),e.complete())},n=>e.error(n)).then(null,Of)})}(t);if(Wf(t))return Jf(t);if(Zf(t))return function oE(t){return new Ce(e=>{for(const n of t)if(e.next(n),e.closed)return;e.complete()})}(t);if(Xf(t))return function aE(t){return Jf(Yf(t))}(t)}throw Qf(t)}function Jf(t){return new Ce(e=>{(function lE(t,e){var n,r,i,s;return function Yw(t,e,n,r){return new(n||(n=Promise))(function(s,o){function a(c){try{u(r.next(c))}catch(d){o(d)}}function l(c){try{u(r.throw(c))}catch(d){o(d)}}function u(c){c.done?s(c.value):function i(s){return s instanceof n?s:new n(function(o){o(s)})}(c.value).then(a,l)}u((r=r.apply(t,e||[])).next())})}(this,void 0,void 0,function*(){try{for(n=eE(t);!(r=yield n.next()).done;)if(e.next(r.value),e.closed)return}catch(o){i={error:o}}finally{try{r&&!r.done&&(s=n.return)&&(yield s.call(n))}finally{if(i)throw i.error}}e.complete()})})(t,e).catch(n=>e.error(n))})}function tn(t,e,n,r=0,i=!1){const s=e.schedule(function(){n(),i?t.add(this.schedule(null,r)):this.unsubscribe()},r);if(t.add(s),!i)return s}function Pe(t,e,n=1/0){return re(e)?Pe((r,i)=>K((s,o)=>e(r,s,i,o))(en(t(r,i))),n):("number"==typeof e&&(n=e),Me((r,i)=>function uE(t,e,n,r,i,s,o,a){const l=[];let u=0,c=0,d=!1;const f=()=>{d&&!l.length&&!u&&e.complete()},h=g=>u{s&&e.next(g),u++;let m=!1;en(n(g,c++)).subscribe(new Ae(e,v=>{i?.(v),s?h(v):e.next(v)},()=>{m=!0},void 0,()=>{if(m)try{for(u--;l.length&&up(v)):p(v)}f()}catch(v){e.error(v)}}))};return t.subscribe(new Ae(e,h,()=>{d=!0,f()})),()=>{a?.()}}(r,i,t,n)))}function Dr(t=1/0){return Pe(Gn,t)}const nn=new Ce(t=>t.complete());function fl(t){return t[t.length-1]}function _i(t){return function dE(t){return t&&re(t.schedule)}(fl(t))?t.pop():void 0}function eh(t,e=0){return Me((n,r)=>{n.subscribe(new Ae(r,i=>tn(r,t,()=>r.next(i),e),()=>tn(r,t,()=>r.complete(),e),i=>tn(r,t,()=>r.error(i),e)))})}function th(t,e=0){return Me((n,r)=>{r.add(t.schedule(()=>n.subscribe(r),e))})}function nh(t,e){if(!t)throw new Error("Iterable cannot be null");return new Ce(n=>{tn(n,e,()=>{const r=t[Symbol.asyncIterator]();tn(n,e,()=>{r.next().then(i=>{i.done?n.complete():n.next(i.value)})},0,!0)})})}function ve(t,e){return e?function DE(t,e){if(null!=t){if(Gf(t))return function pE(t,e){return en(t).pipe(th(e),eh(e))}(t,e);if(zf(t))return function mE(t,e){return new Ce(n=>{let r=0;return e.schedule(function(){r===t.length?n.complete():(n.next(t[r++]),n.closed||this.schedule())})})}(t,e);if(qf(t))return function gE(t,e){return en(t).pipe(th(e),eh(e))}(t,e);if(Wf(t))return nh(t,e);if(Zf(t))return function yE(t,e){return new Ce(n=>{let r;return tn(n,e,()=>{r=t[Kf](),tn(n,e,()=>{let i,s;try{({value:i,done:s}=r.next())}catch(o){return void n.error(o)}s?n.complete():n.next(i)},0,!0)}),()=>re(r?.return)&&r.return()})}(t,e);if(Xf(t))return function vE(t,e){return nh(Yf(t),e)}(t,e)}throw Qf(t)}(t,e):en(t)}function _r(t){return t<=0?()=>nn:Me((e,n)=>{let r=0;e.subscribe(new Ae(n,i=>{++r<=t&&(n.next(i),t<=r&&n.complete())}))})}function hl(t,e,...n){return!0===e?(t(),null):!1===e?null:e(...n).pipe(_r(1)).subscribe(()=>t())}function te(t){for(let e in t)if(t[e]===te)return e;throw Error("Could not find renamed property on target object.")}function ne(t){if("string"==typeof t)return t;if(Array.isArray(t))return"["+t.map(ne).join(", ")+"]";if(null==t)return""+t;if(t.overriddenName)return`${t.overriddenName}`;if(t.name)return`${t.name}`;const e=t.toString();if(null==e)return""+e;const n=e.indexOf("\n");return-1===n?e:e.substring(0,n)}function gl(t,e){return null==t||""===t?null===e?"":e:null==e||""===e?t:t+" "+e}const EE=te({__forward_ref__:te});function ml(t){return t.__forward_ref__=ml,t.toString=function(){return ne(this())},t}function F(t){return function yl(t){return"function"==typeof t&&t.hasOwnProperty(EE)&&t.__forward_ref__===ml}(t)?t():t}class _ extends Error{constructor(e,n){super(function Bs(t,e){return`NG0${Math.abs(t)}${e?": "+e.trim():""}`}(e,n)),this.code=e}}function Y(t){return"function"==typeof t?t.name||t.toString():"object"==typeof t&&null!=t&&"function"==typeof t.type?t.type.name||t.type.toString():function L(t){return"string"==typeof t?t:null==t?"":String(t)}(t)}function Us(t,e){throw new _(-201,!1)}function nt(t,e){null==t&&function J(t,e,n,r){throw new Error(`ASSERTION ERROR: ${t}`+(null==r?"":` [Expected=> ${n} ${r} ${e} <=Actual]`))}(e,t,null,"!=")}function V(t){return{token:t.token,providedIn:t.providedIn||null,factory:t.factory,value:void 0}}function sn(t){return{providers:t.providers||[],imports:t.imports||[]}}function Hs(t){return rh(t,zs)||rh(t,sh)}function rh(t,e){return t.hasOwnProperty(e)?t[e]:null}function ih(t){return t&&(t.hasOwnProperty(vl)||t.hasOwnProperty(NE))?t[vl]:null}const zs=te({\u0275prov:te}),vl=te({\u0275inj:te}),sh=te({ngInjectableDef:te}),NE=te({ngInjectorDef:te});var N=(()=>((N=N||{})[N.Default=0]="Default",N[N.Host=1]="Host",N[N.Self=2]="Self",N[N.SkipSelf=4]="SkipSelf",N[N.Optional=8]="Optional",N))();let Dl;function yt(t){const e=Dl;return Dl=t,e}function oh(t,e,n){const r=Hs(t);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&N.Optional?null:void 0!==e?e:void Us(ne(t))}function Sn(t){return{toString:t}.toString()}var Tt=(()=>((Tt=Tt||{})[Tt.OnPush=0]="OnPush",Tt[Tt.Default=1]="Default",Tt))(),Mt=(()=>{return(t=Mt||(Mt={}))[t.Emulated=0]="Emulated",t[t.None=2]="None",t[t.ShadowDom=3]="ShadowDom",Mt;var t})();const ie=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),wr={},X=[],qs=te({\u0275cmp:te}),_l=te({\u0275dir:te}),wl=te({\u0275pipe:te}),ah=te({\u0275mod:te}),on=te({\u0275fac:te}),wi=te({__NG_ELEMENT_ID__:te});let xE=0;function Ei(t){return Sn(()=>{const n=!0===t.standalone,r={},i={type:t.type,providersResolver:null,decls:t.decls,vars:t.vars,factory:null,template:t.template||null,consts:t.consts||null,ngContentSelectors:t.ngContentSelectors,hostBindings:t.hostBindings||null,hostVars:t.hostVars||0,hostAttrs:t.hostAttrs||null,contentQueries:t.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:t.exportAs||null,onPush:t.changeDetection===Tt.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&t.dependencies||null,getStandaloneInjector:null,selectors:t.selectors||X,viewQuery:t.viewQuery||null,features:t.features||null,data:t.data||{},encapsulation:t.encapsulation||Mt.Emulated,id:"c"+xE++,styles:t.styles||X,_:null,setInput:null,schemas:t.schemas||null,tView:null},s=t.dependencies,o=t.features;return i.inputs=ch(t.inputs,r),i.outputs=ch(t.outputs),o&&o.forEach(a=>a(i)),i.directiveDefs=s?()=>("function"==typeof s?s():s).map(lh).filter(uh):null,i.pipeDefs=s?()=>("function"==typeof s?s():s).map(ze).filter(uh):null,i})}function lh(t){return ee(t)||He(t)}function uh(t){return null!==t}function bn(t){return Sn(()=>({type:t.type,bootstrap:t.bootstrap||X,declarations:t.declarations||X,imports:t.imports||X,exports:t.exports||X,transitiveCompileScopes:null,schemas:t.schemas||null,id:t.id||null}))}function ch(t,e){if(null==t)return wr;const n={};for(const r in t)if(t.hasOwnProperty(r)){let i=t[r],s=i;Array.isArray(i)&&(s=i[1],i=i[0]),n[i]=r,e&&(e[i]=s)}return n}const Oe=Ei;function ee(t){return t[qs]||null}function He(t){return t[_l]||null}function ze(t){return t[wl]||null}function rt(t,e){const n=t[ah]||null;if(!n&&!0===e)throw new Error(`Type ${ne(t)} does not have '\u0275mod' property.`);return n}const B=11;function Xe(t){return Array.isArray(t)&&"object"==typeof t[1]}function Rt(t){return Array.isArray(t)&&!0===t[1]}function Sl(t){return 0!=(8&t.flags)}function Ks(t){return 2==(2&t.flags)}function Nt(t){return null!==t.template}function $E(t){return 0!=(256&t[2])}function Xn(t,e){return t.hasOwnProperty(on)?t[on]:null}class UE{constructor(e,n,r){this.previousValue=e,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function hh(t){return t.type.prototype.ngOnChanges&&(t.setInput=zE),HE}function HE(){const t=gh(this),e=t?.current;if(e){const n=t.previous;if(n===wr)t.previous=e;else for(let r in e)n[r]=e[r];t.current=null,this.ngOnChanges(e)}}function zE(t,e,n,r){const i=gh(t)||function qE(t,e){return t[ph]=e}(t,{previous:wr,current:null}),s=i.current||(i.current={}),o=i.previous,a=this.declaredInputs[n],l=o[a];s[a]=new UE(l&&l.currentValue,e,o===wr),t[r]=e}const ph="__ngSimpleChanges__";function gh(t){return t[ph]||null}function De(t){for(;Array.isArray(t);)t=t[0];return t}function st(t,e){return De(e[t.index])}function ot(t,e){const n=e[t];return Xe(n)?n:n[0]}function Xs(t){return 64==(64&t[2])}function In(t,e){return null==e?null:t[e]}function mh(t){t[18]=0}function Rl(t,e){t[5]+=e;let n=t,r=t[3];for(;null!==r&&(1===e&&1===n[5]||-1===e&&0===n[5]);)r[5]+=e,n=r,r=r[3]}const k={lFrame:Ih(null),bindingsEnabled:!0};function vh(){return k.bindingsEnabled}function D(){return k.lFrame.lView}function Q(){return k.lFrame.tView}function Se(){let t=Dh();for(;null!==t&&64===t.type;)t=t.parent;return t}function Dh(){return k.lFrame.currentTNode}function zt(t,e){const n=k.lFrame;n.currentTNode=t,n.isParent=e}function Nl(){return k.lFrame.isParent}function lC(t,e){const n=k.lFrame;n.bindingIndex=n.bindingRootIndex=t,xl(e)}function xl(t){k.lFrame.currentDirectiveIndex=t}function Ol(t){k.lFrame.currentQueryIndex=t}function cC(t){const e=t[1];return 2===e.type?e.declTNode:1===e.type?t[6]:null}function Sh(t,e,n){if(n&N.SkipSelf){let i=e,s=t;for(;!(i=i.parent,null!==i||n&N.Host||(i=cC(s),null===i||(s=s[15],10&i.type))););if(null===i)return!1;e=i,t=s}const r=k.lFrame=bh();return r.currentTNode=e,r.lView=t,!0}function kl(t){const e=bh(),n=t[1];k.lFrame=e,e.currentTNode=n.firstChild,e.lView=t,e.tView=n,e.contextLView=t,e.bindingIndex=n.bindingStartIndex,e.inI18n=!1}function bh(){const t=k.lFrame,e=null===t?null:t.child;return null===e?Ih(t):e}function Ih(t){const e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:t,child:null,inI18n:!1};return null!==t&&(t.child=e),e}function Th(){const t=k.lFrame;return k.lFrame=t.parent,t.currentTNode=null,t.lView=null,t}const Mh=Th;function Ll(){const t=Th();t.isParent=!0,t.tView=null,t.selectedIndex=-1,t.contextLView=null,t.elementDepthCount=0,t.currentDirectiveIndex=-1,t.currentNamespace=null,t.bindingRootIndex=-1,t.bindingIndex=-1,t.currentQueryIndex=0}function Tn(t){k.lFrame.selectedIndex=t}function Js(t,e){for(let n=e.directiveStart,r=e.directiveEnd;n=r)break}else e[l]<0&&(t[18]+=65536),(a>11>16&&(3&t[2])===e){t[2]+=2048;try{s.call(a)}finally{}}}else try{s.call(a)}finally{}}class Mi{constructor(e,n,r){this.factory=e,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function no(t,e,n){let r=0;for(;re){o=s-1;break}}}for(;s>16}(t),r=e;for(;n>0;)r=r[15],n--;return r}let jl=!0;function io(t){const e=jl;return jl=t,e}let bC=0;const qt={};function Ri(t,e){const n=Ul(t,e);if(-1!==n)return n;const r=e[1];r.firstCreatePass&&(t.injectorIndex=e.length,Bl(r.data,t),Bl(e,null),Bl(r.blueprint,null));const i=so(t,e),s=t.injectorIndex;if(xh(i)){const o=Mr(i),a=Ar(i,e),l=a[1].data;for(let u=0;u<8;u++)e[s+u]=a[o+u]|l[o+u]}return e[s+8]=i,s}function Bl(t,e){t.push(0,0,0,0,0,0,0,0,e)}function Ul(t,e){return-1===t.injectorIndex||t.parent&&t.parent.injectorIndex===t.injectorIndex||null===e[t.injectorIndex+8]?-1:t.injectorIndex}function so(t,e){if(t.parent&&-1!==t.parent.injectorIndex)return t.parent.injectorIndex;let n=0,r=null,i=e;for(;null!==i;){if(r=Uh(i),null===r)return-1;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function oo(t,e,n){!function IC(t,e,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(wi)&&(r=n[wi]),null==r&&(r=n[wi]=bC++);const i=255&r;e.data[t+(i>>5)]|=1<=0?255&e:RC:e}(n);if("function"==typeof s){if(!Sh(e,t,r))return r&N.Host?kh(i,0,r):Lh(e,n,r,i);try{const o=s(r);if(null!=o||r&N.Optional)return o;Us()}finally{Mh()}}else if("number"==typeof s){let o=null,a=Ul(t,e),l=-1,u=r&N.Host?e[16][6]:null;for((-1===a||r&N.SkipSelf)&&(l=-1===a?so(t,e):e[a+8],-1!==l&&Bh(r,!1)?(o=e[1],a=Mr(l),e=Ar(l,e)):a=-1);-1!==a;){const c=e[1];if(jh(s,a,c.data)){const d=MC(a,e,n,o,r,u);if(d!==qt)return d}l=e[a+8],-1!==l&&Bh(r,e[1].data[a+8]===u)&&jh(s,a,e)?(o=c,a=Mr(l),e=Ar(l,e)):a=-1}}return i}function MC(t,e,n,r,i,s){const o=e[1],a=o.data[t+8],c=function ao(t,e,n,r,i){const s=t.providerIndexes,o=e.data,a=1048575&s,l=t.directiveStart,c=s>>20,f=i?a+c:t.directiveEnd;for(let h=r?a:a+c;h=l&&p.type===n)return h}if(i){const h=o[l];if(h&&Nt(h)&&h.type===n)return l}return null}(a,o,n,null==r?Ks(a)&&jl:r!=o&&0!=(3&a.type),i&N.Host&&s===a);return null!==c?Ni(e,o,c,a):qt}function Ni(t,e,n,r){let i=t[n];const s=e.data;if(function _C(t){return t instanceof Mi}(i)){const o=i;o.resolving&&function CE(t,e){const n=e?`. Dependency path: ${e.join(" > ")} > ${t}`:"";throw new _(-200,`Circular dependency in DI detected for ${t}${n}`)}(Y(s[n]));const a=io(o.canSeeViewProviders);o.resolving=!0;const l=o.injectImpl?yt(o.injectImpl):null;Sh(t,r,N.Default);try{i=t[n]=o.factory(void 0,s,t,r),e.firstCreatePass&&n>=r.directiveStart&&function vC(t,e,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:s}=e.type.prototype;if(r){const o=hh(e);(n.preOrderHooks||(n.preOrderHooks=[])).push(t,o),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,o)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-t,i),s&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,s))}(n,s[n],e)}finally{null!==l&&yt(l),io(a),o.resolving=!1,Mh()}}return i}function jh(t,e,n){return!!(n[e+(t>>5)]&1<{const r=function zl(t){return function(...n){if(t){const r=t(...n);for(const i in r)this[i]=r[i]}}}(e);function i(...s){if(this instanceof i)return r.apply(this,s),this;const o=new i(...s);return a.annotation=o,a;function a(l,u,c){const d=l.hasOwnProperty(Pr)?l[Pr]:Object.defineProperty(l,Pr,{value:[]})[Pr];for(;d.length<=c;)d.push(null);return(d[c]=d[c]||[]).push(o),l}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=t,i.annotationCls=i,i})}class O{constructor(e,n){this._desc=e,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=V({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function un(t,e){t.forEach(n=>Array.isArray(n)?un(n,e):e(n))}function zh(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function lo(t,e){return e>=t.length-1?t.pop():t.splice(e,1)[0]}const ki={},Ql="__NG_DI_FLAG__",co="ngTempTokenPath",zC=/\n/gm,Qh="__source";let Li;function kr(t){const e=Li;return Li=t,e}function GC(t,e=N.Default){if(void 0===Li)throw new _(-203,!1);return null===Li?oh(t,void 0,e):Li.get(t,e&N.Optional?null:void 0,e)}function I(t,e=N.Default){return(function PE(){return Dl}()||GC)(F(t),e)}function pe(t,e=N.Default){return"number"!=typeof e&&(e=0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)),I(t,e)}function Kl(t){const e=[];for(let n=0;n((Je=Je||{})[Je.Important=1]="Important",Je[Je.DashCase=2]="DashCase",Je))();const eu=new Map;let dS=0;const nu="__ngContext__";function Ve(t,e){Xe(e)?(t[nu]=e[20],function hS(t){eu.set(t[20],t)}(e)):t[nu]=e}function iu(t,e){return undefined(t,e)}function zi(t){const e=t[3];return Rt(e)?e[3]:e}function su(t){return gp(t[13])}function ou(t){return gp(t[4])}function gp(t){for(;null!==t&&!Rt(t);)t=t[4];return t}function Vr(t,e,n,r,i){if(null!=r){let s,o=!1;Rt(r)?s=r:Xe(r)&&(o=!0,r=r[0]);const a=De(r);0===t&&null!==n?null==i?wp(e,n,a):er(e,n,a,i||null,!0):1===t&&null!==n?er(e,n,a,i||null,!0):2===t?function hu(t,e,n){const r=po(t,e);r&&function OS(t,e,n,r){t.removeChild(e,n,r)}(t,r,e,n)}(e,a,o):3===t&&e.destroyNode(a),null!=s&&function VS(t,e,n,r,i){const s=n[7];s!==De(n)&&Vr(e,t,r,s,i);for(let a=10;a0&&(t[n-1][4]=r[4]);const s=lo(t,10+e);!function TS(t,e){qi(t,e,e[B],2,null,null),e[0]=null,e[6]=null}(r[1],r);const o=s[19];null!==o&&o.detachView(s[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function vp(t,e){if(!(128&e[2])){const n=e[B];n.destroyNode&&qi(t,e,n,3,null,null),function RS(t){let e=t[13];if(!e)return cu(t[1],t);for(;e;){let n=null;if(Xe(e))n=e[13];else{const r=e[10];r&&(n=r)}if(!n){for(;e&&!e[4]&&e!==t;)Xe(e)&&cu(e[1],e),e=e[3];null===e&&(e=t),Xe(e)&&cu(e[1],e),n=e&&e[4]}e=n}}(e)}}function cu(t,e){if(!(128&e[2])){e[2]&=-65,e[2]|=128,function FS(t,e){let n;if(null!=t&&null!=(n=t.destroyHooks))for(let r=0;r=0?r[i=u]():r[i=-u].unsubscribe(),s+=2}else{const o=r[i=n[s+1]];n[s].call(o)}if(null!==r){for(let s=i+1;s{const o=s;bu(o,n,[],r)&&(i||(i=[]),i.push(o))}),void 0!==i&&Gp(i,n),n}function Gp(t,e){for(let n=0;n{e.push(s)})}}function bu(t,e,n,r){if(!(t=F(t)))return!1;let i=null,s=ih(t);const o=!s&&ee(t);if(s||o){if(o&&!o.standalone)return!1;i=t}else{const l=t.ngModule;if(s=ih(l),!s)return!1;i=l}const a=r.has(i);if(o){if(a)return!1;if(r.add(i),o.dependencies){const l="function"==typeof o.dependencies?o.dependencies():o.dependencies;for(const u of l)bu(u,e,n,r)}}else{if(!s)return!1;{if(null!=s.imports&&!a){let u;r.add(i);try{un(s.imports,c=>{bu(c,e,n,r)&&(u||(u=[]),u.push(c))})}finally{}void 0!==u&&Gp(u,e)}if(!a){const u=Xn(i)||(()=>new i);e.push({provide:i,useFactory:u,deps:X},{provide:Hp,useValue:i,multi:!0},{provide:Su,useValue:()=>I(i),multi:!0})}const l=s.providers;null==l||a||un(l,c=>{e.push(c)})}}return i!==t&&void 0!==t.providers}const pb=te({provide:String,useValue:te});function Iu(t){return null!==t&&"object"==typeof t&&pb in t}function nr(t){return"function"==typeof t}const Tu=new O("Set Injector scope."),_o={},mb={};let Mu;function wo(){return void 0===Mu&&(Mu=new zp),Mu}class Rn{}class Kp extends Rn{constructor(e,n,r,i){super(),this.parent=n,this.source=r,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Ru(e,o=>this.processProvider(o)),this.records.set(Up,$r(void 0,this)),i.has("environment")&&this.records.set(Rn,$r(void 0,this));const s=this.records.get(Tu);null!=s&&"string"==typeof s.value&&this.scopes.add(s.value),this.injectorDefTypes=new Set(this.get(Hp.multi,X,N.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const e of this._ngOnDestroyHooks)e.ngOnDestroy();for(const e of this._onDestroyHooks)e()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(e){this._onDestroyHooks.push(e)}runInContext(e){this.assertNotDestroyed();const n=kr(this),r=yt(void 0);try{return e()}finally{kr(n),yt(r)}}get(e,n=ki,r=N.Default){this.assertNotDestroyed();const i=kr(this),s=yt(void 0);try{if(!(r&N.SkipSelf)){let a=this.records.get(e);if(void 0===a){const l=function wb(t){return"function"==typeof t||"object"==typeof t&&t instanceof O}(e)&&Hs(e);a=l&&this.injectableDefInScope(l)?$r(Au(e),_o):null,this.records.set(e,a)}if(null!=a)return this.hydrate(e,a)}return(r&N.Self?wo():this.parent).get(e,n=r&N.Optional&&n===ki?null:n)}catch(o){if("NullInjectorError"===o.name){if((o[co]=o[co]||[]).unshift(ne(e)),i)throw o;return function QC(t,e,n,r){const i=t[co];throw e[Qh]&&i.unshift(e[Qh]),t.message=function KC(t,e,n,r=null){t=t&&"\n"===t.charAt(0)&&"\u0275"==t.charAt(1)?t.slice(2):t;let i=ne(e);if(Array.isArray(e))i=e.map(ne).join(" -> ");else if("object"==typeof e){let s=[];for(let o in e)if(e.hasOwnProperty(o)){let a=e[o];s.push(o+":"+("string"==typeof a?JSON.stringify(a):ne(a)))}i=`{${s.join(", ")}}`}return`${n}${r?"("+r+")":""}[${i}]: ${t.replace(zC,"\n ")}`}("\n"+t.message,i,n,r),t.ngTokenPath=i,t[co]=null,t}(o,e,"R3InjectorError",this.source)}throw o}finally{yt(s),kr(i)}}resolveInjectorInitializers(){const e=kr(this),n=yt(void 0);try{const r=this.get(Su.multi,X,N.Self);for(const i of r)i()}finally{kr(e),yt(n)}}toString(){const e=[],n=this.records;for(const r of n.keys())e.push(ne(r));return`R3Injector[${e.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new _(205,!1)}processProvider(e){let n=nr(e=F(e))?e:F(e&&e.provide);const r=function vb(t){return Iu(t)?$r(void 0,t.useValue):$r(function Zp(t,e,n){let r;if(nr(t)){const i=F(t);return Xn(i)||Au(i)}if(Iu(t))r=()=>F(t.useValue);else if(function Qp(t){return!(!t||!t.useFactory)}(t))r=()=>t.useFactory(...Kl(t.deps||[]));else if(function Wp(t){return!(!t||!t.useExisting)}(t))r=()=>I(F(t.useExisting));else{const i=F(t&&(t.useClass||t.provide));if(!function Db(t){return!!t.deps}(t))return Xn(i)||Au(i);r=()=>new i(...Kl(t.deps))}return r}(t),_o)}(e);if(nr(e)||!0!==e.multi)this.records.get(n);else{let i=this.records.get(n);i||(i=$r(void 0,_o,!0),i.factory=()=>Kl(i.multi),this.records.set(n,i)),n=e,i.multi.push(e)}this.records.set(n,r)}hydrate(e,n){return n.value===_o&&(n.value=mb,n.value=n.factory()),"object"==typeof n.value&&n.value&&function _b(t){return null!==t&&"object"==typeof t&&"function"==typeof t.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(e){if(!e.providedIn)return!1;const n=F(e.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function Au(t){const e=Hs(t),n=null!==e?e.factory:Xn(t);if(null!==n)return n;if(t instanceof O)throw new _(204,!1);if(t instanceof Function)return function yb(t){const e=t.length;if(e>0)throw function Oi(t,e){const n=[];for(let r=0;rn.factory(t):()=>new t}(t);throw new _(204,!1)}function $r(t,e,n=!1){return{factory:t,value:e,multi:n?[]:void 0}}function Eb(t){return!!t.\u0275providers}function Ru(t,e){for(const n of t)Array.isArray(n)?Ru(n,e):Eb(n)?Ru(n.\u0275providers,e):e(n)}class Yp{}class bb{resolveComponentFactory(e){throw function Sb(t){const e=Error(`No component factory found for ${ne(t)}. Did you add it to @NgModule.entryComponents?`);return e.ngComponent=t,e}(e)}}let Ki=(()=>{class t{}return t.NULL=new bb,t})();function Ib(){return jr(Se(),D())}function jr(t,e){return new Nn(st(t,e))}let Nn=(()=>{class t{constructor(n){this.nativeElement=n}}return t.__NG_ELEMENT_ID__=Ib,t})();class Zi{}let Ab=(()=>{class t{}return t.\u0275prov=V({token:t,providedIn:"root",factory:()=>null}),t})();class Co{constructor(e){this.full=e,this.major=e.split(".")[0],this.minor=e.split(".")[1],this.patch=e.split(".").slice(2).join(".")}}const Rb=new Co("14.3.0"),Nu={};function xu(t){return t.ngOriginalError}class Br{constructor(){this._console=console}handleError(e){const n=this._findOriginalError(e);this._console.error("ERROR",e),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(e){let n=e&&xu(e);for(;n&&xu(n);)n=xu(n);return n||null}}function dn(t){return t instanceof Function?t():t}function eg(t,e,n){let r=t.length;for(;;){const i=t.indexOf(e,n);if(-1===i)return i;if(0===i||t.charCodeAt(i-1)<=32){const s=e.length;if(i+s===r||t.charCodeAt(i+s)<=32)return i}n=i+1}}const tg="ng-template";function Bb(t,e,n){let r=0;for(;rs?"":i[d+1].toLowerCase();const h=8&r?f:null;if(h&&-1!==eg(h,u,0)||2&r&&u!==f){if(Pt(r))return!1;o=!0}}}}else{if(!o&&!Pt(r)&&!Pt(l))return!1;if(o&&Pt(l))continue;o=!1,r=l|1&r}}return Pt(r)||o}function Pt(t){return 0==(1&t)}function zb(t,e,n,r){if(null===e)return-1;let i=0;if(r||!n){let s=!1;for(;i-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?i+="."+o:4&r&&(i+=" "+o);else""!==i&&!Pt(o)&&(e+=ig(s,i),i=""),r=o,s=s||!Pt(r);n++}return""!==i&&(e+=ig(s,i)),e}const $={};function ug(t,e=null,n=null,r){const i=cg(t,e,n,r);return i.resolveInjectorInitializers(),i}function cg(t,e=null,n=null,r,i=new Set){const s=[n||X,hb(t)];return r=r||("object"==typeof t?void 0:ne(t)),new Kp(s,e||wo(),r||null,i)}let xt=(()=>{class t{static create(n,r){if(Array.isArray(n))return ug({name:""},r,n,"");{const i=n.name??"";return ug({name:i},n.parent,n.providers,i)}}}return t.THROW_IF_NOT_FOUND=ki,t.NULL=new zp,t.\u0275prov=V({token:t,providedIn:"any",factory:()=>I(Up)}),t.__NG_ELEMENT_ID__=-1,t})();function T(t,e=N.Default){const n=D();return null===n?I(t,e):Vh(Se(),n,F(t),e)}function Vu(){throw new Error("invalid")}function Tg(t,e){const n=t.contentQueries;if(null!==n)for(let r=0;r22&&function sg(t,e,n,r){if(!r)if(3==(3&e[2])){const s=t.preOrderCheckHooks;null!==s&&eo(e,s,n)}else{const s=t.preOrderHooks;null!==s&&to(e,s,0,n)}Tn(n)}(t,e,22,!1),n(r,i)}finally{Tn(s)}}function Rg(t){const e=t.tView;return null===e||e.incompleteFirstPass?t.tView=Ju(1,null,t.template,t.decls,t.vars,t.directiveDefs,t.pipeDefs,t.viewQuery,t.schemas,t.consts):e}function Ju(t,e,n,r,i,s,o,a,l,u){const c=22+r,d=c+i,f=function N0(t,e){const n=[];for(let r=0;r0;){const n=t[--e];if("number"==typeof n&&n<0)return n}return 0})(a)!=l&&a.push(l),a.push(r,i,o)}}function kg(t,e){null!==t.hostBindings&&t.hostBindings(1,e)}function Lg(t,e){e.flags|=2,(t.components||(t.components=[])).push(e.index)}function U0(t,e,n){if(n){if(e.exportAs)for(let r=0;r0&&nc(n)}}function nc(t){for(let r=su(t);null!==r;r=ou(r))for(let i=10;i0&&nc(s)}const n=t[1].components;if(null!==n)for(let r=0;r0&&nc(i)}}function K0(t,e){const n=ot(e,t),r=n[1];(function Z0(t,e){for(let n=e.length;n-1&&(uu(e,r),lo(n,r))}this._attachedToViewContainer=!1}vp(this._lView[1],this._lView)}onDestroy(e){!function Ng(t,e,n,r){const i=function Bg(t){return t[7]||(t[7]=[])}(e);null===n?i.push(r):(i.push(n),t.firstCreatePass&&function Ug(t){return t.cleanup||(t.cleanup=[])}(t).push(r,i.length-1))}(this._lView[1],this._lView,null,e)}markForCheck(){!function rc(t){for(;t;){t[2]|=32;const e=zi(t);if($E(t)&&!e)return t;t=e}return null}(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){No(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new _(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function AS(t,e){qi(t,e,e[B],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new _(902,!1);this._appRef=e}}class Y0 extends Yi{constructor(e){super(e),this._view=e}detectChanges(){const e=this._view;No(e[1],e,e[8],!1)}checkNoChanges(){}get context(){return null}}class oc extends Ki{constructor(e){super(),this.ngModule=e}resolveComponentFactory(e){const n=ee(e);return new Xi(n,this.ngModule)}}function qg(t){const e=[];for(let n in t)t.hasOwnProperty(n)&&e.push({propName:t[n],templateName:n});return e}class J0{constructor(e,n){this.injector=e,this.parentInjector=n}get(e,n,r){const i=this.injector.get(e,Nu,r);return i!==Nu||n===Nu?i:this.parentInjector.get(e,n,r)}}class Xi extends Yp{constructor(e,n){super(),this.componentDef=e,this.ngModule=n,this.componentType=e.type,this.selector=function Zb(t){return t.map(Kb).join(",")}(e.selectors),this.ngContentSelectors=e.ngContentSelectors?e.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return qg(this.componentDef.inputs)}get outputs(){return qg(this.componentDef.outputs)}create(e,n,r,i){let s=(i=i||this.ngModule)instanceof Rn?i:i?.injector;s&&null!==this.componentDef.getStandaloneInjector&&(s=this.componentDef.getStandaloneInjector(s)||s);const o=s?new J0(e,s):e,a=o.get(Zi,null);if(null===a)throw new _(407,!1);const l=o.get(Ab,null),u=a.createRenderer(null,this.componentDef),c=this.componentDef.selectors[0][0]||"div",d=r?function P0(t,e,n){return t.selectRootElement(e,n===Mt.ShadowDom)}(u,r,this.componentDef.encapsulation):lu(u,c,function X0(t){const e=t.toLowerCase();return"svg"===e?"svg":"math"===e?"math":null}(c)),f=this.componentDef.onPush?288:272,h=Ju(0,null,null,1,0,null,null,null,null,null),p=Mo(null,h,null,f,null,null,a,u,l,o,null);let g,m;kl(p);try{const v=function nI(t,e,n,r,i,s){const o=n[1];n[22]=t;const l=zr(o,22,2,"#host",null),u=l.mergedAttrs=e.hostAttrs;null!==u&&(Po(l,u,!0),null!==t&&(no(i,t,u),null!==l.classes&&gu(i,t,l.classes),null!==l.styles&&Ap(i,t,l.styles)));const c=r.createRenderer(t,e),d=Mo(n,Rg(e),null,e.onPush?32:16,n[22],l,r,c,s||null,null,null);return o.firstCreatePass&&(oo(Ri(l,n),o,e.type),Lg(o,l),Vg(l,n.length,1)),Ro(n,d),n[22]=d}(d,this.componentDef,p,a,u);if(d)if(r)no(u,d,["ng-version",Rb.full]);else{const{attrs:w,classes:y}=function Yb(t){const e=[],n=[];let r=1,i=2;for(;r0&&gu(u,d,y.join(" "))}if(m=function Al(t,e){return t.data[e]}(h,22),void 0!==n){const w=m.projection=[];for(let y=0;yn()),this.destroyCbs=null}onDestroy(e){this.destroyCbs.push(e)}}class Ec extends Ry{constructor(e){super(),this.moduleType=e}create(e){return new Ny(this.moduleType,e)}}class fM extends or{constructor(e,n,r){super(),this.componentFactoryResolver=new oc(this),this.instance=null;const i=new Kp([...e,{provide:or,useValue:this},{provide:Ki,useValue:this.componentFactoryResolver}],n||wo(),r,new Set(["environment"]));this.injector=i,i.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}}function Go(t,e,n=null){return new fM(t,e,n).injector}let hM=(()=>{class t{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n.id)){const r=qp(0,n.type),i=r.length>0?Go([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n.id,i)}return this.cachedInjectors.get(n.id)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}}return t.\u0275prov=V({token:t,providedIn:"environment",factory:()=>new t(I(Rn))}),t})();function Py(t){t.getStandaloneInjector=e=>e.get(hM).getOrCreateStandaloneInjector(t)}function Sc(t){return e=>{setTimeout(t,void 0,e)}}const Ke=class $M extends Ht{constructor(e=!1){super(),this.__isAsync=e}emit(e){super.next(e)}subscribe(e,n,r){let i=e,s=n||(()=>null),o=r;if(e&&"object"==typeof e){const l=e;i=l.next?.bind(l),s=l.error?.bind(l),o=l.complete?.bind(l)}this.__isAsync&&(s=Sc(s),i&&(i=Sc(i)),o&&(o=Sc(o)));const a=super.subscribe({next:i,error:s,complete:o});return e instanceof mt&&e.add(a),a}};let Lt=(()=>{class t{}return t.__NG_ELEMENT_ID__=zM,t})();function zM(){return function Gy(t,e){let n;const r=e[t.index];if(Rt(r))n=r;else{let i;if(8&t.type)i=De(r);else{const s=e[B];i=s.createComment("");const o=st(t,e);er(s,po(s,o),i,function kS(t,e){return t.nextSibling(e)}(s,o),!1)}e[t.index]=n=function jg(t,e,n,r){return new Array(t,!0,!1,e,null,0,r,n,null,null)}(r,e,i,t),Ro(e,n)}return new zy(n,t,e)}(Se(),D())}const qM=Lt,zy=class extends qM{constructor(e,n,r){super(),this._lContainer=e,this._hostTNode=n,this._hostLView=r}get element(){return jr(this._hostTNode,this._hostLView)}get injector(){return new Rr(this._hostTNode,this._hostLView)}get parentInjector(){const e=so(this._hostTNode,this._hostLView);if(xh(e)){const n=Ar(e,this._hostLView),r=Mr(e);return new Rr(n[1].data[r+8],n)}return new Rr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){const n=qy(this._lContainer);return null!==n&&n[e]||null}get length(){return this._lContainer.length-10}createEmbeddedView(e,n,r){let i,s;"number"==typeof r?i=r:null!=r&&(i=r.index,s=r.injector);const o=e.createEmbeddedView(n||{},s);return this.insert(o,i),o}createComponent(e,n,r,i,s){const o=e&&!function Fi(t){return"function"==typeof t}(e);let a;if(o)a=n;else{const d=n||{};a=d.index,r=d.injector,i=d.projectableNodes,s=d.environmentInjector||d.ngModuleRef}const l=o?e:new Xi(ee(e)),u=r||this.parentInjector;if(!s&&null==l.ngModule){const f=(o?u:this.parentInjector).get(Rn,null);f&&(s=f)}const c=l.create(u,i,void 0,s);return this.insert(c.hostView,a),c}insert(e,n){const r=e._lView,i=r[1];if(function XE(t){return Rt(t[3])}(r)){const c=this.indexOf(e);if(-1!==c)this.detach(c);else{const d=r[3],f=new zy(d,d[6],d[3]);f.detach(f.indexOf(e))}}const s=this._adjustIndex(n),o=this._lContainer;!function NS(t,e,n,r){const i=10+r,s=n.length;r>0&&(n[i-1][4]=e),r{class t{constructor(n){this.appInits=n,this.resolve=Ko,this.reject=Ko,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,i)=>{this.resolve=r,this.reject=i})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let i=0;i{s.subscribe({complete:a,error:l})});n.push(o)}}Promise.all(n).then(()=>{r()}).catch(i=>{this.reject(i)}),0===n.length&&r(),this.initialized=!0}}return t.\u0275fac=function(n){return new(n||t)(I(Zo,8))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const cs=new O("AppId",{providedIn:"root",factory:function mv(){return`${$c()}${$c()}${$c()}`}});function $c(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const yv=new O("Platform Initializer"),vv=new O("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),Dv=new O("appBootstrapListener"),_v=new O("AnimationModuleType");let wA=(()=>{class t{log(n){console.log(n)}warn(n){console.warn(n)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"platform"}),t})();const gn=new O("LocaleId",{providedIn:"root",factory:()=>pe(gn,N.Optional|N.SkipSelf)||function EA(){return typeof $localize<"u"&&$localize.locale||ri}()});class SA{constructor(e,n){this.ngModuleFactory=e,this.componentFactories=n}}let jc=(()=>{class t{compileModuleSync(n){return new Ec(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),s=dn(rt(n).declarations).reduce((o,a)=>{const l=ee(a);return l&&o.push(new Xi(l)),o},[]);return new SA(r,s)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const TA=(()=>Promise.resolve(0))();function Bc(t){typeof Zone>"u"?TA.then(()=>{t&&t.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",t)}class ge{constructor({enableLongStackTrace:e=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Ke(!1),this.onMicrotaskEmpty=new Ke(!1),this.onStable=new Ke(!1),this.onError=new Ke(!1),typeof Zone>"u")throw new _(908,!1);Zone.assertZonePatched();const i=this;if(i._nesting=0,i._outer=i._inner=Zone.current,Zone.AsyncStackTaggingZoneSpec){const s=Zone.AsyncStackTaggingZoneSpec;i._inner=i._inner.fork(new s("Angular"))}Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),e&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!r&&n,i.shouldCoalesceRunChangeDetection=r,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function MA(){let t=ie.requestAnimationFrame,e=ie.cancelAnimationFrame;if(typeof Zone<"u"&&t&&e){const n=t[Zone.__symbol__("OriginalDelegate")];n&&(t=n);const r=e[Zone.__symbol__("OriginalDelegate")];r&&(e=r)}return{nativeRequestAnimationFrame:t,nativeCancelAnimationFrame:e}}().nativeRequestAnimationFrame,function NA(t){const e=()=>{!function RA(t){t.isCheckStableRunning||-1!==t.lastRequestAnimationFrameId||(t.lastRequestAnimationFrameId=t.nativeRequestAnimationFrame.call(ie,()=>{t.fakeTopEventTask||(t.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{t.lastRequestAnimationFrameId=-1,Hc(t),t.isCheckStableRunning=!0,Uc(t),t.isCheckStableRunning=!1},void 0,()=>{},()=>{})),t.fakeTopEventTask.invoke()}),Hc(t))}(t)};t._inner=t._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,i,s,o,a)=>{try{return Cv(t),n.invokeTask(i,s,o,a)}finally{(t.shouldCoalesceEventChangeDetection&&"eventTask"===s.type||t.shouldCoalesceRunChangeDetection)&&e(),Sv(t)}},onInvoke:(n,r,i,s,o,a,l)=>{try{return Cv(t),n.invoke(i,s,o,a,l)}finally{t.shouldCoalesceRunChangeDetection&&e(),Sv(t)}},onHasTask:(n,r,i,s)=>{n.hasTask(i,s),r===i&&("microTask"==s.change?(t._hasPendingMicrotasks=s.microTask,Hc(t),Uc(t)):"macroTask"==s.change&&(t.hasPendingMacrotasks=s.macroTask))},onHandleError:(n,r,i,s)=>(n.handleError(i,s),t.runOutsideAngular(()=>t.onError.emit(s)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!ge.isInAngularZone())throw new _(909,!1)}static assertNotInAngularZone(){if(ge.isInAngularZone())throw new _(909,!1)}run(e,n,r){return this._inner.run(e,n,r)}runTask(e,n,r,i){const s=this._inner,o=s.scheduleEventTask("NgZoneEvent: "+i,e,AA,Ko,Ko);try{return s.runTask(o,n,r)}finally{s.cancelTask(o)}}runGuarded(e,n,r){return this._inner.runGuarded(e,n,r)}runOutsideAngular(e){return this._outer.run(e)}}const AA={};function Uc(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(()=>t.onStable.emit(null))}finally{t.isStable=!0}}}function Hc(t){t.hasPendingMicrotasks=!!(t._hasPendingMicrotasks||(t.shouldCoalesceEventChangeDetection||t.shouldCoalesceRunChangeDetection)&&-1!==t.lastRequestAnimationFrameId)}function Cv(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function Sv(t){t._nesting--,Uc(t)}class PA{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Ke,this.onMicrotaskEmpty=new Ke,this.onStable=new Ke,this.onError=new Ke}run(e,n,r){return e.apply(n,r)}runGuarded(e,n,r){return e.apply(n,r)}runOutsideAngular(e){return e()}runTask(e,n,r,i){return e.apply(n,r)}}const bv=new O(""),Xo=new O("");let Gc,zc=(()=>{class t{constructor(n,r,i){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Gc||(function xA(t){Gc=t}(i),i.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{ge.assertNotInAngularZone(),Bc(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Bc(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,i){let s=-1;r&&r>0&&(s=setTimeout(()=>{this._callbacks=this._callbacks.filter(o=>o.timeoutId!==s),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:s,updateCb:i})}whenStable(n,r,i){if(i&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,i),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,i){return[]}}return t.\u0275fac=function(n){return new(n||t)(I(ge),I(qc),I(Xo))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})(),qc=(()=>{class t{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Gc?.findTestabilityInTree(this,n,r)??null}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"platform"}),t})(),Fn=null;const Iv=new O("AllowMultipleToken"),Wc=new O("PlatformDestroyListeners");class Tv{constructor(e,n){this.name=e,this.token=n}}function Av(t,e,n=[]){const r=`Platform: ${e}`,i=new O(r);return(s=[])=>{let o=Qc();if(!o||o.injector.get(Iv,!1)){const a=[...n,...s,{provide:i,useValue:!0}];t?t(a):function kA(t){if(Fn&&!Fn.get(Iv,!1))throw new _(400,!1);Fn=t;const e=t.get(Nv);(function Mv(t){const e=t.get(yv,null);e&&e.forEach(n=>n())})(t)}(function Rv(t=[],e){return xt.create({name:e,providers:[{provide:Tu,useValue:"platform"},{provide:Wc,useValue:new Set([()=>Fn=null])},...t]})}(a,r))}return function VA(t){const e=Qc();if(!e)throw new _(401,!1);return e}()}}function Qc(){return Fn?.get(Nv)??null}let Nv=(()=>{class t{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const i=function xv(t,e){let n;return n="noop"===t?new PA:("zone.js"===t?void 0:t)||new ge(e),n}(r?.ngZone,function Pv(t){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!t||!t.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!t||!t.ngZoneRunCoalescing)||!1}}(r)),s=[{provide:ge,useValue:i}];return i.run(()=>{const o=xt.create({providers:s,parent:this.injector,name:n.moduleType.name}),a=n.create(o),l=a.injector.get(Br,null);if(!l)throw new _(402,!1);return i.runOutsideAngular(()=>{const u=i.onError.subscribe({next:c=>{l.handleError(c)}});a.onDestroy(()=>{Jo(this._modules,a),u.unsubscribe()})}),function Fv(t,e,n){try{const r=n();return $o(r)?r.catch(i=>{throw e.runOutsideAngular(()=>t.handleError(i)),i}):r}catch(r){throw e.runOutsideAngular(()=>t.handleError(r)),r}}(l,i,()=>{const u=a.injector.get(Yo);return u.runInitializers(),u.donePromise.then(()=>(function sy(t){nt(t,"Expected localeId to be defined"),"string"==typeof t&&(iy=t.toLowerCase().replace(/_/g,"-"))}(a.injector.get(gn,ri)||ri),this._moduleDoBootstrap(a),a))})})}bootstrapModule(n,r=[]){const i=Ov({},r);return function FA(t,e,n){const r=new Ec(n);return Promise.resolve(r)}(0,0,n).then(s=>this.bootstrapModuleFactory(s,i))}_moduleDoBootstrap(n){const r=n.injector.get(ds);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>r.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new _(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new _(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Wc,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return t.\u0275fac=function(n){return new(n||t)(I(xt))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"platform"}),t})();function Ov(t,e){return Array.isArray(e)?e.reduce(Ov,t):{...t,...e}}let ds=(()=>{class t{constructor(n,r,i){this._zone=n,this._injector=r,this._exceptionHandler=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const s=new Ce(a=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{a.next(this._stable),a.complete()})}),o=new Ce(a=>{let l;this._zone.runOutsideAngular(()=>{l=this._zone.onStable.subscribe(()=>{ge.assertNotInAngularZone(),Bc(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,a.next(!0))})})});const u=this._zone.onUnstable.subscribe(()=>{ge.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{a.next(!1)}))});return()=>{l.unsubscribe(),u.unsubscribe()}});this.isStable=function _E(...t){const e=_i(t),n=function hE(t,e){return"number"==typeof fl(t)?t.pop():e}(t,1/0),r=t;return r.length?1===r.length?en(r[0]):Dr(n)(ve(r,e)):nn}(s,o.pipe(function wE(t={}){const{connector:e=(()=>new Ht),resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:i=!0}=t;return s=>{let o=null,a=null,l=null,u=0,c=!1,d=!1;const f=()=>{a?.unsubscribe(),a=null},h=()=>{f(),o=l=null,c=d=!1},p=()=>{const g=o;h(),g?.unsubscribe()};return Me((g,m)=>{u++,!d&&!c&&f();const v=l=l??e();m.add(()=>{u--,0===u&&!d&&!c&&(a=hl(p,i))}),v.subscribe(m),o||(o=new al({next:w=>v.next(w),error:w=>{d=!0,f(),a=hl(h,n,w),v.error(w)},complete:()=>{c=!0,f(),a=hl(h,r),v.complete()}}),ve(g).subscribe(o))})(s)}}()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const i=n instanceof Yp;if(!this._injector.get(Yo).done)throw!i&&function Er(t){const e=ee(t)||He(t)||ze(t);return null!==e&&e.standalone}(n),new _(405,false);let o;o=i?n:this._injector.get(Ki).resolveComponentFactory(n),this.componentTypes.push(o.componentType);const a=function OA(t){return t.isBoundToModule}(o)?void 0:this._injector.get(or),u=o.create(xt.NULL,[],r||o.selector,a),c=u.location.nativeElement,d=u.injector.get(bv,null);return d?.registerApplication(c),u.onDestroy(()=>{this.detachView(u.hostView),Jo(this.components,u),d?.unregisterApplication(c)}),this._loadComponent(u),u}tick(){if(this._runningTick)throw new _(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Jo(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(Dv,[]).concat(this._bootstrapListeners).forEach(i=>i(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Jo(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new _(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return t.\u0275fac=function(n){return new(n||t)(I(ge),I(Rn),I(Br))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function Jo(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}let Lv=!0,Kc=(()=>{class t{}return t.__NG_ELEMENT_ID__=BA,t})();function BA(t){return function UA(t,e,n){if(Ks(t)&&!n){const r=ot(t.index,e);return new Yi(r,r)}return 47&t.type?new Yi(e[16],e):null}(Se(),D(),16==(16&t))}const tR=Av(null,"core",[]);let nR=(()=>{class t{constructor(n){}}return t.\u0275fac=function(n){return new(n||t)(I(ds))},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({}),t})(),ra=null;function On(){return ra}const je=new O("DocumentToken");let ed=(()=>{class t{historyGo(n){throw new Error("Not implemented")}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:function(){return function oR(){return I(Qv)}()},providedIn:"platform"}),t})();const aR=new O("Location Initialized");let Qv=(()=>{class t extends ed{constructor(n){super(),this._doc=n,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return On().getBaseHref(this._doc)}onPopState(n){const r=On().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){const r=On().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(n){this.location.pathname=n}pushState(n,r,i){Kv()?this._history.pushState(n,r,i):this.location.hash=i}replaceState(n,r,i){Kv()?this._history.replaceState(n,r,i):this.location.hash=i}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}}return t.\u0275fac=function(n){return new(n||t)(I(je))},t.\u0275prov=V({token:t,factory:function(){return function lR(){return new Qv(I(je))}()},providedIn:"platform"}),t})();function Kv(){return!!window.history.pushState}function td(t,e){if(0==t.length)return e;if(0==e.length)return t;let n=0;return t.endsWith("/")&&n++,e.startsWith("/")&&n++,2==n?t+e.substring(1):1==n?t+e:t+"/"+e}function Zv(t){const e=t.match(/#|\?|$/),n=e&&e.index||t.length;return t.slice(0,n-("/"===t[n-1]?1:0))+t.slice(n)}function yn(t){return t&&"?"!==t[0]?"?"+t:t}let lr=(()=>{class t{historyGo(n){throw new Error("Not implemented")}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:function(){return pe(Xv)},providedIn:"root"}),t})();const Yv=new O("appBaseHref");let Xv=(()=>{class t extends lr{constructor(n,r){super(),this._platformLocation=n,this._removeListenerFns=[],this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??pe(je).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return td(this._baseHref,n)}path(n=!1){const r=this._platformLocation.pathname+yn(this._platformLocation.search),i=this._platformLocation.hash;return i&&n?`${r}${i}`:r}pushState(n,r,i,s){const o=this.prepareExternalUrl(i+yn(s));this._platformLocation.pushState(n,r,o)}replaceState(n,r,i,s){const o=this.prepareExternalUrl(i+yn(s));this._platformLocation.replaceState(n,r,o)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}}return t.\u0275fac=function(n){return new(n||t)(I(ed),I(Yv,8))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),uR=(()=>{class t extends lr{constructor(n,r){super(),this._platformLocation=n,this._baseHref="",this._removeListenerFns=[],null!=r&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash;return null==r&&(r="#"),r.length>0?r.substring(1):r}prepareExternalUrl(n){const r=td(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,i,s){let o=this.prepareExternalUrl(i+yn(s));0==o.length&&(o=this._platformLocation.pathname),this._platformLocation.pushState(n,r,o)}replaceState(n,r,i,s){let o=this.prepareExternalUrl(i+yn(s));0==o.length&&(o=this._platformLocation.pathname),this._platformLocation.replaceState(n,r,o)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}}return t.\u0275fac=function(n){return new(n||t)(I(ed),I(Yv,8))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})(),nd=(()=>{class t{constructor(n){this._subject=new Ke,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=n;const r=this._locationStrategy.getBaseHref();this._baseHref=Zv(Jv(r)),this._locationStrategy.onPopState(i=>{this._subject.emit({url:this.path(!0),pop:!0,state:i.state,type:i.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+yn(r))}normalize(n){return t.stripTrailingSlash(function dR(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,Jv(n)))}prepareExternalUrl(n){return n&&"/"!==n[0]&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",i=null){this._locationStrategy.pushState(i,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+yn(r)),i)}replaceState(n,r="",i=null){this._locationStrategy.replaceState(i,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+yn(r)),i)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)})),()=>{const r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(i=>i(n,r))}subscribe(n,r,i){return this._subject.subscribe({next:n,error:r,complete:i})}}return t.normalizeQueryParams=yn,t.joinWithSlash=td,t.stripTrailingSlash=Zv,t.\u0275fac=function(n){return new(n||t)(I(lr))},t.\u0275prov=V({token:t,factory:function(){return function cR(){return new nd(I(lr))}()},providedIn:"root"}),t})();function Jv(t){return t.replace(/\/index.html$/,"")}let MN=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({}),t})();let PN=(()=>{class t{}return t.\u0275prov=V({token:t,providedIn:"root",factory:()=>new xN(I(je),window)}),t})();class xN{constructor(e,n){this.document=e,this.window=n,this.offset=()=>[0,0]}setOffset(e){this.offset=Array.isArray(e)?()=>e:e}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(e){this.supportsScrolling()&&this.window.scrollTo(e[0],e[1])}scrollToAnchor(e){if(!this.supportsScrolling())return;const n=function FN(t,e){const n=t.getElementById(e)||t.getElementsByName(e)[0];if(n)return n;if("function"==typeof t.createTreeWalker&&t.body&&(t.body.createShadowRoot||t.body.attachShadow)){const r=t.createTreeWalker(t.body,NodeFilter.SHOW_ELEMENT);let i=r.currentNode;for(;i;){const s=i.shadowRoot;if(s){const o=s.getElementById(e)||s.querySelector(`[name="${e}"]`);if(o)return o}i=r.nextNode()}}return null}(this.document,e);n&&(this.scrollToElement(n),n.focus())}setHistoryScrollRestoration(e){if(this.supportScrollRestoration()){const n=this.window.history;n&&n.scrollRestoration&&(n.scrollRestoration=e)}}scrollToElement(e){const n=e.getBoundingClientRect(),r=n.left+this.window.pageXOffset,i=n.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(r-s[0],i-s[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const e=gD(this.window.history)||gD(Object.getPrototypeOf(this.window.history));return!(!e||!e.writable&&!e.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function gD(t){return Object.getOwnPropertyDescriptor(t,"scrollRestoration")}class vd extends class lP extends class sR{}{constructor(){super(...arguments),this.supportsDOMEvents=!0}}{static makeCurrent(){!function iR(t){ra||(ra=t)}(new vd)}onAndCancel(e,n,r){return e.addEventListener(n,r,!1),()=>{e.removeEventListener(n,r,!1)}}dispatchEvent(e,n){e.dispatchEvent(n)}remove(e){e.parentNode&&e.parentNode.removeChild(e)}createElement(e,n){return(n=n||this.getDefaultDocument()).createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,n){return"window"===n?window:"document"===n?e:"body"===n?e.body:null}getBaseHref(e){const n=function uP(){return ms=ms||document.querySelector("base"),ms?ms.getAttribute("href"):null}();return null==n?null:function cP(t){ga=ga||document.createElement("a"),ga.setAttribute("href",t);const e=ga.pathname;return"/"===e.charAt(0)?e:`/${e}`}(n)}resetBaseElement(){ms=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return function QR(t,e){e=encodeURIComponent(e);for(const n of t.split(";")){const r=n.indexOf("="),[i,s]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(i.trim()===e)return decodeURIComponent(s)}return null}(document.cookie,e)}}let ga,ms=null;const _D=new O("TRANSITION_ID"),fP=[{provide:Zo,useFactory:function dP(t,e,n){return()=>{n.get(Yo).donePromise.then(()=>{const r=On(),i=e.querySelectorAll(`style[ng-transition="${t}"]`);for(let s=0;s{class t{build(){return new XMLHttpRequest}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();const ma=new O("EventManagerPlugins");let ya=(()=>{class t{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(i=>i.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,i){return this._findPluginFor(r).addEventListener(n,r,i)}addGlobalEventListener(n,r,i){return this._findPluginFor(r).addGlobalEventListener(n,r,i)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const i=this._plugins;for(let s=0;s{class t{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(i=>{this._stylesSet.has(i)||(this._stylesSet.add(i),r.add(i))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})(),ys=(()=>{class t extends ED{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,i){n.forEach(s=>{const o=this._doc.createElement("style");o.textContent=s,i.push(r.appendChild(o))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(CD),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,i)=>{this._addStylesToHost(n,i,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(CD))}}return t.\u0275fac=function(n){return new(n||t)(I(je))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();function CD(t){On().remove(t)}const Dd={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},_d=/%COMP%/g;function va(t,e,n){for(let r=0;r{if("__ngUnwrap__"===e)return t;!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}let Da=(()=>{class t{constructor(n,r,i){this.eventManager=n,this.sharedStylesHost=r,this.appId=i,this.rendererByCompId=new Map,this.defaultRenderer=new wd(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case Mt.Emulated:{let i=this.rendererByCompId.get(r.id);return i||(i=new _P(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,i)),i.applyToHost(n),i}case 1:case Mt.ShadowDom:return new wP(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const i=va(r.id,r.styles,[]);this.sharedStylesHost.addStyles(i),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return t.\u0275fac=function(n){return new(n||t)(I(ya),I(ys),I(cs))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();class wd{constructor(e){this.eventManager=e,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(e,n){return n?document.createElementNS(Dd[n]||n,e):document.createElement(e)}createComment(e){return document.createComment(e)}createText(e){return document.createTextNode(e)}appendChild(e,n){(MD(e)?e.content:e).appendChild(n)}insertBefore(e,n,r){e&&(MD(e)?e.content:e).insertBefore(n,r)}removeChild(e,n){e&&e.removeChild(n)}selectRootElement(e,n){let r="string"==typeof e?document.querySelector(e):e;if(!r)throw new Error(`The selector "${e}" did not match any elements`);return n||(r.textContent=""),r}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,n,r,i){if(i){n=i+":"+n;const s=Dd[i];s?e.setAttributeNS(s,n,r):e.setAttribute(n,r)}else e.setAttribute(n,r)}removeAttribute(e,n,r){if(r){const i=Dd[r];i?e.removeAttributeNS(i,n):e.removeAttribute(`${r}:${n}`)}else e.removeAttribute(n)}addClass(e,n){e.classList.add(n)}removeClass(e,n){e.classList.remove(n)}setStyle(e,n,r,i){i&(Je.DashCase|Je.Important)?e.style.setProperty(n,r,i&Je.Important?"important":""):e.style[n]=r}removeStyle(e,n,r){r&Je.DashCase?e.style.removeProperty(n):e.style[n]=""}setProperty(e,n,r){e[n]=r}setValue(e,n){e.nodeValue=n}listen(e,n,r){return"string"==typeof e?this.eventManager.addGlobalEventListener(e,n,ID(r)):this.eventManager.addEventListener(e,n,ID(r))}}function MD(t){return"TEMPLATE"===t.tagName&&void 0!==t.content}class _P extends wd{constructor(e,n,r,i){super(e),this.component=r;const s=va(i+"-"+r.id,r.styles,[]);n.addStyles(s),this.contentAttr=function yP(t){return"_ngcontent-%COMP%".replace(_d,t)}(i+"-"+r.id),this.hostAttr=function vP(t){return"_nghost-%COMP%".replace(_d,t)}(i+"-"+r.id)}applyToHost(e){super.setAttribute(e,this.hostAttr,"")}createElement(e,n){const r=super.createElement(e,n);return super.setAttribute(r,this.contentAttr,""),r}}class wP extends wd{constructor(e,n,r,i){super(e),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const s=va(i.id,i.styles,[]);for(let o=0;o{class t extends wD{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,i){return n.addEventListener(r,i,!1),()=>this.removeEventListener(n,r,i)}removeEventListener(n,r,i){return n.removeEventListener(r,i)}}return t.\u0275fac=function(n){return new(n||t)(I(je))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();const AD=["alt","control","meta","shift"],CP={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},SP={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey};let bP=(()=>{class t extends wD{constructor(n){super(n)}supports(n){return null!=t.parseEventName(n)}addEventListener(n,r,i){const s=t.parseEventName(r),o=t.eventCallback(s.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>On().onAndCancel(n,s.domEventName,o))}static parseEventName(n){const r=n.toLowerCase().split("."),i=r.shift();if(0===r.length||"keydown"!==i&&"keyup"!==i)return null;const s=t._normalizeKey(r.pop());let o="",a=r.indexOf("code");if(a>-1&&(r.splice(a,1),o="code."),AD.forEach(u=>{const c=r.indexOf(u);c>-1&&(r.splice(c,1),o+=u+".")}),o+=s,0!=r.length||0===s.length)return null;const l={};return l.domEventName=i,l.fullKey=o,l}static matchEventFullKeyCode(n,r){let i=CP[n.key]||n.key,s="";return r.indexOf("code.")>-1&&(i=n.code,s="code."),!(null==i||!i)&&(i=i.toLowerCase()," "===i?i="space":"."===i&&(i="dot"),AD.forEach(o=>{o!==i&&(0,SP[o])(n)&&(s+=o+".")}),s+=i,s===r)}static eventCallback(n,r,i){return s=>{t.matchEventFullKeyCode(s,n)&&i.runGuarded(()=>r(s))}}static _normalizeKey(n){return"esc"===n?"escape":n}}return t.\u0275fac=function(n){return new(n||t)(I(je))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();const AP=Av(tR,"browser",[{provide:vv,useValue:"browser"},{provide:yv,useValue:function IP(){vd.makeCurrent()},multi:!0},{provide:je,useFactory:function MP(){return function HS(t){yu=t}(document),document},deps:[]}]),PD=new O(""),xD=[{provide:Xo,useClass:class hP{addToWindow(e){ie.getAngularTestability=(r,i=!0)=>{const s=e.findTestabilityInTree(r,i);if(null==s)throw new Error("Could not find testability for element.");return s},ie.getAllAngularTestabilities=()=>e.getAllTestabilities(),ie.getAllAngularRootElements=()=>e.getAllRootElements(),ie.frameworkStabilizers||(ie.frameworkStabilizers=[]),ie.frameworkStabilizers.push(r=>{const i=ie.getAllAngularTestabilities();let s=i.length,o=!1;const a=function(l){o=o||l,s--,0==s&&r(o)};i.forEach(function(l){l.whenStable(a)})})}findTestabilityInTree(e,n,r){return null==n?null:e.getTestability(n)??(r?On().isShadowRoot(n)?this.findTestabilityInTree(e,n.host,!0):this.findTestabilityInTree(e,n.parentElement,!0):null)}},deps:[]},{provide:bv,useClass:zc,deps:[ge,qc,Xo]},{provide:zc,useClass:zc,deps:[ge,qc,Xo]}],FD=[{provide:Tu,useValue:"root"},{provide:Br,useFactory:function TP(){return new Br},deps:[]},{provide:ma,useClass:EP,multi:!0,deps:[je,ge,vv]},{provide:ma,useClass:bP,multi:!0,deps:[je]},{provide:Da,useClass:Da,deps:[ya,ys,cs]},{provide:Zi,useExisting:Da},{provide:ED,useExisting:ys},{provide:ys,useClass:ys,deps:[je]},{provide:ya,useClass:ya,deps:[ma,ge]},{provide:class ON{},useClass:pP,deps:[]},[]];let OD=(()=>{class t{constructor(n){}static withServerTransition(n){return{ngModule:t,providers:[{provide:cs,useValue:n.appId},{provide:_D,useExisting:cs},fP]}}}return t.\u0275fac=function(n){return new(n||t)(I(PD,12))},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({providers:[...FD,...xD],imports:[MN,nR]}),t})(),kD=(()=>{class t{constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}}return t.\u0275fac=function(n){return new(n||t)(I(je))},t.\u0275prov=V({token:t,factory:function(n){let r=null;return r=n?new n:function NP(){return new kD(I(je))}(),r},providedIn:"root"}),t})();function A(...t){return ve(t,_i(t))}typeof window<"u"&&window;class Bt extends Ht{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){const n=super._subscribe(e);return!n.closed&&e.next(this._value),n}getValue(){const{hasError:e,thrownError:n,_value:r}=this;if(e)throw n;return this._throwIfClosed(),r}next(e){super.next(this._value=e)}}const _a=vi(t=>function(){t(this),this.name="EmptyError",this.message="no elements in sequence"}),{isArray:$P}=Array,{getPrototypeOf:jP,prototype:BP,keys:UP}=Object;const{isArray:qP}=Array;function $D(...t){const e=_i(t),n=function fE(t){return re(fl(t))?t.pop():void 0}(t),{args:r,keys:i}=function HP(t){if(1===t.length){const e=t[0];if($P(e))return{args:e,keys:null};if(function zP(t){return t&&"object"==typeof t&&jP(t)===BP}(e)){const n=UP(e);return{args:n.map(r=>e[r]),keys:n}}}return{args:t,keys:null}}(t);if(0===r.length)return ve([],e);const s=new Ce(function KP(t,e,n=Gn){return r=>{jD(e,()=>{const{length:i}=t,s=new Array(i);let o=i,a=i;for(let l=0;l{const u=ve(t[l],e);let c=!1;u.subscribe(new Ae(r,d=>{s[l]=d,c||(c=!0,a--),a||r.next(n(s.slice()))},()=>{--o||r.complete()}))},r)},r)}}(r,e,i?o=>function QP(t,e){return t.reduce((n,r,i)=>(n[r]=e[i],n),{})}(i,o):Gn));return n?s.pipe(function WP(t){return K(e=>function GP(t,e){return qP(e)?t(...e):t(e)}(t,e))}(n)):s}function jD(t,e,n){t?tn(n,t,e):e()}function Sd(...t){return function ZP(){return Dr(1)}()(ve(t,_i(t)))}function BD(t){return new Ce(e=>{en(t()).subscribe(e)})}function vs(t,e){const n=re(t)?t:()=>t,r=i=>i.error(n());return new Ce(e?i=>e.schedule(r,0,i):r)}function bd(){return Me((t,e)=>{let n=null;t._refCount++;const r=new Ae(e,void 0,void 0,void 0,()=>{if(!t||t._refCount<=0||0<--t._refCount)return void(n=null);const i=t._connection,s=n;n=null,i&&(!s||i===s)&&i.unsubscribe(),e.unsubscribe()});t.subscribe(r),r.closed||(n=t.connect())})}class UD extends Ce{constructor(e,n){super(),this.source=e,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,jf(e)&&(this.lift=e.lift)}_subscribe(e){return this.getSubject().subscribe(e)}getSubject(){const e=this._subject;return(!e||e.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:e}=this;this._subject=this._connection=null,e?.unsubscribe()}connect(){let e=this._connection;if(!e){e=this._connection=new mt;const n=this.getSubject();e.add(this.source.subscribe(new Ae(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),e.closed&&(this._connection=null,e=mt.EMPTY)}return e}refCount(){return bd()(this)}}function Zt(t,e){return Me((n,r)=>{let i=null,s=0,o=!1;const a=()=>o&&!i&&r.complete();n.subscribe(new Ae(r,l=>{i?.unsubscribe();let u=0;const c=s++;en(t(l,c)).subscribe(i=new Ae(r,d=>r.next(e?e(l,d,c,u++):d),()=>{i=null,a()}))},()=>{o=!0,a()}))})}function Ln(t,e){return Me((n,r)=>{let i=0;n.subscribe(new Ae(r,s=>t.call(e,s,i++)&&r.next(s)))})}function wa(t){return Me((e,n)=>{let r=!1;e.subscribe(new Ae(n,i=>{r=!0,n.next(i)},()=>{r||n.next(t),n.complete()}))})}function HD(t=XP){return Me((e,n)=>{let r=!1;e.subscribe(new Ae(n,i=>{r=!0,n.next(i)},()=>r?n.complete():n.error(t())))})}function XP(){return new _a}function Vn(t,e){const n=arguments.length>=2;return r=>r.pipe(t?Ln((i,s)=>t(i,s,r)):Gn,_r(1),n?wa(e):HD(()=>new _a))}function ur(t,e){return re(e)?Pe(t,e,1):Pe(t,1)}function Be(t,e,n){const r=re(t)||e||n?{next:t,error:e,complete:n}:t;return r?Me((i,s)=>{var o;null===(o=r.subscribe)||void 0===o||o.call(r);let a=!0;i.subscribe(new Ae(s,l=>{var u;null===(u=r.next)||void 0===u||u.call(r,l),s.next(l)},()=>{var l;a=!1,null===(l=r.complete)||void 0===l||l.call(r),s.complete()},l=>{var u;a=!1,null===(u=r.error)||void 0===u||u.call(r,l),s.error(l)},()=>{var l,u;a&&(null===(l=r.unsubscribe)||void 0===l||l.call(r)),null===(u=r.finalize)||void 0===u||u.call(r)}))}):Gn}function $n(t){return Me((e,n)=>{let s,r=null,i=!1;r=e.subscribe(new Ae(n,void 0,void 0,o=>{s=en(t(o,$n(t)(e))),r?(r.unsubscribe(),r=null,s.subscribe(n)):i=!0})),i&&(r.unsubscribe(),r=null,s.subscribe(n))})}function JP(t,e,n,r,i){return(s,o)=>{let a=n,l=e,u=0;s.subscribe(new Ae(o,c=>{const d=u++;l=a?t(l,c,d):(a=!0,c),r&&o.next(l)},i&&(()=>{a&&o.next(l),o.complete()})))}}function zD(t,e){return Me(JP(t,e,arguments.length>=2,!0))}function Id(t){return t<=0?()=>nn:Me((e,n)=>{let r=[];e.subscribe(new Ae(n,i=>{r.push(i),t{for(const i of r)n.next(i);n.complete()},void 0,()=>{r=null}))})}function qD(t,e){const n=arguments.length>=2;return r=>r.pipe(t?Ln((i,s)=>t(i,s,r)):Gn,Id(1),n?wa(e):HD(()=>new _a))}function Td(t){return Me((e,n)=>{try{e.subscribe(n)}finally{n.add(t)}})}const z="primary",Ds=Symbol("RouteTitle");class nx{constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){const n=this.params[e];return Array.isArray(n)?n[0]:n}return null}getAll(e){if(this.has(e)){const n=this.params[e];return Array.isArray(n)?n:[n]}return[]}get keys(){return Object.keys(this.params)}}function ai(t){return new nx(t)}function rx(t,e,n){const r=n.path.split("/");if(r.length>t.length||"full"===n.pathMatch&&(e.hasChildren()||r.lengthr[s]===i)}return t===e}function WD(t){return Array.prototype.concat.apply([],t)}function QD(t){return t.length>0?t[t.length-1]:null}function xe(t,e){for(const n in t)t.hasOwnProperty(n)&&e(t[n],n)}function jn(t){return om(t)?t:$o(t)?ve(Promise.resolve(t)):A(t)}const ox={exact:function YD(t,e,n){if(!dr(t.segments,e.segments)||!Ea(t.segments,e.segments,n)||t.numberOfChildren!==e.numberOfChildren)return!1;for(const r in e.children)if(!t.children[r]||!YD(t.children[r],e.children[r],n))return!1;return!0},subset:XD},KD={exact:function ax(t,e){return Yt(t,e)},subset:function lx(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(n=>GD(t[n],e[n]))},ignored:()=>!0};function ZD(t,e,n){return ox[n.paths](t.root,e.root,n.matrixParams)&&KD[n.queryParams](t.queryParams,e.queryParams)&&!("exact"===n.fragment&&t.fragment!==e.fragment)}function XD(t,e,n){return JD(t,e,e.segments,n)}function JD(t,e,n,r){if(t.segments.length>n.length){const i=t.segments.slice(0,n.length);return!(!dr(i,n)||e.hasChildren()||!Ea(i,n,r))}if(t.segments.length===n.length){if(!dr(t.segments,n)||!Ea(t.segments,n,r))return!1;for(const i in e.children)if(!t.children[i]||!XD(t.children[i],e.children[i],r))return!1;return!0}{const i=n.slice(0,t.segments.length),s=n.slice(t.segments.length);return!!(dr(t.segments,i)&&Ea(t.segments,i,r)&&t.children[z])&&JD(t.children[z],e,s,r)}}function Ea(t,e,n){return e.every((r,i)=>KD[n](t[i].parameters,r.parameters))}class cr{constructor(e,n,r){this.root=e,this.queryParams=n,this.fragment=r}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ai(this.queryParams)),this._queryParamMap}toString(){return dx.serialize(this)}}class q{constructor(e,n){this.segments=e,this.children=n,this.parent=null,xe(n,(r,i)=>r.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return Ca(this)}}class _s{constructor(e,n){this.path=e,this.parameters=n}get parameterMap(){return this._parameterMap||(this._parameterMap=ai(this.parameters)),this._parameterMap}toString(){return r_(this)}}function dr(t,e){return t.length===e.length&&t.every((n,r)=>n.path===e[r].path)}let e_=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:function(){return new Ad},providedIn:"root"}),t})();class Ad{parse(e){const n=new _x(e);return new cr(n.parseRootSegment(),n.parseQueryParams(),n.parseFragment())}serialize(e){const n=`/${ws(e.root,!0)}`,r=function px(t){const e=Object.keys(t).map(n=>{const r=t[n];return Array.isArray(r)?r.map(i=>`${Sa(n)}=${Sa(i)}`).join("&"):`${Sa(n)}=${Sa(r)}`}).filter(n=>!!n);return e.length?`?${e.join("&")}`:""}(e.queryParams);return`${n}${r}${"string"==typeof e.fragment?`#${function fx(t){return encodeURI(t)}(e.fragment)}`:""}`}}const dx=new Ad;function Ca(t){return t.segments.map(e=>r_(e)).join("/")}function ws(t,e){if(!t.hasChildren())return Ca(t);if(e){const n=t.children[z]?ws(t.children[z],!1):"",r=[];return xe(t.children,(i,s)=>{s!==z&&r.push(`${s}:${ws(i,!1)}`)}),r.length>0?`${n}(${r.join("//")})`:n}{const n=function cx(t,e){let n=[];return xe(t.children,(r,i)=>{i===z&&(n=n.concat(e(r,i)))}),xe(t.children,(r,i)=>{i!==z&&(n=n.concat(e(r,i)))}),n}(t,(r,i)=>i===z?[ws(t.children[z],!1)]:[`${i}:${ws(r,!1)}`]);return 1===Object.keys(t.children).length&&null!=t.children[z]?`${Ca(t)}/${n[0]}`:`${Ca(t)}/(${n.join("//")})`}}function t_(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Sa(t){return t_(t).replace(/%3B/gi,";")}function Rd(t){return t_(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function ba(t){return decodeURIComponent(t)}function n_(t){return ba(t.replace(/\+/g,"%20"))}function r_(t){return`${Rd(t.path)}${function hx(t){return Object.keys(t).map(e=>`;${Rd(e)}=${Rd(t[e])}`).join("")}(t.parameters)}`}const gx=/^[^\/()?;=#]+/;function Ia(t){const e=t.match(gx);return e?e[0]:""}const mx=/^[^=?&#]+/,vx=/^[^&#]+/;class _x{constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new q([],{}):new q([],this.parseChildren())}parseQueryParams(){const e={};if(this.consumeOptional("?"))do{this.parseQueryParam(e)}while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());let n={};this.peekStartsWith("/(")&&(this.capture("/"),n=this.parseParens(!0));let r={};return this.peekStartsWith("(")&&(r=this.parseParens(!1)),(e.length>0||Object.keys(n).length>0)&&(r[z]=new q(e,n)),r}parseSegment(){const e=Ia(this.remaining);if(""===e&&this.peekStartsWith(";"))throw new _(4009,!1);return this.capture(e),new _s(ba(e),this.parseMatrixParams())}parseMatrixParams(){const e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){const n=Ia(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const i=Ia(this.remaining);i&&(r=i,this.capture(r))}e[ba(n)]=ba(r)}parseQueryParam(e){const n=function yx(t){const e=t.match(mx);return e?e[0]:""}(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const o=function Dx(t){const e=t.match(vx);return e?e[0]:""}(this.remaining);o&&(r=o,this.capture(r))}const i=n_(n),s=n_(r);if(e.hasOwnProperty(i)){let o=e[i];Array.isArray(o)||(o=[o],e[i]=o),o.push(s)}else e[i]=s}parseParens(e){const n={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const r=Ia(this.remaining),i=this.remaining[r.length];if("/"!==i&&")"!==i&&";"!==i)throw new _(4010,!1);let s;r.indexOf(":")>-1?(s=r.slice(0,r.indexOf(":")),this.capture(s),this.capture(":")):e&&(s=z);const o=this.parseChildren();n[s]=1===Object.keys(o).length?o[z]:new q([],o),this.consumeOptional("//")}return n}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return!!this.peekStartsWith(e)&&(this.remaining=this.remaining.substring(e.length),!0)}capture(e){if(!this.consumeOptional(e))throw new _(4011,!1)}}function Nd(t){return t.segments.length>0?new q([],{[z]:t}):t}function Ta(t){const e={};for(const r of Object.keys(t.children)){const s=Ta(t.children[r]);(s.segments.length>0||s.hasChildren())&&(e[r]=s)}return function wx(t){if(1===t.numberOfChildren&&t.children[z]){const e=t.children[z];return new q(t.segments.concat(e.segments),e.children)}return t}(new q(t.segments,e))}function fr(t){return t instanceof cr}function Sx(t,e,n,r,i){if(0===n.length)return li(e.root,e.root,e.root,r,i);const s=function o_(t){if("string"==typeof t[0]&&1===t.length&&"/"===t[0])return new s_(!0,0,t);let e=0,n=!1;const r=t.reduce((i,s,o)=>{if("object"==typeof s&&null!=s){if(s.outlets){const a={};return xe(s.outlets,(l,u)=>{a[u]="string"==typeof l?l.split("/"):l}),[...i,{outlets:a}]}if(s.segmentPath)return[...i,s.segmentPath]}return"string"!=typeof s?[...i,s]:0===o?(s.split("/").forEach((a,l)=>{0==l&&"."===a||(0==l&&""===a?n=!0:".."===a?e++:""!=a&&i.push(a))}),i):[...i,s]},[]);return new s_(n,e,r)}(n);return s.toRoot()?li(e.root,e.root,new q([],{}),r,i):function o(l){const u=function Ix(t,e,n,r){if(t.isAbsolute)return new ui(e.root,!0,0);if(-1===r)return new ui(n,n===e.root,0);return function a_(t,e,n){let r=t,i=e,s=n;for(;s>i;){if(s-=i,r=r.parent,!r)throw new _(4005,!1);i=r.segments.length}return new ui(r,!1,i-s)}(n,r+(Es(t.commands[0])?0:1),t.numberOfDoubleDots)}(s,e,t.snapshot?._urlSegment,l),c=u.processChildren?Ss(u.segmentGroup,u.index,s.commands):xd(u.segmentGroup,u.index,s.commands);return li(e.root,u.segmentGroup,c,r,i)}(t.snapshot?._lastPathIndex)}function Es(t){return"object"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function Cs(t){return"object"==typeof t&&null!=t&&t.outlets}function li(t,e,n,r,i){let o,s={};r&&xe(r,(l,u)=>{s[u]=Array.isArray(l)?l.map(c=>`${c}`):`${l}`}),o=t===e?n:i_(t,e,n);const a=Nd(Ta(o));return new cr(a,s,i)}function i_(t,e,n){const r={};return xe(t.children,(i,s)=>{r[s]=i===e?n:i_(i,e,n)}),new q(t.segments,r)}class s_{constructor(e,n,r){if(this.isAbsolute=e,this.numberOfDoubleDots=n,this.commands=r,e&&r.length>0&&Es(r[0]))throw new _(4003,!1);const i=r.find(Cs);if(i&&i!==QD(r))throw new _(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class ui{constructor(e,n,r){this.segmentGroup=e,this.processChildren=n,this.index=r}}function xd(t,e,n){if(t||(t=new q([],{})),0===t.segments.length&&t.hasChildren())return Ss(t,e,n);const r=function Mx(t,e,n){let r=0,i=e;const s={match:!1,pathIndex:0,commandIndex:0};for(;i=n.length)return s;const o=t.segments[i],a=n[r];if(Cs(a))break;const l=`${a}`,u=r0&&void 0===l)break;if(l&&u&&"object"==typeof u&&void 0===u.outlets){if(!u_(l,u,o))return s;r+=2}else{if(!u_(l,{},o))return s;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}(t,e,n),i=n.slice(r.commandIndex);if(r.match&&r.pathIndex{"string"==typeof s&&(s=[s]),null!==s&&(i[o]=xd(t.children[o],e,s))}),xe(t.children,(s,o)=>{void 0===r[o]&&(i[o]=s)}),new q(t.segments,i)}}function Fd(t,e,n){const r=t.segments.slice(0,e);let i=0;for(;i{"string"==typeof n&&(n=[n]),null!==n&&(e[r]=Fd(new q([],{}),0,n))}),e}function l_(t){const e={};return xe(t,(n,r)=>e[r]=`${n}`),e}function u_(t,e,n){return t==n.path&&Yt(e,n.parameters)}class Dn{constructor(e,n){this.id=e,this.url=n}}class Od extends Dn{constructor(e,n,r="imperative",i=null){super(e,n),this.type=0,this.navigationTrigger=r,this.restoredState=i}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class hr extends Dn{constructor(e,n,r){super(e,n),this.urlAfterRedirects=r,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Ma extends Dn{constructor(e,n,r,i){super(e,n),this.reason=r,this.code=i,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class c_ extends Dn{constructor(e,n,r,i){super(e,n),this.error=r,this.target=i,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Rx extends Dn{constructor(e,n,r,i){super(e,n),this.urlAfterRedirects=r,this.state=i,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Nx extends Dn{constructor(e,n,r,i){super(e,n),this.urlAfterRedirects=r,this.state=i,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Px extends Dn{constructor(e,n,r,i,s){super(e,n),this.urlAfterRedirects=r,this.state=i,this.shouldActivate=s,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class xx extends Dn{constructor(e,n,r,i){super(e,n),this.urlAfterRedirects=r,this.state=i,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Fx extends Dn{constructor(e,n,r,i){super(e,n),this.urlAfterRedirects=r,this.state=i,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Ox{constructor(e){this.route=e,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class kx{constructor(e){this.route=e,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Lx{constructor(e){this.snapshot=e,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Vx{constructor(e){this.snapshot=e,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class $x{constructor(e){this.snapshot=e,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jx{constructor(e){this.snapshot=e,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class d_{constructor(e,n,r){this.routerEvent=e,this.position=n,this.anchor=r,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class f_{constructor(e){this._root=e}get root(){return this._root.value}parent(e){const n=this.pathFromRoot(e);return n.length>1?n[n.length-2]:null}children(e){const n=kd(e,this._root);return n?n.children.map(r=>r.value):[]}firstChild(e){const n=kd(e,this._root);return n&&n.children.length>0?n.children[0].value:null}siblings(e){const n=Ld(e,this._root);return n.length<2?[]:n[n.length-2].children.map(i=>i.value).filter(i=>i!==e)}pathFromRoot(e){return Ld(e,this._root).map(n=>n.value)}}function kd(t,e){if(t===e.value)return e;for(const n of e.children){const r=kd(t,n);if(r)return r}return null}function Ld(t,e){if(t===e.value)return[e];for(const n of e.children){const r=Ld(t,n);if(r.length)return r.unshift(e),r}return[]}class _n{constructor(e,n){this.value=e,this.children=n}toString(){return`TreeNode(${this.value})`}}function ci(t){const e={};return t&&t.children.forEach(n=>e[n.value.outlet]=n),e}class h_ extends f_{constructor(e,n){super(e),this.snapshot=n,Vd(this,e)}toString(){return this.snapshot.toString()}}function p_(t,e){const n=function Ux(t,e){const o=new Aa([],{},{},"",{},z,e,null,t.root,-1,{});return new m_("",new _n(o,[]))}(t,e),r=new Bt([new _s("",{})]),i=new Bt({}),s=new Bt({}),o=new Bt({}),a=new Bt(""),l=new pr(r,i,o,a,s,z,e,n.root);return l.snapshot=n.root,new h_(new _n(l,[]),n)}class pr{constructor(e,n,r,i,s,o,a,l){this.url=e,this.params=n,this.queryParams=r,this.fragment=i,this.data=s,this.outlet=o,this.component=a,this.title=this.data?.pipe(K(u=>u[Ds]))??A(void 0),this._futureSnapshot=l}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(K(e=>ai(e)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(K(e=>ai(e)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function g_(t,e="emptyOnly"){const n=t.pathFromRoot;let r=0;if("always"!==e)for(r=n.length-1;r>=1;){const i=n[r],s=n[r-1];if(i.routeConfig&&""===i.routeConfig.path)r--;else{if(s.component)break;r--}}return function Hx(t){return t.reduce((e,n)=>({params:{...e.params,...n.params},data:{...e.data,...n.data},resolve:{...n.data,...e.resolve,...n.routeConfig?.data,...n._resolvedData}}),{params:{},data:{},resolve:{}})}(n.slice(r))}class Aa{constructor(e,n,r,i,s,o,a,l,u,c,d,f){this.url=e,this.params=n,this.queryParams=r,this.fragment=i,this.data=s,this.outlet=o,this.component=a,this.title=this.data?.[Ds],this.routeConfig=l,this._urlSegment=u,this._lastPathIndex=c,this._correctedLastPathIndex=f??c,this._resolve=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=ai(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ai(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(r=>r.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class m_ extends f_{constructor(e,n){super(n),this.url=e,Vd(this,n)}toString(){return y_(this._root)}}function Vd(t,e){e.value._routerState=t,e.children.forEach(n=>Vd(t,n))}function y_(t){const e=t.children.length>0?` { ${t.children.map(y_).join(", ")} } `:"";return`${t.value}${e}`}function $d(t){if(t.snapshot){const e=t.snapshot,n=t._futureSnapshot;t.snapshot=n,Yt(e.queryParams,n.queryParams)||t.queryParams.next(n.queryParams),e.fragment!==n.fragment&&t.fragment.next(n.fragment),Yt(e.params,n.params)||t.params.next(n.params),function ix(t,e){if(t.length!==e.length)return!1;for(let n=0;nYt(n.parameters,e[r].parameters))}(t.url,e.url);return n&&!(!t.parent!=!e.parent)&&(!t.parent||jd(t.parent,e.parent))}function bs(t,e,n){if(n&&t.shouldReuseRoute(e.value,n.value.snapshot)){const r=n.value;r._futureSnapshot=e.value;const i=function qx(t,e,n){return e.children.map(r=>{for(const i of n.children)if(t.shouldReuseRoute(r.value,i.value.snapshot))return bs(t,r,i);return bs(t,r)})}(t,e,n);return new _n(r,i)}{if(t.shouldAttach(e.value)){const s=t.retrieve(e.value);if(null!==s){const o=s.route;return o.value._futureSnapshot=e.value,o.children=e.children.map(a=>bs(t,a)),o}}const r=function Gx(t){return new pr(new Bt(t.url),new Bt(t.params),new Bt(t.queryParams),new Bt(t.fragment),new Bt(t.data),t.outlet,t.component,t)}(e.value),i=e.children.map(s=>bs(t,s));return new _n(r,i)}}const Bd="ngNavigationCancelingError";function v_(t,e){const{redirectTo:n,navigationBehaviorOptions:r}=fr(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,i=D_(!1,0,e);return i.url=n,i.navigationBehaviorOptions=r,i}function D_(t,e,n){const r=new Error("NavigationCancelingError: "+(t||""));return r[Bd]=!0,r.cancellationCode=e,n&&(r.url=n),r}function __(t){return w_(t)&&fr(t.url)}function w_(t){return t&&t[Bd]}class Wx{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new Is,this.attachRef=null}}let Is=(()=>{class t{constructor(){this.contexts=new Map}onChildOutletCreated(n,r){const i=this.getOrCreateContext(n);i.outlet=r,this.contexts.set(n,i)}onChildOutletDestroyed(n){const r=this.getContext(n);r&&(r.outlet=null,r.attachRef=null)}onOutletDeactivated(){const n=this.contexts;return this.contexts=new Map,n}onOutletReAttached(n){this.contexts=n}getOrCreateContext(n){let r=this.getContext(n);return r||(r=new Wx,this.contexts.set(n,r)),r}getContext(n){return this.contexts.get(n)||null}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const Ra=!1;let Ud=(()=>{class t{constructor(n,r,i,s,o){this.parentContexts=n,this.location=r,this.changeDetector=s,this.environmentInjector=o,this.activated=null,this._activatedRoute=null,this.activateEvents=new Ke,this.deactivateEvents=new Ke,this.attachEvents=new Ke,this.detachEvents=new Ke,this.name=i||z,n.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.getContext(this.name)?.outlet===this&&this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const n=this.parentContexts.getContext(this.name);n&&n.route&&(n.attachRef?this.attach(n.attachRef,n.route):this.activateWith(n.route,n.injector))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new _(4012,Ra);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new _(4012,Ra);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new _(4012,Ra);this.location.detach();const n=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(n.instance),n}attach(n,r){this.activated=n,this._activatedRoute=r,this.location.insert(n.hostView),this.attachEvents.emit(n.instance)}deactivate(){if(this.activated){const n=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(n)}}activateWith(n,r){if(this.isActivated)throw new _(4013,Ra);this._activatedRoute=n;const i=this.location,o=n._futureSnapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,l=new Qx(n,a,i.injector);if(r&&function Kx(t){return!!t.resolveComponentFactory}(r)){const u=r.resolveComponentFactory(o);this.activated=i.createComponent(u,i.length,l)}else this.activated=i.createComponent(o,{index:i.length,injector:l,environmentInjector:r??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return t.\u0275fac=function(n){return new(n||t)(T(Is),T(Lt),function Pi(t){return function TC(t,e){if("class"===e)return t.classes;if("style"===e)return t.styles;const n=t.attrs;if(n){const r=n.length;let i=0;for(;i{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=Ei({type:t,selectors:[["ng-component"]],standalone:!0,features:[Py],decls:1,vars:0,template:function(n,r){1&n&&Vo(0,"router-outlet")},dependencies:[Ud],encapsulation:2}),t})();function E_(t,e){return t.providers&&!t._injector&&(t._injector=Go(t.providers,e,`Route: ${t.path}`)),t._injector??e}function qd(t){const e=t.children&&t.children.map(qd),n=e?{...t,children:e}:{...t};return!n.component&&!n.loadComponent&&(e||n.loadChildren)&&n.outlet&&n.outlet!==z&&(n.component=Hd),n}function Ct(t){return t.outlet||z}function C_(t,e){const n=t.filter(r=>Ct(r)===e);return n.push(...t.filter(r=>Ct(r)!==e)),n}function Ts(t){if(!t)return null;if(t.routeConfig?._injector)return t.routeConfig._injector;for(let e=t.parent;e;e=e.parent){const n=e.routeConfig;if(n?._loadedInjector)return n._loadedInjector;if(n?._injector)return n._injector}return null}class eF{constructor(e,n,r,i){this.routeReuseStrategy=e,this.futureState=n,this.currState=r,this.forwardEvent=i}activate(e){const n=this.futureState._root,r=this.currState?this.currState._root:null;this.deactivateChildRoutes(n,r,e),$d(this.futureState.root),this.activateChildRoutes(n,r,e)}deactivateChildRoutes(e,n,r){const i=ci(n);e.children.forEach(s=>{const o=s.value.outlet;this.deactivateRoutes(s,i[o],r),delete i[o]}),xe(i,(s,o)=>{this.deactivateRouteAndItsChildren(s,r)})}deactivateRoutes(e,n,r){const i=e.value,s=n?n.value:null;if(i===s)if(i.component){const o=r.getContext(i.outlet);o&&this.deactivateChildRoutes(e,n,o.children)}else this.deactivateChildRoutes(e,n,r);else s&&this.deactivateRouteAndItsChildren(n,r)}deactivateRouteAndItsChildren(e,n){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,n):this.deactivateRouteAndOutlet(e,n)}detachAndStoreRouteSubtree(e,n){const r=n.getContext(e.value.outlet),i=r&&e.value.component?r.children:n,s=ci(e);for(const o of Object.keys(s))this.deactivateRouteAndItsChildren(s[o],i);if(r&&r.outlet){const o=r.outlet.detach(),a=r.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:o,route:e,contexts:a})}}deactivateRouteAndOutlet(e,n){const r=n.getContext(e.value.outlet),i=r&&e.value.component?r.children:n,s=ci(e);for(const o of Object.keys(s))this.deactivateRouteAndItsChildren(s[o],i);r&&r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated(),r.attachRef=null,r.resolver=null,r.route=null)}activateChildRoutes(e,n,r){const i=ci(n);e.children.forEach(s=>{this.activateRoutes(s,i[s.value.outlet],r),this.forwardEvent(new jx(s.value.snapshot))}),e.children.length&&this.forwardEvent(new Vx(e.value.snapshot))}activateRoutes(e,n,r){const i=e.value,s=n?n.value:null;if($d(i),i===s)if(i.component){const o=r.getOrCreateContext(i.outlet);this.activateChildRoutes(e,n,o.children)}else this.activateChildRoutes(e,n,r);else if(i.component){const o=r.getOrCreateContext(i.outlet);if(this.routeReuseStrategy.shouldAttach(i.snapshot)){const a=this.routeReuseStrategy.retrieve(i.snapshot);this.routeReuseStrategy.store(i.snapshot,null),o.children.onOutletReAttached(a.contexts),o.attachRef=a.componentRef,o.route=a.route.value,o.outlet&&o.outlet.attach(a.componentRef,a.route.value),$d(a.route.value),this.activateChildRoutes(e,null,o.children)}else{const a=Ts(i.snapshot),l=a?.get(Ki)??null;o.attachRef=null,o.route=i,o.resolver=l,o.injector=a,o.outlet&&o.outlet.activateWith(i,o.injector),this.activateChildRoutes(e,null,o.children)}}else this.activateChildRoutes(e,null,r)}}class S_{constructor(e){this.path=e,this.route=this.path[this.path.length-1]}}class Na{constructor(e,n){this.component=e,this.route=n}}function tF(t,e,n){const r=t._root;return Ms(r,e?e._root:null,n,[r.value])}function di(t,e){const n=Symbol(),r=e.get(t,n);return r===n?"function"!=typeof t||function ME(t){return null!==Hs(t)}(t)?e.get(t):t:r}function Ms(t,e,n,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=ci(e);return t.children.forEach(o=>{(function rF(t,e,n,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=t.value,o=e?e.value:null,a=n?n.getContext(t.value.outlet):null;if(o&&s.routeConfig===o.routeConfig){const l=function iF(t,e,n){if("function"==typeof n)return n(t,e);switch(n){case"pathParamsChange":return!dr(t.url,e.url);case"pathParamsOrQueryParamsChange":return!dr(t.url,e.url)||!Yt(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!jd(t,e)||!Yt(t.queryParams,e.queryParams);default:return!jd(t,e)}}(o,s,s.routeConfig.runGuardsAndResolvers);l?i.canActivateChecks.push(new S_(r)):(s.data=o.data,s._resolvedData=o._resolvedData),Ms(t,e,s.component?a?a.children:null:n,r,i),l&&a&&a.outlet&&a.outlet.isActivated&&i.canDeactivateChecks.push(new Na(a.outlet.component,o))}else o&&As(e,a,i),i.canActivateChecks.push(new S_(r)),Ms(t,null,s.component?a?a.children:null:n,r,i)})(o,s[o.value.outlet],n,r.concat([o.value]),i),delete s[o.value.outlet]}),xe(s,(o,a)=>As(o,n.getContext(a),i)),i}function As(t,e,n){const r=ci(t),i=t.value;xe(r,(s,o)=>{As(s,i.component?e?e.children.getContext(o):null:e,n)}),n.canDeactivateChecks.push(new Na(i.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,i))}function Rs(t){return"function"==typeof t}function Gd(t){return t instanceof _a||"EmptyError"===t?.name}const Pa=Symbol("INITIAL_VALUE");function fi(){return Zt(t=>$D(t.map(e=>e.pipe(_r(1),function YP(...t){const e=_i(t);return Me((n,r)=>{(e?Sd(t,n,e):Sd(t,n)).subscribe(r)})}(Pa)))).pipe(K(e=>{for(const n of e)if(!0!==n){if(n===Pa)return Pa;if(!1===n||n instanceof cr)return n}return!0}),Ln(e=>e!==Pa),_r(1)))}function b_(t){return function Ww(...t){return Lf(t)}(Be(e=>{if(fr(e))throw v_(0,e)}),K(e=>!0===e))}const Wd={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function I_(t,e,n,r,i){const s=Qd(t,e,n);return s.matched?function wF(t,e,n,r){const i=e.canMatch;return i&&0!==i.length?A(i.map(o=>{const a=di(o,t);return jn(function cF(t){return t&&Rs(t.canMatch)}(a)?a.canMatch(e,n):t.runInContext(()=>a(e,n)))})).pipe(fi(),b_()):A(!0)}(r=E_(e,r),e,n).pipe(K(o=>!0===o?s:{...Wd})):A(s)}function Qd(t,e,n){if(""===e.path)return"full"===e.pathMatch&&(t.hasChildren()||n.length>0)?{...Wd}:{matched:!0,consumedSegments:[],remainingSegments:n,parameters:{},positionalParamSegments:{}};const i=(e.matcher||rx)(n,t,e);if(!i)return{...Wd};const s={};xe(i.posParams,(a,l)=>{s[l]=a.path});const o=i.consumed.length>0?{...s,...i.consumed[i.consumed.length-1].parameters}:s;return{matched:!0,consumedSegments:i.consumed,remainingSegments:n.slice(i.consumed.length),parameters:o,positionalParamSegments:i.posParams??{}}}function xa(t,e,n,r,i="corrected"){if(n.length>0&&function SF(t,e,n){return n.some(r=>Fa(t,e,r)&&Ct(r)!==z)}(t,n,r)){const o=new q(e,function CF(t,e,n,r){const i={};i[z]=r,r._sourceSegment=t,r._segmentIndexShift=e.length;for(const s of n)if(""===s.path&&Ct(s)!==z){const o=new q([],{});o._sourceSegment=t,o._segmentIndexShift=e.length,i[Ct(s)]=o}return i}(t,e,r,new q(n,t.children)));return o._sourceSegment=t,o._segmentIndexShift=e.length,{segmentGroup:o,slicedSegments:[]}}if(0===n.length&&function bF(t,e,n){return n.some(r=>Fa(t,e,r))}(t,n,r)){const o=new q(t.segments,function EF(t,e,n,r,i,s){const o={};for(const a of r)if(Fa(t,n,a)&&!i[Ct(a)]){const l=new q([],{});l._sourceSegment=t,l._segmentIndexShift="legacy"===s?t.segments.length:e.length,o[Ct(a)]=l}return{...i,...o}}(t,e,n,r,t.children,i));return o._sourceSegment=t,o._segmentIndexShift=e.length,{segmentGroup:o,slicedSegments:n}}const s=new q(t.segments,t.children);return s._sourceSegment=t,s._segmentIndexShift=e.length,{segmentGroup:s,slicedSegments:n}}function Fa(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path}function T_(t,e,n,r){return!!(Ct(t)===r||r!==z&&Fa(e,n,t))&&("**"===t.path||Qd(e,t,n).matched)}function M_(t,e,n){return 0===e.length&&!t.children[n]}const Oa=!1;class ka{constructor(e){this.segmentGroup=e||null}}class A_{constructor(e){this.urlTree=e}}function Ns(t){return vs(new ka(t))}function R_(t){return vs(new A_(t))}class AF{constructor(e,n,r,i,s){this.injector=e,this.configLoader=n,this.urlSerializer=r,this.urlTree=i,this.config=s,this.allowRedirects=!0}apply(){const e=xa(this.urlTree.root,[],[],this.config).segmentGroup,n=new q(e.segments,e.children);return this.expandSegmentGroup(this.injector,this.config,n,z).pipe(K(s=>this.createUrlTree(Ta(s),this.urlTree.queryParams,this.urlTree.fragment))).pipe($n(s=>{if(s instanceof A_)return this.allowRedirects=!1,this.match(s.urlTree);throw s instanceof ka?this.noMatchError(s):s}))}match(e){return this.expandSegmentGroup(this.injector,this.config,e.root,z).pipe(K(i=>this.createUrlTree(Ta(i),e.queryParams,e.fragment))).pipe($n(i=>{throw i instanceof ka?this.noMatchError(i):i}))}noMatchError(e){return new _(4002,Oa)}createUrlTree(e,n,r){const i=Nd(e);return new cr(i,n,r)}expandSegmentGroup(e,n,r,i){return 0===r.segments.length&&r.hasChildren()?this.expandChildren(e,n,r).pipe(K(s=>new q([],s))):this.expandSegment(e,r,n,r.segments,i,!0)}expandChildren(e,n,r){const i=[];for(const s of Object.keys(r.children))"primary"===s?i.unshift(s):i.push(s);return ve(i).pipe(ur(s=>{const o=r.children[s],a=C_(n,s);return this.expandSegmentGroup(e,a,o,s).pipe(K(l=>({segment:l,outlet:s})))}),zD((s,o)=>(s[o.outlet]=o.segment,s),{}),qD())}expandSegment(e,n,r,i,s,o){return ve(r).pipe(ur(a=>this.expandSegmentAgainstRoute(e,n,r,a,i,s,o).pipe($n(u=>{if(u instanceof ka)return A(null);throw u}))),Vn(a=>!!a),$n((a,l)=>{if(Gd(a))return M_(n,i,s)?A(new q([],{})):Ns(n);throw a}))}expandSegmentAgainstRoute(e,n,r,i,s,o,a){return T_(i,n,s,o)?void 0===i.redirectTo?this.matchSegmentAgainstRoute(e,n,i,s,o):a&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(e,n,r,i,s,o):Ns(n):Ns(n)}expandSegmentAgainstRouteUsingRedirect(e,n,r,i,s,o){return"**"===i.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(e,r,i,o):this.expandRegularSegmentAgainstRouteUsingRedirect(e,n,r,i,s,o)}expandWildCardWithParamsAgainstRouteUsingRedirect(e,n,r,i){const s=this.applyRedirectCommands([],r.redirectTo,{});return r.redirectTo.startsWith("/")?R_(s):this.lineralizeSegments(r,s).pipe(Pe(o=>{const a=new q(o,{});return this.expandSegment(e,a,n,o,i,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(e,n,r,i,s,o){const{matched:a,consumedSegments:l,remainingSegments:u,positionalParamSegments:c}=Qd(n,i,s);if(!a)return Ns(n);const d=this.applyRedirectCommands(l,i.redirectTo,c);return i.redirectTo.startsWith("/")?R_(d):this.lineralizeSegments(i,d).pipe(Pe(f=>this.expandSegment(e,n,r,f.concat(u),o,!1)))}matchSegmentAgainstRoute(e,n,r,i,s){return"**"===r.path?(e=E_(r,e),r.loadChildren?(r._loadedRoutes?A({routes:r._loadedRoutes,injector:r._loadedInjector}):this.configLoader.loadChildren(e,r)).pipe(K(a=>(r._loadedRoutes=a.routes,r._loadedInjector=a.injector,new q(i,{})))):A(new q(i,{}))):I_(n,r,i,e).pipe(Zt(({matched:o,consumedSegments:a,remainingSegments:l})=>o?this.getChildConfig(e=r._injector??e,r,i).pipe(Pe(c=>{const d=c.injector??e,f=c.routes,{segmentGroup:h,slicedSegments:p}=xa(n,a,l,f),g=new q(h.segments,h.children);if(0===p.length&&g.hasChildren())return this.expandChildren(d,f,g).pipe(K(y=>new q(a,y)));if(0===f.length&&0===p.length)return A(new q(a,{}));const m=Ct(r)===s;return this.expandSegment(d,g,f,p,m?z:s,!0).pipe(K(w=>new q(a.concat(w.segments),w.children)))})):Ns(n)))}getChildConfig(e,n,r){return n.children?A({routes:n.children,injector:e}):n.loadChildren?void 0!==n._loadedRoutes?A({routes:n._loadedRoutes,injector:n._loadedInjector}):function _F(t,e,n,r){const i=e.canLoad;return void 0===i||0===i.length?A(!0):A(i.map(o=>{const a=di(o,t);return jn(function oF(t){return t&&Rs(t.canLoad)}(a)?a.canLoad(e,n):t.runInContext(()=>a(e,n)))})).pipe(fi(),b_())}(e,n,r).pipe(Pe(i=>i?this.configLoader.loadChildren(e,n).pipe(Be(s=>{n._loadedRoutes=s.routes,n._loadedInjector=s.injector})):function TF(t){return vs(D_(Oa,3))}())):A({routes:[],injector:e})}lineralizeSegments(e,n){let r=[],i=n.root;for(;;){if(r=r.concat(i.segments),0===i.numberOfChildren)return A(r);if(i.numberOfChildren>1||!i.children[z])return vs(new _(4e3,Oa));i=i.children[z]}}applyRedirectCommands(e,n,r){return this.applyRedirectCreateUrlTree(n,this.urlSerializer.parse(n),e,r)}applyRedirectCreateUrlTree(e,n,r,i){const s=this.createSegmentGroup(e,n.root,r,i);return new cr(s,this.createQueryParams(n.queryParams,this.urlTree.queryParams),n.fragment)}createQueryParams(e,n){const r={};return xe(e,(i,s)=>{if("string"==typeof i&&i.startsWith(":")){const a=i.substring(1);r[s]=n[a]}else r[s]=i}),r}createSegmentGroup(e,n,r,i){const s=this.createSegments(e,n.segments,r,i);let o={};return xe(n.children,(a,l)=>{o[l]=this.createSegmentGroup(e,a,r,i)}),new q(s,o)}createSegments(e,n,r,i){return n.map(s=>s.path.startsWith(":")?this.findPosParam(e,s,i):this.findOrReturn(s,r))}findPosParam(e,n,r){const i=r[n.path.substring(1)];if(!i)throw new _(4001,Oa);return i}findOrReturn(e,n){let r=0;for(const i of n){if(i.path===e.path)return n.splice(r),i;r++}return e}}class NF{}class FF{constructor(e,n,r,i,s,o,a,l){this.injector=e,this.rootComponentType=n,this.config=r,this.urlTree=i,this.url=s,this.paramsInheritanceStrategy=o,this.relativeLinkResolution=a,this.urlSerializer=l}recognize(){const e=xa(this.urlTree.root,[],[],this.config.filter(n=>void 0===n.redirectTo),this.relativeLinkResolution).segmentGroup;return this.processSegmentGroup(this.injector,this.config,e,z).pipe(K(n=>{if(null===n)return null;const r=new Aa([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},z,this.rootComponentType,null,this.urlTree.root,-1,{}),i=new _n(r,n),s=new m_(this.url,i);return this.inheritParamsAndData(s._root),s}))}inheritParamsAndData(e){const n=e.value,r=g_(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),e.children.forEach(i=>this.inheritParamsAndData(i))}processSegmentGroup(e,n,r,i){return 0===r.segments.length&&r.hasChildren()?this.processChildren(e,n,r):this.processSegment(e,n,r,r.segments,i)}processChildren(e,n,r){return ve(Object.keys(r.children)).pipe(ur(i=>{const s=r.children[i],o=C_(n,i);return this.processSegmentGroup(e,o,s,i)}),zD((i,s)=>i&&s?(i.push(...s),i):null),function ex(t,e=!1){return Me((n,r)=>{let i=0;n.subscribe(new Ae(r,s=>{const o=t(s,i++);(o||e)&&r.next(s),!o&&r.complete()}))})}(i=>null!==i),wa(null),qD(),K(i=>{if(null===i)return null;const s=N_(i);return function OF(t){t.sort((e,n)=>e.value.outlet===z?-1:n.value.outlet===z?1:e.value.outlet.localeCompare(n.value.outlet))}(s),s}))}processSegment(e,n,r,i,s){return ve(n).pipe(ur(o=>this.processSegmentAgainstRoute(o._injector??e,o,r,i,s)),Vn(o=>!!o),$n(o=>{if(Gd(o))return M_(r,i,s)?A([]):A(null);throw o}))}processSegmentAgainstRoute(e,n,r,i,s){if(n.redirectTo||!T_(n,r,i,s))return A(null);let o;if("**"===n.path){const a=i.length>0?QD(i).parameters:{},l=x_(r)+i.length;o=A({snapshot:new Aa(i,a,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,O_(n),Ct(n),n.component??n._loadedComponent??null,n,P_(r),l,k_(n),l),consumedSegments:[],remainingSegments:[]})}else o=I_(r,n,i,e).pipe(K(({matched:a,consumedSegments:l,remainingSegments:u,parameters:c})=>{if(!a)return null;const d=x_(r)+l.length;return{snapshot:new Aa(l,c,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,O_(n),Ct(n),n.component??n._loadedComponent??null,n,P_(r),d,k_(n),d),consumedSegments:l,remainingSegments:u}}));return o.pipe(Zt(a=>{if(null===a)return A(null);const{snapshot:l,consumedSegments:u,remainingSegments:c}=a;e=n._injector??e;const d=n._loadedInjector??e,f=function kF(t){return t.children?t.children:t.loadChildren?t._loadedRoutes:[]}(n),{segmentGroup:h,slicedSegments:p}=xa(r,u,c,f.filter(m=>void 0===m.redirectTo),this.relativeLinkResolution);if(0===p.length&&h.hasChildren())return this.processChildren(d,f,h).pipe(K(m=>null===m?null:[new _n(l,m)]));if(0===f.length&&0===p.length)return A([new _n(l,[])]);const g=Ct(n)===s;return this.processSegment(d,f,h,p,g?z:s).pipe(K(m=>null===m?null:[new _n(l,m)]))}))}}function LF(t){const e=t.value.routeConfig;return e&&""===e.path&&void 0===e.redirectTo}function N_(t){const e=[],n=new Set;for(const r of t){if(!LF(r)){e.push(r);continue}const i=e.find(s=>r.value.routeConfig===s.value.routeConfig);void 0!==i?(i.children.push(...r.children),n.add(i)):e.push(r)}for(const r of n){const i=N_(r.children);e.push(new _n(r.value,i))}return e.filter(r=>!n.has(r))}function P_(t){let e=t;for(;e._sourceSegment;)e=e._sourceSegment;return e}function x_(t){let e=t,n=e._segmentIndexShift??0;for(;e._sourceSegment;)e=e._sourceSegment,n+=e._segmentIndexShift??0;return n-1}function O_(t){return t.data||{}}function k_(t){return t.resolve||{}}function L_(t){return"string"==typeof t.title||null===t.title}function Kd(t){return Zt(e=>{const n=t(e);return n?ve(n).pipe(K(()=>e)):A(e)})}let V_=(()=>{class t{buildTitle(n){let r,i=n.root;for(;void 0!==i;)r=this.getResolvedTitleForRoute(i)??r,i=i.children.find(s=>s.outlet===z);return r}getResolvedTitleForRoute(n){return n.data[Ds]}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:function(){return pe($_)},providedIn:"root"}),t})(),$_=(()=>{class t extends V_{constructor(n){super(),this.title=n}updateTitle(n){const r=this.buildTitle(n);void 0!==r&&this.title.setTitle(r)}}return t.\u0275fac=function(n){return new(n||t)(I(kD))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();class qF{}class WF extends class GF{shouldDetach(e){return!1}store(e,n){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,n){return e.routeConfig===n.routeConfig}}{}const Va=new O("",{providedIn:"root",factory:()=>({})}),Zd=new O("ROUTES");let Yd=(()=>{class t{constructor(n,r){this.injector=n,this.compiler=r,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(n){if(this.componentLoaders.get(n))return this.componentLoaders.get(n);if(n._loadedComponent)return A(n._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(n);const r=jn(n.loadComponent()).pipe(Be(s=>{this.onLoadEndListener&&this.onLoadEndListener(n),n._loadedComponent=s}),Td(()=>{this.componentLoaders.delete(n)})),i=new UD(r,()=>new Ht).pipe(bd());return this.componentLoaders.set(n,i),i}loadChildren(n,r){if(this.childrenLoaders.get(r))return this.childrenLoaders.get(r);if(r._loadedRoutes)return A({routes:r._loadedRoutes,injector:r._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(r);const s=this.loadModuleFactoryOrRoutes(r.loadChildren).pipe(K(a=>{this.onLoadEndListener&&this.onLoadEndListener(r);let l,u,c=!1;Array.isArray(a)?u=a:(l=a.create(n).injector,u=WD(l.get(Zd,[],N.Self|N.Optional)));return{routes:u.map(qd),injector:l}}),Td(()=>{this.childrenLoaders.delete(r)})),o=new UD(s,()=>new Ht).pipe(bd());return this.childrenLoaders.set(r,o),o}loadModuleFactoryOrRoutes(n){return jn(n()).pipe(Pe(r=>r instanceof Ry||Array.isArray(r)?A(r):ve(this.compiler.compileModuleAsync(r))))}}return t.\u0275fac=function(n){return new(n||t)(I(xt),I(jc))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();class KF{}class ZF{shouldProcessUrl(e){return!0}extract(e){return e}merge(e,n){return e}}function YF(t){throw t}function XF(t,e,n){return e.parse("/")}const JF={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},eO={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function B_(){const t=pe(e_),e=pe(Is),n=pe(nd),r=pe(xt),i=pe(jc),s=pe(Zd,{optional:!0})??[],o=pe(Va,{optional:!0})??{},a=pe($_),l=pe(V_,{optional:!0}),u=pe(KF,{optional:!0}),c=pe(qF,{optional:!0}),d=new Fe(null,t,e,n,r,i,WD(s));return u&&(d.urlHandlingStrategy=u),c&&(d.routeReuseStrategy=c),d.titleStrategy=l??a,function tO(t,e){t.errorHandler&&(e.errorHandler=t.errorHandler),t.malformedUriErrorHandler&&(e.malformedUriErrorHandler=t.malformedUriErrorHandler),t.onSameUrlNavigation&&(e.onSameUrlNavigation=t.onSameUrlNavigation),t.paramsInheritanceStrategy&&(e.paramsInheritanceStrategy=t.paramsInheritanceStrategy),t.relativeLinkResolution&&(e.relativeLinkResolution=t.relativeLinkResolution),t.urlUpdateStrategy&&(e.urlUpdateStrategy=t.urlUpdateStrategy),t.canceledNavigationResolution&&(e.canceledNavigationResolution=t.canceledNavigationResolution)}(o,d),d}let Fe=(()=>{class t{constructor(n,r,i,s,o,a,l){this.rootComponentType=n,this.urlSerializer=r,this.rootContexts=i,this.location=s,this.config=l,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new Ht,this.errorHandler=YF,this.malformedUriErrorHandler=XF,this.navigated=!1,this.lastSuccessfulId=-1,this.afterPreactivation=()=>A(void 0),this.urlHandlingStrategy=new ZF,this.routeReuseStrategy=new WF,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="corrected",this.canceledNavigationResolution="replace",this.configLoader=o.get(Yd),this.configLoader.onLoadEndListener=f=>this.triggerEvent(new kx(f)),this.configLoader.onLoadStartListener=f=>this.triggerEvent(new Ox(f)),this.ngModule=o.get(or),this.console=o.get(wA);const d=o.get(ge);this.isNgZoneEnabled=d instanceof ge&&ge.isInAngularZone(),this.resetConfig(l),this.currentUrlTree=function sx(){return new cr(new q([],{}),{},null)}(),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=p_(this.currentUrlTree,this.rootComponentType),this.transitions=new Bt({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){return this.location.getState()?.\u0275routerPageId}setupNavigations(n){const r=this.events;return n.pipe(Ln(i=>0!==i.id),K(i=>({...i,extractedUrl:this.urlHandlingStrategy.extract(i.rawUrl)})),Zt(i=>{let s=!1,o=!1;return A(i).pipe(Be(a=>{this.currentNavigation={id:a.id,initialUrl:a.rawUrl,extractedUrl:a.extractedUrl,trigger:a.source,extras:a.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Zt(a=>{const l=this.browserUrlTree.toString(),u=!this.navigated||a.extractedUrl.toString()!==l||l!==this.currentUrlTree.toString();if(("reload"===this.onSameUrlNavigation||u)&&this.urlHandlingStrategy.shouldProcessUrl(a.rawUrl))return U_(a.source)&&(this.browserUrlTree=a.extractedUrl),A(a).pipe(Zt(d=>{const f=this.transitions.getValue();return r.next(new Od(d.id,this.serializeUrl(d.extractedUrl),d.source,d.restoredState)),f!==this.transitions.getValue()?nn:Promise.resolve(d)}),function RF(t,e,n,r){return Zt(i=>function MF(t,e,n,r,i){return new AF(t,e,n,r,i).apply()}(t,e,n,i.extractedUrl,r).pipe(K(s=>({...i,urlAfterRedirects:s}))))}(this.ngModule.injector,this.configLoader,this.urlSerializer,this.config),Be(d=>{this.currentNavigation={...this.currentNavigation,finalUrl:d.urlAfterRedirects},i.urlAfterRedirects=d.urlAfterRedirects}),function $F(t,e,n,r,i,s){return Pe(o=>function xF(t,e,n,r,i,s,o="emptyOnly",a="legacy"){return new FF(t,e,n,r,i,o,a,s).recognize().pipe(Zt(l=>null===l?function PF(t){return new Ce(e=>e.error(t))}(new NF):A(l)))}(t,e,n,o.urlAfterRedirects,r.serialize(o.urlAfterRedirects),r,i,s).pipe(K(a=>({...o,targetSnapshot:a}))))}(this.ngModule.injector,this.rootComponentType,this.config,this.urlSerializer,this.paramsInheritanceStrategy,this.relativeLinkResolution),Be(d=>{if(i.targetSnapshot=d.targetSnapshot,"eager"===this.urlUpdateStrategy){if(!d.extras.skipLocationChange){const h=this.urlHandlingStrategy.merge(d.urlAfterRedirects,d.rawUrl);this.setBrowserUrl(h,d)}this.browserUrlTree=d.urlAfterRedirects}const f=new Rx(d.id,this.serializeUrl(d.extractedUrl),this.serializeUrl(d.urlAfterRedirects),d.targetSnapshot);r.next(f)}));if(u&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:f,extractedUrl:h,source:p,restoredState:g,extras:m}=a,v=new Od(f,this.serializeUrl(h),p,g);r.next(v);const w=p_(h,this.rootComponentType).snapshot;return A(i={...a,targetSnapshot:w,urlAfterRedirects:h,extras:{...m,skipLocationChange:!1,replaceUrl:!1}})}return this.rawUrlTree=a.rawUrl,a.resolve(null),nn}),Be(a=>{const l=new Nx(a.id,this.serializeUrl(a.extractedUrl),this.serializeUrl(a.urlAfterRedirects),a.targetSnapshot);this.triggerEvent(l)}),K(a=>i={...a,guards:tF(a.targetSnapshot,a.currentSnapshot,this.rootContexts)}),function fF(t,e){return Pe(n=>{const{targetSnapshot:r,currentSnapshot:i,guards:{canActivateChecks:s,canDeactivateChecks:o}}=n;return 0===o.length&&0===s.length?A({...n,guardsResult:!0}):function hF(t,e,n,r){return ve(t).pipe(Pe(i=>function DF(t,e,n,r,i){const s=e&&e.routeConfig?e.routeConfig.canDeactivate:null;return s&&0!==s.length?A(s.map(a=>{const l=Ts(e)??i,u=di(a,l);return jn(function uF(t){return t&&Rs(t.canDeactivate)}(u)?u.canDeactivate(t,e,n,r):l.runInContext(()=>u(t,e,n,r))).pipe(Vn())})).pipe(fi()):A(!0)}(i.component,i.route,n,e,r)),Vn(i=>!0!==i,!0))}(o,r,i,t).pipe(Pe(a=>a&&function sF(t){return"boolean"==typeof t}(a)?function pF(t,e,n,r){return ve(e).pipe(ur(i=>Sd(function mF(t,e){return null!==t&&e&&e(new Lx(t)),A(!0)}(i.route.parent,r),function gF(t,e){return null!==t&&e&&e(new $x(t)),A(!0)}(i.route,r),function vF(t,e,n){const r=e[e.length-1],s=e.slice(0,e.length-1).reverse().map(o=>function nF(t){const e=t.routeConfig?t.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:t,guards:e}:null}(o)).filter(o=>null!==o).map(o=>BD(()=>A(o.guards.map(l=>{const u=Ts(o.node)??n,c=di(l,u);return jn(function lF(t){return t&&Rs(t.canActivateChild)}(c)?c.canActivateChild(r,t):u.runInContext(()=>c(r,t))).pipe(Vn())})).pipe(fi())));return A(s).pipe(fi())}(t,i.path,n),function yF(t,e,n){const r=e.routeConfig?e.routeConfig.canActivate:null;if(!r||0===r.length)return A(!0);const i=r.map(s=>BD(()=>{const o=Ts(e)??n,a=di(s,o);return jn(function aF(t){return t&&Rs(t.canActivate)}(a)?a.canActivate(e,t):o.runInContext(()=>a(e,t))).pipe(Vn())}));return A(i).pipe(fi())}(t,i.route,n))),Vn(i=>!0!==i,!0))}(r,s,t,e):A(a)),K(a=>({...n,guardsResult:a})))})}(this.ngModule.injector,a=>this.triggerEvent(a)),Be(a=>{if(i.guardsResult=a.guardsResult,fr(a.guardsResult))throw v_(0,a.guardsResult);const l=new Px(a.id,this.serializeUrl(a.extractedUrl),this.serializeUrl(a.urlAfterRedirects),a.targetSnapshot,!!a.guardsResult);this.triggerEvent(l)}),Ln(a=>!!a.guardsResult||(this.restoreHistory(a),this.cancelNavigationTransition(a,"",3),!1)),Kd(a=>{if(a.guards.canActivateChecks.length)return A(a).pipe(Be(l=>{const u=new xx(l.id,this.serializeUrl(l.extractedUrl),this.serializeUrl(l.urlAfterRedirects),l.targetSnapshot);this.triggerEvent(u)}),Zt(l=>{let u=!1;return A(l).pipe(function jF(t,e){return Pe(n=>{const{targetSnapshot:r,guards:{canActivateChecks:i}}=n;if(!i.length)return A(n);let s=0;return ve(i).pipe(ur(o=>function BF(t,e,n,r){const i=t.routeConfig,s=t._resolve;return void 0!==i?.title&&!L_(i)&&(s[Ds]=i.title),function UF(t,e,n,r){const i=function HF(t){return[...Object.keys(t),...Object.getOwnPropertySymbols(t)]}(t);if(0===i.length)return A({});const s={};return ve(i).pipe(Pe(o=>function zF(t,e,n,r){const i=Ts(e)??r,s=di(t,i);return jn(s.resolve?s.resolve(e,n):i.runInContext(()=>s(e,n)))}(t[o],e,n,r).pipe(Vn(),Be(a=>{s[o]=a}))),Id(1),function tx(t){return K(()=>t)}(s),$n(o=>Gd(o)?nn:vs(o)))}(s,t,e,r).pipe(K(o=>(t._resolvedData=o,t.data=g_(t,n).resolve,i&&L_(i)&&(t.data[Ds]=i.title),null)))}(o.route,r,t,e)),Be(()=>s++),Id(1),Pe(o=>s===i.length?A(n):nn))})}(this.paramsInheritanceStrategy,this.ngModule.injector),Be({next:()=>u=!0,complete:()=>{u||(this.restoreHistory(l),this.cancelNavigationTransition(l,"",2))}}))}),Be(l=>{const u=new Fx(l.id,this.serializeUrl(l.extractedUrl),this.serializeUrl(l.urlAfterRedirects),l.targetSnapshot);this.triggerEvent(u)}))}),Kd(a=>{const l=u=>{const c=[];u.routeConfig?.loadComponent&&!u.routeConfig._loadedComponent&&c.push(this.configLoader.loadComponent(u.routeConfig).pipe(Be(d=>{u.component=d}),K(()=>{})));for(const d of u.children)c.push(...l(d));return c};return $D(l(a.targetSnapshot.root)).pipe(wa(),_r(1))}),Kd(()=>this.afterPreactivation()),K(a=>{const l=function zx(t,e,n){const r=bs(t,e._root,n?n._root:void 0);return new h_(r,e)}(this.routeReuseStrategy,a.targetSnapshot,a.currentRouterState);return i={...a,targetRouterState:l}}),Be(a=>{this.currentUrlTree=a.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(a.urlAfterRedirects,a.rawUrl),this.routerState=a.targetRouterState,"deferred"===this.urlUpdateStrategy&&(a.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,a),this.browserUrlTree=a.urlAfterRedirects)}),((t,e,n)=>K(r=>(new eF(e,r.targetRouterState,r.currentRouterState,n).activate(t),r)))(this.rootContexts,this.routeReuseStrategy,a=>this.triggerEvent(a)),Be({next(){s=!0},complete(){s=!0}}),Td(()=>{s||o||this.cancelNavigationTransition(i,"",1),this.currentNavigation?.id===i.id&&(this.currentNavigation=null)}),$n(a=>{if(o=!0,w_(a)){__(a)||(this.navigated=!0,this.restoreHistory(i,!0));const l=new Ma(i.id,this.serializeUrl(i.extractedUrl),a.message,a.cancellationCode);if(r.next(l),__(a)){const u=this.urlHandlingStrategy.merge(a.url,this.rawUrlTree),c={skipLocationChange:i.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||U_(i.source)};this.scheduleNavigation(u,"imperative",null,c,{resolve:i.resolve,reject:i.reject,promise:i.promise})}else i.resolve(!1)}else{this.restoreHistory(i,!0);const l=new c_(i.id,this.serializeUrl(i.extractedUrl),a,i.targetSnapshot??void 0);r.next(l);try{i.resolve(this.errorHandler(a))}catch(u){i.reject(u)}}return nn}))}))}resetRootComponentType(n){this.rootComponentType=n,this.routerState.root.component=this.rootComponentType}setTransition(n){this.transitions.next({...this.transitions.value,...n})}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(n=>{const r="popstate"===n.type?"popstate":"hashchange";"popstate"===r&&setTimeout(()=>{const i={replaceUrl:!0},s=n.state?.navigationId?n.state:null;if(s){const a={...s};delete a.navigationId,delete a.\u0275routerPageId,0!==Object.keys(a).length&&(i.state=a)}const o=this.parseUrl(n.url);this.scheduleNavigation(o,r,s,i)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(n){this.events.next(n)}resetConfig(n){this.config=n.map(qd),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(n,r={}){const{relativeTo:i,queryParams:s,fragment:o,queryParamsHandling:a,preserveFragment:l}=r,u=i||this.routerState.root,c=l?this.currentUrlTree.fragment:o;let d=null;switch(a){case"merge":d={...this.currentUrlTree.queryParams,...s};break;case"preserve":d=this.currentUrlTree.queryParams;break;default:d=s||null}return null!==d&&(d=this.removeEmptyProps(d)),Sx(u,this.currentUrlTree,n,d,c??null)}navigateByUrl(n,r={skipLocationChange:!1}){const i=fr(n)?n:this.parseUrl(n),s=this.urlHandlingStrategy.merge(i,this.rawUrlTree);return this.scheduleNavigation(s,"imperative",null,r)}navigate(n,r={skipLocationChange:!1}){return function nO(t){for(let e=0;e{const s=n[i];return null!=s&&(r[i]=s),r},{})}processNavigations(){this.navigations.subscribe(n=>{this.navigated=!0,this.lastSuccessfulId=n.id,this.currentPageId=n.targetPageId,this.events.next(new hr(n.id,this.serializeUrl(n.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,this.titleStrategy?.updateTitle(this.routerState.snapshot),n.resolve(!0)},n=>{this.console.warn(`Unhandled Navigation Error: ${n}`)})}scheduleNavigation(n,r,i,s,o){if(this.disposed)return Promise.resolve(!1);let a,l,u;o?(a=o.resolve,l=o.reject,u=o.promise):u=new Promise((f,h)=>{a=f,l=h});const c=++this.navigationId;let d;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(i=this.location.getState()),d=i&&i.\u0275routerPageId?i.\u0275routerPageId:s.replaceUrl||s.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1):d=0,this.setTransition({id:c,targetPageId:d,source:r,restoredState:i,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:n,extras:s,resolve:a,reject:l,promise:u,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),u.catch(f=>Promise.reject(f))}setBrowserUrl(n,r){const i=this.urlSerializer.serialize(n),s={...r.extras.state,...this.generateNgRouterState(r.id,r.targetPageId)};this.location.isCurrentPathEqualTo(i)||r.extras.replaceUrl?this.location.replaceState(i,"",s):this.location.go(i,"",s)}restoreHistory(n,r=!1){if("computed"===this.canceledNavigationResolution){const i=this.currentPageId-n.targetPageId;"popstate"!==n.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.currentNavigation?.finalUrl||0===i?this.currentUrlTree===this.currentNavigation?.finalUrl&&0===i&&(this.resetState(n),this.browserUrlTree=n.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(i)}else"replace"===this.canceledNavigationResolution&&(r&&this.resetState(n),this.resetUrlToCurrentUrlTree())}resetState(n){this.routerState=n.currentRouterState,this.currentUrlTree=n.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(n,r,i){const s=new Ma(n.id,this.serializeUrl(n.extractedUrl),r,i);this.triggerEvent(s),n.resolve(!1)}generateNgRouterState(n,r){return"computed"===this.canceledNavigationResolution?{navigationId:n,\u0275routerPageId:r}:{navigationId:n}}}return t.\u0275fac=function(n){Vu()},t.\u0275prov=V({token:t,factory:function(){return B_()},providedIn:"root"}),t})();function U_(t){return"imperative"!==t}class H_{}let sO=(()=>{class t{constructor(n,r,i,s,o){this.router=n,this.injector=i,this.preloadingStrategy=s,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(Ln(n=>n instanceof hr),ur(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(n,r){const i=[];for(const s of r){s.providers&&!s._injector&&(s._injector=Go(s.providers,n,`Route: ${s.path}`));const o=s._injector??n,a=s._loadedInjector??o;s.loadChildren&&!s._loadedRoutes&&void 0===s.canLoad||s.loadComponent&&!s._loadedComponent?i.push(this.preloadConfig(o,s)):(s.children||s._loadedRoutes)&&i.push(this.processRoutes(a,s.children??s._loadedRoutes))}return ve(i).pipe(Dr())}preloadConfig(n,r){return this.preloadingStrategy.preload(r,()=>{let i;i=r.loadChildren&&void 0===r.canLoad?this.loader.loadChildren(n,r):A(null);const s=i.pipe(Pe(o=>null===o?A(void 0):(r._loadedRoutes=o.routes,r._loadedInjector=o.injector,this.processRoutes(o.injector??n,o.routes))));return r.loadComponent&&!r._loadedComponent?ve([s,this.loader.loadComponent(r)]).pipe(Dr()):s})}}return t.\u0275fac=function(n){return new(n||t)(I(Fe),I(jc),I(Rn),I(H_),I(Yd))},t.\u0275prov=V({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const ef=new O("");let z_=(()=>{class t{constructor(n,r,i={}){this.router=n,this.viewportScroller=r,this.options=i,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},i.scrollPositionRestoration=i.scrollPositionRestoration||"disabled",i.anchorScrolling=i.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(n=>{n instanceof Od?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=n.navigationTrigger,this.restoredId=n.restoredState?n.restoredState.navigationId:0):n instanceof hr&&(this.lastId=n.id,this.scheduleScrollEvent(n,this.router.parseUrl(n.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(n=>{n instanceof d_&&(n.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(n.position):n.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(n.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(n,r){this.router.triggerEvent(new d_(n,"popstate"===this.lastSource?this.store[this.restoredId]:null,r))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return t.\u0275fac=function(n){Vu()},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();function hi(t,e){return{\u0275kind:t,\u0275providers:e}}function tf(t){return[{provide:Zd,multi:!0,useValue:t}]}function G_(){const t=pe(xt);return e=>{const n=t.get(ds);if(e!==n.components[0])return;const r=t.get(Fe),i=t.get(W_);1===t.get(nf)&&r.initialNavigation(),t.get(Q_,null,N.Optional)?.setUpPreloading(),t.get(ef,null,N.Optional)?.init(),r.resetRootComponentType(n.componentTypes[0]),i.closed||(i.next(),i.unsubscribe())}}const W_=new O("",{factory:()=>new Ht}),nf=new O("",{providedIn:"root",factory:()=>1});const Q_=new O("");function uO(t){return hi(0,[{provide:Q_,useExisting:sO},{provide:H_,useExisting:t}])}const K_=new O("ROUTER_FORROOT_GUARD"),cO=[nd,{provide:e_,useClass:Ad},{provide:Fe,useFactory:B_},Is,{provide:pr,useFactory:function q_(t){return t.routerState.root},deps:[Fe]},Yd];function dO(){return new Tv("Router",Fe)}let Z_=(()=>{class t{constructor(n){}static forRoot(n,r){return{ngModule:t,providers:[cO,[],tf(n),{provide:K_,useFactory:gO,deps:[[Fe,new $i,new ji]]},{provide:Va,useValue:r||{}},r?.useHash?{provide:lr,useClass:uR}:{provide:lr,useClass:Xv},{provide:ef,useFactory:()=>{const t=pe(Fe),e=pe(PN),n=pe(Va);return n.scrollOffset&&e.setOffset(n.scrollOffset),new z_(t,e,n)}},r?.preloadingStrategy?uO(r.preloadingStrategy).\u0275providers:[],{provide:Tv,multi:!0,useFactory:dO},r?.initialNavigation?mO(r):[],[{provide:Y_,useFactory:G_},{provide:Dv,multi:!0,useExisting:Y_}]]}}static forChild(n){return{ngModule:t,providers:[tf(n)]}}}return t.\u0275fac=function(n){return new(n||t)(I(K_,8))},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({imports:[Hd]}),t})();function gO(t){return"guarded"}function mO(t){return["disabled"===t.initialNavigation?hi(3,[{provide:Zo,multi:!0,useFactory:()=>{const e=pe(Fe);return()=>{e.setUpLocationChangeListener()}}},{provide:nf,useValue:2}]).\u0275providers:[],"enabledBlocking"===t.initialNavigation?hi(2,[{provide:nf,useValue:0},{provide:Zo,multi:!0,deps:[xt],useFactory:e=>{const n=e.get(aR,Promise.resolve());let r=!1;return()=>n.then(()=>new Promise(s=>{const o=e.get(Fe),a=e.get(W_);(function i(s){e.get(Fe).events.pipe(Ln(a=>a instanceof hr||a instanceof Ma||a instanceof c_),K(a=>a instanceof hr||a instanceof Ma&&(0===a.code||1===a.code)&&null),Ln(a=>null!==a),_r(1)).subscribe(()=>{s()})})(()=>{s(!0),r=!0}),o.afterPreactivation=()=>(s(!0),r||a.closed?A(void 0):a),o.initialNavigation()}))}}]).\u0275providers:[]]}const Y_=new O("");let X_=(()=>{class t{constructor(){}ngOnInit(){}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=Ei({type:t,selectors:[["app-packages"]],decls:2,vars:0,template:function(n,r){1&n&&(ko(0,"p"),function Om(t,e=""){const n=D(),r=Q(),i=t+22,s=r.firstCreatePass?zr(r,i,1,e,null):r.data[i],o=n[i]=function au(t,e){return t.createText(e)}(n[B],e);go(r,n,o,s),zt(s,!1)}(1,"packages works!"),Lo())}}),t})();const vO=[{path:"",component:X_},{path:"**",component:X_}];let DO=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({imports:[Z_.forRoot(vO),Z_]}),t})(),_O=(()=>{class t{constructor(){this.title="ui"}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=Ei({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(n,r){1&n&&Vo(0,"router-outlet")},dependencies:[Ud]}),t})();class J_{}const wn="*";function ew(t,e=null){return{type:2,steps:t,options:e}}function tw(t){return{type:6,styles:t,offset:null}}function nw(t){Promise.resolve().then(t)}class Ps{constructor(e=0,n=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=e+n}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){nw(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){const n="start"==e?this._onStartFns:this._onDoneFns;n.forEach(r=>r()),n.length=0}}class rw{constructor(e){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;let n=0,r=0,i=0;const s=this.players.length;0==s?nw(()=>this._onFinish()):this.players.forEach(o=>{o.onDone(()=>{++n==s&&this._onFinish()}),o.onDestroy(()=>{++r==s&&this._onDestroy()}),o.onStart(()=>{++i==s&&this._onStart()})}),this.totalTime=this.players.reduce((o,a)=>Math.max(o,a.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){const n=e*this.totalTime;this.players.forEach(r=>{const i=r.totalTime?Math.min(1,n/r.totalTime):1;r.setPosition(i)})}getPosition(){const e=this.players.reduce((n,r)=>null===n||r.totalTime>n.totalTime?r:n,null);return null!=e?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){const n="start"==e?this._onStartFns:this._onDoneFns;n.forEach(r=>r()),n.length=0}}function iw(t){return new _(3e3,!1)}function n1(){return typeof window<"u"&&typeof window.document<"u"}function sf(){return typeof process<"u"&&"[object process]"==={}.toString.call(process)}function Bn(t){switch(t.length){case 0:return new Ps;case 1:return t[0];default:return new rw(t)}}function sw(t,e,n,r,i=new Map,s=new Map){const o=[],a=[];let l=-1,u=null;if(r.forEach(c=>{const d=c.get("offset"),f=d==l,h=f&&u||new Map;c.forEach((p,g)=>{let m=g,v=p;if("offset"!==g)switch(m=e.normalizePropertyName(m,o),v){case"!":v=i.get(g);break;case wn:v=s.get(g);break;default:v=e.normalizeStyleValue(g,m,v,o)}h.set(m,v)}),f||a.push(h),u=h,l=d}),o.length)throw function zO(t){return new _(3502,!1)}();return a}function af(t,e,n,r){switch(e){case"start":t.onStart(()=>r(n&&lf(n,"start",t)));break;case"done":t.onDone(()=>r(n&&lf(n,"done",t)));break;case"destroy":t.onDestroy(()=>r(n&&lf(n,"destroy",t)))}}function lf(t,e,n){const s=uf(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,n.totalTime??t.totalTime,!!n.disabled),o=t._data;return null!=o&&(s._data=o),s}function uf(t,e,n,r,i="",s=0,o){return{element:t,triggerName:e,fromState:n,toState:r,phaseName:i,totalTime:s,disabled:!!o}}function ct(t,e,n){let r=t.get(e);return r||t.set(e,r=n),r}function ow(t){const e=t.indexOf(":");return[t.substring(1,e),t.slice(e+1)]}let cf=(t,e)=>!1,aw=(t,e,n)=>[],lw=null;function df(t){const e=t.parentNode||t.host;return e===lw?null:e}(sf()||typeof Element<"u")&&(n1()?(lw=(()=>document.documentElement)(),cf=(t,e)=>{for(;e;){if(e===t)return!0;e=df(e)}return!1}):cf=(t,e)=>t.contains(e),aw=(t,e,n)=>{if(n)return Array.from(t.querySelectorAll(e));const r=t.querySelector(e);return r?[r]:[]});let gr=null,uw=!1;const cw=cf,dw=aw;let fw=(()=>{class t{validateStyleProperty(n){return function i1(t){gr||(gr=function s1(){return typeof document<"u"?document.body:null}()||{},uw=!!gr.style&&"WebkitAppearance"in gr.style);let e=!0;return gr.style&&!function r1(t){return"ebkit"==t.substring(1,6)}(t)&&(e=t in gr.style,!e&&uw&&(e="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in gr.style)),e}(n)}matchesElement(n,r){return!1}containsElement(n,r){return cw(n,r)}getParentElement(n){return df(n)}query(n,r,i){return dw(n,r,i)}computeStyle(n,r,i){return i||""}animate(n,r,i,s,o,a=[],l){return new Ps(i,s)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})(),ff=(()=>{class t{}return t.NOOP=new fw,t})();const hf="ng-enter",Ua="ng-leave",Ha="ng-trigger",za=".ng-trigger",pw="ng-animating",pf=".ng-animating";function En(t){if("number"==typeof t)return t;const e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:gf(parseFloat(e[1]),e[2])}function gf(t,e){return"s"===e?1e3*t:t}function qa(t,e,n){return t.hasOwnProperty("duration")?t:function l1(t,e,n){let i,s=0,o="";if("string"==typeof t){const a=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===a)return e.push(iw()),{duration:0,delay:0,easing:""};i=gf(parseFloat(a[1]),a[2]);const l=a[3];null!=l&&(s=gf(parseFloat(l),a[4]));const u=a[5];u&&(o=u)}else i=t;if(!n){let a=!1,l=e.length;i<0&&(e.push(function EO(){return new _(3100,!1)}()),a=!0),s<0&&(e.push(function CO(){return new _(3101,!1)}()),a=!0),a&&e.splice(l,0,iw())}return{duration:i,delay:s,easing:o}}(t,e,n)}function xs(t,e={}){return Object.keys(t).forEach(n=>{e[n]=t[n]}),e}function gw(t){const e=new Map;return Object.keys(t).forEach(n=>{e.set(n,t[n])}),e}function Un(t,e=new Map,n){if(n)for(let[r,i]of n)e.set(r,i);for(let[r,i]of t)e.set(r,i);return e}function yw(t,e,n){return n?e+":"+n+";":""}function vw(t){let e="";for(let n=0;n{const s=yf(i);n&&!n.has(i)&&n.set(i,t.style[s]),t.style[s]=r}),sf()&&vw(t))}function mr(t,e){t.style&&(e.forEach((n,r)=>{const i=yf(r);t.style[i]=""}),sf()&&vw(t))}function Fs(t){return Array.isArray(t)?1==t.length?t[0]:ew(t):t}const mf=new RegExp("{{\\s*(.+?)\\s*}}","g");function Dw(t){let e=[];if("string"==typeof t){let n;for(;n=mf.exec(t);)e.push(n[1]);mf.lastIndex=0}return e}function Os(t,e,n){const r=t.toString(),i=r.replace(mf,(s,o)=>{let a=e[o];return null==a&&(n.push(function bO(t){return new _(3003,!1)}()),a=""),a.toString()});return i==r?t:i}function Ga(t){const e=[];let n=t.next();for(;!n.done;)e.push(n.value),n=t.next();return e}const d1=/-+([a-z0-9])/g;function yf(t){return t.replace(d1,(...e)=>e[1].toUpperCase())}function f1(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function dt(t,e,n){switch(e.type){case 7:return t.visitTrigger(e,n);case 0:return t.visitState(e,n);case 1:return t.visitTransition(e,n);case 2:return t.visitSequence(e,n);case 3:return t.visitGroup(e,n);case 4:return t.visitAnimate(e,n);case 5:return t.visitKeyframes(e,n);case 6:return t.visitStyle(e,n);case 8:return t.visitReference(e,n);case 9:return t.visitAnimateChild(e,n);case 10:return t.visitAnimateRef(e,n);case 11:return t.visitQuery(e,n);case 12:return t.visitStagger(e,n);default:throw function IO(t){return new _(3004,!1)}()}}function _w(t,e){return window.getComputedStyle(t)[e]}function v1(t,e){const n=[];return"string"==typeof t?t.split(/\s*,\s*/).forEach(r=>function D1(t,e,n){if(":"==t[0]){const l=function _1(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(n,r)=>parseFloat(r)>parseFloat(n);case":decrement":return(n,r)=>parseFloat(r) *"}}(t,n);if("function"==typeof l)return void e.push(l);t=l}const r=t.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==r||r.length<4)return n.push(function $O(t){return new _(3015,!1)}()),e;const i=r[1],s=r[2],o=r[3];e.push(ww(i,o));"<"==s[0]&&!("*"==i&&"*"==o)&&e.push(ww(o,i))}(r,n,e)):n.push(t),n}const Za=new Set(["true","1"]),Ya=new Set(["false","0"]);function ww(t,e){const n=Za.has(t)||Ya.has(t),r=Za.has(e)||Ya.has(e);return(i,s)=>{let o="*"==t||t==i,a="*"==e||e==s;return!o&&n&&"boolean"==typeof i&&(o=i?Za.has(t):Ya.has(t)),!a&&r&&"boolean"==typeof s&&(a=s?Za.has(e):Ya.has(e)),o&&a}}const w1=new RegExp("s*:selfs*,?","g");function vf(t,e,n,r){return new E1(t).build(e,n,r)}class E1{constructor(e){this._driver=e}build(e,n,r){const i=new b1(n);return this._resetContextStyleTimingState(i),dt(this,Fs(e),i)}_resetContextStyleTimingState(e){e.currentQuerySelector="",e.collectedStyles=new Map,e.collectedStyles.set("",new Map),e.currentTime=0}visitTrigger(e,n){let r=n.queryCount=0,i=n.depCount=0;const s=[],o=[];return"@"==e.name.charAt(0)&&n.errors.push(function MO(){return new _(3006,!1)}()),e.definitions.forEach(a=>{if(this._resetContextStyleTimingState(n),0==a.type){const l=a,u=l.name;u.toString().split(/\s*,\s*/).forEach(c=>{l.name=c,s.push(this.visitState(l,n))}),l.name=u}else if(1==a.type){const l=this.visitTransition(a,n);r+=l.queryCount,i+=l.depCount,o.push(l)}else n.errors.push(function AO(){return new _(3007,!1)}())}),{type:7,name:e.name,states:s,transitions:o,queryCount:r,depCount:i,options:null}}visitState(e,n){const r=this.visitStyle(e.styles,n),i=e.options&&e.options.params||null;if(r.containsDynamicStyles){const s=new Set,o=i||{};r.styles.forEach(a=>{a instanceof Map&&a.forEach(l=>{Dw(l).forEach(u=>{o.hasOwnProperty(u)||s.add(u)})})}),s.size&&(Ga(s.values()),n.errors.push(function RO(t,e){return new _(3008,!1)}()))}return{type:0,name:e.name,style:r,options:i?{params:i}:null}}visitTransition(e,n){n.queryCount=0,n.depCount=0;const r=dt(this,Fs(e.animation),n);return{type:1,matchers:v1(e.expr,n.errors),animation:r,queryCount:n.queryCount,depCount:n.depCount,options:yr(e.options)}}visitSequence(e,n){return{type:2,steps:e.steps.map(r=>dt(this,r,n)),options:yr(e.options)}}visitGroup(e,n){const r=n.currentTime;let i=0;const s=e.steps.map(o=>{n.currentTime=r;const a=dt(this,o,n);return i=Math.max(i,n.currentTime),a});return n.currentTime=i,{type:3,steps:s,options:yr(e.options)}}visitAnimate(e,n){const r=function T1(t,e){if(t.hasOwnProperty("duration"))return t;if("number"==typeof t)return Df(qa(t,e).duration,0,"");const n=t;if(n.split(/\s+/).some(s=>"{"==s.charAt(0)&&"{"==s.charAt(1))){const s=Df(0,0,"");return s.dynamic=!0,s.strValue=n,s}const i=qa(n,e);return Df(i.duration,i.delay,i.easing)}(e.timings,n.errors);n.currentAnimateTimings=r;let i,s=e.styles?e.styles:tw({});if(5==s.type)i=this.visitKeyframes(s,n);else{let o=e.styles,a=!1;if(!o){a=!0;const u={};r.easing&&(u.easing=r.easing),o=tw(u)}n.currentTime+=r.duration+r.delay;const l=this.visitStyle(o,n);l.isEmptyStep=a,i=l}return n.currentAnimateTimings=null,{type:4,timings:r,style:i,options:null}}visitStyle(e,n){const r=this._makeStyleAst(e,n);return this._validateStyleAst(r,n),r}_makeStyleAst(e,n){const r=[],i=Array.isArray(e.styles)?e.styles:[e.styles];for(let a of i)"string"==typeof a?a===wn?r.push(a):n.errors.push(new _(3002,!1)):r.push(gw(a));let s=!1,o=null;return r.forEach(a=>{if(a instanceof Map&&(a.has("easing")&&(o=a.get("easing"),a.delete("easing")),!s))for(let l of a.values())if(l.toString().indexOf("{{")>=0){s=!0;break}}),{type:6,styles:r,easing:o,offset:e.offset,containsDynamicStyles:s,options:null}}_validateStyleAst(e,n){const r=n.currentAnimateTimings;let i=n.currentTime,s=n.currentTime;r&&s>0&&(s-=r.duration+r.delay),e.styles.forEach(o=>{"string"!=typeof o&&o.forEach((a,l)=>{const u=n.collectedStyles.get(n.currentQuerySelector),c=u.get(l);let d=!0;c&&(s!=i&&s>=c.startTime&&i<=c.endTime&&(n.errors.push(function PO(t,e,n,r,i){return new _(3010,!1)}()),d=!1),s=c.startTime),d&&u.set(l,{startTime:s,endTime:i}),n.options&&function c1(t,e,n){const r=e.params||{},i=Dw(t);i.length&&i.forEach(s=>{r.hasOwnProperty(s)||n.push(function SO(t){return new _(3001,!1)}())})}(a,n.options,n.errors)})})}visitKeyframes(e,n){const r={type:5,styles:[],options:null};if(!n.currentAnimateTimings)return n.errors.push(function xO(){return new _(3011,!1)}()),r;let s=0;const o=[];let a=!1,l=!1,u=0;const c=e.steps.map(v=>{const w=this._makeStyleAst(v,n);let y=null!=w.offset?w.offset:function I1(t){if("string"==typeof t)return null;let e=null;if(Array.isArray(t))t.forEach(n=>{if(n instanceof Map&&n.has("offset")){const r=n;e=parseFloat(r.get("offset")),r.delete("offset")}});else if(t instanceof Map&&t.has("offset")){const n=t;e=parseFloat(n.get("offset")),n.delete("offset")}return e}(w.styles),S=0;return null!=y&&(s++,S=w.offset=y),l=l||S<0||S>1,a=a||S0&&s{const y=f>0?w==h?1:f*w:o[w],S=y*m;n.currentTime=p+g.delay+S,g.duration=S,this._validateStyleAst(v,n),v.offset=y,r.styles.push(v)}),r}visitReference(e,n){return{type:8,animation:dt(this,Fs(e.animation),n),options:yr(e.options)}}visitAnimateChild(e,n){return n.depCount++,{type:9,options:yr(e.options)}}visitAnimateRef(e,n){return{type:10,animation:this.visitReference(e.animation,n),options:yr(e.options)}}visitQuery(e,n){const r=n.currentQuerySelector,i=e.options||{};n.queryCount++,n.currentQuery=e;const[s,o]=function C1(t){const e=!!t.split(/\s*,\s*/).find(n=>":self"==n);return e&&(t=t.replace(w1,"")),t=t.replace(/@\*/g,za).replace(/@\w+/g,n=>za+"-"+n.slice(1)).replace(/:animating/g,pf),[t,e]}(e.selector);n.currentQuerySelector=r.length?r+" "+s:s,ct(n.collectedStyles,n.currentQuerySelector,new Map);const a=dt(this,Fs(e.animation),n);return n.currentQuery=null,n.currentQuerySelector=r,{type:11,selector:s,limit:i.limit||0,optional:!!i.optional,includeSelf:o,animation:a,originalSelector:e.selector,options:yr(e.options)}}visitStagger(e,n){n.currentQuery||n.errors.push(function LO(){return new _(3013,!1)}());const r="full"===e.timings?{duration:0,delay:0,easing:"full"}:qa(e.timings,n.errors,!0);return{type:12,animation:dt(this,Fs(e.animation),n),timings:r,options:null}}}class b1{constructor(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function yr(t){return t?(t=xs(t)).params&&(t.params=function S1(t){return t?xs(t):null}(t.params)):t={},t}function Df(t,e,n){return{duration:t,delay:e,easing:n}}function _f(t,e,n,r,i,s,o=null,a=!1){return{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:r,duration:i,delay:s,totalTime:i+s,easing:o,subTimeline:a}}class Xa{constructor(){this._map=new Map}get(e){return this._map.get(e)||[]}append(e,n){let r=this._map.get(e);r||this._map.set(e,r=[]),r.push(...n)}has(e){return this._map.has(e)}clear(){this._map.clear()}}const R1=new RegExp(":enter","g"),P1=new RegExp(":leave","g");function wf(t,e,n,r,i,s=new Map,o=new Map,a,l,u=[]){return(new x1).buildKeyframes(t,e,n,r,i,s,o,a,l,u)}class x1{buildKeyframes(e,n,r,i,s,o,a,l,u,c=[]){u=u||new Xa;const d=new Ef(e,n,u,i,s,c,[]);d.options=l;const f=l.delay?En(l.delay):0;d.currentTimeline.delayNextStep(f),d.currentTimeline.setStyles([o],null,d.errors,l),dt(this,r,d);const h=d.timelines.filter(p=>p.containsAnimation());if(h.length&&a.size){let p;for(let g=h.length-1;g>=0;g--){const m=h[g];if(m.element===n){p=m;break}}p&&!p.allowOnlyTimelineStyles()&&p.setStyles([a],null,d.errors,l)}return h.length?h.map(p=>p.buildKeyframes()):[_f(n,[],[],[],0,f,"",!1)]}visitTrigger(e,n){}visitState(e,n){}visitTransition(e,n){}visitAnimateChild(e,n){const r=n.subInstructions.get(n.element);if(r){const i=n.createSubContext(e.options),s=n.currentTimeline.currentTime,o=this._visitSubInstructions(r,i,i.options);s!=o&&n.transformIntoNewTimeline(o)}n.previousNode=e}visitAnimateRef(e,n){const r=n.createSubContext(e.options);r.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],n,r),this.visitReference(e.animation,r),n.transformIntoNewTimeline(r.currentTimeline.currentTime),n.previousNode=e}_applyAnimationRefDelays(e,n,r){for(const i of e){const s=i?.delay;if(s){const o="number"==typeof s?s:En(Os(s,i?.params??{},n.errors));r.delayNextStep(o)}}}_visitSubInstructions(e,n,r){let s=n.currentTimeline.currentTime;const o=null!=r.duration?En(r.duration):null,a=null!=r.delay?En(r.delay):null;return 0!==o&&e.forEach(l=>{const u=n.appendInstructionToTimeline(l,o,a);s=Math.max(s,u.duration+u.delay)}),s}visitReference(e,n){n.updateOptions(e.options,!0),dt(this,e.animation,n),n.previousNode=e}visitSequence(e,n){const r=n.subContextCount;let i=n;const s=e.options;if(s&&(s.params||s.delay)&&(i=n.createSubContext(s),i.transformIntoNewTimeline(),null!=s.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=Ja);const o=En(s.delay);i.delayNextStep(o)}e.steps.length&&(e.steps.forEach(o=>dt(this,o,i)),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),n.previousNode=e}visitGroup(e,n){const r=[];let i=n.currentTimeline.currentTime;const s=e.options&&e.options.delay?En(e.options.delay):0;e.steps.forEach(o=>{const a=n.createSubContext(e.options);s&&a.delayNextStep(s),dt(this,o,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(o=>n.currentTimeline.mergeTimelineCollectedStyles(o)),n.transformIntoNewTimeline(i),n.previousNode=e}_visitTiming(e,n){if(e.dynamic){const r=e.strValue;return qa(n.params?Os(r,n.params,n.errors):r,n.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,n){const r=n.currentAnimateTimings=this._visitTiming(e.timings,n),i=n.currentTimeline;r.delay&&(n.incrementTime(r.delay),i.snapshotCurrentStyles());const s=e.style;5==s.type?this.visitKeyframes(s,n):(n.incrementTime(r.duration),this.visitStyle(s,n),i.applyStylesToKeyframe()),n.currentAnimateTimings=null,n.previousNode=e}visitStyle(e,n){const r=n.currentTimeline,i=n.currentAnimateTimings;!i&&r.hasCurrentStyleProperties()&&r.forwardFrame();const s=i&&i.easing||e.easing;e.isEmptyStep?r.applyEmptyStep(s):r.setStyles(e.styles,s,n.errors,n.options),n.previousNode=e}visitKeyframes(e,n){const r=n.currentAnimateTimings,i=n.currentTimeline.duration,s=r.duration,a=n.createSubContext().currentTimeline;a.easing=r.easing,e.styles.forEach(l=>{a.forwardTime((l.offset||0)*s),a.setStyles(l.styles,l.easing,n.errors,n.options),a.applyStylesToKeyframe()}),n.currentTimeline.mergeTimelineCollectedStyles(a),n.transformIntoNewTimeline(i+s),n.previousNode=e}visitQuery(e,n){const r=n.currentTimeline.currentTime,i=e.options||{},s=i.delay?En(i.delay):0;s&&(6===n.previousNode.type||0==r&&n.currentTimeline.hasCurrentStyleProperties())&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=Ja);let o=r;const a=n.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,n.errors);n.currentQueryTotal=a.length;let l=null;a.forEach((u,c)=>{n.currentQueryIndex=c;const d=n.createSubContext(e.options,u);s&&d.delayNextStep(s),u===n.element&&(l=d.currentTimeline),dt(this,e.animation,d),d.currentTimeline.applyStylesToKeyframe(),o=Math.max(o,d.currentTimeline.currentTime)}),n.currentQueryIndex=0,n.currentQueryTotal=0,n.transformIntoNewTimeline(o),l&&(n.currentTimeline.mergeTimelineCollectedStyles(l),n.currentTimeline.snapshotCurrentStyles()),n.previousNode=e}visitStagger(e,n){const r=n.parentContext,i=n.currentTimeline,s=e.timings,o=Math.abs(s.duration),a=o*(n.currentQueryTotal-1);let l=o*n.currentQueryIndex;switch(s.duration<0?"reverse":s.easing){case"reverse":l=a-l;break;case"full":l=r.currentStaggerTime}const c=n.currentTimeline;l&&c.delayNextStep(l);const d=c.currentTime;dt(this,e.animation,n),n.previousNode=e,r.currentStaggerTime=i.currentTime-d+(i.startTime-r.currentTimeline.startTime)}}const Ja={};class Ef{constructor(e,n,r,i,s,o,a,l){this._driver=e,this.element=n,this.subInstructions=r,this._enterClassName=i,this._leaveClassName=s,this.errors=o,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=Ja,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=l||new el(this._driver,n,0),a.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,n){if(!e)return;const r=e;let i=this.options;null!=r.duration&&(i.duration=En(r.duration)),null!=r.delay&&(i.delay=En(r.delay));const s=r.params;if(s){let o=i.params;o||(o=this.options.params={}),Object.keys(s).forEach(a=>{(!n||!o.hasOwnProperty(a))&&(o[a]=Os(s[a],o,this.errors))})}}_copyOptions(){const e={};if(this.options){const n=this.options.params;if(n){const r=e.params={};Object.keys(n).forEach(i=>{r[i]=n[i]})}}return e}createSubContext(e=null,n,r){const i=n||this.element,s=new Ef(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,r||0));return s.previousNode=this.previousNode,s.currentAnimateTimings=this.currentAnimateTimings,s.options=this._copyOptions(),s.updateOptions(e),s.currentQueryIndex=this.currentQueryIndex,s.currentQueryTotal=this.currentQueryTotal,s.parentContext=this,this.subContextCount++,s}transformIntoNewTimeline(e){return this.previousNode=Ja,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,n,r){const i={duration:n??e.duration,delay:this.currentTimeline.currentTime+(r??0)+e.delay,easing:""},s=new F1(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,i,e.stretchStartingKeyframe);return this.timelines.push(s),i}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,n,r,i,s,o){let a=[];if(i&&a.push(this.element),e.length>0){e=(e=e.replace(R1,"."+this._enterClassName)).replace(P1,"."+this._leaveClassName);let u=this._driver.query(this.element,e,1!=r);0!==r&&(u=r<0?u.slice(u.length+r,u.length):u.slice(0,r)),a.push(...u)}return!s&&0==a.length&&o.push(function VO(t){return new _(3014,!1)}()),a}}class el{constructor(e,n,r,i){this._driver=e,this.element=n,this.startTime=r,this._elementTimelineStylesLookup=i,this.duration=0,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(n),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(n,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){const n=1===this._keyframes.size&&this._pendingStyles.size;this.duration||n?(this.forwardTime(this.currentTime+e),n&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,n){return this.applyStylesToKeyframe(),new el(this._driver,e,n||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,n){this._localTimelineStyles.set(e,n),this._globalTimelineStyles.set(e,n),this._styleSummary.set(e,{time:this.currentTime,value:n})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[n,r]of this._globalTimelineStyles)this._backFill.set(n,r||wn),this._currentKeyframe.set(n,wn);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,n,r,i){n&&this._previousKeyframe.set("easing",n);const s=i&&i.params||{},o=function O1(t,e){const n=new Map;let r;return t.forEach(i=>{if("*"===i){r=r||e.keys();for(let s of r)n.set(s,wn)}else Un(i,n)}),n}(e,this._globalTimelineStyles);for(let[a,l]of o){const u=Os(l,s,r);this._pendingStyles.set(a,u),this._localTimelineStyles.has(a)||this._backFill.set(a,this._globalTimelineStyles.get(a)??wn),this._updateStyle(a,u)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((e,n)=>{this._currentKeyframe.set(n,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,n)=>{this._currentKeyframe.has(n)||this._currentKeyframe.set(n,e)}))}snapshotCurrentStyles(){for(let[e,n]of this._localTimelineStyles)this._pendingStyles.set(e,n),this._updateStyle(e,n)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const e=[];for(let n in this._currentKeyframe)e.push(n);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((n,r)=>{const i=this._styleSummary.get(r);(!i||n.time>i.time)&&this._updateStyle(r,n.value)})}buildKeyframes(){this.applyStylesToKeyframe();const e=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration;let i=[];this._keyframes.forEach((a,l)=>{const u=Un(a,new Map,this._backFill);u.forEach((c,d)=>{"!"===c?e.add(d):c===wn&&n.add(d)}),r||u.set("offset",l/this.duration),i.push(u)});const s=e.size?Ga(e.values()):[],o=n.size?Ga(n.values()):[];if(r){const a=i[0],l=new Map(a);a.set("offset",0),l.set("offset",1),i=[a,l]}return _f(this.element,i,s,o,this.duration,this.startTime,this.easing,!1)}}class F1 extends el{constructor(e,n,r,i,s,o,a=!1){super(e,n,o.delay),this.keyframes=r,this.preStyleProps=i,this.postStyleProps=s,this._stretchStartingKeyframe=a,this.timings={duration:o.duration,delay:o.delay,easing:o.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:n,duration:r,easing:i}=this.timings;if(this._stretchStartingKeyframe&&n){const s=[],o=r+n,a=n/o,l=Un(e[0]);l.set("offset",0),s.push(l);const u=Un(e[0]);u.set("offset",Sw(a)),s.push(u);const c=e.length-1;for(let d=1;d<=c;d++){let f=Un(e[d]);const h=f.get("offset");f.set("offset",Sw((n+h*r)/o)),s.push(f)}r=o,n=0,i="",e=s}return _f(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)}}function Sw(t,e=3){const n=Math.pow(10,e-1);return Math.round(t*n)/n}class Cf{}const k1=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class L1 extends Cf{normalizePropertyName(e,n){return yf(e)}normalizeStyleValue(e,n,r,i){let s="";const o=r.toString().trim();if(k1.has(n)&&0!==r&&"0"!==r)if("number"==typeof r)s="px";else{const a=r.match(/^[+-]?[\d\.]+([a-z]*)$/);a&&0==a[1].length&&i.push(function TO(t,e){return new _(3005,!1)}())}return o+s}}function bw(t,e,n,r,i,s,o,a,l,u,c,d,f){return{type:0,element:t,triggerName:e,isRemovalTransition:i,fromState:n,fromStyles:s,toState:r,toStyles:o,timelines:a,queriedElements:l,preStyleProps:u,postStyleProps:c,totalTime:d,errors:f}}const Sf={};class Iw{constructor(e,n,r){this._triggerName=e,this.ast=n,this._stateStyles=r}match(e,n,r,i){return function V1(t,e,n,r,i){return t.some(s=>s(e,n,r,i))}(this.ast.matchers,e,n,r,i)}buildStyles(e,n,r){let i=this._stateStyles.get("*");return void 0!==e&&(i=this._stateStyles.get(e?.toString())||i),i?i.buildStyles(n,r):new Map}build(e,n,r,i,s,o,a,l,u,c){const d=[],f=this.ast.options&&this.ast.options.params||Sf,p=this.buildStyles(r,a&&a.params||Sf,d),g=l&&l.params||Sf,m=this.buildStyles(i,g,d),v=new Set,w=new Map,y=new Map,S="void"===i,H={params:$1(g,f),delay:this.ast.options?.delay},W=c?[]:wf(e,n,this.ast.animation,s,o,p,m,H,u,d);let ce=0;if(W.forEach(ht=>{ce=Math.max(ht.duration+ht.delay,ce)}),d.length)return bw(n,this._triggerName,r,i,S,p,m,[],[],w,y,ce,d);W.forEach(ht=>{const pt=ht.element,gi=ct(w,pt,new Set);ht.preStyleProps.forEach(Ut=>gi.add(Ut));const Cn=ct(y,pt,new Set);ht.postStyleProps.forEach(Ut=>Cn.add(Ut)),pt!==n&&v.add(pt)});const ft=Ga(v.values());return bw(n,this._triggerName,r,i,S,p,m,W,ft,w,y,ce)}}function $1(t,e){const n=xs(e);for(const r in t)t.hasOwnProperty(r)&&null!=t[r]&&(n[r]=t[r]);return n}class j1{constructor(e,n,r){this.styles=e,this.defaultParams=n,this.normalizer=r}buildStyles(e,n){const r=new Map,i=xs(this.defaultParams);return Object.keys(e).forEach(s=>{const o=e[s];null!==o&&(i[s]=o)}),this.styles.styles.forEach(s=>{"string"!=typeof s&&s.forEach((o,a)=>{o&&(o=Os(o,i,n));const l=this.normalizer.normalizePropertyName(a,n);o=this.normalizer.normalizeStyleValue(a,l,o,n),r.set(l,o)})}),r}}class U1{constructor(e,n,r){this.name=e,this.ast=n,this._normalizer=r,this.transitionFactories=[],this.states=new Map,n.states.forEach(i=>{this.states.set(i.name,new j1(i.style,i.options&&i.options.params||{},r))}),Tw(this.states,"true","1"),Tw(this.states,"false","0"),n.transitions.forEach(i=>{this.transitionFactories.push(new Iw(e,i,this.states))}),this.fallbackTransition=function H1(t,e,n){return new Iw(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[(o,a)=>!0],options:null,queryCount:0,depCount:0},e)}(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,n,r,i){return this.transitionFactories.find(o=>o.match(e,n,r,i))||null}matchStyles(e,n,r){return this.fallbackTransition.buildStyles(e,n,r)}}function Tw(t,e,n){t.has(e)?t.has(n)||t.set(n,t.get(e)):t.has(n)&&t.set(e,t.get(n))}const z1=new Xa;class q1{constructor(e,n,r){this.bodyNode=e,this._driver=n,this._normalizer=r,this._animations=new Map,this._playersById=new Map,this.players=[]}register(e,n){const r=[],s=vf(this._driver,n,r,[]);if(r.length)throw function qO(t){return new _(3503,!1)}();this._animations.set(e,s)}_buildPlayer(e,n,r){const i=e.element,s=sw(0,this._normalizer,0,e.keyframes,n,r);return this._driver.animate(i,s,e.duration,e.delay,e.easing,[],!0)}create(e,n,r={}){const i=[],s=this._animations.get(e);let o;const a=new Map;if(s?(o=wf(this._driver,n,s,hf,Ua,new Map,new Map,r,z1,i),o.forEach(c=>{const d=ct(a,c.element,new Map);c.postStyleProps.forEach(f=>d.set(f,null))})):(i.push(function GO(){return new _(3300,!1)}()),o=[]),i.length)throw function WO(t){return new _(3504,!1)}();a.forEach((c,d)=>{c.forEach((f,h)=>{c.set(h,this._driver.computeStyle(d,h,wn))})});const u=Bn(o.map(c=>{const d=a.get(c.element);return this._buildPlayer(c,new Map,d)}));return this._playersById.set(e,u),u.onDestroy(()=>this.destroy(e)),this.players.push(u),u}destroy(e){const n=this._getPlayer(e);n.destroy(),this._playersById.delete(e);const r=this.players.indexOf(n);r>=0&&this.players.splice(r,1)}_getPlayer(e){const n=this._playersById.get(e);if(!n)throw function QO(t){return new _(3301,!1)}();return n}listen(e,n,r,i){const s=uf(n,"","","");return af(this._getPlayer(e),r,s,i),()=>{}}command(e,n,r,i){if("register"==r)return void this.register(e,i[0]);if("create"==r)return void this.create(e,n,i[0]||{});const s=this._getPlayer(e);switch(r){case"play":s.play();break;case"pause":s.pause();break;case"reset":s.reset();break;case"restart":s.restart();break;case"finish":s.finish();break;case"init":s.init();break;case"setPosition":s.setPosition(parseFloat(i[0]));break;case"destroy":this.destroy(e)}}}const Mw="ng-animate-queued",bf="ng-animate-disabled",Z1=[],Aw={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Y1={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},St="__ng_removed";class If{constructor(e,n=""){this.namespaceId=n;const r=e&&e.hasOwnProperty("value");if(this.value=function tk(t){return t??null}(r?e.value:e),r){const s=xs(e);delete s.value,this.options=s}else this.options={};this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(e){const n=e.params;if(n){const r=this.options.params;Object.keys(n).forEach(i=>{null==r[i]&&(r[i]=n[i])})}}}const ks="void",Tf=new If(ks);class X1{constructor(e,n,r){this.id=e,this.hostElement=n,this._engine=r,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,bt(n,this._hostClassName)}listen(e,n,r,i){if(!this._triggers.has(n))throw function KO(t,e){return new _(3302,!1)}();if(null==r||0==r.length)throw function ZO(t){return new _(3303,!1)}();if(!function nk(t){return"start"==t||"done"==t}(r))throw function YO(t,e){return new _(3400,!1)}();const s=ct(this._elementListeners,e,[]),o={name:n,phase:r,callback:i};s.push(o);const a=ct(this._engine.statesByElement,e,new Map);return a.has(n)||(bt(e,Ha),bt(e,Ha+"-"+n),a.set(n,Tf)),()=>{this._engine.afterFlush(()=>{const l=s.indexOf(o);l>=0&&s.splice(l,1),this._triggers.has(n)||a.delete(n)})}}register(e,n){return!this._triggers.has(e)&&(this._triggers.set(e,n),!0)}_getTrigger(e){const n=this._triggers.get(e);if(!n)throw function XO(t){return new _(3401,!1)}();return n}trigger(e,n,r,i=!0){const s=this._getTrigger(n),o=new Mf(this.id,n,e);let a=this._engine.statesByElement.get(e);a||(bt(e,Ha),bt(e,Ha+"-"+n),this._engine.statesByElement.set(e,a=new Map));let l=a.get(n);const u=new If(r,this.id);if(!(r&&r.hasOwnProperty("value"))&&l&&u.absorbOptions(l.options),a.set(n,u),l||(l=Tf),u.value!==ks&&l.value===u.value){if(!function sk(t,e){const n=Object.keys(t),r=Object.keys(e);if(n.length!=r.length)return!1;for(let i=0;i{mr(e,m),Xt(e,v)})}return}const f=ct(this._engine.playersByElement,e,[]);f.forEach(g=>{g.namespaceId==this.id&&g.triggerName==n&&g.queued&&g.destroy()});let h=s.matchTransition(l.value,u.value,e,u.params),p=!1;if(!h){if(!i)return;h=s.fallbackTransition,p=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:n,transition:h,fromState:l,toState:u,player:o,isFallbackTransition:p}),p||(bt(e,Mw),o.onStart(()=>{pi(e,Mw)})),o.onDone(()=>{let g=this.players.indexOf(o);g>=0&&this.players.splice(g,1);const m=this._engine.playersByElement.get(e);if(m){let v=m.indexOf(o);v>=0&&m.splice(v,1)}}),this.players.push(o),f.push(o),o}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(n=>n.delete(e)),this._elementListeners.forEach((n,r)=>{this._elementListeners.set(r,n.filter(i=>i.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);const n=this._engine.playersByElement.get(e);n&&(n.forEach(r=>r.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,n){const r=this._engine.driver.query(e,za,!0);r.forEach(i=>{if(i[St])return;const s=this._engine.fetchNamespacesByElement(i);s.size?s.forEach(o=>o.triggerLeaveAnimation(i,n,!1,!0)):this.clearElementCache(i)}),this._engine.afterFlushAnimationsDone(()=>r.forEach(i=>this.clearElementCache(i)))}triggerLeaveAnimation(e,n,r,i){const s=this._engine.statesByElement.get(e),o=new Map;if(s){const a=[];if(s.forEach((l,u)=>{if(o.set(u,l.value),this._triggers.has(u)){const c=this.trigger(e,u,ks,i);c&&a.push(c)}}),a.length)return this._engine.markElementAsRemoved(this.id,e,!0,n,o),r&&Bn(a).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){const n=this._elementListeners.get(e),r=this._engine.statesByElement.get(e);if(n&&r){const i=new Set;n.forEach(s=>{const o=s.name;if(i.has(o))return;i.add(o);const l=this._triggers.get(o).fallbackTransition,u=r.get(o)||Tf,c=new If(ks),d=new Mf(this.id,o,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:o,transition:l,fromState:u,toState:c,player:d,isFallbackTransition:!0})})}}removeNode(e,n){const r=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,n),this.triggerLeaveAnimation(e,n,!0))return;let i=!1;if(r.totalAnimations){const s=r.players.length?r.playersByQueriedElement.get(e):[];if(s&&s.length)i=!0;else{let o=e;for(;o=o.parentNode;)if(r.statesByElement.get(o)){i=!0;break}}}if(this.prepareLeaveAnimationListeners(e),i)r.markElementAsRemoved(this.id,e,!1,n);else{const s=e[St];(!s||s===Aw)&&(r.afterFlush(()=>this.clearElementCache(e)),r.destroyInnerAnimations(e),r._onRemovalComplete(e,n))}}insertNode(e,n){bt(e,this._hostClassName)}drainQueuedTransitions(e){const n=[];return this._queue.forEach(r=>{const i=r.player;if(i.destroyed)return;const s=r.element,o=this._elementListeners.get(s);o&&o.forEach(a=>{if(a.name==r.triggerName){const l=uf(s,r.triggerName,r.fromState.value,r.toState.value);l._data=e,af(r.player,a.phase,l,a.callback)}}),i.markedForDestroy?this._engine.afterFlush(()=>{i.destroy()}):n.push(r)}),this._queue=[],n.sort((r,i)=>{const s=r.transition.ast.depCount,o=i.transition.ast.depCount;return 0==s||0==o?s-o:this._engine.driver.containsElement(r.element,i.element)?1:-1})}destroy(e){this.players.forEach(n=>n.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}elementContainsData(e){let n=!1;return this._elementListeners.has(e)&&(n=!0),n=!!this._queue.find(r=>r.element===e)||n,n}}class J1{constructor(e,n,r){this.bodyNode=e,this.driver=n,this._normalizer=r,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(i,s)=>{}}_onRemovalComplete(e,n){this.onRemovalComplete(e,n)}get queuedPlayers(){const e=[];return this._namespaceList.forEach(n=>{n.players.forEach(r=>{r.queued&&e.push(r)})}),e}createNamespace(e,n){const r=new X1(e,n,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,n)?this._balanceNamespaceList(r,n):(this.newHostElements.set(n,r),this.collectEnterElement(n)),this._namespaceLookup[e]=r}_balanceNamespaceList(e,n){const r=this._namespaceList,i=this.namespacesByHostElement;if(r.length-1>=0){let o=!1,a=this.driver.getParentElement(n);for(;a;){const l=i.get(a);if(l){const u=r.indexOf(l);r.splice(u+1,0,e),o=!0;break}a=this.driver.getParentElement(a)}o||r.unshift(e)}else r.push(e);return i.set(n,e),e}register(e,n){let r=this._namespaceLookup[e];return r||(r=this.createNamespace(e,n)),r}registerTrigger(e,n,r){let i=this._namespaceLookup[e];i&&i.register(n,r)&&this.totalAnimations++}destroy(e,n){if(!e)return;const r=this._fetchNamespace(e);this.afterFlush(()=>{this.namespacesByHostElement.delete(r.hostElement),delete this._namespaceLookup[e];const i=this._namespaceList.indexOf(r);i>=0&&this._namespaceList.splice(i,1)}),this.afterFlushAnimationsDone(()=>r.destroy(n))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){const n=new Set,r=this.statesByElement.get(e);if(r)for(let i of r.values())if(i.namespaceId){const s=this._fetchNamespace(i.namespaceId);s&&n.add(s)}return n}trigger(e,n,r,i){if(tl(n)){const s=this._fetchNamespace(e);if(s)return s.trigger(n,r,i),!0}return!1}insertNode(e,n,r,i){if(!tl(n))return;const s=n[St];if(s&&s.setForRemoval){s.setForRemoval=!1,s.setForMove=!0;const o=this.collectedLeaveElements.indexOf(n);o>=0&&this.collectedLeaveElements.splice(o,1)}if(e){const o=this._fetchNamespace(e);o&&o.insertNode(n,r)}i&&this.collectEnterElement(n)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,n){n?this.disabledNodes.has(e)||(this.disabledNodes.add(e),bt(e,bf)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),pi(e,bf))}removeNode(e,n,r,i){if(tl(n)){const s=e?this._fetchNamespace(e):null;if(s?s.removeNode(n,i):this.markElementAsRemoved(e,n,!1,i),r){const o=this.namespacesByHostElement.get(n);o&&o.id!==e&&o.removeNode(n,i)}}else this._onRemovalComplete(n,i)}markElementAsRemoved(e,n,r,i,s){this.collectedLeaveElements.push(n),n[St]={namespaceId:e,setForRemoval:i,hasAnimation:r,removedBeforeQueried:!1,previousTriggersValues:s}}listen(e,n,r,i,s){return tl(n)?this._fetchNamespace(e).listen(n,r,i,s):()=>{}}_buildInstruction(e,n,r,i,s){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,r,i,e.fromState.options,e.toState.options,n,s)}destroyInnerAnimations(e){let n=this.driver.query(e,za,!0);n.forEach(r=>this.destroyActiveAnimationsForElement(r)),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,pf,!0),n.forEach(r=>this.finishActiveQueriedAnimationOnElement(r)))}destroyActiveAnimationsForElement(e){const n=this.playersByElement.get(e);n&&n.forEach(r=>{r.queued?r.markedForDestroy=!0:r.destroy()})}finishActiveQueriedAnimationOnElement(e){const n=this.playersByQueriedElement.get(e);n&&n.forEach(r=>r.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return Bn(this.players).onDone(()=>e());e()})}processLeaveNode(e){const n=e[St];if(n&&n.setForRemoval){if(e[St]=Aw,n.namespaceId){this.destroyInnerAnimations(e);const r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}e.classList?.contains(bf)&&this.markElementAsDisabled(e,!1),this.driver.query(e,".ng-animate-disabled",!0).forEach(r=>{this.markElementAsDisabled(r,!1)})}flush(e=-1){let n=[];if(this.newHostElements.size&&(this.newHostElements.forEach((r,i)=>this._balanceNamespaceList(r,i)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let r=0;rr()),this._flushFns=[],this._whenQuietFns.length){const r=this._whenQuietFns;this._whenQuietFns=[],n.length?Bn(n).onDone(()=>{r.forEach(i=>i())}):r.forEach(i=>i())}}reportError(e){throw function JO(t){return new _(3402,!1)}()}_flushAnimations(e,n){const r=new Xa,i=[],s=new Map,o=[],a=new Map,l=new Map,u=new Map,c=new Set;this.disabledNodes.forEach(b=>{c.add(b);const M=this.driver.query(b,".ng-animate-queued",!0);for(let x=0;x{const x=hf+g++;p.set(M,x),b.forEach(Z=>bt(Z,x))});const m=[],v=new Set,w=new Set;for(let b=0;bv.add(Z)):w.add(M))}const y=new Map,S=Pw(f,Array.from(v));S.forEach((b,M)=>{const x=Ua+g++;y.set(M,x),b.forEach(Z=>bt(Z,x))}),e.push(()=>{h.forEach((b,M)=>{const x=p.get(M);b.forEach(Z=>pi(Z,x))}),S.forEach((b,M)=>{const x=y.get(M);b.forEach(Z=>pi(Z,x))}),m.forEach(b=>{this.processLeaveNode(b)})});const H=[],W=[];for(let b=this._namespaceList.length-1;b>=0;b--)this._namespaceList[b].drainQueuedTransitions(n).forEach(x=>{const Z=x.player,Ne=x.element;if(H.push(Z),this.collectedEnterElements.length){const Ue=Ne[St];if(Ue&&Ue.setForMove){if(Ue.previousTriggersValues&&Ue.previousTriggersValues.has(x.triggerName)){const vr=Ue.previousTriggersValues.get(x.triggerName),It=this.statesByElement.get(x.element);if(It&&It.has(x.triggerName)){const il=It.get(x.triggerName);il.value=vr,It.set(x.triggerName,il)}}return void Z.destroy()}}const Jt=!d||!this.driver.containsElement(d,Ne),gt=y.get(Ne),Hn=p.get(Ne),de=this._buildInstruction(x,r,Hn,gt,Jt);if(de.errors&&de.errors.length)return void W.push(de);if(Jt)return Z.onStart(()=>mr(Ne,de.fromStyles)),Z.onDestroy(()=>Xt(Ne,de.toStyles)),void i.push(Z);if(x.isFallbackTransition)return Z.onStart(()=>mr(Ne,de.fromStyles)),Z.onDestroy(()=>Xt(Ne,de.toStyles)),void i.push(Z);const Bw=[];de.timelines.forEach(Ue=>{Ue.stretchStartingKeyframe=!0,this.disabledNodes.has(Ue.element)||Bw.push(Ue)}),de.timelines=Bw,r.append(Ne,de.timelines),o.push({instruction:de,player:Z,element:Ne}),de.queriedElements.forEach(Ue=>ct(a,Ue,[]).push(Z)),de.preStyleProps.forEach((Ue,vr)=>{if(Ue.size){let It=l.get(vr);It||l.set(vr,It=new Set),Ue.forEach((il,Nf)=>It.add(Nf))}}),de.postStyleProps.forEach((Ue,vr)=>{let It=u.get(vr);It||u.set(vr,It=new Set),Ue.forEach((il,Nf)=>It.add(Nf))})});if(W.length){const b=[];W.forEach(M=>{b.push(function e1(t,e){return new _(3505,!1)}())}),H.forEach(M=>M.destroy()),this.reportError(b)}const ce=new Map,ft=new Map;o.forEach(b=>{const M=b.element;r.has(M)&&(ft.set(M,M),this._beforeAnimationBuild(b.player.namespaceId,b.instruction,ce))}),i.forEach(b=>{const M=b.element;this._getPreviousPlayers(M,!1,b.namespaceId,b.triggerName,null).forEach(Z=>{ct(ce,M,[]).push(Z),Z.destroy()})});const ht=m.filter(b=>Fw(b,l,u)),pt=new Map;Nw(pt,this.driver,w,u,wn).forEach(b=>{Fw(b,l,u)&&ht.push(b)});const Cn=new Map;h.forEach((b,M)=>{Nw(Cn,this.driver,new Set(b),l,"!")}),ht.forEach(b=>{const M=pt.get(b),x=Cn.get(b);pt.set(b,new Map([...Array.from(M?.entries()??[]),...Array.from(x?.entries()??[])]))});const Ut=[],mi=[],yi={};o.forEach(b=>{const{element:M,player:x,instruction:Z}=b;if(r.has(M)){if(c.has(M))return x.onDestroy(()=>Xt(M,Z.toStyles)),x.disabled=!0,x.overrideTotalTime(Z.totalTime),void i.push(x);let Ne=yi;if(ft.size>1){let gt=M;const Hn=[];for(;gt=gt.parentNode;){const de=ft.get(gt);if(de){Ne=de;break}Hn.push(gt)}Hn.forEach(de=>ft.set(de,Ne))}const Jt=this._buildAnimation(x.namespaceId,Z,ce,s,Cn,pt);if(x.setRealPlayer(Jt),Ne===yi)Ut.push(x);else{const gt=this.playersByElement.get(Ne);gt&>.length&&(x.parentPlayer=Bn(gt)),i.push(x)}}else mr(M,Z.fromStyles),x.onDestroy(()=>Xt(M,Z.toStyles)),mi.push(x),c.has(M)&&i.push(x)}),mi.forEach(b=>{const M=s.get(b.element);if(M&&M.length){const x=Bn(M);b.setRealPlayer(x)}}),i.forEach(b=>{b.parentPlayer?b.syncPlayerEvents(b.parentPlayer):b.destroy()});for(let b=0;b!Jt.destroyed);Ne.length?rk(this,M,Ne):this.processLeaveNode(M)}return m.length=0,Ut.forEach(b=>{this.players.push(b),b.onDone(()=>{b.destroy();const M=this.players.indexOf(b);this.players.splice(M,1)}),b.play()}),Ut}elementContainsData(e,n){let r=!1;const i=n[St];return i&&i.setForRemoval&&(r=!0),this.playersByElement.has(n)&&(r=!0),this.playersByQueriedElement.has(n)&&(r=!0),this.statesByElement.has(n)&&(r=!0),this._fetchNamespace(e).elementContainsData(n)||r}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,n,r,i,s){let o=[];if(n){const a=this.playersByQueriedElement.get(e);a&&(o=a)}else{const a=this.playersByElement.get(e);if(a){const l=!s||s==ks;a.forEach(u=>{u.queued||!l&&u.triggerName!=i||o.push(u)})}}return(r||i)&&(o=o.filter(a=>!(r&&r!=a.namespaceId||i&&i!=a.triggerName))),o}_beforeAnimationBuild(e,n,r){const s=n.element,o=n.isRemovalTransition?void 0:e,a=n.isRemovalTransition?void 0:n.triggerName;for(const l of n.timelines){const u=l.element,c=u!==s,d=ct(r,u,[]);this._getPreviousPlayers(u,c,o,a,n.toState).forEach(h=>{const p=h.getRealPlayer();p.beforeDestroy&&p.beforeDestroy(),h.destroy(),d.push(h)})}mr(s,n.fromStyles)}_buildAnimation(e,n,r,i,s,o){const a=n.triggerName,l=n.element,u=[],c=new Set,d=new Set,f=n.timelines.map(p=>{const g=p.element;c.add(g);const m=g[St];if(m&&m.removedBeforeQueried)return new Ps(p.duration,p.delay);const v=g!==l,w=function ik(t){const e=[];return xw(t,e),e}((r.get(g)||Z1).map(ce=>ce.getRealPlayer())).filter(ce=>!!ce.element&&ce.element===g),y=s.get(g),S=o.get(g),H=sw(0,this._normalizer,0,p.keyframes,y,S),W=this._buildPlayer(p,H,w);if(p.subTimeline&&i&&d.add(g),v){const ce=new Mf(e,a,g);ce.setRealPlayer(W),u.push(ce)}return W});u.forEach(p=>{ct(this.playersByQueriedElement,p.element,[]).push(p),p.onDone(()=>function ek(t,e,n){let r=t.get(e);if(r){if(r.length){const i=r.indexOf(n);r.splice(i,1)}0==r.length&&t.delete(e)}return r}(this.playersByQueriedElement,p.element,p))}),c.forEach(p=>bt(p,pw));const h=Bn(f);return h.onDestroy(()=>{c.forEach(p=>pi(p,pw)),Xt(l,n.toStyles)}),d.forEach(p=>{ct(i,p,[]).push(h)}),h}_buildPlayer(e,n,r){return n.length>0?this.driver.animate(e.element,n,e.duration,e.delay,e.easing,r):new Ps(e.duration,e.delay)}}class Mf{constructor(e,n,r){this.namespaceId=e,this.triggerName=n,this.element=r,this._player=new Ps,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((n,r)=>{n.forEach(i=>af(e,r,void 0,i))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){const n=this._player;n.triggerCallback&&e.onStart(()=>n.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,n){ct(this._queuedCallbacks,e,[]).push(n)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){const n=this._player;n.triggerCallback&&n.triggerCallback(e)}}function tl(t){return t&&1===t.nodeType}function Rw(t,e){const n=t.style.display;return t.style.display=e??"none",n}function Nw(t,e,n,r,i){const s=[];n.forEach(l=>s.push(Rw(l)));const o=[];r.forEach((l,u)=>{const c=new Map;l.forEach(d=>{const f=e.computeStyle(u,d,i);c.set(d,f),(!f||0==f.length)&&(u[St]=Y1,o.push(u))}),t.set(u,c)});let a=0;return n.forEach(l=>Rw(l,s[a++])),o}function Pw(t,e){const n=new Map;if(t.forEach(a=>n.set(a,[])),0==e.length)return n;const i=new Set(e),s=new Map;function o(a){if(!a)return 1;let l=s.get(a);if(l)return l;const u=a.parentNode;return l=n.has(u)?u:i.has(u)?1:o(u),s.set(a,l),l}return e.forEach(a=>{const l=o(a);1!==l&&n.get(l).push(a)}),n}function bt(t,e){t.classList?.add(e)}function pi(t,e){t.classList?.remove(e)}function rk(t,e,n){Bn(n).onDone(()=>t.processLeaveNode(e))}function xw(t,e){for(let n=0;ni.add(s)):e.set(t,r),n.delete(t),!0}class nl{constructor(e,n,r){this.bodyNode=e,this._driver=n,this._normalizer=r,this._triggerCache={},this.onRemovalComplete=(i,s)=>{},this._transitionEngine=new J1(e,n,r),this._timelineEngine=new q1(e,n,r),this._transitionEngine.onRemovalComplete=(i,s)=>this.onRemovalComplete(i,s)}registerTrigger(e,n,r,i,s){const o=e+"-"+i;let a=this._triggerCache[o];if(!a){const l=[],c=vf(this._driver,s,l,[]);if(l.length)throw function HO(t,e){return new _(3404,!1)}();a=function B1(t,e,n){return new U1(t,e,n)}(i,c,this._normalizer),this._triggerCache[o]=a}this._transitionEngine.registerTrigger(n,i,a)}register(e,n){this._transitionEngine.register(e,n)}destroy(e,n){this._transitionEngine.destroy(e,n)}onInsert(e,n,r,i){this._transitionEngine.insertNode(e,n,r,i)}onRemove(e,n,r,i){this._transitionEngine.removeNode(e,n,i||!1,r)}disableAnimations(e,n){this._transitionEngine.markElementAsDisabled(e,n)}process(e,n,r,i){if("@"==r.charAt(0)){const[s,o]=ow(r);this._timelineEngine.command(s,n,o,i)}else this._transitionEngine.trigger(e,n,r,i)}listen(e,n,r,i,s){if("@"==r.charAt(0)){const[o,a]=ow(r);return this._timelineEngine.listen(o,n,a,s)}return this._transitionEngine.listen(e,n,r,i,s)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let ak=(()=>{class t{constructor(n,r,i){this._element=n,this._startStyles=r,this._endStyles=i,this._state=0;let s=t.initialStylesByElement.get(n);s||t.initialStylesByElement.set(n,s=new Map),this._initialStyles=s}start(){this._state<1&&(this._startStyles&&Xt(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Xt(this._element,this._initialStyles),this._endStyles&&(Xt(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(mr(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(mr(this._element,this._endStyles),this._endStyles=null),Xt(this._element,this._initialStyles),this._state=3)}}return t.initialStylesByElement=new WeakMap,t})();function Af(t){let e=null;return t.forEach((n,r)=>{(function lk(t){return"display"===t||"position"===t})(r)&&(e=e||new Map,e.set(r,n))}),e}class Ow{constructor(e,n,r,i){this.element=e,this.keyframes=n,this.options=r,this._specialStyles=i,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=r.duration,this._delay=r.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const e=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,e,this.options),this._finalKeyframe=e.length?e[e.length-1]:new Map,this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(e){const n=[];return e.forEach(r=>{n.push(Object.fromEntries(r))}),n}_triggerWebAnimation(e,n,r){return e.animate(this._convertKeyframesToObject(n),r)}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(e=>e()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=e*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((r,i)=>{"offset"!==i&&e.set(i,this._finished?r:_w(this.element,i))}),this.currentSnapshot=e}triggerCallback(e){const n="start"===e?this._onStartFns:this._onDoneFns;n.forEach(r=>r()),n.length=0}}class uk{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}matchesElement(e,n){return!1}containsElement(e,n){return cw(e,n)}getParentElement(e){return df(e)}query(e,n,r){return dw(e,n,r)}computeStyle(e,n,r){return window.getComputedStyle(e)[n]}animate(e,n,r,i,s,o=[]){const l={duration:r,delay:i,fill:0==i?"both":"forwards"};s&&(l.easing=s);const u=new Map,c=o.filter(h=>h instanceof Ow);(function h1(t,e){return 0===t||0===e})(r,i)&&c.forEach(h=>{h.currentSnapshot.forEach((p,g)=>u.set(g,p))});let d=function u1(t){return t.length?t[0]instanceof Map?t:t.map(e=>gw(e)):[]}(n).map(h=>Un(h));d=function p1(t,e,n){if(n.size&&e.length){let r=e[0],i=[];if(n.forEach((s,o)=>{r.has(o)||i.push(o),r.set(o,s)}),i.length)for(let s=1;so.set(a,_w(t,a)))}}return e}(e,d,u);const f=function ok(t,e){let n=null,r=null;return Array.isArray(e)&&e.length?(n=Af(e[0]),e.length>1&&(r=Af(e[e.length-1]))):e instanceof Map&&(n=Af(e)),n||r?new ak(t,n,r):null}(e,d);return new Ow(e,d,l,f)}}let ck=(()=>{class t extends J_{constructor(n,r){super(),this._nextAnimationId=0,this._renderer=n.createRenderer(r.body,{id:"0",encapsulation:Mt.None,styles:[],data:{animation:[]}})}build(n){const r=this._nextAnimationId.toString();this._nextAnimationId++;const i=Array.isArray(n)?ew(n):n;return kw(this._renderer,null,r,"register",[i]),new dk(r,this._renderer)}}return t.\u0275fac=function(n){return new(n||t)(I(Zi),I(je))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();class dk extends class wO{}{constructor(e,n){super(),this._id=e,this._renderer=n}create(e,n){return new fk(this._id,e,n||{},this._renderer)}}class fk{constructor(e,n,r,i){this.id=e,this.element=n,this._renderer=i,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",r)}_listen(e,n){return this._renderer.listen(this.element,`@@${this.id}:${e}`,n)}_command(e,...n){return kw(this._renderer,this.element,this.id,e,n)}onDone(e){this._listen("done",e)}onStart(e){this._listen("start",e)}onDestroy(e){this._listen("destroy",e)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(e){this._command("setPosition",e)}getPosition(){return this._renderer.engine.players[+this.id]?.getPosition()??0}}function kw(t,e,n,r,i){return t.setProperty(e,`@@${n}:${r}`,i)}const Lw="@.disabled";let hk=(()=>{class t{constructor(n,r,i){this.delegate=n,this.engine=r,this._zone=i,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),r.onRemovalComplete=(s,o)=>{const a=o?.parentNode(s);a&&o.removeChild(a,s)}}createRenderer(n,r){const s=this.delegate.createRenderer(n,r);if(!(n&&r&&r.data&&r.data.animation)){let c=this._rendererCache.get(s);return c||(c=new Vw("",s,this.engine,()=>this._rendererCache.delete(s)),this._rendererCache.set(s,c)),c}const o=r.id,a=r.id+"-"+this._currentId;this._currentId++,this.engine.register(a,n);const l=c=>{Array.isArray(c)?c.forEach(l):this.engine.registerTrigger(o,a,n,c.name,c)};return r.data.animation.forEach(l),new pk(this,a,s,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(n,r,i){n>=0&&nr(i)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(s=>{const[o,a]=s;o(a)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([r,i]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return t.\u0275fac=function(n){return new(n||t)(I(Zi),I(nl),I(ge))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})();class Vw{constructor(e,n,r,i){this.namespaceId=e,this.delegate=n,this.engine=r,this._onDestroy=i,this.destroyNode=this.delegate.destroyNode?s=>n.destroyNode(s):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy(),this._onDestroy?.()}createElement(e,n){return this.delegate.createElement(e,n)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,n){this.delegate.appendChild(e,n),this.engine.onInsert(this.namespaceId,n,e,!1)}insertBefore(e,n,r,i=!0){this.delegate.insertBefore(e,n,r),this.engine.onInsert(this.namespaceId,n,e,i)}removeChild(e,n,r){this.engine.onRemove(this.namespaceId,n,this.delegate,r)}selectRootElement(e,n){return this.delegate.selectRootElement(e,n)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,n,r,i){this.delegate.setAttribute(e,n,r,i)}removeAttribute(e,n,r){this.delegate.removeAttribute(e,n,r)}addClass(e,n){this.delegate.addClass(e,n)}removeClass(e,n){this.delegate.removeClass(e,n)}setStyle(e,n,r,i){this.delegate.setStyle(e,n,r,i)}removeStyle(e,n,r){this.delegate.removeStyle(e,n,r)}setProperty(e,n,r){"@"==n.charAt(0)&&n==Lw?this.disableAnimations(e,!!r):this.delegate.setProperty(e,n,r)}setValue(e,n){this.delegate.setValue(e,n)}listen(e,n,r){return this.delegate.listen(e,n,r)}disableAnimations(e,n){this.engine.disableAnimations(e,n)}}class pk extends Vw{constructor(e,n,r,i,s){super(n,r,i,s),this.factory=e,this.namespaceId=n}setProperty(e,n,r){"@"==n.charAt(0)?"."==n.charAt(1)&&n==Lw?this.disableAnimations(e,r=void 0===r||!!r):this.engine.process(this.namespaceId,e,n.slice(1),r):this.delegate.setProperty(e,n,r)}listen(e,n,r){if("@"==n.charAt(0)){const i=function gk(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(e);let s=n.slice(1),o="";return"@"!=s.charAt(0)&&([s,o]=function mk(t){const e=t.indexOf(".");return[t.substring(0,e),t.slice(e+1)]}(s)),this.engine.listen(this.namespaceId,i,s,o,a=>{this.factory.scheduleListenerCallback(a._data||-1,r,a)})}return this.delegate.listen(e,n,r)}}const $w=[{provide:J_,useClass:ck},{provide:Cf,useFactory:function vk(){return new L1}},{provide:nl,useClass:(()=>{class t extends nl{constructor(n,r,i,s){super(n.body,r,i)}ngOnDestroy(){this.flush()}}return t.\u0275fac=function(n){return new(n||t)(I(je),I(ff),I(Cf),I(ds))},t.\u0275prov=V({token:t,factory:t.\u0275fac}),t})()},{provide:Zi,useFactory:function Dk(t,e,n){return new hk(t,e,n)},deps:[Da,nl,ge]}],Rf=[{provide:ff,useFactory:()=>new uk},{provide:_v,useValue:"BrowserAnimations"},...$w],jw=[{provide:ff,useClass:fw},{provide:_v,useValue:"NoopAnimations"},...$w];let _k=(()=>{class t{static withConfig(n){return{ngModule:t,providers:n.disableAnimations?jw:Rf}}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=bn({type:t}),t.\u0275inj=sn({providers:Rf,imports:[OD]}),t})(),wk=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=bn({type:t,bootstrap:[_O]}),t.\u0275inj=sn({imports:[OD,DO,_k]}),t})();(function jA(){Lv=!1})(),AP().bootstrapModule(wk).catch(t=>console.error(t))}},re=>{re(re.s=727)}]); \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/main.js b/cmd/pkgdash/assets/ui/main.js new file mode 100644 index 0000000..9c3f9c9 --- /dev/null +++ b/cmd/pkgdash/assets/ui/main.js @@ -0,0 +1,2386 @@ +"use strict"; +(self["webpackChunkui"] = self["webpackChunkui"] || []).push([["main"],{ + +/***/ 297: +/*!******************************************!*\ + !*** ./src/app/api/api-configuration.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ApiConfiguration": () => (/* binding */ ApiConfiguration) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); + +/** + * Global configuration + */ +class ApiConfiguration { + constructor() { + this.rootUrl = ''; + } +} +ApiConfiguration.ɵfac = function ApiConfiguration_Factory(t) { return new (t || ApiConfiguration)(); }; +ApiConfiguration.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: ApiConfiguration, factory: ApiConfiguration.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 9809: +/*!***********************************!*\ + !*** ./src/app/api/api.module.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ApiModule": () => (/* binding */ ApiModule) +/* harmony export */ }); +/* harmony import */ var _api_configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./api-configuration */ 297); +/* harmony import */ var _services_pkgdash_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./services/pkgdash.service */ 6309); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common/http */ 8987); +/* tslint:disable */ +/* eslint-disable */ + + + + + +/** + * Module that provides all services and configuration. + */ +class ApiModule { + constructor(parentModule, http) { + if (parentModule) { + throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); + } + if (!http) { + throw new Error('You need to import the HttpClientModule in your AppModule! \n' + + 'See also https://github.com/angular/angular/issues/20575'); + } + } + static forRoot(params) { + return { + ngModule: ApiModule, + providers: [ + { + provide: _api_configuration__WEBPACK_IMPORTED_MODULE_0__.ApiConfiguration, + useValue: params + } + ] + }; + } +} +ApiModule.ɵfac = function ApiModule_Factory(t) { return new (t || ApiModule)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](ApiModule, 12), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_3__.HttpClient, 8)); }; +ApiModule.ɵmod = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({ type: ApiModule }); +ApiModule.ɵinj = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({ providers: [ + _services_pkgdash_service__WEBPACK_IMPORTED_MODULE_1__.PkgdashService, + _api_configuration__WEBPACK_IMPORTED_MODULE_0__.ApiConfiguration + ] }); + + +/***/ }), + +/***/ 1352: +/*!*************************************!*\ + !*** ./src/app/api/base-service.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BaseService": () => (/* binding */ BaseService) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _api_configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./api-configuration */ 297); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common/http */ 8987); + + + +/** + * Base class for services + */ +class BaseService { + constructor(config, http) { + this.config = config; + this.http = http; + this._rootUrl = ''; + } + /** + * Returns the root url for all operations in this service. If not set directly in this + * service, will fallback to `ApiConfiguration.rootUrl`. + */ + get rootUrl() { + return this._rootUrl || this.config.rootUrl; + } + /** + * Sets the root URL for API operations in this service. + */ + set rootUrl(rootUrl) { + this._rootUrl = rootUrl; + } +} +BaseService.ɵfac = function BaseService_Factory(t) { return new (t || BaseService)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_api_configuration__WEBPACK_IMPORTED_MODULE_0__.ApiConfiguration), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_2__.HttpClient)); }; +BaseService.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: BaseService, factory: BaseService.ɵfac }); + + +/***/ }), + +/***/ 188: +/*!*******************************!*\ + !*** ./src/app/api/models.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); + + + +/***/ }), + +/***/ 8637: +/*!****************************************!*\ + !*** ./src/app/api/request-builder.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RequestBuilder": () => (/* binding */ RequestBuilder) +/* harmony export */ }); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/common/http */ 8987); +/* tslint:disable */ +/* eslint-disable */ + +/** + * Custom parameter codec to correctly handle the plus sign in parameter + * values. See https://github.com/angular/angular/issues/18261 + */ +class ParameterCodec { + encodeKey(key) { + return encodeURIComponent(key); + } + encodeValue(value) { + return encodeURIComponent(value); + } + decodeKey(key) { + return decodeURIComponent(key); + } + decodeValue(value) { + return decodeURIComponent(value); + } +} +const ParameterCodecInstance = new ParameterCodec(); +/** + * Base class for a parameter + */ +class Parameter { + constructor(name, value, options, defaultStyle, defaultExplode) { + this.name = name; + this.value = value; + this.options = options; + this.options = options || {}; + if (this.options.style === null || this.options.style === undefined) { + this.options.style = defaultStyle; + } + if (this.options.explode === null || this.options.explode === undefined) { + this.options.explode = defaultExplode; + } + } + serializeValue(value, separator = ',') { + if (value === null || value === undefined) { + return ''; + } + else if (value instanceof Array) { + return value.map(v => this.serializeValue(v).split(separator).join(encodeURIComponent(separator))).join(separator); + } + else if (typeof value === 'object') { + const array = []; + for (const key of Object.keys(value)) { + let propVal = value[key]; + if (propVal !== null && propVal !== undefined) { + propVal = this.serializeValue(propVal).split(separator).join(encodeURIComponent(separator)); + if (this.options.explode) { + array.push(`${key}=${propVal}`); + } + else { + array.push(key); + array.push(propVal); + } + } + } + return array.join(separator); + } + else { + return String(value); + } + } +} +/** + * A parameter in the operation path + */ +class PathParameter extends Parameter { + constructor(name, value, options) { + super(name, value, options, 'simple', false); + } + append(path) { + let value = this.value; + if (value === null || value === undefined) { + value = ''; + } + let prefix = this.options.style === 'label' ? '.' : ''; + let separator = this.options.explode ? prefix === '' ? ',' : prefix : ','; + let alreadySerialized = false; + if (this.options.style === 'matrix') { + // The parameter name is just used as prefix, except in some cases... + prefix = `;${this.name}=`; + if (this.options.explode && typeof value === 'object') { + prefix = ';'; + if (value instanceof Array) { + // For arrays we have to repeat the name for each element + value = value.map(v => `${this.name}=${this.serializeValue(v, ';')}`); + value = value.join(';'); + alreadySerialized = true; + } + else { + // For objects we have to put each the key / value pairs + value = this.serializeValue(value, ';'); + alreadySerialized = true; + } + } + } + value = prefix + (alreadySerialized ? value : this.serializeValue(value, separator)); + // Replace both the plain variable and the corresponding variant taking in the prefix and explode into account + path = path.replace(`{${this.name}}`, value); + path = path.replace(`{${prefix}${this.name}${this.options.explode ? '*' : ''}}`, value); + return path; + } + // @ts-ignore + serializeValue(value, separator = ',') { + var result = typeof value === 'string' ? encodeURIComponent(value) : super.serializeValue(value, separator); + result = result.replace(/%3D/g, '='); + result = result.replace(/%3B/g, ';'); + result = result.replace(/%2C/g, ','); + return result; + } +} +/** + * A parameter in the query + */ +class QueryParameter extends Parameter { + constructor(name, value, options) { + super(name, value, options, 'form', true); + } + append(params) { + if (this.value instanceof Array) { + // Array serialization + if (this.options.explode) { + for (const v of this.value) { + params = params.append(this.name, this.serializeValue(v)); + } + } + else { + const separator = this.options.style === 'spaceDelimited' + ? ' ' : this.options.style === 'pipeDelimited' + ? '|' : ','; + return params.append(this.name, this.serializeValue(this.value, separator)); + } + } + else if (this.value !== null && typeof this.value === 'object') { + // Object serialization + if (this.options.style === 'deepObject') { + // Append a parameter for each key, in the form `name[key]` + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append(`${this.name}[${key}]`, this.serializeValue(propVal)); + } + } + } + else if (this.options.explode) { + // Append a parameter for each key without using the parameter name + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append(key, this.serializeValue(propVal)); + } + } + } + else { + // Append a single parameter whose values are a comma-separated list of key,value,key,value... + const array = []; + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + array.push(key); + array.push(propVal); + } + } + params = params.append(this.name, this.serializeValue(array)); + } + } + else if (this.value !== null && this.value !== undefined) { + // Plain value + params = params.append(this.name, this.serializeValue(this.value)); + } + return params; + } +} +/** + * A parameter in the HTTP request header + */ +class HeaderParameter extends Parameter { + constructor(name, value, options) { + super(name, value, options, 'simple', false); + } + append(headers) { + if (this.value !== null && this.value !== undefined) { + if (this.value instanceof Array) { + for (const v of this.value) { + headers = headers.append(this.name, this.serializeValue(v)); + } + } + else { + headers = headers.append(this.name, this.serializeValue(this.value)); + } + } + return headers; + } +} +/** + * Helper to build http requests from parameters + */ +class RequestBuilder { + constructor(rootUrl, operationPath, method) { + this.rootUrl = rootUrl; + this.operationPath = operationPath; + this.method = method; + this._path = new Map(); + this._query = new Map(); + this._header = new Map(); + } + /** + * Sets a path parameter + */ + path(name, value, options) { + this._path.set(name, new PathParameter(name, value, options || {})); + } + /** + * Sets a query parameter + */ + query(name, value, options) { + this._query.set(name, new QueryParameter(name, value, options || {})); + } + /** + * Sets a header parameter + */ + header(name, value, options) { + this._header.set(name, new HeaderParameter(name, value, options || {})); + } + /** + * Sets the body content, along with the content type + */ + body(value, contentType = 'application/json') { + if (value instanceof Blob) { + this._bodyContentType = value.type; + } + else { + this._bodyContentType = contentType; + } + if (this._bodyContentType === 'application/x-www-form-urlencoded' && value !== null && typeof value === 'object') { + // Handle URL-encoded data + const pairs = []; + for (const key of Object.keys(value)) { + let val = value[key]; + if (!(val instanceof Array)) { + val = [val]; + } + for (const v of val) { + const formValue = this.formDataValue(v); + if (formValue !== null) { + pairs.push([key, formValue]); + } + } + } + this._bodyContent = pairs.map(p => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`).join('&'); + } + else if (this._bodyContentType === 'multipart/form-data') { + // Handle multipart form data + const formData = new FormData(); + if (value !== null && value !== undefined) { + for (const key of Object.keys(value)) { + const val = value[key]; + if (val instanceof Array) { + for (const v of val) { + const toAppend = this.formDataValue(v); + if (toAppend !== null) { + formData.append(key, toAppend); + } + } + } + else { + const toAppend = this.formDataValue(val); + if (toAppend !== null) { + formData.set(key, toAppend); + } + } + } + } + this._bodyContent = formData; + } + else { + // The body is the plain content + this._bodyContent = value; + } + } + formDataValue(value) { + if (value === null || value === undefined) { + return null; + } + if (value instanceof Blob) { + return value; + } + if (typeof value === 'object') { + return JSON.stringify(value); + } + return String(value); + } + /** + * Builds the request with the current set parameters + */ + build(options) { + options = options || {}; + // Path parameters + let path = this.operationPath; + for (const pathParam of this._path.values()) { + path = pathParam.append(path); + } + const url = this.rootUrl + path; + // Query parameters + let httpParams = new _angular_common_http__WEBPACK_IMPORTED_MODULE_0__.HttpParams({ + encoder: ParameterCodecInstance + }); + for (const queryParam of this._query.values()) { + httpParams = queryParam.append(httpParams); + } + // Header parameters + let httpHeaders = new _angular_common_http__WEBPACK_IMPORTED_MODULE_0__.HttpHeaders(); + if (options.accept) { + httpHeaders = httpHeaders.append('Accept', options.accept); + } + for (const headerParam of this._header.values()) { + httpHeaders = headerParam.append(httpHeaders); + } + // Request content headers + if (this._bodyContentType && !(this._bodyContent instanceof FormData)) { + httpHeaders = httpHeaders.set('Content-Type', this._bodyContentType); + } + // Perform the request + return new _angular_common_http__WEBPACK_IMPORTED_MODULE_0__.HttpRequest(this.method.toUpperCase(), url, this._bodyContent, { + params: httpParams, + headers: httpHeaders, + responseType: options.responseType, + reportProgress: options.reportProgress, + context: options.context + }); + } +} + + +/***/ }), + +/***/ 4670: +/*!*********************************!*\ + !*** ./src/app/api/services.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PkgdashService": () => (/* reexport safe */ _services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__.PkgdashService) +/* harmony export */ }); +/* harmony import */ var _services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./services/pkgdash.service */ 6309); + + + +/***/ }), + +/***/ 6309: +/*!*************************************************!*\ + !*** ./src/app/api/services/pkgdash.service.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PkgdashService": () => (/* binding */ PkgdashService) +/* harmony export */ }); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common/http */ 8987); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ 116); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ 635); +/* harmony import */ var _base_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../base-service */ 1352); +/* harmony import */ var _request_builder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../request-builder */ 8637); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _api_configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../api-configuration */ 297); +/* tslint:disable */ +/* eslint-disable */ + + + + + + + +class PkgdashService extends _base_service__WEBPACK_IMPORTED_MODULE_0__.BaseService { + constructor(config, http) { + super(config, http); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `commentLookup()` instead. + * + * This method doesn't expect any request body. + */ + commentLookup$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.CommentLookupPath, 'get'); + if (params) { + rb.path('id', params.id, {}); + rb.query('package', params.package, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `commentLookup$Response()` instead. + * + * This method doesn't expect any request body. + */ + commentLookup(params, context) { + return this.commentLookup$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `moduleList()` instead. + * + * This method doesn't expect any request body. + */ + moduleList$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.ModuleListPath, 'get'); + if (params) { + rb.query('package', params.package, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `moduleList$Response()` instead. + * + * This method doesn't expect any request body. + */ + moduleList(params, context) { + return this.moduleList$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageList()` instead. + * + * This method doesn't expect any request body. + */ + packageList$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageListPath, 'get'); + if (params) { + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageList$Response()` instead. + * + * This method doesn't expect any request body. + */ + packageList(params, context) { + return this.packageList$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageCreate()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + packageCreate$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageCreatePath, 'post'); + if (params) { + rb.body(params.body, 'application/json'); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageCreate$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + packageCreate(params, context) { + return this.packageCreate$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageLookup()` instead. + * + * This method doesn't expect any request body. + */ + packageLookup$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageLookupPath, 'get'); + if (params) { + rb.path('id', params.id, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageLookup$Response()` instead. + * + * This method doesn't expect any request body. + */ + packageLookup(params, context) { + return this.packageLookup$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageUpdate()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + packageUpdate$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageUpdatePath, 'put'); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageUpdate$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + packageUpdate(params, context) { + return this.packageUpdate$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageDelete()` instead. + * + * This method doesn't expect any request body. + */ + packageDelete$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageDeletePath, 'delete'); + if (params) { + rb.path('id', params.id, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageDelete$Response()` instead. + * + * This method doesn't expect any request body. + */ + packageDelete(params, context) { + return this.packageDelete$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `commentDelete()` instead. + * + * This method doesn't expect any request body. + */ + commentDelete$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.CommentDeletePath, 'delete'); + if (params) { + rb.path('package_id', params.package_id, {}); + rb.path('id', params.id, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `commentDelete$Response()` instead. + * + * This method doesn't expect any request body. + */ + commentDelete(params, context) { + return this.commentDelete$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `commentList()` instead. + * + * This method doesn't expect any request body. + */ + commentList$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.CommentListPath, 'get'); + if (params) { + rb.path('package', params.package, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `commentList$Response()` instead. + * + * This method doesn't expect any request body. + */ + commentList(params, context) { + return this.commentList$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `commentCreate()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + commentCreate$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.CommentCreatePath, 'post'); + if (params) { + rb.path('package', params.package, {}); + rb.body(params.body, 'application/json'); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `commentCreate$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + commentCreate(params, context) { + return this.commentCreate$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `handlerList()` instead. + * + * This method doesn't expect any request body. + */ + handlerList$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.HandlerListPath, 'get'); + if (params) { + rb.path('package', params.package, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `handlerList$Response()` instead. + * + * This method doesn't expect any request body. + */ + handlerList(params, context) { + return this.handlerList$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `packageModules()` instead. + * + * This method doesn't expect any request body. + */ + packageModules$Response(params, context) { + const rb = new _request_builder__WEBPACK_IMPORTED_MODULE_1__.RequestBuilder(this.rootUrl, PkgdashService.PackageModulesPath, 'get'); + if (params) { + rb.path('package', params.package, {}); + } + return this.http.request(rb.build({ responseType: 'json', accept: 'application/json', context })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.filter)((r) => r instanceof _angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpResponse), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => { + return r; + })); + } + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `packageModules$Response()` instead. + * + * This method doesn't expect any request body. + */ + packageModules(params, context) { + return this.packageModules$Response(params, context).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.map)((r) => r.body)); + } +} +/** Path part for operation `commentLookup()` */ +PkgdashService.CommentLookupPath = '/v1/comments/{id}'; +/** Path part for operation `moduleList()` */ +PkgdashService.ModuleListPath = '/v1/modules'; +/** Path part for operation `packageList()` */ +PkgdashService.PackageListPath = '/v1/packages'; +/** Path part for operation `packageCreate()` */ +PkgdashService.PackageCreatePath = '/v1/packages'; +/** Path part for operation `packageLookup()` */ +PkgdashService.PackageLookupPath = '/v1/packages/{id}'; +/** Path part for operation `packageUpdate()` */ +PkgdashService.PackageUpdatePath = '/v1/packages/{id}'; +/** Path part for operation `packageDelete()` */ +PkgdashService.PackageDeletePath = '/v1/packages/{id}'; +/** Path part for operation `commentDelete()` */ +PkgdashService.CommentDeletePath = '/v1/packages/{package_id}/comments/{id}'; +/** Path part for operation `commentList()` */ +PkgdashService.CommentListPath = '/v1/packages/{package}/comments'; +/** Path part for operation `commentCreate()` */ +PkgdashService.CommentCreatePath = '/v1/packages/{package}/comments'; +/** Path part for operation `handlerList()` */ +PkgdashService.HandlerListPath = '/v1/packages/{package}/handlers'; +/** Path part for operation `packageModules()` */ +PkgdashService.PackageModulesPath = '/v1/packages/{package}/modules'; +PkgdashService.ɵfac = function PkgdashService_Factory(t) { return new (t || PkgdashService)(_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵinject"](_api_configuration__WEBPACK_IMPORTED_MODULE_2__.ApiConfiguration), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_4__.HttpClient)); }; +PkgdashService.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdefineInjectable"]({ token: PkgdashService, factory: PkgdashService.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 158: +/*!***************************************!*\ + !*** ./src/app/app-routing.module.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AppRoutingModule": () => (/* binding */ AppRoutingModule) +/* harmony export */ }); +/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ 124); +/* harmony import */ var _components_package_list_package_list_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/package-list/package-list.component */ 7744); +/* harmony import */ var _components_package_package_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/package/package.component */ 6847); +/* harmony import */ var _resolvers_package_package_resolver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./resolvers/package/package.resolver */ 1972); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 2560); + + + + + + +const routes = [ + { + path: 'packages', + component: _components_package_list_package_list_component__WEBPACK_IMPORTED_MODULE_0__.PackageListComponent + }, + { + path: 'packages/:id', + component: _components_package_package_component__WEBPACK_IMPORTED_MODULE_1__.PackageComponent, + resolve: { + package: _resolvers_package_package_resolver__WEBPACK_IMPORTED_MODULE_2__.PackageResolver, + }, + }, + { + path: '', + pathMatch: 'full', + redirectTo: 'packages', + }, + { + path: '**', + redirectTo: 'packages', + }, +]; +class AppRoutingModule { +} +AppRoutingModule.ɵfac = function AppRoutingModule_Factory(t) { return new (t || AppRoutingModule)(); }; +AppRoutingModule.ɵmod = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({ type: AppRoutingModule }); +AppRoutingModule.ɵinj = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({ imports: [_angular_router__WEBPACK_IMPORTED_MODULE_4__.RouterModule.forRoot(routes), _angular_router__WEBPACK_IMPORTED_MODULE_4__.RouterModule] }); +(function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](AppRoutingModule, { imports: [_angular_router__WEBPACK_IMPORTED_MODULE_4__.RouterModule], exports: [_angular_router__WEBPACK_IMPORTED_MODULE_4__.RouterModule] }); })(); + + +/***/ }), + +/***/ 5041: +/*!**********************************!*\ + !*** ./src/app/app.component.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AppComponent": () => (/* binding */ AppComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ 124); + + +class AppComponent { + constructor() { + this.title = 'ui'; + } +} +AppComponent.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(); }; +AppComponent.ɵcmp = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: AppComponent, selectors: [["app-root"]], decls: 1, vars: 0, template: function AppComponent_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "router-outlet"); + } }, dependencies: [_angular_router__WEBPACK_IMPORTED_MODULE_1__.RouterOutlet], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNjc3MifQ== */"] }); + + +/***/ }), + +/***/ 2976: +/*!**********************************!*\ + !*** ./src/app/app.constants.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AppConstants": () => (/* binding */ AppConstants) +/* harmony export */ }); +class AppConstants { +} +AppConstants.SNACKBAR_MSG_DURATION = 5000; +AppConstants.SNACKBAR_ERR_DURATION = 10000; +AppConstants.RETRY_ATTEMPTS = 3; +AppConstants.RETRY_DELAY = 500; +AppConstants.RETRY_HTTP_CODES = [408, 500]; +AppConstants.AUTOCOMPLETE_DEBOUNCE = 1000; +AppConstants.AUTOCOMPLETE_LIMIT = 20; +AppConstants.SEARCH_DEBOUNCE = 1000; +AppConstants.API = getAPI(); +function getAPI() { + const baseHref = new URL(document.baseURI); + let path = baseHref.pathname.slice(0, baseHref.pathname.indexOf('/ui')); + let api = `${baseHref.protocol}//${baseHref.host}` + path; + console.log(`API ${api}`); + return api; +} +/* + +export const OAuthConfig: AuthConfig = { + + // Url of the Identity Provider + issuer: AppConstants.API, + + // URL of the SPA to redirect the user to after login + redirectUri: AppConstants.API + '/ui/index.html', + + // The SPA's id. The SPA is registerd with this id at the auth-server + clientId: 'authn', + + dummyClientSecret: 'secret', + + // set the scope for the permissions the client should request + // The first four are defined by OIDC. + // Important: Request offline_access to get a refresh token + // The api scope is a usecase specific one + scope: 'openid profile email offline_access api', + + responseType: 'code', + + // turn on validation that discovery document endpoints start with the issuer url defined above + strictDiscoveryDocumentValidation: true, + + // show debug + showDebugInformation: true, + + // Activate Session Checks: + sessionChecksEnabled: true, + + // Disable requirement of https for tests + requireHttps: false, + + // oidc: true, // ID_Token + //this.oauthService.setStorage(sessionStorage); + + preserveRequestedRoute: true, +}; +*/ + + +/***/ }), + +/***/ 6747: +/*!*******************************!*\ + !*** ./src/app/app.module.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AppModule": () => (/* binding */ AppModule) +/* harmony export */ }); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/platform-browser */ 4497); +/* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-routing.module */ 158); +/* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app.component */ 5041); +/* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @angular/platform-browser/animations */ 7146); +/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/card */ 2156); +/* harmony import */ var _angular_material_core__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @angular/material/core */ 9121); +/* harmony import */ var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @angular/material/paginator */ 6060); +/* harmony import */ var _angular_material_table__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @angular/material/table */ 5288); +/* harmony import */ var _api_api_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api/api.module */ 9809); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @angular/common/http */ 8987); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @angular/material/progress-spinner */ 1708); +/* harmony import */ var _angular_material_list__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/material/list */ 6517); +/* harmony import */ var _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/material/checkbox */ 4792); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @angular/forms */ 2508); +/* harmony import */ var _angular_material_sort__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/material/sort */ 2197); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/material/input */ 8562); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/material/button */ 4522); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @angular/material/icon */ 7822); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/material/dialog */ 1484); +/* harmony import */ var _components_package_dialog_package_dialog_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/package-dialog/package-dialog.component */ 2384); +/* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @angular/material/menu */ 8589); +/* harmony import */ var _angular_material_radio__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @angular/material/radio */ 2922); +/* harmony import */ var _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @angular/material/snack-bar */ 930); +/* harmony import */ var _components_confirm_dialog_confirm_dialog_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/confirm-dialog/confirm-dialog.component */ 4949); +/* harmony import */ var _angular_material_select__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @angular/material/select */ 7371); +/* harmony import */ var _services_message_message_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./services/message/message.service */ 7849); +/* harmony import */ var _services_confirm_confirm_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./services/confirm/confirm.service */ 8849); +/* harmony import */ var _components_package_list_package_list_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/package-list/package-list.component */ 7744); +/* harmony import */ var _services_packages_packages_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./services/packages/packages.service */ 9664); +/* harmony import */ var _api_services__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./api/services */ 4670); +/* harmony import */ var _app_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./app.constants */ 2976); +/* harmony import */ var _components_package_package_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/package/package.component */ 6847); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/core */ 2560); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class AppModule { +} +AppModule.ɵfac = function AppModule_Factory(t) { return new (t || AppModule)(); }; +AppModule.ɵmod = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdefineNgModule"]({ type: AppModule, bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_1__.AppComponent] }); +AppModule.ɵinj = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdefineInjector"]({ providers: [ + _api_services__WEBPACK_IMPORTED_MODULE_9__.PkgdashService, + _services_packages_packages_service__WEBPACK_IMPORTED_MODULE_8__.PackagesService, + _services_confirm_confirm_service__WEBPACK_IMPORTED_MODULE_6__.ConfirmService, + _services_message_message_service__WEBPACK_IMPORTED_MODULE_5__.MessageService, + ], imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_13__.BrowserModule, + _app_routing_module__WEBPACK_IMPORTED_MODULE_0__.AppRoutingModule, + _angular_material_card__WEBPACK_IMPORTED_MODULE_14__.MatCardModule, + _angular_material_core__WEBPACK_IMPORTED_MODULE_15__.MatRippleModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_17__.MatProgressSpinnerModule, + _angular_material_table__WEBPACK_IMPORTED_MODULE_18__.MatTableModule, + _angular_material_list__WEBPACK_IMPORTED_MODULE_19__.MatListModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_sort__WEBPACK_IMPORTED_MODULE_20__.MatSortModule, + _angular_material_input__WEBPACK_IMPORTED_MODULE_21__.MatInputModule, + _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_22__.MatCheckboxModule, + _angular_material_button__WEBPACK_IMPORTED_MODULE_23__.MatButtonModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.FormsModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.ReactiveFormsModule, + _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__.BrowserAnimationsModule, + _angular_material_dialog__WEBPACK_IMPORTED_MODULE_26__.MatDialogModule, + _angular_material_icon__WEBPACK_IMPORTED_MODULE_27__.MatIconModule, + _angular_common_http__WEBPACK_IMPORTED_MODULE_28__.HttpClientModule, + _angular_material_menu__WEBPACK_IMPORTED_MODULE_29__.MatMenuModule, + _angular_material_radio__WEBPACK_IMPORTED_MODULE_30__.MatRadioModule, + _angular_material_select__WEBPACK_IMPORTED_MODULE_31__.MatSelectModule, + _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_32__.MatSnackBarModule, + _api_api_module__WEBPACK_IMPORTED_MODULE_2__.ApiModule.forRoot({ + rootUrl: _app_constants__WEBPACK_IMPORTED_MODULE_10__.AppConstants.API, + }), _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_32__.MatSnackBarModule, + _angular_material_select__WEBPACK_IMPORTED_MODULE_31__.MatSelectModule, + _angular_material_radio__WEBPACK_IMPORTED_MODULE_30__.MatRadioModule, + _angular_material_menu__WEBPACK_IMPORTED_MODULE_29__.MatMenuModule, + _angular_material_dialog__WEBPACK_IMPORTED_MODULE_26__.MatDialogModule, + _angular_material_icon__WEBPACK_IMPORTED_MODULE_27__.MatIconModule, + _angular_material_button__WEBPACK_IMPORTED_MODULE_23__.MatButtonModule, + _angular_material_input__WEBPACK_IMPORTED_MODULE_21__.MatInputModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_sort__WEBPACK_IMPORTED_MODULE_20__.MatSortModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.ReactiveFormsModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.FormsModule, + _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_22__.MatCheckboxModule, + _angular_material_list__WEBPACK_IMPORTED_MODULE_19__.MatListModule, + _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_17__.MatProgressSpinnerModule, + _angular_material_card__WEBPACK_IMPORTED_MODULE_14__.MatCardModule, + _angular_material_core__WEBPACK_IMPORTED_MODULE_15__.MatRippleModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_table__WEBPACK_IMPORTED_MODULE_18__.MatTableModule, + _angular_common_http__WEBPACK_IMPORTED_MODULE_28__.HttpClientModule] }); +(function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵsetNgModuleScope"](AppModule, { declarations: [_app_component__WEBPACK_IMPORTED_MODULE_1__.AppComponent, + _components_package_list_package_list_component__WEBPACK_IMPORTED_MODULE_7__.PackageListComponent, + _components_package_dialog_package_dialog_component__WEBPACK_IMPORTED_MODULE_3__.PackageDialogComponent, + _components_confirm_dialog_confirm_dialog_component__WEBPACK_IMPORTED_MODULE_4__.ConfirmDialogComponent, + _components_package_package_component__WEBPACK_IMPORTED_MODULE_11__.PackageComponent], imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_13__.BrowserModule, + _app_routing_module__WEBPACK_IMPORTED_MODULE_0__.AppRoutingModule, + _angular_material_card__WEBPACK_IMPORTED_MODULE_14__.MatCardModule, + _angular_material_core__WEBPACK_IMPORTED_MODULE_15__.MatRippleModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_17__.MatProgressSpinnerModule, + _angular_material_table__WEBPACK_IMPORTED_MODULE_18__.MatTableModule, + _angular_material_list__WEBPACK_IMPORTED_MODULE_19__.MatListModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_sort__WEBPACK_IMPORTED_MODULE_20__.MatSortModule, + _angular_material_input__WEBPACK_IMPORTED_MODULE_21__.MatInputModule, + _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_22__.MatCheckboxModule, + _angular_material_button__WEBPACK_IMPORTED_MODULE_23__.MatButtonModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.FormsModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.ReactiveFormsModule, + _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__.BrowserAnimationsModule, + _angular_material_dialog__WEBPACK_IMPORTED_MODULE_26__.MatDialogModule, + _angular_material_icon__WEBPACK_IMPORTED_MODULE_27__.MatIconModule, + _angular_common_http__WEBPACK_IMPORTED_MODULE_28__.HttpClientModule, + _angular_material_menu__WEBPACK_IMPORTED_MODULE_29__.MatMenuModule, + _angular_material_radio__WEBPACK_IMPORTED_MODULE_30__.MatRadioModule, + _angular_material_select__WEBPACK_IMPORTED_MODULE_31__.MatSelectModule, + _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_32__.MatSnackBarModule, _api_api_module__WEBPACK_IMPORTED_MODULE_2__.ApiModule], exports: [_angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_32__.MatSnackBarModule, + _angular_material_select__WEBPACK_IMPORTED_MODULE_31__.MatSelectModule, + _angular_material_radio__WEBPACK_IMPORTED_MODULE_30__.MatRadioModule, + _angular_material_menu__WEBPACK_IMPORTED_MODULE_29__.MatMenuModule, + _angular_material_dialog__WEBPACK_IMPORTED_MODULE_26__.MatDialogModule, + _angular_material_icon__WEBPACK_IMPORTED_MODULE_27__.MatIconModule, + _angular_material_button__WEBPACK_IMPORTED_MODULE_23__.MatButtonModule, + _angular_material_input__WEBPACK_IMPORTED_MODULE_21__.MatInputModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_sort__WEBPACK_IMPORTED_MODULE_20__.MatSortModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.ReactiveFormsModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_24__.FormsModule, + _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_22__.MatCheckboxModule, + _angular_material_list__WEBPACK_IMPORTED_MODULE_19__.MatListModule, + _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_17__.MatProgressSpinnerModule, + _angular_material_card__WEBPACK_IMPORTED_MODULE_14__.MatCardModule, + _angular_material_core__WEBPACK_IMPORTED_MODULE_15__.MatRippleModule, + _angular_material_paginator__WEBPACK_IMPORTED_MODULE_16__.MatPaginatorModule, + _angular_material_table__WEBPACK_IMPORTED_MODULE_18__.MatTableModule, + _angular_common_http__WEBPACK_IMPORTED_MODULE_28__.HttpClientModule, + _components_package_dialog_package_dialog_component__WEBPACK_IMPORTED_MODULE_3__.PackageDialogComponent] }); })(); + + +/***/ }), + +/***/ 4949: +/*!***********************************************************************!*\ + !*** ./src/app/components/confirm-dialog/confirm-dialog.component.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ConfirmDialogComponent": () => (/* binding */ ConfirmDialogComponent) +/* harmony export */ }); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/material/dialog */ 1484); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/button */ 4522); + + + + +class ConfirmDialogComponent { + constructor(data, mdDialogRef) { + this.data = data; + this.mdDialogRef = mdDialogRef; + } + ngOnInit() { } + cancel() { + this.mdDialogRef.close(); + } + submit(value) { + this.mdDialogRef.close(value); + } + onEsc() { + this.cancel(); + } +} +ConfirmDialogComponent.ɵfac = function ConfirmDialogComponent_Factory(t) { return new (t || ConfirmDialogComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MAT_DIALOG_DATA), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogRef)); }; +ConfirmDialogComponent.ɵcmp = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: ConfirmDialogComponent, selectors: [["app-confirm-dialog"]], hostBindings: function ConfirmDialogComponent_HostBindings(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.esc", function ConfirmDialogComponent_keydown_esc_HostBindingHandler() { return ctx.onEsc(); }); + } }, decls: 10, vars: 2, consts: [["mat-dialog-title", ""], [1, "mat-typography"], ["mat-button", "", "type", "submit", 3, "click"], ["mat-button", "", 3, "mat-dialog-close"]], template: function ConfirmDialogComponent_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "h2", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "mat-dialog-content", 1)(3, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "mat-dialog-actions")(6, "button", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function ConfirmDialogComponent_Template_button_click_6_listener() { return ctx.submit(true); }); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, "Submit"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "button", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](9, "Cancel"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]()(); + } if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.data.title); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.data.message); + } }, dependencies: [_angular_material_button__WEBPACK_IMPORTED_MODULE_2__.MatButton, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogContent, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogActions], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJjb25maXJtLWRpYWxvZy5jb21wb25lbnQuc2NzcyJ9 */"], changeDetection: 0 }); + + +/***/ }), + +/***/ 2384: +/*!***********************************************************************!*\ + !*** ./src/app/components/package-dialog/package-dialog.component.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackageDialogComponent": () => (/* binding */ PackageDialogComponent) +/* harmony export */ }); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/forms */ 2508); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/dialog */ 1484); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/form-field */ 5074); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/material/input */ 8562); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/button */ 4522); + + + + + + + + +class PackageDialogComponent { + constructor(data, mdDialogRef, formBuilder) { + this.data = data; + this.mdDialogRef = mdDialogRef; + this.formBuilder = formBuilder; + this.packageForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_0__.UntypedFormGroup({}); + if (!data.pkg) { + data.pkg = { + name: '', + url: '', + }; + } + } + ngOnInit() { + this.packageForm = this.formBuilder.group({ + name: [{ value: this.data.pkg.name, disabled: false }, + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.required, + ], + url: [{ value: this.data.pkg.url, disabled: false }, + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.compose([ + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.required, + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.pattern("(^(http[s]?:\/\/(.*)$))?"), + ]), + ], + description: [{ value: this.data.pkg.description, disabled: false }, + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.compose([ + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.required, + _angular_forms__WEBPACK_IMPORTED_MODULE_0__.Validators.minLength(4), + ]), + ], + }); + } + cancel() { + this.mdDialogRef.close(); + } + submit(value) { + this.mdDialogRef.close(value); + } + onEsc() { + this.cancel(); + } +} +PackageDialogComponent.ɵfac = function PackageDialogComponent_Factory(t) { return new (t || PackageDialogComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MAT_DIALOG_DATA), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_0__.UntypedFormBuilder)); }; +PackageDialogComponent.ɵcmp = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ type: PackageDialogComponent, selectors: [["app-package-dialog"]], hostBindings: function PackageDialogComponent_HostBindings(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("keydown.esc", function PackageDialogComponent_keydown_esc_HostBindingHandler() { return ctx.onEsc(); }); + } }, decls: 24, vars: 3, consts: [["enctype", "multipart/form-data", 3, "formGroup", "ngSubmit"], ["mat-dialog-title", ""], [1, "mat-typography"], ["appearance", "standard"], ["matInput", "", "placeholder", "example", "formControlName", "name", "required", ""], ["matInput", "", "placeholder", "example desc", "formControlName", "description", "required", ""], ["matInput", "", "placeholder", "http://example:port", "formControlName", "url", "required", ""], ["mat-button", "", "type", "submit", 3, "disabled"], ["mat-button", "", 3, "mat-dialog-close"]], template: function PackageDialogComponent_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "form", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("ngSubmit", function PackageDialogComponent_Template_form_ngSubmit_0_listener() { return ctx.submit(ctx.packageForm.value); }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "h2", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](3, "mat-dialog-content", 2)(4, "p")(5, "mat-form-field", 3)(6, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](7, "Name"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](8, "input", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](9, "p")(10, "mat-form-field", 3)(11, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](12, "Description"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](13, "textarea", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](14, "p")(15, "mat-form-field", 3)(16, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](17, "URL"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](18, "input", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](19, "mat-dialog-actions")(20, "button", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](21, "Submit"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](22, "button", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](23, "Cancel"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + } if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("formGroup", ctx.packageForm); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx.data.title); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](18); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("disabled", !ctx.packageForm.valid); + } }, dependencies: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatLabel, _angular_material_input__WEBPACK_IMPORTED_MODULE_4__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_5__.MatButton, _angular_forms__WEBPACK_IMPORTED_MODULE_0__["ɵNgNoValidate"], _angular_forms__WEBPACK_IMPORTED_MODULE_0__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_0__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_0__.NgControlStatusGroup, _angular_forms__WEBPACK_IMPORTED_MODULE_0__.RequiredValidator, _angular_forms__WEBPACK_IMPORTED_MODULE_0__.FormGroupDirective, _angular_forms__WEBPACK_IMPORTED_MODULE_0__.FormControlName, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogContent, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogActions], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwYWNrYWdlLWRpYWxvZy5jb21wb25lbnQuc2NzcyJ9 */"], changeDetection: 0 }); + + +/***/ }), + +/***/ 7744: +/*!*******************************************************************!*\ + !*** ./src/app/components/package-list/package-list.component.ts ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackageListComponent": () => (/* binding */ PackageListComponent) +/* harmony export */ }); +/* harmony import */ var _api_services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api/services/pkgdash.service */ 6309); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ 3280); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs */ 1989); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs */ 8977); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rxjs */ 9337); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rxjs */ 6646); +/* harmony import */ var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/material/paginator */ 6060); +/* harmony import */ var _datasources_packages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../datasources/packages */ 5569); +/* harmony import */ var _angular_material_sort__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/sort */ 2197); +/* harmony import */ var src_app_app_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! src/app/app.constants */ 2976); +/* harmony import */ var src_app_services_message_message_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/app/services/message/message.service */ 7849); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/router */ 124); +/* harmony import */ var _services_packages_packages_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../services/packages/packages.service */ 9664); +/* harmony import */ var src_app_services_confirm_confirm_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! src/app/services/confirm/confirm.service */ 8849); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @angular/material/progress-spinner */ 1708); +/* harmony import */ var _angular_material_table__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @angular/material/table */ 5288); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @angular/material/form-field */ 5074); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/material/input */ 8562); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/material/button */ 4522); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/material/icon */ 7822); +/* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/material/menu */ 8589); + + + + + + + + + + + + + + + + + + + + + + + + +const _c0 = ["input"]; + +function PackageListComponent_div_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "div", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](1, "mat-progress-spinner", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("mode", "indeterminate"); + } +} + +function PackageListComponent_th_13_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Name"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_14_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](2, "br"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r22 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r22.name); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r22.description); + } +} + +function PackageListComponent_th_16_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 32); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "URL"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_17_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r23 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r23.url); + } +} + +function PackageListComponent_th_19_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 33); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Issues"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_20_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r24 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r24.issues ? package_r24.issues : 0); + } +} + +function PackageListComponent_th_22_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Modules"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_23_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r25 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r25.modules ? package_r25.modules : 0); + } +} + +function PackageListComponent_th_25_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 35); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Comments"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_26_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r26 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r26.comments ? package_r26.comments : 0); + } +} + +function PackageListComponent_th_28_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Coverage"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_29_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r27 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r27.coverage ? package_r27.coverage : 0); + } +} + +function PackageListComponent_th_31_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Handlers"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_32_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const package_r28 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](package_r28.handlers ? package_r28.handlers : 0); + } +} + +function PackageListComponent_th_34_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "th", 38); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1, "Actions"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } +} + +function PackageListComponent_td_35_Template(rf, ctx) { + if (rf & 1) { + const _r32 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵgetCurrentView"](); + + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "td", 31)(1, "button", 39)(2, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](3, "more_vert"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](4, "mat-menu", null, 40)(6, "button", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("click", function PackageListComponent_td_35_Template_button_click_6_listener() { + const restoredCtx = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵrestoreView"](_r32); + const package_r29 = restoredCtx.$implicit; + const ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵresetView"](ctx_r31.deletePackageDialog(package_r29)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](7, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](8, "delete"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](9, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](10, "Delete"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](11, "button", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("click", function PackageListComponent_td_35_Template_button_click_11_listener() { + const restoredCtx = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵrestoreView"](_r32); + const package_r29 = restoredCtx.$implicit; + const ctx_r33 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵresetView"](ctx_r33.updatePackageDialog(package_r29)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](12, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](13, "edit"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](14, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](15, "Edit"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"]()()()(); + } + + if (rf & 2) { + const _r30 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵreference"](5); + + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("matMenuTriggerFor", _r30); + } +} + +function PackageListComponent_tr_36_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](0, "tr", 42); + } +} + +function PackageListComponent_tr_37_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](0, "tr", 43); + } + + if (rf & 2) { + const package_r34 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpropertyInterpolate1"]("routerLink", "/packages/", package_r34.id, ""); + } +} + +const _c1 = function () { + return [10, 20, 30, 50]; +}; + +class PackageListComponent { + constructor(router, packageDialog, pkgdashService, confirmDialog, messageService) { + this.router = router; + this.packageDialog = packageDialog; + this.pkgdashService = pkgdashService; + this.confirmDialog = confirmDialog; + this.messageService = messageService; + this.itemsCount = 20; + this.sortField = 'name'; + this.sortOrder = 'asc'; + this.displayedColumns = ['name', 'modules', 'issues', 'comments', 'coverage', 'handlers', 'actions']; + this.dataSource = new _datasources_packages__WEBPACK_IMPORTED_MODULE_1__.PackagesDataSource(this.pkgdashService); + } + + createPackageDialog() { + this.packageDialog.open({ + height: '400px', + width: '600px', + autoFocus: true, + disableClose: false, + backdropClass: "package-dialog", + data: { + title: 'Create package' + } + }); + this.packageDialog.confirmed().subscribe(data => { + if (data) { + this.pkgdashService.packageCreate(data).subscribe({ + next: rsp => { + this.loadPackages(); + this.reloadComponent(); + this.messageService.showMessage("package " + rsp.package.name + " created"); + }, + error: err => { + this.messageService.showMessage("package " + data.name + " not created, error " + err.details); + } + }); + } + }); + } + + updatePackageDialog(pkg) { + this.packageDialog.open({ + height: '400px', + width: '600px', + autoFocus: true, + disableClose: false, + backdropClass: "package-dialog", + data: { + pkg: pkg, + title: 'Update package ' + pkg.name + } + }); + this.packageDialog.confirmed().subscribe(data => { + if (data) { + this.pkgdashService.packageUpdate({ + id: pkg.id, + body: data + }).subscribe({ + next: rsp => { + this.loadPackages(); + this.reloadComponent(); + this.messageService.showMessage("package " + data.name + " updated"); + }, + error: err => { + this.messageService.showMessage("package " + data.name + " not updated, error " + err.details); + } + }); + } + }); + } + + deletePackageDialog(pkg) { + this.confirmDialog.open({ + height: '200px', + width: '300px', + autoFocus: true, + disableClose: false, + backdropClass: "package-dialog", + data: { + title: 'Delete package ' + pkg.name, + message: 'Are you sure?' + } + }); + this.confirmDialog.confirmed().subscribe(data => { + if (data) { + this.pkgdashService.packageDelete({ + id: pkg.id + }).subscribe({ + next: rsp => { + this.loadPackages(); + this.reloadComponent(); + this.messageService.showMessage("package " + data.name + " deleted"); + }, + error: err => { + this.messageService.showMessage("package " + data.name + " not deleted, error " + err.details); + } + }); + } + }); + } + + selectPackage(pkg) { + this.selectedPackage = pkg; + } + + ngAfterViewInit() { + (0,rxjs__WEBPACK_IMPORTED_MODULE_7__.fromEvent)(this.input.nativeElement, 'keyup').pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_8__.debounceTime)(src_app_app_constants__WEBPACK_IMPORTED_MODULE_2__.AppConstants.SEARCH_DEBOUNCE), (0,rxjs__WEBPACK_IMPORTED_MODULE_9__.distinctUntilChanged)(), (0,rxjs__WEBPACK_IMPORTED_MODULE_10__.tap)(() => { + this.paginator.pageIndex = 0; + this.loadPackages(); + })).subscribe(); + this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); + (0,rxjs__WEBPACK_IMPORTED_MODULE_11__.merge)(this.sort.sortChange, this.paginator.page).pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_10__.tap)(() => this.loadPackages())).subscribe(); + } + + sortPackages(event) { + this.loadPackages(); + this.reloadComponent(); + } + + reloadComponent() { + let currentUrl = this.router.url; + + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + + this.router.onSameUrlNavigation = 'reload'; + this.router.navigate([currentUrl]); + } + + loadPackages() { + this.dataSource.list(this.input.nativeElement.value, this.sort.active, this.sort.direction, this.paginator.pageIndex, this.paginator.pageSize); + } + + ngOnInit() { + this.dataSource.list('', this.sortField, this.sortOrder, 0, this.itemsCount); + this.packages$ = this.dataSource.connect(); + } + +} + +PackageListComponent.ɵfac = function PackageListComponent_Factory(t) { + return new (t || PackageListComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_angular_router__WEBPACK_IMPORTED_MODULE_12__.Router), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_services_packages_packages_service__WEBPACK_IMPORTED_MODULE_4__.PackagesService), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_api_services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__.PkgdashService), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](src_app_services_confirm_confirm_service__WEBPACK_IMPORTED_MODULE_5__.ConfirmService), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](src_app_services_message_message_service__WEBPACK_IMPORTED_MODULE_3__.MessageService)); +}; + +PackageListComponent.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdefineComponent"]({ + type: PackageListComponent, + selectors: [["app-packages"]], + viewQuery: function PackageListComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵviewQuery"](_angular_material_paginator__WEBPACK_IMPORTED_MODULE_13__.MatPaginator, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵviewQuery"](_angular_material_sort__WEBPACK_IMPORTED_MODULE_14__.MatSort, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵviewQuery"](_c0, 5); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵloadQuery"]()) && (ctx.paginator = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵloadQuery"]()) && (ctx.sort = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵloadQuery"]()) && (ctx.input = _t.first); + } + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵProvidersFeature"]([_api_services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__.PkgdashService, src_app_services_message_message_service__WEBPACK_IMPORTED_MODULE_3__.MessageService])], + decls: 40, + vars: 15, + consts: [["mat-fab", "", "color", "primary", 3, "click"], [1, "mat-elevation-z8", "mat-app-background", 3, "hidden"], ["matInput", "", "type", "search", "placeholder", "Search by name/path"], ["input", ""], ["class", "spinner-container", 4, "ngIf"], ["mat-table", "", "matSort", "", "matSortDisableClear", "", 1, "mat-elevation-z8", "packages-table", 3, "matSortActive", "matSortDirection", "dataSource", "matSortChange"], ["packagesTable", ""], ["matColumnDef", "name"], ["mat-header-cell", "", "mat-sort-header", "Name", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], ["matColumnDef", "url"], ["mat-header-cell", "", "mat-sort-header", "URL", 4, "matHeaderCellDef"], ["matColumnDef", "issues"], ["mat-header-cell", "", "mat-sort-header", "Issues", 4, "matHeaderCellDef"], ["matColumnDef", "modules"], ["mat-header-cell", "", "mat-sort-header", "Modules", 4, "matHeaderCellDef"], ["matColumnDef", "comments"], ["mat-header-cell", "", "mat-sort-header", "Comments", 4, "matHeaderCellDef"], ["matColumnDef", "coverage"], ["mat-header-cell", "", "mat-sort-header", "Coverage", 4, "matHeaderCellDef"], ["matColumnDef", "handlers"], ["mat-header-cell", "", "mat-sort-header", "Handlers", 4, "matHeaderCellDef"], ["matColumnDef", "actions"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "routerLink", 4, "matRowDef", "matRowDefColumns"], ["showFirstLastButtons", "", 3, "length", "pageSize", "pageSizeOptions"], ["paginator", ""], [1, "spinner-container"], [3, "mode"], ["mat-header-cell", "", "mat-sort-header", "Name"], ["mat-cell", ""], ["mat-header-cell", "", "mat-sort-header", "URL"], ["mat-header-cell", "", "mat-sort-header", "Issues"], ["mat-header-cell", "", "mat-sort-header", "Modules"], ["mat-header-cell", "", "mat-sort-header", "Comments"], ["mat-header-cell", "", "mat-sort-header", "Coverage"], ["mat-header-cell", "", "mat-sort-header", "Handlers"], ["mat-header-cell", ""], ["mat-icon-button", "", 3, "matMenuTriggerFor"], ["menu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-header-row", ""], ["mat-row", "", 3, "routerLink"]], + template: function PackageListComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "button", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("click", function PackageListComponent_Template_button_click_0_listener() { + return ctx.createPackageDialog(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](1, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](2, "create"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](3, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpipe"](4, "async"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](5, "mat-form-field"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](6, "input", 2, 3); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](8, PackageListComponent_div_8_Template, 2, 1, "div", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpipe"](9, "async"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](10, "table", 5, 6); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("matSortChange", function PackageListComponent_Template_table_matSortChange_10_listener($event) { + return ctx.sortPackages($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](12, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](13, PackageListComponent_th_13_Template, 2, 0, "th", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](14, PackageListComponent_td_14_Template, 4, 2, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](15, 10); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](16, PackageListComponent_th_16_Template, 2, 0, "th", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](17, PackageListComponent_td_17_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](18, 12); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](19, PackageListComponent_th_19_Template, 2, 0, "th", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](20, PackageListComponent_td_20_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](21, 14); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](22, PackageListComponent_th_22_Template, 2, 0, "th", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](23, PackageListComponent_td_23_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](24, 16); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](25, PackageListComponent_th_25_Template, 2, 0, "th", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](26, PackageListComponent_td_26_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](27, 18); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](28, PackageListComponent_th_28_Template, 2, 0, "th", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](29, PackageListComponent_td_29_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](30, 20); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](31, PackageListComponent_th_31_Template, 2, 0, "th", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](32, PackageListComponent_td_32_Template, 2, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](33, 22); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](34, PackageListComponent_th_34_Template, 2, 0, "th", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](35, PackageListComponent_td_35_Template, 16, 1, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](36, PackageListComponent_tr_36_Template, 1, 0, "tr", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](37, PackageListComponent_tr_37_Template, 1, 1, "tr", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](38, "mat-paginator", 26, 27); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("hidden", _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpipeBind1"](4, 10, ctx.dataSource.loading$)); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpipeBind1"](9, 12, ctx.dataSource.loading$)); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("matSortActive", ctx.sortField)("matSortDirection", ctx.sortOrder)("dataSource", ctx.dataSource); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](26); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("matHeaderRowDef", ctx.displayedColumns); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("matRowDefColumns", ctx.displayedColumns); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("length", 10)("pageSize", ctx.itemsCount)("pageSizeOptions", _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵpureFunction0"](14, _c1)); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_15__.NgIf, _angular_router__WEBPACK_IMPORTED_MODULE_12__.RouterLink, _angular_material_paginator__WEBPACK_IMPORTED_MODULE_13__.MatPaginator, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_16__.MatProgressSpinner, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatTable, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatHeaderCellDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatHeaderRowDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatColumnDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatCellDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatRowDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatHeaderCell, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatCell, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatHeaderRow, _angular_material_table__WEBPACK_IMPORTED_MODULE_17__.MatRow, _angular_material_sort__WEBPACK_IMPORTED_MODULE_14__.MatSort, _angular_material_sort__WEBPACK_IMPORTED_MODULE_14__.MatSortHeader, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_18__.MatFormField, _angular_material_input__WEBPACK_IMPORTED_MODULE_19__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_20__.MatButton, _angular_material_icon__WEBPACK_IMPORTED_MODULE_21__.MatIcon, _angular_material_menu__WEBPACK_IMPORTED_MODULE_22__.MatMenu, _angular_material_menu__WEBPACK_IMPORTED_MODULE_22__.MatMenuItem, _angular_material_menu__WEBPACK_IMPORTED_MODULE_22__.MatMenuTrigger, _angular_common__WEBPACK_IMPORTED_MODULE_15__.AsyncPipe], + styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwYWNrYWdlLWxpc3QuY29tcG9uZW50LnNjc3MifQ== */"] +}); + +/***/ }), + +/***/ 6847: +/*!*********************************************************!*\ + !*** ./src/app/components/package/package.component.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackageComponent": () => (/* binding */ PackageComponent) +/* harmony export */ }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs */ 3280); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ 1989); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs */ 8977); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs */ 9337); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rxjs */ 6646); +/* harmony import */ var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/material/paginator */ 6060); +/* harmony import */ var _angular_material_sort__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/material/sort */ 2197); +/* harmony import */ var src_app_app_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! src/app/app.constants */ 2976); +/* harmony import */ var src_app_api_models__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! src/app/api/models */ 188); +/* harmony import */ var src_app_api_services__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! src/app/api/services */ 4670); +/* harmony import */ var src_app_datasources_handlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/app/datasources/handlers */ 8875); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/router */ 124); +/* harmony import */ var src_app_services_message_message_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! src/app/services/message/message.service */ 7849); +/* harmony import */ var _angular_material_table__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/table */ 5288); + + +//import { Location } from '@angular/common'; + + + + + + + + + + + + + +const _c0 = ["input"]; +function PackageComponent_th_6_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "th", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "Name"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); +} } +function PackageComponent_td_7_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); +} if (rf & 2) { + const handler_r8 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](handler_r8.name); +} } +function PackageComponent_th_9_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "th", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "Coverage"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); +} } +function PackageComponent_td_10_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); +} if (rf & 2) { + const handler_r9 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](handler_r9.coverage); +} } +function PackageComponent_tr_11_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](0, "tr", 14); +} } +function PackageComponent_tr_12_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](0, "tr", 15); +} if (rf & 2) { + const handler_r10 = ctx.$implicit; + const ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpropertyInterpolate2"]("routerLink", "/packages/", ctx_r6.package.id, "/handlers/", handler_r10.id, ""); +} } +const _c1 = function () { return [10, 20, 30, 50]; }; +class PackageComponent { + constructor(route, + //private location: Location, + pkgdashService, messageService) { + this.route = route; + this.pkgdashService = pkgdashService; + this.messageService = messageService; + this.itemsCount = 10; + this.sortField = 'name'; + this.sortOrder = 'asc'; + this.displayedColumns = ['name', 'coverage']; + this.dataSource = new src_app_datasources_handlers__WEBPACK_IMPORTED_MODULE_3__.HandlersDataSource(this.pkgdashService); + } + highlight(row) { + this.selectedRowIndex = row.id; + } + ngAfterViewInit() { + (0,rxjs__WEBPACK_IMPORTED_MODULE_6__.fromEvent)(this.input.nativeElement, 'keyup') + .pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_7__.debounceTime)(src_app_app_constants__WEBPACK_IMPORTED_MODULE_0__.AppConstants.SEARCH_DEBOUNCE), (0,rxjs__WEBPACK_IMPORTED_MODULE_8__.distinctUntilChanged)(), (0,rxjs__WEBPACK_IMPORTED_MODULE_9__.tap)(() => { + this.paginator.pageIndex = 0; + this.loadHandlers(); + })) + .subscribe(); + this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); + (0,rxjs__WEBPACK_IMPORTED_MODULE_10__.merge)(this.sort.sortChange, this.paginator.page) + .pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_9__.tap)(() => this.loadHandlers())) + .subscribe(); + } + sortHandlers(event) { + this.loadHandlers(); + } + loadHandlers() { + this.dataSource.list(this.package.id, '', this.sort.active, this.sort.direction, this.paginator.pageIndex, this.paginator.pageSize); + } + ngOnInit() { + this.package = this.route.snapshot.data['package']; + this.dataSource.list(this.package.id, '', this.sortField, this.sortOrder, 0, this.itemsCount); + this.selectedRowIndex = 1; + } +} +PackageComponent.ɵfac = function PackageComponent_Factory(t) { return new (t || PackageComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_router__WEBPACK_IMPORTED_MODULE_11__.ActivatedRoute), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](src_app_api_services__WEBPACK_IMPORTED_MODULE_2__.PkgdashService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](src_app_services_message_message_service__WEBPACK_IMPORTED_MODULE_4__.MessageService)); }; +PackageComponent.ɵcmp = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ type: PackageComponent, selectors: [["app-package"]], viewQuery: function PackageComponent_Query(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵviewQuery"](_angular_material_paginator__WEBPACK_IMPORTED_MODULE_12__.MatPaginator, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵviewQuery"](_angular_material_sort__WEBPACK_IMPORTED_MODULE_13__.MatSort, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵviewQuery"](_c0, 5); + } if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.paginator = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.sort = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.input = _t.first); + } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵProvidersFeature"]([src_app_api_services__WEBPACK_IMPORTED_MODULE_2__.PkgdashService])], decls: 15, vars: 9, consts: [["mat-table", "", "matSort", "", "matSortDisableClear", "", 1, "mat-elevation-z8", "packages-table", 3, "matSortActive", "matSortDirection", "dataSource", "matSortChange"], ["handlersTable", ""], ["matColumnDef", "name"], ["mat-header-cell", "", "mat-sort-header", "Name", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], ["matColumnDef", "coverage"], ["mat-header-cell", "", "mat-sort-header", "Coverage", 4, "matHeaderCellDef"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "routerLink", 4, "matRowDef", "matRowDefColumns"], ["showFirstLastButtons", "", 3, "length", "pageSize", "pageSizeOptions"], ["paginator", ""], ["mat-header-cell", "", "mat-sort-header", "Name"], ["mat-cell", ""], ["mat-header-cell", "", "mat-sort-header", "Coverage"], ["mat-header-row", ""], ["mat-row", "", 3, "routerLink"]], template: function PackageComponent_Template(rf, ctx) { if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "modules"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](2, "div")(3, "table", 0, 1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("matSortChange", function PackageComponent_Template_table_matSortChange_3_listener($event) { return ctx.sortHandlers($event); }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](5, 2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](6, PackageComponent_th_6_Template, 2, 0, "th", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](7, PackageComponent_td_7_Template, 2, 1, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](8, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](9, PackageComponent_th_9_Template, 2, 0, "th", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](10, PackageComponent_td_10_Template, 2, 1, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](11, PackageComponent_tr_11_Template, 1, 0, "tr", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](12, PackageComponent_tr_12_Template, 1, 2, "tr", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](13, "mat-paginator", 9, 10); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("matSortActive", ctx.sortField)("matSortDirection", ctx.sortOrder)("dataSource", ctx.dataSource); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("matHeaderRowDef", ctx.displayedColumns); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("matRowDefColumns", ctx.displayedColumns); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("length", 10)("pageSize", ctx.itemsCount)("pageSizeOptions", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction0"](8, _c1)); + } }, dependencies: [_angular_router__WEBPACK_IMPORTED_MODULE_11__.RouterLink, _angular_material_paginator__WEBPACK_IMPORTED_MODULE_12__.MatPaginator, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatTable, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatHeaderCellDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatHeaderRowDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatColumnDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatCellDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatRowDef, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatHeaderCell, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatCell, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatHeaderRow, _angular_material_table__WEBPACK_IMPORTED_MODULE_14__.MatRow, _angular_material_sort__WEBPACK_IMPORTED_MODULE_13__.MatSort, _angular_material_sort__WEBPACK_IMPORTED_MODULE_13__.MatSortHeader], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwYWNrYWdlLmNvbXBvbmVudC5zY3NzIn0= */"] }); + + +/***/ }), + +/***/ 8875: +/*!*****************************************!*\ + !*** ./src/app/datasources/handlers.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "HandlersDataSource": () => (/* binding */ HandlersDataSource) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/collections */ 1755); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 6317); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 8504); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 635); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ 3158); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 2313); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs */ 745); + + +class HandlersDataSource extends _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.DataSource { + constructor(pkgdashService) { + super(); + this.pkgdashService = pkgdashService; + this.handlerSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject([]); + this.loadingSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject(false); + this.loading$ = this.loadingSubject.asObservable(); + } + connect() { + return this.handlerSubject.asObservable(); + } + disconnect() { + this.handlerSubject.complete(); + this.loadingSubject.complete(); + } + list(id = 0, filter = '', sortField = 'name', sortOrder = 'asc', page = 0, limit = 20) { + this.loadingSubject.next(true); + this.pkgdashService.handlerList({ package: id }).pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_2__.retry)(2), (0,rxjs__WEBPACK_IMPORTED_MODULE_3__.map)(rsp => rsp.handlers || []), (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.catchError)(this.handleError('list', [])), (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.finalize)(() => this.loadingSubject.next(false))).subscribe(handlers => this.handlerSubject.next(handlers)); + } + lookup(id, filter, sortDirection, pageIndex, pageSize) { + } + handleError(operation = '', result) { + return (error) => { + // TODO: send the error to remote logging infrastructure + console.error(error); // log to console instead + // Let the app keep running by returning an empty result. + return (0,rxjs__WEBPACK_IMPORTED_MODULE_6__.of)(result); + }; + } + ; +} + + +/***/ }), + +/***/ 5569: +/*!*****************************************!*\ + !*** ./src/app/datasources/packages.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackagesDataSource": () => (/* binding */ PackagesDataSource) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/collections */ 1755); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 6317); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 8504); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 635); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ 3158); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 2313); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs */ 745); + + +class PackagesDataSource extends _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.DataSource { + constructor(pkgdashService) { + super(); + this.pkgdashService = pkgdashService; + this.packageSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject([]); + this.loadingSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject(false); + this.loading$ = this.loadingSubject.asObservable(); + } + connect() { + return this.packageSubject.asObservable(); + } + disconnect() { + this.packageSubject.complete(); + this.loadingSubject.complete(); + } + list(filter = '', sortField = 'name', sortOrder = 'asc', page = 0, limit = 20) { + this.loadingSubject.next(true); + this.pkgdashService.packageList().pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_2__.retry)(2), (0,rxjs__WEBPACK_IMPORTED_MODULE_3__.map)(rsp => rsp.packages || []), (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.catchError)(this.handleError('list', [])), (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.finalize)(() => this.loadingSubject.next(false))).subscribe(packages => this.packageSubject.next(packages)); + } + lookup(id, filter, sortDirection, pageIndex, pageSize) { + } + handleError(operation = '', result) { + return (error) => { + // TODO: send the error to remote logging infrastructure + console.error(error); // log to console instead + // Let the app keep running by returning an empty result. + return (0,rxjs__WEBPACK_IMPORTED_MODULE_6__.of)(result); + }; + } + ; +} + + +/***/ }), + +/***/ 1972: +/*!*******************************************************!*\ + !*** ./src/app/resolvers/package/package.resolver.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackageResolver": () => (/* binding */ PackageResolver) +/* harmony export */ }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 635); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _api_services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api/services/pkgdash.service */ 6309); + + + + +class PackageResolver { + constructor(pkgdashService) { + this.pkgdashService = pkgdashService; + } + resolve(route, state) { + console.log("resolver with " + route.paramMap.get('id')); + let id = Number(route.paramMap.get('id')); + return this.pkgdashService.packageLookup({ id: id }).pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_1__.map)(rsp => rsp.package)); + } +} +PackageResolver.ɵfac = function PackageResolver_Factory(t) { return new (t || PackageResolver)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](_api_services_pkgdash_service__WEBPACK_IMPORTED_MODULE_0__.PkgdashService)); }; +PackageResolver.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjectable"]({ token: PackageResolver, factory: PackageResolver.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 8849: +/*!*****************************************************!*\ + !*** ./src/app/services/confirm/confirm.service.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ConfirmService": () => (/* binding */ ConfirmService) +/* harmony export */ }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 9295); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 635); +/* harmony import */ var _components_confirm_dialog_confirm_dialog_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/confirm-dialog/confirm-dialog.component */ 4949); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/material/dialog */ 1484); + + + + +class ConfirmService { + constructor(dialog) { + this.dialog = dialog; + } + open(options) { + this.dialogRef = this.dialog.open(_components_confirm_dialog_confirm_dialog_component__WEBPACK_IMPORTED_MODULE_0__.ConfirmDialogComponent, options); + } + confirmed() { + return this.dialogRef.afterClosed().pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_1__.take)(1), (0,rxjs__WEBPACK_IMPORTED_MODULE_2__.map)(res => { + return res; + })); + } +} +ConfirmService.ɵfac = function ConfirmService_Factory(t) { return new (t || ConfirmService)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialog)); }; +ConfirmService.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ token: ConfirmService, factory: ConfirmService.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 7849: +/*!*****************************************************!*\ + !*** ./src/app/services/message/message.service.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MessageService": () => (/* binding */ MessageService) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/material/snack-bar */ 930); + + +class MessageService { + constructor(snackbar) { + this.snackbar = snackbar; + } + showMessage(message, action, config) { + let cfg = config; + if (!cfg) { + cfg = { duration: 2000 }; + } + this.snackbar.open(message, action, cfg); + } +} +MessageService.ɵfac = function MessageService_Factory(t) { return new (t || MessageService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_1__.MatSnackBar)); }; +MessageService.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: MessageService, factory: MessageService.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 9664: +/*!*******************************************************!*\ + !*** ./src/app/services/packages/packages.service.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PackagesService": () => (/* binding */ PackagesService) +/* harmony export */ }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 9295); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 635); +/* harmony import */ var _components_package_dialog_package_dialog_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/package-dialog/package-dialog.component */ 2384); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/material/dialog */ 1484); + + + + +class PackagesService { + constructor(dialog) { + this.dialog = dialog; + } + open(options) { + this.dialogRef = this.dialog.open(_components_package_dialog_package_dialog_component__WEBPACK_IMPORTED_MODULE_0__.PackageDialogComponent, options); + } + confirmed() { + return this.dialogRef.afterClosed().pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_1__.take)(1), (0,rxjs__WEBPACK_IMPORTED_MODULE_2__.map)(res => { + return res; + })); + } +} +PackagesService.ɵfac = function PackagesService_Factory(t) { return new (t || PackagesService)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialog)); }; +PackagesService.ɵprov = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ token: PackagesService, factory: PackagesService.ɵfac, providedIn: 'root' }); + + +/***/ }), + +/***/ 2340: +/*!*****************************************!*\ + !*** ./src/environments/environment.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "environment": () => (/* binding */ environment) +/* harmony export */ }); +/* harmony import */ var zone_js_plugins_zone_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zone.js/plugins/zone-error */ 5856); +/* harmony import */ var zone_js_plugins_zone_error__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zone_js_plugins_zone_error__WEBPACK_IMPORTED_MODULE_0__); +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. +const environment = { + production: false +}; +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ + // Included with Angular CLI. + + +/***/ }), + +/***/ 4431: +/*!*********************!*\ + !*** ./src/main.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/platform-browser */ 4497); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/app.module */ 6747); +/* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./environments/environment */ 2340); + + + + +if (_environments_environment__WEBPACK_IMPORTED_MODULE_1__.environment.production) { + (0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.enableProdMode)(); +} +_angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__.platformBrowser().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_0__.AppModule) + .catch(err => console.error(err)); + + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["vendor"], () => (__webpack_exec__(4431))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/main.js.map b/cmd/pkgdash/assets/ui/main.js.map new file mode 100644 index 0000000..ebb2146 --- /dev/null +++ b/cmd/pkgdash/assets/ui/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","mappings":"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","sources":["./src/app/api/api-configuration.ts","./src/app/api/api.module.ts","./src/app/api/base-service.ts","./src/app/api/request-builder.ts","./src/app/api/services.ts","./src/app/api/services/pkgdash.service.ts","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.constants.ts","./src/app/app.module.ts","./src/app/components/confirm-dialog/confirm-dialog.component.ts","./src/app/components/confirm-dialog/confirm-dialog.component.html","./src/app/components/package-dialog/package-dialog.component.ts","./src/app/components/package-dialog/package-dialog.component.html","./src/app/components/package-list/package-list.component.ts","./src/app/components/package-list/package-list.component.html","./src/app/components/package/package.component.ts","./src/app/components/package/package.component.html","./src/app/datasources/handlers.ts","./src/app/datasources/packages.ts","./src/app/resolvers/package/package.resolver.ts","./src/app/services/confirm/confirm.service.ts","./src/app/services/message/message.service.ts","./src/app/services/packages/packages.service.ts","./src/environments/environment.ts","./src/main.ts"],"sourcesContent":["/* tslint:disable */\n/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n/**\n * Global configuration\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiConfiguration {\n rootUrl: string = '';\n}\n\n/**\n * Parameters for `ApiModule.forRoot()`\n */\nexport interface ApiConfigurationParams {\n rootUrl?: string;\n}\n","/* tslint:disable */\n/* eslint-disable */\nimport { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiConfiguration, ApiConfigurationParams } from './api-configuration';\n\nimport { PkgdashService } from './services/pkgdash.service';\n\n/**\n * Module that provides all services and configuration.\n */\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n PkgdashService,\n ApiConfiguration\n ],\n})\nexport class ApiModule {\n static forRoot(params: ApiConfigurationParams): ModuleWithProviders {\n return {\n ngModule: ApiModule,\n providers: [\n {\n provide: ApiConfiguration,\n useValue: params\n }\n ]\n }\n }\n\n constructor( \n @Optional() @SkipSelf() parentModule: ApiModule,\n @Optional() http: HttpClient\n ) {\n if (parentModule) {\n throw new Error('ApiModule is already loaded. Import in your base AppModule only.');\n }\n if (!http) {\n throw new Error('You need to import the HttpClientModule in your AppModule! \\n' +\n 'See also https://github.com/angular/angular/issues/20575');\n }\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\nimport { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiConfiguration } from './api-configuration';\n\n/**\n * Base class for services\n */\n@Injectable()\nexport class BaseService {\n constructor(\n protected config: ApiConfiguration,\n protected http: HttpClient\n ) {\n }\n\n private _rootUrl: string = '';\n\n /**\n * Returns the root url for all operations in this service. If not set directly in this\n * service, will fallback to `ApiConfiguration.rootUrl`.\n */\n get rootUrl(): string {\n return this._rootUrl || this.config.rootUrl;\n }\n\n /**\n * Sets the root URL for API operations in this service.\n */\n set rootUrl(rootUrl: string) {\n this._rootUrl = rootUrl;\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\nimport { HttpRequest, HttpParameterCodec, HttpParams, HttpHeaders, HttpContext } from '@angular/common/http';\n\n/**\n * Custom parameter codec to correctly handle the plus sign in parameter\n * values. See https://github.com/angular/angular/issues/18261\n */\nclass ParameterCodec implements HttpParameterCodec {\n encodeKey(key: string): string {\n return encodeURIComponent(key);\n }\n\n encodeValue(value: string): string {\n return encodeURIComponent(value);\n }\n\n decodeKey(key: string): string {\n return decodeURIComponent(key);\n }\n\n decodeValue(value: string): string {\n return decodeURIComponent(value);\n }\n}\nconst ParameterCodecInstance = new ParameterCodec();\n\n/**\n * Defines the options for appending a parameter\n */\ninterface ParameterOptions {\n style?: string;\n explode?: boolean;\n}\n\n/**\n * Base class for a parameter\n */\nabstract class Parameter {\n constructor(public name: string, public value: any, public options: ParameterOptions, defaultStyle: string, defaultExplode: boolean) {\n this.options = options || {};\n if (this.options.style === null || this.options.style === undefined) {\n this.options.style = defaultStyle;\n }\n if (this.options.explode === null || this.options.explode === undefined) {\n this.options.explode = defaultExplode;\n }\n }\n\n serializeValue(value: any, separator = ','): string {\n if (value === null || value === undefined) {\n return '';\n } else if (value instanceof Array) {\n return value.map(v => this.serializeValue(v).split(separator).join(encodeURIComponent(separator))).join(separator);\n } else if (typeof value === 'object') {\n const array: string[] = [];\n for (const key of Object.keys(value)) {\n let propVal = value[key];\n if (propVal !== null && propVal !== undefined) {\n propVal = this.serializeValue(propVal).split(separator).join(encodeURIComponent(separator));\n if (this.options.explode) {\n array.push(`${key}=${propVal}`);\n } else {\n array.push(key);\n array.push(propVal);\n }\n }\n }\n return array.join(separator);\n } else {\n return String(value);\n }\n }\n}\n\n/**\n * A parameter in the operation path\n */\nclass PathParameter extends Parameter {\n constructor(name: string, value: any, options: ParameterOptions) {\n super(name, value, options, 'simple', false);\n }\n\n append(path: string): string {\n let value = this.value;\n if (value === null || value === undefined) {\n value = '';\n }\n let prefix = this.options.style === 'label' ? '.' : '';\n let separator = this.options.explode ? prefix === '' ? ',' : prefix : ',';\n let alreadySerialized = false;\n if (this.options.style === 'matrix') {\n // The parameter name is just used as prefix, except in some cases...\n prefix = `;${this.name}=`;\n if (this.options.explode && typeof value === 'object') {\n prefix = ';';\n if (value instanceof Array) {\n // For arrays we have to repeat the name for each element\n value = value.map(v => `${this.name}=${this.serializeValue(v, ';')}`);\n value = value.join(';');\n alreadySerialized = true;\n } else {\n // For objects we have to put each the key / value pairs\n value = this.serializeValue(value, ';');\n alreadySerialized = true\n }\n }\n }\n value = prefix + (alreadySerialized ? value : this.serializeValue(value, separator));\n // Replace both the plain variable and the corresponding variant taking in the prefix and explode into account\n path = path.replace(`{${this.name}}`, value);\n path = path.replace(`{${prefix}${this.name}${this.options.explode ? '*' : ''}}`, value);\n return path;\n }\n\n // @ts-ignore\n serializeValue(value: any, separator = ','): string {\n var result = typeof value === 'string' ? encodeURIComponent(value) : super.serializeValue(value, separator);\n result = result.replace(/%3D/g, '=');\n result = result.replace(/%3B/g, ';');\n result = result.replace(/%2C/g, ',');\n return result;\n }\n}\n\n/**\n * A parameter in the query\n */\nclass QueryParameter extends Parameter {\n constructor(name: string, value: any, options: ParameterOptions) {\n super(name, value, options, 'form', true);\n }\n\n append(params: HttpParams): HttpParams {\n if (this.value instanceof Array) {\n // Array serialization\n if (this.options.explode) {\n for (const v of this.value) {\n params = params.append(this.name, this.serializeValue(v));\n }\n } else {\n const separator = this.options.style === 'spaceDelimited'\n ? ' ' : this.options.style === 'pipeDelimited'\n ? '|' : ',';\n return params.append(this.name, this.serializeValue(this.value, separator));\n }\n } else if (this.value !== null && typeof this.value === 'object') {\n // Object serialization\n if (this.options.style === 'deepObject') {\n // Append a parameter for each key, in the form `name[key]`\n for (const key of Object.keys(this.value)) {\n const propVal = this.value[key];\n if (propVal !== null && propVal !== undefined) {\n params = params.append(`${this.name}[${key}]`, this.serializeValue(propVal));\n }\n }\n } else if (this.options.explode) {\n // Append a parameter for each key without using the parameter name\n for (const key of Object.keys(this.value)) {\n const propVal = this.value[key];\n if (propVal !== null && propVal !== undefined) {\n params = params.append(key, this.serializeValue(propVal));\n }\n }\n } else {\n // Append a single parameter whose values are a comma-separated list of key,value,key,value...\n const array: any[] = [];\n for (const key of Object.keys(this.value)) {\n const propVal = this.value[key];\n if (propVal !== null && propVal !== undefined) {\n array.push(key);\n array.push(propVal);\n }\n }\n params = params.append(this.name, this.serializeValue(array));\n }\n } else if (this.value !== null && this.value !== undefined) {\n // Plain value\n params = params.append(this.name, this.serializeValue(this.value));\n }\n return params;\n }\n}\n\n/**\n * A parameter in the HTTP request header\n */\nclass HeaderParameter extends Parameter {\n constructor(name: string, value: any, options: ParameterOptions) {\n super(name, value, options, 'simple', false);\n }\n\n append(headers: HttpHeaders): HttpHeaders {\n if (this.value !== null && this.value !== undefined) {\n if (this.value instanceof Array) {\n for (const v of this.value) {\n headers = headers.append(this.name, this.serializeValue(v));\n }\n } else {\n headers = headers.append(this.name, this.serializeValue(this.value));\n }\n }\n return headers;\n }\n}\n\n/**\n * Helper to build http requests from parameters\n */\nexport class RequestBuilder {\n\n private _path = new Map();\n private _query = new Map();\n private _header = new Map();\n _bodyContent: any | null;\n _bodyContentType?: string;\n\n constructor(\n public rootUrl: string,\n public operationPath: string,\n public method: string) {\n }\n\n /**\n * Sets a path parameter\n */\n path(name: string, value: any, options?: ParameterOptions): void {\n this._path.set(name, new PathParameter(name, value, options || {}));\n }\n\n /**\n * Sets a query parameter\n */\n query(name: string, value: any, options?: ParameterOptions): void {\n this._query.set(name, new QueryParameter(name, value, options || {}));\n }\n\n /**\n * Sets a header parameter\n */\n header(name: string, value: any, options?: ParameterOptions): void {\n this._header.set(name, new HeaderParameter(name, value, options || {}));\n }\n\n /**\n * Sets the body content, along with the content type\n */\n body(value: any, contentType = 'application/json'): void {\n if (value instanceof Blob) {\n this._bodyContentType = value.type;\n } else {\n this._bodyContentType = contentType;\n }\n if (this._bodyContentType === 'application/x-www-form-urlencoded' && value !== null && typeof value === 'object') {\n // Handle URL-encoded data\n const pairs: Array<[string, string]> = [];\n for (const key of Object.keys(value)) {\n let val = value[key];\n if (!(val instanceof Array)) {\n val = [val];\n }\n for (const v of val) {\n const formValue = this.formDataValue(v);\n if (formValue !== null) {\n pairs.push([key, formValue]);\n }\n }\n }\n this._bodyContent = pairs.map(p => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`).join('&');\n } else if (this._bodyContentType === 'multipart/form-data') {\n // Handle multipart form data\n const formData = new FormData();\n if (value !== null && value !== undefined) {\n for (const key of Object.keys(value)) {\n const val = value[key];\n if (val instanceof Array) {\n for (const v of val) {\n const toAppend = this.formDataValue(v);\n if (toAppend !== null) {\n formData.append(key, toAppend);\n }\n }\n } else {\n const toAppend = this.formDataValue(val);\n if (toAppend !== null) {\n formData.set(key, toAppend);\n }\n }\n }\n }\n this._bodyContent = formData;\n } else {\n // The body is the plain content\n this._bodyContent = value;\n }\n }\n\n private formDataValue(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n if (value instanceof Blob) {\n return value;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n /**\n * Builds the request with the current set parameters\n */\n build(options?: {\n /** Which content types to accept */\n accept?: string;\n\n /** The expected response type */\n responseType?: 'json' | 'text' | 'blob' | 'arraybuffer';\n\n /** Whether to report progress on uploads / downloads */\n reportProgress?: boolean;\n\n /** Allow passing HttpContext for HttpClient */\n context?: HttpContext;\n }): HttpRequest {\n\n options = options || {};\n\n // Path parameters\n let path = this.operationPath;\n for (const pathParam of this._path.values()) {\n path = pathParam.append(path);\n }\n const url = this.rootUrl + path;\n\n // Query parameters\n let httpParams = new HttpParams({\n encoder: ParameterCodecInstance\n });\n for (const queryParam of this._query.values()) {\n httpParams = queryParam.append(httpParams);\n }\n\n // Header parameters\n let httpHeaders = new HttpHeaders();\n if (options.accept) {\n httpHeaders = httpHeaders.append('Accept', options.accept);\n }\n for (const headerParam of this._header.values()) {\n httpHeaders = headerParam.append(httpHeaders);\n }\n\n // Request content headers\n if (this._bodyContentType && !(this._bodyContent instanceof FormData)) {\n httpHeaders = httpHeaders.set('Content-Type', this._bodyContentType);\n }\n\n // Perform the request\n return new HttpRequest(this.method.toUpperCase(), url, this._bodyContent, {\n params: httpParams,\n headers: httpHeaders,\n responseType: options.responseType,\n reportProgress: options.reportProgress,\n context: options.context\n });\n }\n}\n","export { PkgdashService } from './services/pkgdash.service';\n","/* tslint:disable */\n/* eslint-disable */\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { BaseService } from '../base-service';\nimport { ApiConfiguration } from '../api-configuration';\nimport { StrictHttpResponse } from '../strict-http-response';\nimport { RequestBuilder } from '../request-builder';\n\nimport { CommentCreateReq } from '../models/comment-create-req';\nimport { CommentCreateRsp } from '../models/comment-create-rsp';\nimport { CommentDeleteRsp } from '../models/comment-delete-rsp';\nimport { CommentListRsp } from '../models/comment-list-rsp';\nimport { CommentLookupRsp } from '../models/comment-lookup-rsp';\nimport { HandlerListRsp } from '../models/handler-list-rsp';\nimport { ModuleListRsp } from '../models/module-list-rsp';\nimport { PackageCreateReq } from '../models/package-create-req';\nimport { PackageCreateRsp } from '../models/package-create-rsp';\nimport { PackageDeleteRsp } from '../models/package-delete-rsp';\nimport { PackageListRsp } from '../models/package-list-rsp';\nimport { PackageLookupRsp } from '../models/package-lookup-rsp';\nimport { PackageModulesRsp } from '../models/package-modules-rsp';\nimport { PackageUpdateReq } from '../models/package-update-req';\nimport { PackageUpdateRsp } from '../models/package-update-rsp';\n\n@Injectable({ providedIn: 'root' })\nexport class PkgdashService extends BaseService {\n constructor(config: ApiConfiguration, http: HttpClient) {\n super(config, http);\n }\n\n /** Path part for operation `commentLookup()` */\n static readonly CommentLookupPath = '/v1/comments/{id}';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `commentLookup()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentLookup$Response(\n params: {\n id: number;\n package?: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.CommentLookupPath, 'get');\n if (params) {\n rb.path('id', params.id, {});\n rb.query('package', params.package, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `commentLookup$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentLookup(\n params: {\n id: number;\n package?: number;\n },\n context?: HttpContext\n ): Observable {\n return this.commentLookup$Response(params, context).pipe(\n map((r: StrictHttpResponse): CommentLookupRsp => r.body)\n );\n }\n\n /** Path part for operation `moduleList()` */\n static readonly ModuleListPath = '/v1/modules';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `moduleList()` instead.\n *\n * This method doesn't expect any request body.\n */\n moduleList$Response(\n params?: {\n package?: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.ModuleListPath, 'get');\n if (params) {\n rb.query('package', params.package, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `moduleList$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n moduleList(\n params?: {\n package?: number;\n },\n context?: HttpContext\n ): Observable {\n return this.moduleList$Response(params, context).pipe(\n map((r: StrictHttpResponse): ModuleListRsp => r.body)\n );\n }\n\n /** Path part for operation `packageList()` */\n static readonly PackageListPath = '/v1/packages';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageList()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageList$Response(\n params?: {\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageListPath, 'get');\n if (params) {\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageList$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageList(\n params?: {\n },\n context?: HttpContext\n ): Observable {\n return this.packageList$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageListRsp => r.body)\n );\n }\n\n /** Path part for operation `packageCreate()` */\n static readonly PackageCreatePath = '/v1/packages';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageCreate()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n packageCreate$Response(\n params: {\n body: PackageCreateReq\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageCreatePath, 'post');\n if (params) {\n rb.body(params.body, 'application/json');\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageCreate$Response()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n packageCreate(\n params: {\n body: PackageCreateReq\n },\n context?: HttpContext\n ): Observable {\n return this.packageCreate$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageCreateRsp => r.body)\n );\n }\n\n /** Path part for operation `packageLookup()` */\n static readonly PackageLookupPath = '/v1/packages/{id}';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageLookup()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageLookup$Response(\n params: {\n id: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageLookupPath, 'get');\n if (params) {\n rb.path('id', params.id, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageLookup$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageLookup(\n params: {\n id: number;\n },\n context?: HttpContext\n ): Observable {\n return this.packageLookup$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageLookupRsp => r.body)\n );\n }\n\n /** Path part for operation `packageUpdate()` */\n static readonly PackageUpdatePath = '/v1/packages/{id}';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageUpdate()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n packageUpdate$Response(\n params: {\n id: number;\n body: PackageUpdateReq\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageUpdatePath, 'put');\n if (params) {\n rb.path('id', params.id, {});\n rb.body(params.body, 'application/json');\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageUpdate$Response()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n packageUpdate(\n params: {\n id: number;\n body: PackageUpdateReq\n },\n context?: HttpContext\n ): Observable {\n return this.packageUpdate$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageUpdateRsp => r.body)\n );\n }\n\n /** Path part for operation `packageDelete()` */\n static readonly PackageDeletePath = '/v1/packages/{id}';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageDelete()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageDelete$Response(\n params: {\n id: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageDeletePath, 'delete');\n if (params) {\n rb.path('id', params.id, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageDelete$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageDelete(\n params: {\n id: number;\n },\n context?: HttpContext\n ): Observable {\n return this.packageDelete$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageDeleteRsp => r.body)\n );\n }\n\n /** Path part for operation `commentDelete()` */\n static readonly CommentDeletePath = '/v1/packages/{package_id}/comments/{id}';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `commentDelete()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentDelete$Response(\n params: {\n package_id: number;\n id: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.CommentDeletePath, 'delete');\n if (params) {\n rb.path('package_id', params.package_id, {});\n rb.path('id', params.id, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `commentDelete$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentDelete(\n params: {\n package_id: number;\n id: number;\n },\n context?: HttpContext\n ): Observable {\n return this.commentDelete$Response(params, context).pipe(\n map((r: StrictHttpResponse): CommentDeleteRsp => r.body)\n );\n }\n\n /** Path part for operation `commentList()` */\n static readonly CommentListPath = '/v1/packages/{package}/comments';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `commentList()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentList$Response(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.CommentListPath, 'get');\n if (params) {\n rb.path('package', params.package, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `commentList$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n commentList(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable {\n return this.commentList$Response(params, context).pipe(\n map((r: StrictHttpResponse): CommentListRsp => r.body)\n );\n }\n\n /** Path part for operation `commentCreate()` */\n static readonly CommentCreatePath = '/v1/packages/{package}/comments';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `commentCreate()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n commentCreate$Response(\n params: {\n package: string;\n body: CommentCreateReq\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.CommentCreatePath, 'post');\n if (params) {\n rb.path('package', params.package, {});\n rb.body(params.body, 'application/json');\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `commentCreate$Response()` instead.\n *\n * This method sends `application/json` and handles request body of type `application/json`.\n */\n commentCreate(\n params: {\n package: string;\n body: CommentCreateReq\n },\n context?: HttpContext\n ): Observable {\n return this.commentCreate$Response(params, context).pipe(\n map((r: StrictHttpResponse): CommentCreateRsp => r.body)\n );\n }\n\n /** Path part for operation `handlerList()` */\n static readonly HandlerListPath = '/v1/packages/{package}/handlers';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `handlerList()` instead.\n *\n * This method doesn't expect any request body.\n */\n handlerList$Response(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.HandlerListPath, 'get');\n if (params) {\n rb.path('package', params.package, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `handlerList$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n handlerList(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable {\n return this.handlerList$Response(params, context).pipe(\n map((r: StrictHttpResponse): HandlerListRsp => r.body)\n );\n }\n\n /** Path part for operation `packageModules()` */\n static readonly PackageModulesPath = '/v1/packages/{package}/modules';\n\n /**\n * This method provides access to the full `HttpResponse`, allowing access to response headers.\n * To access only the response body, use `packageModules()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageModules$Response(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable> {\n const rb = new RequestBuilder(this.rootUrl, PkgdashService.PackageModulesPath, 'get');\n if (params) {\n rb.path('package', params.package, {});\n }\n\n return this.http.request(\n rb.build({ responseType: 'json', accept: 'application/json', context })\n ).pipe(\n filter((r: any): r is HttpResponse => r instanceof HttpResponse),\n map((r: HttpResponse) => {\n return r as StrictHttpResponse;\n })\n );\n }\n\n /**\n * This method provides access only to the response body.\n * To access the full response (for headers, for example), `packageModules$Response()` instead.\n *\n * This method doesn't expect any request body.\n */\n packageModules(\n params: {\n package: number;\n },\n context?: HttpContext\n ): Observable {\n return this.packageModules$Response(params, context).pipe(\n map((r: StrictHttpResponse): PackageModulesRsp => r.body)\n );\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { PackageListComponent } from './components/package-list/package-list.component';\nimport { PackageComponent } from './components/package/package.component';\nimport { PackageResolver } from './resolvers/package/package.resolver';\n\nconst routes: Routes = [\n {\n path: 'packages',\n component: PackageListComponent\n },\n {\n path: 'packages/:id',\n component: PackageComponent,\n resolve: {\n package: PackageResolver,\n },\n },\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'packages',\n },\n {\n path: '**',\n redirectTo: 'packages',\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n title = 'ui';\n}\n","","export class AppConstants {\n\n public static SNACKBAR_MSG_DURATION = 5000;\n public static SNACKBAR_ERR_DURATION = 10000;\n\n public static RETRY_ATTEMPTS = 3;\n public static RETRY_DELAY = 500;\n public static RETRY_HTTP_CODES = [408, 500];\n\n public static AUTOCOMPLETE_DEBOUNCE = 1000;\n public static AUTOCOMPLETE_LIMIT = 20;\n\n public static SEARCH_DEBOUNCE = 1000;\n \n public static API = getAPI();\n}\n\nfunction getAPI(): string {\n const baseHref = new URL(document.baseURI);\n \n let path = baseHref.pathname.slice(0, baseHref.pathname.indexOf('/ui'))\n let api = `${baseHref.protocol}//${baseHref.host}`+path;\n \n console.log(`API ${api}`);\n return api;\n}\n\n/*\n\nexport const OAuthConfig: AuthConfig = {\n\n // Url of the Identity Provider\n issuer: AppConstants.API,\n\n // URL of the SPA to redirect the user to after login\n redirectUri: AppConstants.API + '/ui/index.html',\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n clientId: 'authn',\n\n dummyClientSecret: 'secret',\n\n // set the scope for the permissions the client should request\n // The first four are defined by OIDC.\n // Important: Request offline_access to get a refresh token\n // The api scope is a usecase specific one\n scope: 'openid profile email offline_access api',\n\n responseType: 'code',\n\n // turn on validation that discovery document endpoints start with the issuer url defined above\n strictDiscoveryDocumentValidation: true,\n\n // show debug\n showDebugInformation: true,\n\n // Activate Session Checks:\n sessionChecksEnabled: true,\n\n // Disable requirement of https for tests\n requireHttps: false,\n\n // oidc: true, // ID_Token\n //this.oauthService.setStorage(sessionStorage);\n\n preserveRequestedRoute: true,\n};\n*/","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from \"@angular/material/table\"\nimport { ApiModule } from './api/api.module';\nimport { HttpClientModule } from '@angular/common/http';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatListModule } from '@angular/material/list';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { PackageDialogComponent } from './components/package-dialog/package-dialog.component';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dialog.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MessageService } from './services/message/message.service';\nimport { ConfirmService } from './services/confirm/confirm.service';\nimport { PackageListComponent } from './components/package-list/package-list.component';\nimport { PackagesService } from './services/packages/packages.service';\nimport { PkgdashService } from './api/services';\nimport { AppConstants } from './app.constants';\nimport { PackageComponent } from './components/package/package.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n PackageListComponent,\n PackageDialogComponent,\n ConfirmDialogComponent,\n PackageComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n MatCardModule,\n MatRippleModule,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n MatTableModule,\n MatListModule,\n MatPaginatorModule,\n MatSortModule,\n MatInputModule,\n MatCheckboxModule,\n MatButtonModule,\n FormsModule,\n ReactiveFormsModule,\n BrowserAnimationsModule,\n MatDialogModule,\n MatIconModule,\n HttpClientModule,\n MatMenuModule,\n MatRadioModule,\n MatSelectModule,\n MatSnackBarModule,\n ApiModule.forRoot({\n rootUrl: AppConstants.API,\n })\n ],\n exports: [\n MatSnackBarModule,\n MatSelectModule,\n MatRadioModule,\n MatMenuModule,\n MatDialogModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n MatPaginatorModule,\n MatSortModule,\n ReactiveFormsModule,\n FormsModule,\n MatCheckboxModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatCardModule,\n MatRippleModule,\n MatPaginatorModule,\n MatTableModule,\n HttpClientModule,\n PackageDialogComponent,\n ],\n providers: [\n PkgdashService,\n PackagesService,\n ConfirmService,\n MessageService,\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { ChangeDetectionStrategy, Component, HostListener, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss']\n})\n\nexport class ConfirmDialogComponent implements OnInit {\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: {\n title: string,\n message: string,\n },\n private mdDialogRef: MatDialogRef,\n ) { }\n\n ngOnInit(): void { }\n\n\n public cancel() {\n this.mdDialogRef.close();\n }\n\n public submit(value: any) {\n this.mdDialogRef.close(value);\n }\n\n @HostListener(\"keydown.esc\")\n public onEsc() {\n this.cancel();\n }\n}\n","

{{data.title}}

\n\n

{{data.message}}

\n
\n\n \n \n","import { ChangeDetectionStrategy, Component, HostListener, Inject, Input, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Package } from 'src/app/api/models/package';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'app-package-dialog',\n templateUrl: './package-dialog.component.html',\n styleUrls: ['./package-dialog.component.scss']\n})\nexport class PackageDialogComponent implements OnInit {\n\n packageForm: UntypedFormGroup = new UntypedFormGroup({});\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: {\n pkg: Package,\n title: string,\n },\n private mdDialogRef: MatDialogRef,\n private formBuilder: UntypedFormBuilder,\n ) {\n if (!data.pkg) {\n data.pkg = {\n name: '',\n url: '',\n }\n }\n }\n\n ngOnInit(): void {\n this.packageForm = this.formBuilder.group({\n name: [{ value: this.data.pkg.name, disabled: false },\n Validators.required,\n ],\n url: [{ value: this.data.pkg.url, disabled: false },\n Validators.compose([\n Validators.required,\n Validators.pattern(\"(^(http[s]?:\\/\\/(.*)$))?\"),\n ]),\n ],\n description: [{ value: this.data.pkg.description, disabled: false },\n Validators.compose([\n Validators.required,\n Validators.minLength(4),\n ]),\n ],\n });\n }\n\n public cancel() {\n this.mdDialogRef.close();\n }\n\n public submit(value: any) {\n this.mdDialogRef.close(value);\n }\n\n @HostListener(\"keydown.esc\")\n public onEsc() {\n this.cancel();\n }\n}\n","
\n

{{data.title}}

\n \n

\n \n Name\n \n \n \n \n

\n

\n \n Description\n \n \n \n \n

\n

\n \n URL\n \n \n \n \n

\n\n
\n\n \n \n\n
\n\n","import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { Package } from '../../api/models/package';\nimport { PkgdashService } from '../../api/services/pkgdash.service';\nimport { debounceTime, distinctUntilChanged, fromEvent, merge, Observable, of, tap } from 'rxjs';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { PackagesService } from '../../services/packages/packages.service';\nimport { PackagesDataSource } from '../../datasources/packages';\nimport { MatSort, Sort, SortDirection } from '@angular/material/sort';\nimport { Router } from '@angular/router';\nimport { ConfirmService } from 'src/app/services/confirm/confirm.service';\nimport { AppConstants } from 'src/app/app.constants';\nimport { MessageService } from 'src/app/services/message/message.service';\nimport { ErrorRsp, PackageCreateRsp, PackageDeleteRsp, PackageUpdateRsp } from 'src/app/api/models';\n\n\n@Component({\n selector: 'app-packages',\n templateUrl: './package-list.component.html',\n styleUrls: ['./package-list.component.scss'],\n providers: [PkgdashService, MessageService]\n})\n\nexport class PackageListComponent implements OnInit, AfterViewInit {\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n @ViewChild('input') input!: ElementRef;\n\n selectedPackage?: Package;\n\n dataSource: PackagesDataSource;\n selectedRowIndex: any;\n\n packages$!: Observable;\n\n public itemsCount = 20;\n sortField = 'name';\n sortOrder: SortDirection = 'asc';\n\n displayedColumns: string[] = ['name', 'modules', 'issues', 'comments', 'coverage', 'handlers', 'actions'];\n\n constructor(\n private router: Router,\n private packageDialog: PackagesService,\n private pkgdashService: PkgdashService,\n private confirmDialog: ConfirmService,\n private messageService: MessageService,\n ) {\n this.dataSource = new PackagesDataSource(this.pkgdashService);\n }\n\n createPackageDialog(): void {\n this.packageDialog.open({\n height: '400px',\n width: '600px',\n autoFocus: true,\n disableClose: false,\n backdropClass: \"package-dialog\",\n data: {\n title: 'Create package'\n }\n });\n\n this.packageDialog.confirmed().subscribe((data: any) => {\n if (data) {\n this.pkgdashService.packageCreate(data)\n .subscribe({\n next: (rsp: PackageCreateRsp) => {\n this.loadPackages();\n this.reloadComponent();\n this.messageService.showMessage(\"package \" + rsp.package!.name + \" created\")\n },\n error: (err: ErrorRsp) => {\n this.messageService.showMessage(\"package \" + data.name + \" not created, error \" + err.details)\n }\n });\n }\n });\n }\n\n updatePackageDialog(pkg: Package): void {\n this.packageDialog.open({\n height: '400px',\n width: '600px',\n autoFocus: true,\n disableClose: false,\n backdropClass: \"package-dialog\",\n data: {\n pkg: pkg,\n title: 'Update package ' + pkg.name,\n }\n });\n\n this.packageDialog.confirmed().subscribe((data: any) => {\n if (data) {\n this.pkgdashService.packageUpdate({\n id: pkg.id!,\n body: data,\n }).subscribe({\n next: (rsp: PackageUpdateRsp) => {\n this.loadPackages();\n this.reloadComponent();\n this.messageService.showMessage(\"package \" + data.name + \" updated\")\n },\n error: (err: ErrorRsp) => {\n this.messageService.showMessage(\"package \" + data.name + \" not updated, error \" + err.details)\n }\n })\n }\n });\n }\n\n deletePackageDialog(pkg: Package): void {\n this.confirmDialog.open({\n height: '200px',\n width: '300px',\n autoFocus: true,\n disableClose: false,\n backdropClass: \"package-dialog\",\n data: {\n title: 'Delete package ' + pkg.name,\n message: 'Are you sure?',\n }\n });\n\n this.confirmDialog.confirmed().subscribe((data: any) => {\n if (data) {\n this.pkgdashService.packageDelete({\n id: pkg.id!,\n }).subscribe({\n next: (rsp: PackageDeleteRsp) => {\n this.loadPackages();\n this.reloadComponent();\n this.messageService.showMessage(\"package \" + data.name + \" deleted\")\n },\n error: (err: ErrorRsp) => {\n this.messageService.showMessage(\"package \" + data.name + \" not deleted, error \" + err.details)\n }\n })\n }\n })\n }\n\n selectPackage(pkg: Package): void {\n this.selectedPackage = pkg;\n }\n\n ngAfterViewInit() {\n\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(AppConstants.SEARCH_DEBOUNCE),\n distinctUntilChanged(),\n tap(() => {\n this.paginator.pageIndex = 0;\n this.loadPackages();\n })\n )\n .subscribe();\n\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => this.loadPackages())\n )\n .subscribe();\n }\n\n public sortPackages(event: Sort): void {\n this.loadPackages()\n this.reloadComponent()\n }\n\n private reloadComponent(): void {\n let currentUrl = this.router.url;\n this.router.routeReuseStrategy.shouldReuseRoute = () => false;\n this.router.onSameUrlNavigation = 'reload';\n this.router.navigate([currentUrl]);\n }\n\n private loadPackages(): void {\n this.dataSource.list(\n this.input.nativeElement.value,\n this.sort.active,\n this.sort.direction,\n this.paginator.pageIndex,\n this.paginator.pageSize);\n }\n\n ngOnInit(): void {\n this.dataSource.list('', this.sortField, this.sortOrder, 0, this.itemsCount);\n this.packages$ = this.dataSource.connect();\n }\n}\n","\n\n
\n\n\n \n\n\n
\n \n
\n\n\n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n
Name{{package.name}}
{{package.description}}
URL{{package.url}}Issues{{package.issues ? package.issues : 0}}Modules{{package.modules ? package.modules : 0}}Comments{{package.comments ? package.comments : 0}}Coverage{{package.coverage ? package.coverage : 0}}Handlers{{package.handlers ? package.handlers : 0}}Actions\n \n \n \n \n \n
\n\n\n\n\n\n
","import { Component, OnInit, ViewChild, AfterViewInit, ElementRef } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { tap, merge, debounceTime, distinctUntilChanged, fromEvent } from 'rxjs';\n//import { Location } from '@angular/common';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort, SortDirection } from '@angular/material/sort';\nimport { AppConstants } from 'src/app/app.constants';\nimport { MessageService } from 'src/app/services/message/message.service';\nimport { ErrorRsp, Handler, Package } from 'src/app/api/models';\nimport { PkgdashService } from 'src/app/api/services';\nimport { HandlersDataSource } from 'src/app/datasources/handlers';\n\n@Component({\n selector: 'app-package',\n templateUrl: './package.component.html',\n styleUrls: ['./package.component.scss'],\n providers: [PkgdashService],\n})\n\nexport class PackageComponent implements OnInit, AfterViewInit {\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n @ViewChild('input') input!: ElementRef;\n\n package!: Package;\n\n public itemsCount = 10;\n sortField = 'name';\n sortOrder: SortDirection = 'asc';\n\n displayedColumns: string[] = ['name', 'coverage'];\n\n dataSource: HandlersDataSource;\n selectedRowIndex: any;\n\n constructor(\n private route: ActivatedRoute,\n //private location: Location,\n private pkgdashService: PkgdashService,\n private messageService: MessageService,\n ) {\n this.dataSource = new HandlersDataSource(this.pkgdashService);\n }\n\n highlight(row: Handler) {\n this.selectedRowIndex = row.id;\n }\n\n ngAfterViewInit() {\n\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(AppConstants.SEARCH_DEBOUNCE),\n distinctUntilChanged(),\n tap(() => {\n this.paginator.pageIndex = 0;\n this.loadHandlers();\n })\n )\n .subscribe();\n\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => this.loadHandlers())\n )\n .subscribe();\n }\n\n public sortHandlers(event: Sort): void {\n this.loadHandlers()\n }\n\n private loadHandlers(): void {\n this.dataSource.list(\n this.package.id!,\n '',\n this.sort.active,\n this.sort.direction,\n this.paginator.pageIndex,\n this.paginator.pageSize);\n }\n\n\n ngOnInit(): void {\n this.package = this.route.snapshot.data['package'];\n this.dataSource.list(this.package.id!, '', this.sortField, this.sortOrder, 0, this.itemsCount);\n this.selectedRowIndex = 1;\n }\n\n}\n","

modules

\n\n
\n\n\n\n \n \n \n \n\n \n \n \n \n\n \n \n
Name{{handler.name}}Coverage{{handler.coverage}}
\n\n\n\n\n\n
","import { DataSource } from \"@angular/cdk/collections\";\nimport { Handler } from \"../api/models/handler\"\nimport { BehaviorSubject, Observable, retry, map, catchError, of, finalize } from \"rxjs\";\nimport { PkgdashService } from \"../api/services\";\n\nexport class HandlersDataSource extends DataSource {\n\n private handlerSubject = new BehaviorSubject([]);\n private loadingSubject = new BehaviorSubject(false);\n\n public loading$ = this.loadingSubject.asObservable();\n\n constructor(\n private pkgdashService: PkgdashService\n ) {\n super();\n }\n\n connect(): Observable {\n return this.handlerSubject.asObservable();\n }\n\n disconnect(): void {\n this.handlerSubject.complete();\n this.loadingSubject.complete();\n }\n\n list(id = 0, filter = '', sortField = 'name', sortOrder = 'asc', page = 0, limit = 20) {\n this.loadingSubject.next(true);\n this.pkgdashService.handlerList({package: id}).pipe(\n retry(2),\n map(rsp => rsp.handlers || []),\n catchError(this.handleError('list', [])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(handlers => this.handlerSubject.next(handlers));\n }\n\n\n lookup(id: number, filter: string,\n sortDirection: string, pageIndex: number, pageSize: number) {\n }\n\n private handleError(operation = '', result?: T) {\n return (error: any): Observable => {\n\n // TODO: send the error to remote logging infrastructure\n console.error(error); // log to console instead\n\n // Let the app keep running by returning an empty result.\n return of(result as T);\n };\n };\n}","import { DataSource } from \"@angular/cdk/collections\";\nimport { Package } from \"../api/models/package\"\nimport { BehaviorSubject, Observable, retry, map, catchError, of, finalize } from \"rxjs\";\nimport { PkgdashService } from \"../api/services\";\n\nexport class PackagesDataSource extends DataSource {\n\n private packageSubject = new BehaviorSubject([]);\n private loadingSubject = new BehaviorSubject(false);\n\n public loading$ = this.loadingSubject.asObservable();\n\n constructor(\n private pkgdashService: PkgdashService\n ) {\n super();\n }\n\n connect(): Observable {\n return this.packageSubject.asObservable();\n }\n\n disconnect(): void {\n this.packageSubject.complete();\n this.loadingSubject.complete();\n }\n\n list(filter = '', sortField = 'name', sortOrder = 'asc', page = 0, limit = 20) {\n this.loadingSubject.next(true);\n this.pkgdashService.packageList().pipe(\n retry(2),\n map(rsp => rsp.packages || []),\n catchError(this.handleError('list', [])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(packages => this.packageSubject.next(packages));\n }\n\n lookup(id: number, filter: string,\n sortDirection: string, pageIndex: number, pageSize: number) {\n }\n\n private handleError(operation = '', result?: T) {\n return (error: any): Observable => {\n\n // TODO: send the error to remote logging infrastructure\n console.error(error); // log to console instead\n\n // Let the app keep running by returning an empty result.\n return of(result as T);\n };\n };\n}","import { Injectable } from '@angular/core';\nimport {\n Router, Resolve,\n RouterStateSnapshot,\n ActivatedRouteSnapshot\n} from '@angular/router';\nimport { Package } from \"../../api/models/package\";\nimport { map, Observable, of } from \"rxjs\";\nimport { PkgdashService } from '../../api/services/pkgdash.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class PackageResolver implements Resolve {\n\n constructor(private pkgdashService: PkgdashService) { }\n\n resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\n console.log(\"resolver with \"+ route.paramMap.get('id'));\n let id = Number(route.paramMap.get('id'));\n\n return this.pkgdashService.packageLookup({ id: id }).pipe(\n map(rsp => rsp.package!)\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { map, Observable, take } from 'rxjs';\nimport { ConfirmDialogComponent } from '../../components/confirm-dialog/confirm-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmService {\n\n dialogRef!: MatDialogRef;\n\n constructor(\n private dialog: MatDialog\n ) { }\n\n public open(options: MatDialogConfig) {\n this.dialogRef = this.dialog.open(ConfirmDialogComponent, options);\n }\n\n public confirmed(): Observable {\n return this.dialogRef.afterClosed().pipe(take(1), map(res => {\n return res;\n }\n ));\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService {\n\n constructor(\n private snackbar: MatSnackBar,\n ) {\n }\n\n showMessage(message: string, action?: string, config?: MatSnackBarConfig) {\n let cfg = config\n if (!cfg) {\n cfg = { duration: 2000 }\n }\n this.snackbar.open(message, action, cfg);\n }\n}","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { map, Observable, take } from 'rxjs';\nimport { PackageDialogComponent } from '../../components/package-dialog/package-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PackagesService {\n\n dialogRef!: MatDialogRef;\n\n constructor(\n private dialog: MatDialog\n ) { }\n\n public open(options: MatDialogConfig) {\n this.dialogRef = this.dialog.open(PackageDialogComponent, options);\n }\n\n public confirmed(): Observable {\n return this.dialogRef.afterClosed().pipe(take(1), map(res => {\n return res;\n }\n ));\n }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\nimport 'zone.js/plugins/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"names":["ElementRef","PkgdashService","debounceTime","distinctUntilChanged","fromEvent","merge","Observable","tap","MatPaginator","PackagesDataSource","MatSort","AppConstants","MessageService","i0","PackageListComponent","constructor","router","packageDialog","pkgdashService","confirmDialog","messageService","dataSource","createPackageDialog","open","height","width","autoFocus","disableClose","backdropClass","data","title","confirmed","subscribe","packageCreate","next","rsp","loadPackages","reloadComponent","showMessage","package","name","error","err","details","updatePackageDialog","pkg","packageUpdate","id","body","deletePackageDialog","message","packageDelete","selectPackage","selectedPackage","ngAfterViewInit","input","nativeElement","pipe","SEARCH_DEBOUNCE","paginator","pageIndex","sort","sortChange","page","sortPackages","event","currentUrl","url","routeReuseStrategy","shouldReuseRoute","onSameUrlNavigation","navigate","list","value","active","direction","pageSize","ngOnInit","sortField","sortOrder","itemsCount","packages$","connect","selectors","viewQuery","decls","vars","consts","template","ctx"],"sourceRoot":"webpack:///","x_google_ignoreList":[]} \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/polyfills.5822e5466085ff0d.js b/cmd/pkgdash/assets/ui/polyfills.5822e5466085ff0d.js deleted file mode 100644 index e1edda8..0000000 --- a/cmd/pkgdash/assets/ui/polyfills.5822e5466085ff0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkui=self.webpackChunkui||[]).push([[429],{435:(ie,Ee,de)=>{de(583)},583:()=>{!function(e){const n=e.performance;function i(M){n&&n.mark&&n.mark(M)}function o(M,E){n&&n.measure&&n.measure(M,E)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function a(M){return c+M}const y=!0===e[a("forceDuplicateZoneCheck")];if(e.Zone){if(y||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let d=(()=>{class M{constructor(t,r){this._parent=t,this._name=r?r.name||"unnamed":"",this._properties=r&&r.properties||{},this._zoneDelegate=new v(this,this._parent&&this._parent._zoneDelegate,r)}static assertZonePatched(){if(e.Promise!==oe.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=M.current;for(;t.parent;)t=t.parent;return t}static get current(){return U.zone}static get currentTask(){return re}static __load_patch(t,r,k=!1){if(oe.hasOwnProperty(t)){if(!k&&y)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const C="Zone:"+t;i(C),oe[t]=r(e,M,z),o(C,C)}}get parent(){return this._parent}get name(){return this._name}get(t){const r=this.getZoneWith(t);if(r)return r._properties[t]}getZoneWith(t){let r=this;for(;r;){if(r._properties.hasOwnProperty(t))return r;r=r._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,r){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const k=this._zoneDelegate.intercept(this,t,r),C=this;return function(){return C.runGuarded(k,this,arguments,r)}}run(t,r,k,C){U={parent:U,zone:this};try{return this._zoneDelegate.invoke(this,t,r,k,C)}finally{U=U.parent}}runGuarded(t,r=null,k,C){U={parent:U,zone:this};try{try{return this._zoneDelegate.invoke(this,t,r,k,C)}catch($){if(this._zoneDelegate.handleError(this,$))throw $}}finally{U=U.parent}}runTask(t,r,k){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||K).name+"; Execution: "+this.name+")");if(t.state===x&&(t.type===Q||t.type===w))return;const C=t.state!=p;C&&t._transitionTo(p,j),t.runCount++;const $=re;re=t,U={parent:U,zone:this};try{t.type==w&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,r,k)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==x&&t.state!==h&&(t.type==Q||t.data&&t.data.isPeriodic?C&&t._transitionTo(j,p):(t.runCount=0,this._updateTaskCount(t,-1),C&&t._transitionTo(x,p,x))),U=U.parent,re=$}}scheduleTask(t){if(t.zone&&t.zone!==this){let k=this;for(;k;){if(k===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);k=k.parent}}t._transitionTo(X,x);const r=[];t._zoneDelegates=r,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(k){throw t._transitionTo(h,X,x),this._zoneDelegate.handleError(this,k),k}return t._zoneDelegates===r&&this._updateTaskCount(t,1),t.state==X&&t._transitionTo(j,X),t}scheduleMicroTask(t,r,k,C){return this.scheduleTask(new m(I,t,r,k,C,void 0))}scheduleMacroTask(t,r,k,C,$){return this.scheduleTask(new m(w,t,r,k,C,$))}scheduleEventTask(t,r,k,C,$){return this.scheduleTask(new m(Q,t,r,k,C,$))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||K).name+"; Execution: "+this.name+")");t._transitionTo(G,j,p);try{this._zoneDelegate.cancelTask(this,t)}catch(r){throw t._transitionTo(h,G),this._zoneDelegate.handleError(this,r),r}return this._updateTaskCount(t,-1),t._transitionTo(x,G),t.runCount=0,t}_updateTaskCount(t,r){const k=t._zoneDelegates;-1==r&&(t._zoneDelegates=null);for(let C=0;CM.hasTask(t,r),onScheduleTask:(M,E,t,r)=>M.scheduleTask(t,r),onInvokeTask:(M,E,t,r,k,C)=>M.invokeTask(t,r,k,C),onCancelTask:(M,E,t,r)=>M.cancelTask(t,r)};class v{constructor(E,t,r){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=E,this._parentDelegate=t,this._forkZS=r&&(r&&r.onFork?r:t._forkZS),this._forkDlgt=r&&(r.onFork?t:t._forkDlgt),this._forkCurrZone=r&&(r.onFork?this.zone:t._forkCurrZone),this._interceptZS=r&&(r.onIntercept?r:t._interceptZS),this._interceptDlgt=r&&(r.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=r&&(r.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=r&&(r.onInvoke?r:t._invokeZS),this._invokeDlgt=r&&(r.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=r&&(r.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=r&&(r.onHandleError?r:t._handleErrorZS),this._handleErrorDlgt=r&&(r.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=r&&(r.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=r&&(r.onScheduleTask?r:t._scheduleTaskZS),this._scheduleTaskDlgt=r&&(r.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=r&&(r.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=r&&(r.onInvokeTask?r:t._invokeTaskZS),this._invokeTaskDlgt=r&&(r.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=r&&(r.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=r&&(r.onCancelTask?r:t._cancelTaskZS),this._cancelTaskDlgt=r&&(r.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=r&&(r.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const k=r&&r.onHasTask;(k||t&&t._hasTaskZS)&&(this._hasTaskZS=k?r:P,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=E,r.onScheduleTask||(this._scheduleTaskZS=P,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),r.onInvokeTask||(this._invokeTaskZS=P,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),r.onCancelTask||(this._cancelTaskZS=P,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(E,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,E,t):new d(E,t)}intercept(E,t,r){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,E,t,r):t}invoke(E,t,r,k,C){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,E,t,r,k,C):t.apply(r,k)}handleError(E,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,E,t)}scheduleTask(E,t){let r=t;if(this._scheduleTaskZS)this._hasTaskZS&&r._zoneDelegates.push(this._hasTaskDlgtOwner),r=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,E,t),r||(r=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=I)throw new Error("Task is missing scheduleFn.");R(t)}return r}invokeTask(E,t,r,k){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,E,t,r,k):t.callback.apply(r,k)}cancelTask(E,t){let r;if(this._cancelTaskZS)r=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,E,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");r=t.cancelFn(t)}return r}hasTask(E,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,E,t)}catch(r){this.handleError(E,r)}}_updateTaskCount(E,t){const r=this._taskCounts,k=r[E],C=r[E]=k+t;if(C<0)throw new Error("More tasks executed then were scheduled.");0!=k&&0!=C||this.hasTask(this.zone,{microTask:r.microTask>0,macroTask:r.macroTask>0,eventTask:r.eventTask>0,change:E})}}class m{constructor(E,t,r,k,C,$){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=E,this.source=t,this.data=k,this.scheduleFn=C,this.cancelFn=$,!r)throw new Error("callback is not defined");this.callback=r;const l=this;this.invoke=E===Q&&k&&k.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(E,t,r){E||(E=this),ee++;try{return E.runCount++,E.zone.runTask(E,t,r)}finally{1==ee&&_(),ee--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(x,X)}_transitionTo(E,t,r){if(this._state!==t&&this._state!==r)throw new Error(`${this.type} '${this.source}': can not transition to '${E}', expecting state '${t}'${r?" or '"+r+"'":""}, was '${this._state}'.`);this._state=E,E==x&&(this._zoneDelegates=null)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const L=a("setTimeout"),Z=a("Promise"),N=a("then");let J,B=[],H=!1;function q(M){if(J||e[Z]&&(J=e[Z].resolve(0)),J){let E=J[N];E||(E=J.then),E.call(J,M)}else e[L](M,0)}function R(M){0===ee&&0===B.length&&q(_),M&&B.push(M)}function _(){if(!H){for(H=!0;B.length;){const M=B;B=[];for(let E=0;EU,onUnhandledError:W,microtaskDrainDone:W,scheduleMicroTask:R,showUncaughtError:()=>!d[a("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:W,patchMethod:()=>W,bindArguments:()=>[],patchThen:()=>W,patchMacroTask:()=>W,patchEventPrototype:()=>W,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>W,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>W,wrapWithCurrentZone:()=>W,filterProperties:()=>[],attachOriginToPatched:()=>W,_redefineProperty:()=>W,patchCallbacks:()=>W,nativeScheduleMicroTask:q};let U={parent:null,zone:new d(null,null)},re=null,ee=0;function W(){}o("Zone","Zone"),e.Zone=d}(typeof window<"u"&&window||typeof self<"u"&&self||global);const ie=Object.getOwnPropertyDescriptor,Ee=Object.defineProperty,de=Object.getPrototypeOf,ge=Object.create,Ve=Array.prototype.slice,Oe="addEventListener",Se="removeEventListener",Ze=Zone.__symbol__(Oe),Ne=Zone.__symbol__(Se),ce="true",ae="false",ke=Zone.__symbol__("");function Ie(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,o,c){return Zone.current.scheduleMacroTask(e,n,i,o,c)}const A=Zone.__symbol__,Pe=typeof window<"u",Te=Pe?window:void 0,Y=Pe&&Te||"object"==typeof self&&self||global;function Le(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Ie(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}const Be=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,we=!("nw"in Y)&&typeof Y.process<"u"&&"[object process]"==={}.toString.call(Y.process),je=!we&&!Be&&!(!Pe||!Te.HTMLElement),Ue=typeof Y.process<"u"&&"[object process]"==={}.toString.call(Y.process)&&!Be&&!(!Pe||!Te.HTMLElement),Re={},We=function(e){if(!(e=e||Y.event))return;let n=Re[e.type];n||(n=Re[e.type]=A("ON_PROPERTY"+e.type));const i=this||e.target||Y,o=i[n];let c;if(je&&i===Te&&"error"===e.type){const a=e;c=o&&o.call(this,a.message,a.filename,a.lineno,a.colno,a.error),!0===c&&e.preventDefault()}else c=o&&o.apply(this,arguments),null!=c&&!c&&e.preventDefault();return c};function qe(e,n,i){let o=ie(e,n);if(!o&&i&&ie(i,n)&&(o={enumerable:!0,configurable:!0}),!o||!o.configurable)return;const c=A("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete o.writable,delete o.value;const a=o.get,y=o.set,d=n.slice(2);let P=Re[d];P||(P=Re[d]=A("ON_PROPERTY"+d)),o.set=function(v){let m=this;!m&&e===Y&&(m=Y),m&&("function"==typeof m[P]&&m.removeEventListener(d,We),y&&y.call(m,null),m[P]=v,"function"==typeof v&&m.addEventListener(d,We,!1))},o.get=function(){let v=this;if(!v&&e===Y&&(v=Y),!v)return null;const m=v[P];if(m)return m;if(a){let L=a.call(this);if(L)return o.set.call(this,L),"function"==typeof v.removeAttribute&&v.removeAttribute(n),L}return null},Ee(e,n,o),e[c]=!0}function Xe(e,n,i){if(n)for(let o=0;ofunction(y,d){const P=i(y,d);return P.cbIdx>=0&&"function"==typeof d[P.cbIdx]?Me(P.name,d[P.cbIdx],P,c):a.apply(y,d)})}function ue(e,n){e[A("OriginalDelegate")]=n}let ze=!1,Ae=!1;function ft(){if(ze)return Ae;ze=!0;try{const e=Te.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(Ae=!0)}catch{}return Ae}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const o=Object.getOwnPropertyDescriptor,c=Object.defineProperty,y=i.symbol,d=[],P=!0===e[y("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],v=y("Promise"),m=y("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const u=l&&l.rejection;u?console.error("Unhandled Promise rejection:",u instanceof Error?u.message:u,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",u,u instanceof Error?u.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;d.length;){const l=d.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(u){N(u)}}};const Z=y("unhandledPromiseRejectionHandler");function N(l){i.onUnhandledError(l);try{const u=n[Z];"function"==typeof u&&u.call(this,l)}catch{}}function B(l){return l&&l.then}function H(l){return l}function J(l){return t.reject(l)}const q=y("state"),R=y("value"),_=y("finally"),K=y("parentPromiseValue"),x=y("parentPromiseState"),j=null,p=!0,G=!1;function I(l,u){return s=>{try{z(l,u,s)}catch(f){z(l,!1,f)}}}const w=function(){let l=!1;return function(s){return function(){l||(l=!0,s.apply(null,arguments))}}},oe=y("currentTaskTrace");function z(l,u,s){const f=w();if(l===s)throw new TypeError("Promise resolved with itself");if(l[q]===j){let g=null;try{("object"==typeof s||"function"==typeof s)&&(g=s&&s.then)}catch(b){return f(()=>{z(l,!1,b)})(),l}if(u!==G&&s instanceof t&&s.hasOwnProperty(q)&&s.hasOwnProperty(R)&&s[q]!==j)re(s),z(l,s[q],s[R]);else if(u!==G&&"function"==typeof g)try{g.call(s,f(I(l,u)),f(I(l,!1)))}catch(b){f(()=>{z(l,!1,b)})()}else{l[q]=u;const b=l[R];if(l[R]=s,l[_]===_&&u===p&&(l[q]=l[x],l[R]=l[K]),u===G&&s instanceof Error){const T=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;T&&c(s,oe,{configurable:!0,enumerable:!1,writable:!0,value:T})}for(let T=0;T{try{const D=l[R],O=!!s&&_===s[_];O&&(s[K]=D,s[x]=b);const S=u.run(T,void 0,O&&T!==J&&T!==H?[]:[D]);z(s,!0,S)}catch(D){z(s,!1,D)}},s)}const M=function(){},E=e.AggregateError;class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(u){return z(new this(null),p,u)}static reject(u){return z(new this(null),G,u)}static any(u){if(!u||"function"!=typeof u[Symbol.iterator])return Promise.reject(new E([],"All promises were rejected"));const s=[];let f=0;try{for(let T of u)f++,s.push(t.resolve(T))}catch{return Promise.reject(new E([],"All promises were rejected"))}if(0===f)return Promise.reject(new E([],"All promises were rejected"));let g=!1;const b=[];return new t((T,D)=>{for(let O=0;O{g||(g=!0,T(S))},S=>{b.push(S),f--,0===f&&(g=!0,D(new E(b,"All promises were rejected")))})})}static race(u){let s,f,g=new this((D,O)=>{s=D,f=O});function b(D){s(D)}function T(D){f(D)}for(let D of u)B(D)||(D=this.resolve(D)),D.then(b,T);return g}static all(u){return t.allWithCallback(u)}static allSettled(u){return(this&&this.prototype instanceof t?this:t).allWithCallback(u,{thenCallback:f=>({status:"fulfilled",value:f}),errorCallback:f=>({status:"rejected",reason:f})})}static allWithCallback(u,s){let f,g,b=new this((S,V)=>{f=S,g=V}),T=2,D=0;const O=[];for(let S of u){B(S)||(S=this.resolve(S));const V=D;try{S.then(F=>{O[V]=s?s.thenCallback(F):F,T--,0===T&&f(O)},F=>{s?(O[V]=s.errorCallback(F),T--,0===T&&f(O)):g(F)})}catch(F){g(F)}T++,D++}return T-=2,0===T&&f(O),b}constructor(u){const s=this;if(!(s instanceof t))throw new Error("Must be an instanceof Promise.");s[q]=j,s[R]=[];try{const f=w();u&&u(f(I(s,p)),f(I(s,G)))}catch(f){z(s,!1,f)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(u,s){var f;let g=null===(f=this.constructor)||void 0===f?void 0:f[Symbol.species];(!g||"function"!=typeof g)&&(g=this.constructor||t);const b=new g(M),T=n.current;return this[q]==j?this[R].push(T,b,u,s):ee(this,T,b,u,s),b}catch(u){return this.then(null,u)}finally(u){var s;let f=null===(s=this.constructor)||void 0===s?void 0:s[Symbol.species];(!f||"function"!=typeof f)&&(f=t);const g=new f(M);g[_]=_;const b=n.current;return this[q]==j?this[R].push(b,g,u,u):ee(this,b,g,u,u),g}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const r=e[v]=e.Promise;e.Promise=t;const k=y("thenPatched");function C(l){const u=l.prototype,s=o(u,"then");if(s&&(!1===s.writable||!s.configurable))return;const f=u.then;u[m]=f,l.prototype.then=function(g,b){return new t((D,O)=>{f.call(this,D,O)}).then(g,b)},l[k]=!0}return i.patchThen=C,r&&(C(r),le(e,"fetch",l=>function $(l){return function(u,s){let f=l.apply(u,s);if(f instanceof t)return f;let g=f.constructor;return g[k]||C(g),f}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=d,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=A("OriginalDelegate"),o=A("Promise"),c=A("Error"),a=function(){if("function"==typeof this){const v=this[i];if(v)return"function"==typeof v?n.call(v):Object.prototype.toString.call(v);if(this===Promise){const m=e[o];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};a[i]=n,Function.prototype.toString=a;const y=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":y.call(this)}});let ye=!1;if(typeof window<"u")try{const e=Object.defineProperty({},"passive",{get:function(){ye=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{ye=!1}const ht={useG:!0},te={},Ye={},$e=new RegExp("^"+ke+"(\\w+)(true|false)$"),Ke=A("propagationStopped");function Je(e,n){const i=(n?n(e):e)+ae,o=(n?n(e):e)+ce,c=ke+i,a=ke+o;te[e]={},te[e][ae]=c,te[e][ce]=a}function dt(e,n,i,o){const c=o&&o.add||Oe,a=o&&o.rm||Se,y=o&&o.listeners||"eventListeners",d=o&&o.rmAll||"removeAllListeners",P=A(c),v="."+c+":",Z=function(R,_,K){if(R.isRemoved)return;const x=R.callback;let X;"object"==typeof x&&x.handleEvent&&(R.callback=p=>x.handleEvent(p),R.originalDelegate=x);try{R.invoke(R,_,[K])}catch(p){X=p}const j=R.options;return j&&"object"==typeof j&&j.once&&_[a].call(_,K.type,R.originalDelegate?R.originalDelegate:R.callback,j),X};function N(R,_,K){if(!(_=_||e.event))return;const x=R||_.target||e,X=x[te[_.type][K?ce:ae]];if(X){const j=[];if(1===X.length){const p=Z(X[0],x,_);p&&j.push(p)}else{const p=X.slice();for(let G=0;G{throw G})}}}const B=function(R){return N(this,R,!1)},H=function(R){return N(this,R,!0)};function J(R,_){if(!R)return!1;let K=!0;_&&void 0!==_.useG&&(K=_.useG);const x=_&&_.vh;let X=!0;_&&void 0!==_.chkDup&&(X=_.chkDup);let j=!1;_&&void 0!==_.rt&&(j=_.rt);let p=R;for(;p&&!p.hasOwnProperty(c);)p=de(p);if(!p&&R[c]&&(p=R),!p||p[P])return!1;const G=_&&_.eventNameToString,h={},I=p[P]=p[c],w=p[A(a)]=p[a],Q=p[A(y)]=p[y],oe=p[A(d)]=p[d];let z;function U(s,f){return!ye&&"object"==typeof s&&s?!!s.capture:ye&&f?"boolean"==typeof s?{capture:s,passive:!0}:s?"object"==typeof s&&!1!==s.passive?Object.assign(Object.assign({},s),{passive:!0}):s:{passive:!0}:s}_&&_.prepend&&(z=p[A(_.prepend)]=p[_.prepend]);const t=K?function(s){if(!h.isExisting)return I.call(h.target,h.eventName,h.capture?H:B,h.options)}:function(s){return I.call(h.target,h.eventName,s.invoke,h.options)},r=K?function(s){if(!s.isRemoved){const f=te[s.eventName];let g;f&&(g=f[s.capture?ce:ae]);const b=g&&s.target[g];if(b)for(let T=0;Tfunction(c,a){c[Ke]=!0,o&&o.apply(c,a)})}function Et(e,n,i,o,c){const a=Zone.__symbol__(o);if(n[a])return;const y=n[a]=n[o];n[o]=function(d,P,v){return P&&P.prototype&&c.forEach(function(m){const L=`${i}.${o}::`+m,Z=P.prototype;try{if(Z.hasOwnProperty(m)){const N=e.ObjectGetOwnPropertyDescriptor(Z,m);N&&N.value?(N.value=e.wrapWithCurrentZone(N.value,L),e._redefineProperty(P.prototype,m,N)):Z[m]&&(Z[m]=e.wrapWithCurrentZone(Z[m],L))}else Z[m]&&(Z[m]=e.wrapWithCurrentZone(Z[m],L))}catch{}}),y.call(n,d,P,v)},e.attachOriginToPatched(n[o],y)}function et(e,n,i){if(!i||0===i.length)return n;const o=i.filter(a=>a.target===e);if(!o||0===o.length)return n;const c=o[0].ignoreProperties;return n.filter(a=>-1===c.indexOf(a))}function tt(e,n,i,o){e&&Xe(e,et(e,n,i),o)}function He(e){return Object.getOwnPropertyNames(e).filter(n=>n.startsWith("on")&&n.length>2).map(n=>n.substring(2))}Zone.__load_patch("util",(e,n,i)=>{const o=He(e);i.patchOnProperties=Xe,i.patchMethod=le,i.bindArguments=Le,i.patchMacroTask=lt;const c=n.__symbol__("BLACK_LISTED_EVENTS"),a=n.__symbol__("UNPATCHED_EVENTS");e[a]&&(e[c]=e[a]),e[c]&&(n[c]=n[a]=e[c]),i.patchEventPrototype=_t,i.patchEventTarget=dt,i.isIEOrEdge=ft,i.ObjectDefineProperty=Ee,i.ObjectGetOwnPropertyDescriptor=ie,i.ObjectCreate=ge,i.ArraySlice=Ve,i.patchClass=ve,i.wrapWithCurrentZone=Ie,i.filterProperties=et,i.attachOriginToPatched=ue,i._redefineProperty=Object.defineProperty,i.patchCallbacks=Et,i.getGlobalObjects=()=>({globalSources:Ye,zoneSymbolEventNames:te,eventNames:o,isBrowser:je,isMix:Ue,isNode:we,TRUE_STR:ce,FALSE_STR:ae,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Oe,REMOVE_EVENT_LISTENER_STR:Se})});const Ce=A("zoneTask");function pe(e,n,i,o){let c=null,a=null;i+=o;const y={};function d(v){const m=v.data;return m.args[0]=function(){return v.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),v}function P(v){return a.call(e,v.data.handleId)}c=le(e,n+=o,v=>function(m,L){if("function"==typeof L[0]){const Z={isPeriodic:"Interval"===o,delay:"Timeout"===o||"Interval"===o?L[1]||0:void 0,args:L},N=L[0];L[0]=function(){try{return N.apply(this,arguments)}finally{Z.isPeriodic||("number"==typeof Z.handleId?delete y[Z.handleId]:Z.handleId&&(Z.handleId[Ce]=null))}};const B=Me(n,L[0],Z,d,P);if(!B)return B;const H=B.data.handleId;return"number"==typeof H?y[H]=B:H&&(H[Ce]=B),H&&H.ref&&H.unref&&"function"==typeof H.ref&&"function"==typeof H.unref&&(B.ref=H.ref.bind(H),B.unref=H.unref.bind(H)),"number"==typeof H||H?H:B}return v.apply(e,L)}),a=le(e,i,v=>function(m,L){const Z=L[0];let N;"number"==typeof Z?N=y[Z]:(N=Z&&Z[Ce],N||(N=Z)),N&&"string"==typeof N.type?"notScheduled"!==N.state&&(N.cancelFn&&N.data.isPeriodic||0===N.runCount)&&("number"==typeof Z?delete y[Z]:Z&&(Z[Ce]=null),N.zone.cancelTask(N)):v.apply(e,L)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",o=>function(c,a){n.current.scheduleMicroTask("queueMicrotask",a[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";pe(e,n,i,"Timeout"),pe(e,n,i,"Interval"),pe(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{pe(e,"request","cancel","AnimationFrame"),pe(e,"mozRequest","mozCancel","AnimationFrame"),pe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let o=0;ofunction(P,v){return n.current.run(a,e,v,d)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function mt(e,n){n.patchEventPrototype(e,n)})(e,i),function pt(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:o,TRUE_STR:c,FALSE_STR:a,ZONE_SYMBOL_PREFIX:y}=n.getGlobalObjects();for(let P=0;P{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function Tt(e,n){if(we&&!Ue||Zone[e.symbol("patchEvents")])return;const i=n.__Zone_ignore_on_properties;let o=[];if(je){const c=window;o=o.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);const a=function ut(){try{const e=Te.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:c,ignoreProperties:["error"]}]:[];tt(c,He(c),i&&i.concat(a),de(c))}o=o.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let c=0;c{!function yt(e,n){const{isBrowser:i,isMix:o}=n.getGlobalObjects();(i||o)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function P(v){const m=v.XMLHttpRequest;if(!m)return;const L=m.prototype;let N=L[Ze],B=L[Ne];if(!N){const h=v.XMLHttpRequestEventTarget;if(h){const I=h.prototype;N=I[Ze],B=I[Ne]}}const H="readystatechange",J="scheduled";function q(h){const I=h.data,w=I.target;w[a]=!1,w[d]=!1;const Q=w[c];N||(N=w[Ze],B=w[Ne]),Q&&B.call(w,H,Q);const oe=w[c]=()=>{if(w.readyState===w.DONE)if(!I.aborted&&w[a]&&h.state===J){const U=w[n.__symbol__("loadfalse")];if(0!==w.status&&U&&U.length>0){const re=h.invoke;h.invoke=function(){const ee=w[n.__symbol__("loadfalse")];for(let W=0;Wfunction(h,I){return h[o]=0==I[2],h[y]=I[1],K.apply(h,I)}),X=A("fetchTaskAborting"),j=A("fetchTaskScheduling"),p=le(L,"send",()=>function(h,I){if(!0===n.current[j]||h[o])return p.apply(h,I);{const w={target:h,url:h[y],isPeriodic:!1,args:I,aborted:!1},Q=Me("XMLHttpRequest.send",R,w,q,_);h&&!0===h[d]&&!w.aborted&&Q.state===J&&Q.invoke()}}),G=le(L,"abort",()=>function(h,I){const w=function Z(h){return h[i]}(h);if(w&&"string"==typeof w.type){if(null==w.cancelFn||w.data&&w.data.aborted)return;w.zone.cancelTask(w)}else if(!0===n.current[X])return G.apply(h,I)})}(e);const i=A("xhrTask"),o=A("xhrSync"),c=A("xhrListener"),a=A("xhrScheduled"),y=A("xhrURL"),d=A("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function at(e,n){const i=e.constructor.name;for(let o=0;o{const P=function(){return d.apply(this,Le(arguments,i+"."+c))};return ue(P,d),P})(a)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(o){return function(c){Qe(e,o).forEach(y=>{const d=e.PromiseRejectionEvent;if(d){const P=new d(o,{promise:c.promise,reason:c.rejection});y.invoke(P)}})}}e.PromiseRejectionEvent&&(n[A("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[A("rejectionHandledHandler")]=i("rejectionhandled"))})}},ie=>{ie(ie.s=435)}]); \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/polyfills.js b/cmd/pkgdash/assets/ui/polyfills.js new file mode 100644 index 0000000..210b18a --- /dev/null +++ b/cmd/pkgdash/assets/ui/polyfills.js @@ -0,0 +1,3398 @@ +"use strict"; +(self["webpackChunkui"] = self["webpackChunkui"] || []).push([["polyfills"],{ + +/***/ 7435: +/*!**************************!*\ + !*** ./src/polyfills.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zone.js */ 4946); +/* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zone_js__WEBPACK_IMPORTED_MODULE_0__); +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ +/*************************************************************************************************** + * BROWSER POLYFILLS + */ +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ + // Included with Angular CLI. +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + + +/***/ }), + +/***/ 4946: +/*!***********************************************!*\ + !*** ./node_modules/zone.js/fesm2015/zone.js ***! + \***********************************************/ +/***/ (() => { + + +/** + * @license Angular v14.2.0-next.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +(function (global) { + const performance = global['performance']; + + function mark(name) { + performance && performance['mark'] && performance['mark'](name); + } + + function performanceMeasure(name, label) { + performance && performance['measure'] && performance['measure'](name, label); + } + + mark('Zone'); // Initialize before it's accessed below. + // __Zone_symbol_prefix global can be used to override the default zone + // symbol prefix with a custom one if needed. + + const symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__'; + + function __symbol__(name) { + return symbolPrefix + name; + } + + const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true; + + if (global['Zone']) { + // if global['Zone'] already exists (maybe zone.js was already loaded or + // some other lib also registered a global object named Zone), we may need + // to throw an error, but sometimes user may not want this error. + // For example, + // we have two web pages, page1 includes zone.js, page2 doesn't. + // and the 1st time user load page1 and page2, everything work fine, + // but when user load page2 again, error occurs because global['Zone'] already exists. + // so we add a flag to let user choose whether to throw this error or not. + // By default, if existing Zone is from zone.js, we will not throw the error. + if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') { + throw new Error('Zone already loaded.'); + } else { + return global['Zone']; + } + } + + class Zone { + constructor(parent, zoneSpec) { + this._parent = parent; + this._name = zoneSpec ? zoneSpec.name || 'unnamed' : ''; + this._properties = zoneSpec && zoneSpec.properties || {}; + this._zoneDelegate = new _ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec); + } + + static assertZonePatched() { + if (global['Promise'] !== patches['ZoneAwarePromise']) { + throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' + 'has been overwritten.\n' + 'Most likely cause is that a Promise polyfill has been loaded ' + 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' + 'If you must load one, do so before loading zone.js.)'); + } + } + + static get root() { + let zone = Zone.current; + + while (zone.parent) { + zone = zone.parent; + } + + return zone; + } + + static get current() { + return _currentZoneFrame.zone; + } + + static get currentTask() { + return _currentTask; + } // tslint:disable-next-line:require-internal-with-underscore + + + static __load_patch(name, fn, ignoreDuplicate = false) { + if (patches.hasOwnProperty(name)) { + // `checkDuplicate` option is defined from global variable + // so it works for all modules. + // `ignoreDuplicate` can work for the specified module + if (!ignoreDuplicate && checkDuplicate) { + throw Error('Already loaded patch: ' + name); + } + } else if (!global['__Zone_disable_' + name]) { + const perfName = 'Zone:' + name; + mark(perfName); + patches[name] = fn(global, Zone, _api); + performanceMeasure(perfName, perfName); + } + } + + get parent() { + return this._parent; + } + + get name() { + return this._name; + } + + get(key) { + const zone = this.getZoneWith(key); + if (zone) return zone._properties[key]; + } + + getZoneWith(key) { + let current = this; + + while (current) { + if (current._properties.hasOwnProperty(key)) { + return current; + } + + current = current._parent; + } + + return null; + } + + fork(zoneSpec) { + if (!zoneSpec) throw new Error('ZoneSpec required!'); + return this._zoneDelegate.fork(this, zoneSpec); + } + + wrap(callback, source) { + if (typeof callback !== 'function') { + throw new Error('Expecting function got: ' + callback); + } + + const _callback = this._zoneDelegate.intercept(this, callback, source); + + const zone = this; + return function () { + return zone.runGuarded(_callback, this, arguments, source); + }; + } + + run(callback, applyThis, applyArgs, source) { + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + + try { + return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); + } finally { + _currentZoneFrame = _currentZoneFrame.parent; + } + } + + runGuarded(callback, applyThis = null, applyArgs, source) { + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + + try { + try { + return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); + } catch (error) { + if (this._zoneDelegate.handleError(this, error)) { + throw error; + } + } + } finally { + _currentZoneFrame = _currentZoneFrame.parent; + } + } + + runTask(task, applyThis, applyArgs) { + if (task.zone != this) { + throw new Error('A task can only be run in the zone of creation! (Creation: ' + (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); + } // https://github.com/angular/zone.js/issues/778, sometimes eventTask + // will run in notScheduled(canceled) state, we should not try to + // run such kind of task but just return + + + if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) { + return; + } + + const reEntryGuard = task.state != running; + reEntryGuard && task._transitionTo(running, scheduled); + task.runCount++; + const previousTask = _currentTask; + _currentTask = task; + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + + try { + if (task.type == macroTask && task.data && !task.data.isPeriodic) { + task.cancelFn = undefined; + } + + try { + return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs); + } catch (error) { + if (this._zoneDelegate.handleError(this, error)) { + throw error; + } + } + } finally { + // if the task's state is notScheduled or unknown, then it has already been cancelled + // we should not reset the state to scheduled + if (task.state !== notScheduled && task.state !== unknown) { + if (task.type == eventTask || task.data && task.data.isPeriodic) { + reEntryGuard && task._transitionTo(scheduled, running); + } else { + task.runCount = 0; + + this._updateTaskCount(task, -1); + + reEntryGuard && task._transitionTo(notScheduled, running, notScheduled); + } + } + + _currentZoneFrame = _currentZoneFrame.parent; + _currentTask = previousTask; + } + } + + scheduleTask(task) { + if (task.zone && task.zone !== this) { + // check if the task was rescheduled, the newZone + // should not be the children of the original zone + let newZone = this; + + while (newZone) { + if (newZone === task.zone) { + throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${task.zone.name}`); + } + + newZone = newZone.parent; + } + } + + task._transitionTo(scheduling, notScheduled); + + const zoneDelegates = []; + task._zoneDelegates = zoneDelegates; + task._zone = this; + + try { + task = this._zoneDelegate.scheduleTask(this, task); + } catch (err) { + // should set task's state to unknown when scheduleTask throw error + // because the err may from reschedule, so the fromState maybe notScheduled + task._transitionTo(unknown, scheduling, notScheduled); // TODO: @JiaLiPassion, should we check the result from handleError? + + + this._zoneDelegate.handleError(this, err); + + throw err; + } + + if (task._zoneDelegates === zoneDelegates) { + // we have to check because internally the delegate can reschedule the task. + this._updateTaskCount(task, 1); + } + + if (task.state == scheduling) { + task._transitionTo(scheduled, scheduling); + } + + return task; + } + + scheduleMicroTask(source, callback, data, customSchedule) { + return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined)); + } + + scheduleMacroTask(source, callback, data, customSchedule, customCancel) { + return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel)); + } + + scheduleEventTask(source, callback, data, customSchedule, customCancel) { + return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel)); + } + + cancelTask(task) { + if (task.zone != this) throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' + (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); + + task._transitionTo(canceling, scheduled, running); + + try { + this._zoneDelegate.cancelTask(this, task); + } catch (err) { + // if error occurs when cancelTask, transit the state to unknown + task._transitionTo(unknown, canceling); + + this._zoneDelegate.handleError(this, err); + + throw err; + } + + this._updateTaskCount(task, -1); + + task._transitionTo(notScheduled, canceling); + + task.runCount = 0; + return task; + } + + _updateTaskCount(task, count) { + const zoneDelegates = task._zoneDelegates; + + if (count == -1) { + task._zoneDelegates = null; + } + + for (let i = 0; i < zoneDelegates.length; i++) { + zoneDelegates[i]._updateTaskCount(task.type, count); + } + } + + } // tslint:disable-next-line:require-internal-with-underscore + + + Zone.__symbol__ = __symbol__; + const DELEGATE_ZS = { + name: '', + onHasTask: (delegate, _, target, hasTaskState) => delegate.hasTask(target, hasTaskState), + onScheduleTask: (delegate, _, target, task) => delegate.scheduleTask(target, task), + onInvokeTask: (delegate, _, target, task, applyThis, applyArgs) => delegate.invokeTask(target, task, applyThis, applyArgs), + onCancelTask: (delegate, _, target, task) => delegate.cancelTask(target, task) + }; + + class _ZoneDelegate { + constructor(zone, parentDelegate, zoneSpec) { + this._taskCounts = { + 'microTask': 0, + 'macroTask': 0, + 'eventTask': 0 + }; + this.zone = zone; + this._parentDelegate = parentDelegate; + this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS); + this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt); + this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate._forkCurrZone); + this._interceptZS = zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS); + this._interceptDlgt = zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt); + this._interceptCurrZone = zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate._interceptCurrZone); + this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS); + this._invokeDlgt = zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt); + this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate._invokeCurrZone); + this._handleErrorZS = zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS); + this._handleErrorDlgt = zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt); + this._handleErrorCurrZone = zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate._handleErrorCurrZone); + this._scheduleTaskZS = zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS); + this._scheduleTaskDlgt = zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt); + this._scheduleTaskCurrZone = zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate._scheduleTaskCurrZone); + this._invokeTaskZS = zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS); + this._invokeTaskDlgt = zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt); + this._invokeTaskCurrZone = zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate._invokeTaskCurrZone); + this._cancelTaskZS = zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS); + this._cancelTaskDlgt = zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt); + this._cancelTaskCurrZone = zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate._cancelTaskCurrZone); + this._hasTaskZS = null; + this._hasTaskDlgt = null; + this._hasTaskDlgtOwner = null; + this._hasTaskCurrZone = null; + const zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask; + const parentHasTask = parentDelegate && parentDelegate._hasTaskZS; + + if (zoneSpecHasTask || parentHasTask) { + // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such + // a case all task related interceptors must go through this ZD. We can't short circuit it. + this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS; + this._hasTaskDlgt = parentDelegate; + this._hasTaskDlgtOwner = this; + this._hasTaskCurrZone = zone; + + if (!zoneSpec.onScheduleTask) { + this._scheduleTaskZS = DELEGATE_ZS; + this._scheduleTaskDlgt = parentDelegate; + this._scheduleTaskCurrZone = this.zone; + } + + if (!zoneSpec.onInvokeTask) { + this._invokeTaskZS = DELEGATE_ZS; + this._invokeTaskDlgt = parentDelegate; + this._invokeTaskCurrZone = this.zone; + } + + if (!zoneSpec.onCancelTask) { + this._cancelTaskZS = DELEGATE_ZS; + this._cancelTaskDlgt = parentDelegate; + this._cancelTaskCurrZone = this.zone; + } + } + } + + fork(targetZone, zoneSpec) { + return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) : new Zone(targetZone, zoneSpec); + } + + intercept(targetZone, callback, source) { + return this._interceptZS ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) : callback; + } + + invoke(targetZone, callback, applyThis, applyArgs, source) { + return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) : callback.apply(applyThis, applyArgs); + } + + handleError(targetZone, error) { + return this._handleErrorZS ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) : true; + } + + scheduleTask(targetZone, task) { + let returnTask = task; + + if (this._scheduleTaskZS) { + if (this._hasTaskZS) { + returnTask._zoneDelegates.push(this._hasTaskDlgtOwner); + } // clang-format off + + + returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task); // clang-format on + + if (!returnTask) returnTask = task; + } else { + if (task.scheduleFn) { + task.scheduleFn(task); + } else if (task.type == microTask) { + scheduleMicroTask(task); + } else { + throw new Error('Task is missing scheduleFn.'); + } + } + + return returnTask; + } + + invokeTask(targetZone, task, applyThis, applyArgs) { + return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) : task.callback.apply(applyThis, applyArgs); + } + + cancelTask(targetZone, task) { + let value; + + if (this._cancelTaskZS) { + value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task); + } else { + if (!task.cancelFn) { + throw Error('Task is not cancelable'); + } + + value = task.cancelFn(task); + } + + return value; + } + + hasTask(targetZone, isEmpty) { + // hasTask should not throw error so other ZoneDelegate + // can still trigger hasTask callback + try { + this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty); + } catch (err) { + this.handleError(targetZone, err); + } + } // tslint:disable-next-line:require-internal-with-underscore + + + _updateTaskCount(type, count) { + const counts = this._taskCounts; + const prev = counts[type]; + const next = counts[type] = prev + count; + + if (next < 0) { + throw new Error('More tasks executed then were scheduled.'); + } + + if (prev == 0 || next == 0) { + const isEmpty = { + microTask: counts['microTask'] > 0, + macroTask: counts['macroTask'] > 0, + eventTask: counts['eventTask'] > 0, + change: type + }; + this.hasTask(this.zone, isEmpty); + } + } + + } + + class ZoneTask { + constructor(type, source, callback, options, scheduleFn, cancelFn) { + // tslint:disable-next-line:require-internal-with-underscore + this._zone = null; + this.runCount = 0; // tslint:disable-next-line:require-internal-with-underscore + + this._zoneDelegates = null; // tslint:disable-next-line:require-internal-with-underscore + + this._state = 'notScheduled'; + this.type = type; + this.source = source; + this.data = options; + this.scheduleFn = scheduleFn; + this.cancelFn = cancelFn; + + if (!callback) { + throw new Error('callback is not defined'); + } + + this.callback = callback; + const self = this; // TODO: @JiaLiPassion options should have interface + + if (type === eventTask && options && options.useG) { + this.invoke = ZoneTask.invokeTask; + } else { + this.invoke = function () { + return ZoneTask.invokeTask.call(global, self, this, arguments); + }; + } + } + + static invokeTask(task, target, args) { + if (!task) { + task = this; + } + + _numberOfNestedTaskFrames++; + + try { + task.runCount++; + return task.zone.runTask(task, target, args); + } finally { + if (_numberOfNestedTaskFrames == 1) { + drainMicroTaskQueue(); + } + + _numberOfNestedTaskFrames--; + } + } + + get zone() { + return this._zone; + } + + get state() { + return this._state; + } + + cancelScheduleRequest() { + this._transitionTo(notScheduled, scheduling); + } // tslint:disable-next-line:require-internal-with-underscore + + + _transitionTo(toState, fromState1, fromState2) { + if (this._state === fromState1 || this._state === fromState2) { + this._state = toState; + + if (toState == notScheduled) { + this._zoneDelegates = null; + } + } else { + throw new Error(`${this.type} '${this.source}': can not transition to '${toState}', expecting state '${fromState1}'${fromState2 ? ' or \'' + fromState2 + '\'' : ''}, was '${this._state}'.`); + } + } + + toString() { + if (this.data && typeof this.data.handleId !== 'undefined') { + return this.data.handleId.toString(); + } else { + return Object.prototype.toString.call(this); + } + } // add toJSON method to prevent cyclic error when + // call JSON.stringify(zoneTask) + + + toJSON() { + return { + type: this.type, + state: this.state, + source: this.source, + zone: this.zone.name, + runCount: this.runCount + }; + } + + } ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + /// MICROTASK QUEUE + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + + + const symbolSetTimeout = __symbol__('setTimeout'); + + const symbolPromise = __symbol__('Promise'); + + const symbolThen = __symbol__('then'); + + let _microTaskQueue = []; + let _isDrainingMicrotaskQueue = false; + let nativeMicroTaskQueuePromise; + + function nativeScheduleMicroTask(func) { + if (!nativeMicroTaskQueuePromise) { + if (global[symbolPromise]) { + nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0); + } + } + + if (nativeMicroTaskQueuePromise) { + let nativeThen = nativeMicroTaskQueuePromise[symbolThen]; + + if (!nativeThen) { + // native Promise is not patchable, we need to use `then` directly + // issue 1078 + nativeThen = nativeMicroTaskQueuePromise['then']; + } + + nativeThen.call(nativeMicroTaskQueuePromise, func); + } else { + global[symbolSetTimeout](func, 0); + } + } + + function scheduleMicroTask(task) { + // if we are not running in any task, and there has not been anything scheduled + // we must bootstrap the initial task creation by manually scheduling the drain + if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) { + // We are not running in Task, so we need to kickstart the microtask queue. + nativeScheduleMicroTask(drainMicroTaskQueue); + } + + task && _microTaskQueue.push(task); + } + + function drainMicroTaskQueue() { + if (!_isDrainingMicrotaskQueue) { + _isDrainingMicrotaskQueue = true; + + while (_microTaskQueue.length) { + const queue = _microTaskQueue; + _microTaskQueue = []; + + for (let i = 0; i < queue.length; i++) { + const task = queue[i]; + + try { + task.zone.runTask(task, null, null); + } catch (error) { + _api.onUnhandledError(error); + } + } + } + + _api.microtaskDrainDone(); + + _isDrainingMicrotaskQueue = false; + } + } ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + /// BOOTSTRAP + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + + + const NO_ZONE = { + name: 'NO ZONE' + }; + const notScheduled = 'notScheduled', + scheduling = 'scheduling', + scheduled = 'scheduled', + running = 'running', + canceling = 'canceling', + unknown = 'unknown'; + const microTask = 'microTask', + macroTask = 'macroTask', + eventTask = 'eventTask'; + const patches = {}; + const _api = { + symbol: __symbol__, + currentZoneFrame: () => _currentZoneFrame, + onUnhandledError: noop, + microtaskDrainDone: noop, + scheduleMicroTask: scheduleMicroTask, + showUncaughtError: () => !Zone[__symbol__('ignoreConsoleErrorUncaughtError')], + patchEventTarget: () => [], + patchOnProperties: noop, + patchMethod: () => noop, + bindArguments: () => [], + patchThen: () => noop, + patchMacroTask: () => noop, + patchEventPrototype: () => noop, + isIEOrEdge: () => false, + getGlobalObjects: () => undefined, + ObjectDefineProperty: () => noop, + ObjectGetOwnPropertyDescriptor: () => undefined, + ObjectCreate: () => undefined, + ArraySlice: () => [], + patchClass: () => noop, + wrapWithCurrentZone: () => noop, + filterProperties: () => [], + attachOriginToPatched: () => noop, + _redefineProperty: () => noop, + patchCallbacks: () => noop, + nativeScheduleMicroTask: nativeScheduleMicroTask + }; + let _currentZoneFrame = { + parent: null, + zone: new Zone(null, null) + }; + let _currentTask = null; + let _numberOfNestedTaskFrames = 0; + + function noop() {} + + performanceMeasure('Zone', 'Zone'); + return global['Zone'] = Zone; +})(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Suppress closure compiler errors about unknown 'Zone' variable + * @fileoverview + * @suppress {undefinedVars,globalThis,missingRequire} + */ +/// +// issue #989, to reduce bundle size, use short name + +/** Object.getOwnPropertyDescriptor */ + + +const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +/** Object.defineProperty */ + +const ObjectDefineProperty = Object.defineProperty; +/** Object.getPrototypeOf */ + +const ObjectGetPrototypeOf = Object.getPrototypeOf; +/** Object.create */ + +const ObjectCreate = Object.create; +/** Array.prototype.slice */ + +const ArraySlice = Array.prototype.slice; +/** addEventListener string const */ + +const ADD_EVENT_LISTENER_STR = 'addEventListener'; +/** removeEventListener string const */ + +const REMOVE_EVENT_LISTENER_STR = 'removeEventListener'; +/** zoneSymbol addEventListener */ + +const ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR); +/** zoneSymbol removeEventListener */ + + +const ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR); +/** true string const */ + + +const TRUE_STR = 'true'; +/** false string const */ + +const FALSE_STR = 'false'; +/** Zone symbol prefix string const. */ + +const ZONE_SYMBOL_PREFIX = Zone.__symbol__(''); + +function wrapWithCurrentZone(callback, source) { + return Zone.current.wrap(callback, source); +} + +function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) { + return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel); +} + +const zoneSymbol = Zone.__symbol__; +const isWindowExists = typeof window !== 'undefined'; +const internalWindow = isWindowExists ? window : undefined; + +const _global = isWindowExists && internalWindow || typeof self === 'object' && self || global; + +const REMOVE_ATTRIBUTE = 'removeAttribute'; + +function bindArguments(args, source) { + for (let i = args.length - 1; i >= 0; i--) { + if (typeof args[i] === 'function') { + args[i] = wrapWithCurrentZone(args[i], source + '_' + i); + } + } + + return args; +} + +function patchPrototype(prototype, fnNames) { + const source = prototype.constructor['name']; + + for (let i = 0; i < fnNames.length; i++) { + const name = fnNames[i]; + const delegate = prototype[name]; + + if (delegate) { + const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name); + + if (!isPropertyWritable(prototypeDesc)) { + continue; + } + + prototype[name] = (delegate => { + const patched = function () { + return delegate.apply(this, bindArguments(arguments, source + '.' + name)); + }; + + attachOriginToPatched(patched, delegate); + return patched; + })(delegate); + } + } +} + +function isPropertyWritable(propertyDesc) { + if (!propertyDesc) { + return true; + } + + if (propertyDesc.writable === false) { + return false; + } + + return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined'); +} + +const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify +// this code. + +const isNode = !('nw' in _global) && typeof _global.process !== 'undefined' && {}.toString.call(_global.process) === '[object process]'; +const isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); // we are in electron of nw, so we are both browser and nodejs +// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify +// this code. + +const isMix = typeof _global.process !== 'undefined' && {}.toString.call(_global.process) === '[object process]' && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); +const zoneSymbolEventNames$1 = {}; + +const wrapFn = function (event) { + // https://github.com/angular/zone.js/issues/911, in IE, sometimes + // event will be undefined, so we need to use window.event + event = event || _global.event; + + if (!event) { + return; + } + + let eventNameSymbol = zoneSymbolEventNames$1[event.type]; + + if (!eventNameSymbol) { + eventNameSymbol = zoneSymbolEventNames$1[event.type] = zoneSymbol('ON_PROPERTY' + event.type); + } + + const target = this || event.target || _global; + const listener = target[eventNameSymbol]; + let result; + + if (isBrowser && target === internalWindow && event.type === 'error') { + // window.onerror have different signature + // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror + // and onerror callback will prevent default when callback return true + const errorEvent = event; + result = listener && listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error); + + if (result === true) { + event.preventDefault(); + } + } else { + result = listener && listener.apply(this, arguments); + + if (result != undefined && !result) { + event.preventDefault(); + } + } + + return result; +}; + +function patchProperty(obj, prop, prototype) { + let desc = ObjectGetOwnPropertyDescriptor(obj, prop); + + if (!desc && prototype) { + // when patch window object, use prototype to check prop exist or not + const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop); + + if (prototypeDesc) { + desc = { + enumerable: true, + configurable: true + }; + } + } // if the descriptor not exists or is not configurable + // just return + + + if (!desc || !desc.configurable) { + return; + } + + const onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched'); + + if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) { + return; + } // A property descriptor cannot have getter/setter and be writable + // deleting the writable and value properties avoids this error: + // + // TypeError: property descriptors must not specify a value or be writable when a + // getter or setter has been specified + + + delete desc.writable; + delete desc.value; + const originalDescGet = desc.get; + const originalDescSet = desc.set; // slice(2) cuz 'onclick' -> 'click', etc + + const eventName = prop.slice(2); + let eventNameSymbol = zoneSymbolEventNames$1[eventName]; + + if (!eventNameSymbol) { + eventNameSymbol = zoneSymbolEventNames$1[eventName] = zoneSymbol('ON_PROPERTY' + eventName); + } + + desc.set = function (newValue) { + // in some of windows's onproperty callback, this is undefined + // so we need to check it + let target = this; + + if (!target && obj === _global) { + target = _global; + } + + if (!target) { + return; + } + + const previousValue = target[eventNameSymbol]; + + if (typeof previousValue === 'function') { + target.removeEventListener(eventName, wrapFn); + } // issue #978, when onload handler was added before loading zone.js + // we should remove it with originalDescSet + + + originalDescSet && originalDescSet.call(target, null); + target[eventNameSymbol] = newValue; + + if (typeof newValue === 'function') { + target.addEventListener(eventName, wrapFn, false); + } + }; // The getter would return undefined for unassigned properties but the default value of an + // unassigned property is null + + + desc.get = function () { + // in some of windows's onproperty callback, this is undefined + // so we need to check it + let target = this; + + if (!target && obj === _global) { + target = _global; + } + + if (!target) { + return null; + } + + const listener = target[eventNameSymbol]; + + if (listener) { + return listener; + } else if (originalDescGet) { + // result will be null when use inline event attribute, + // such as + // because the onclick function is internal raw uncompiled handler + // the onclick will be evaluated when first time event was triggered or + // the property is accessed, https://github.com/angular/zone.js/issues/525 + // so we should use original native get to retrieve the handler + let value = originalDescGet.call(this); + + if (value) { + desc.set.call(this, value); + + if (typeof target[REMOVE_ATTRIBUTE] === 'function') { + target.removeAttribute(prop); + } + + return value; + } + } + + return null; + }; + + ObjectDefineProperty(obj, prop, desc); + obj[onPropPatchedSymbol] = true; +} + +function patchOnProperties(obj, properties, prototype) { + if (properties) { + for (let i = 0; i < properties.length; i++) { + patchProperty(obj, 'on' + properties[i], prototype); + } + } else { + const onProperties = []; + + for (const prop in obj) { + if (prop.slice(0, 2) == 'on') { + onProperties.push(prop); + } + } + + for (let j = 0; j < onProperties.length; j++) { + patchProperty(obj, onProperties[j], prototype); + } + } +} + +const originalInstanceKey = zoneSymbol('originalInstance'); // wrap some native API on `window` + +function patchClass(className) { + const OriginalClass = _global[className]; + if (!OriginalClass) return; // keep original class in global + + _global[zoneSymbol(className)] = OriginalClass; + + _global[className] = function () { + const a = bindArguments(arguments, className); + + switch (a.length) { + case 0: + this[originalInstanceKey] = new OriginalClass(); + break; + + case 1: + this[originalInstanceKey] = new OriginalClass(a[0]); + break; + + case 2: + this[originalInstanceKey] = new OriginalClass(a[0], a[1]); + break; + + case 3: + this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); + break; + + case 4: + this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); + break; + + default: + throw new Error('Arg list too long.'); + } + }; // attach original delegate to patched function + + + attachOriginToPatched(_global[className], OriginalClass); + const instance = new OriginalClass(function () {}); + let prop; + + for (prop in instance) { + // https://bugs.webkit.org/show_bug.cgi?id=44721 + if (className === 'XMLHttpRequest' && prop === 'responseBlob') continue; + + (function (prop) { + if (typeof instance[prop] === 'function') { + _global[className].prototype[prop] = function () { + return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments); + }; + } else { + ObjectDefineProperty(_global[className].prototype, prop, { + set: function (fn) { + if (typeof fn === 'function') { + this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop); // keep callback in wrapped function so we can + // use it in Function.prototype.toString to return + // the native one. + + attachOriginToPatched(this[originalInstanceKey][prop], fn); + } else { + this[originalInstanceKey][prop] = fn; + } + }, + get: function () { + return this[originalInstanceKey][prop]; + } + }); + } + })(prop); + } + + for (prop in OriginalClass) { + if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { + _global[className][prop] = OriginalClass[prop]; + } + } +} + +function patchMethod(target, name, patchFn) { + let proto = target; + + while (proto && !proto.hasOwnProperty(name)) { + proto = ObjectGetPrototypeOf(proto); + } + + if (!proto && target[name]) { + // somehow we did not find it, but we can see it. This happens on IE for Window properties. + proto = target; + } + + const delegateName = zoneSymbol(name); + let delegate = null; + + if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) { + delegate = proto[delegateName] = proto[name]; // check whether proto[name] is writable + // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob + + const desc = proto && ObjectGetOwnPropertyDescriptor(proto, name); + + if (isPropertyWritable(desc)) { + const patchDelegate = patchFn(delegate, delegateName, name); + + proto[name] = function () { + return patchDelegate(this, arguments); + }; + + attachOriginToPatched(proto[name], delegate); + } + } + + return delegate; +} // TODO: @JiaLiPassion, support cancel task later if necessary + + +function patchMacroTask(obj, funcName, metaCreator) { + let setNative = null; + + function scheduleTask(task) { + const data = task.data; + + data.args[data.cbIdx] = function () { + task.invoke.apply(this, arguments); + }; + + setNative.apply(data.target, data.args); + return task; + } + + setNative = patchMethod(obj, funcName, delegate => function (self, args) { + const meta = metaCreator(self, args); + + if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { + return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask); + } else { + // cause an error by calling it directly. + return delegate.apply(self, args); + } + }); +} + +function attachOriginToPatched(patched, original) { + patched[zoneSymbol('OriginalDelegate')] = original; +} + +let isDetectedIEOrEdge = false; +let ieOrEdge = false; + +function isIE() { + try { + const ua = internalWindow.navigator.userAgent; + + if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) { + return true; + } + } catch (error) {} + + return false; +} + +function isIEOrEdge() { + if (isDetectedIEOrEdge) { + return ieOrEdge; + } + + isDetectedIEOrEdge = true; + + try { + const ua = internalWindow.navigator.userAgent; + + if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) { + ieOrEdge = true; + } + } catch (error) {} + + return ieOrEdge; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +Zone.__load_patch('ZoneAwarePromise', (global, Zone, api) => { + const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + const ObjectDefineProperty = Object.defineProperty; + + function readableObjectToString(obj) { + if (obj && obj.toString === Object.prototype.toString) { + const className = obj.constructor && obj.constructor.name; + return (className ? className : '') + ': ' + JSON.stringify(obj); + } + + return obj ? obj.toString() : Object.prototype.toString.call(obj); + } + + const __symbol__ = api.symbol; + const _uncaughtPromiseErrors = []; + const isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] === true; + + const symbolPromise = __symbol__('Promise'); + + const symbolThen = __symbol__('then'); + + const creationTrace = '__creationTrace__'; + + api.onUnhandledError = e => { + if (api.showUncaughtError()) { + const rejection = e && e.rejection; + + if (rejection) { + console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined); + } else { + console.error(e); + } + } + }; + + api.microtaskDrainDone = () => { + while (_uncaughtPromiseErrors.length) { + const uncaughtPromiseError = _uncaughtPromiseErrors.shift(); + + try { + uncaughtPromiseError.zone.runGuarded(() => { + if (uncaughtPromiseError.throwOriginal) { + throw uncaughtPromiseError.rejection; + } + + throw uncaughtPromiseError; + }); + } catch (error) { + handleUnhandledRejection(error); + } + } + }; + + const UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler'); + + function handleUnhandledRejection(e) { + api.onUnhandledError(e); + + try { + const handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL]; + + if (typeof handler === 'function') { + handler.call(this, e); + } + } catch (err) {} + } + + function isThenable(value) { + return value && value.then; + } + + function forwardResolution(value) { + return value; + } + + function forwardRejection(rejection) { + return ZoneAwarePromise.reject(rejection); + } + + const symbolState = __symbol__('state'); + + const symbolValue = __symbol__('value'); + + const symbolFinally = __symbol__('finally'); + + const symbolParentPromiseValue = __symbol__('parentPromiseValue'); + + const symbolParentPromiseState = __symbol__('parentPromiseState'); + + const source = 'Promise.then'; + const UNRESOLVED = null; + const RESOLVED = true; + const REJECTED = false; + const REJECTED_NO_CATCH = 0; + + function makeResolver(promise, state) { + return v => { + try { + resolvePromise(promise, state, v); + } catch (err) { + resolvePromise(promise, false, err); + } // Do not return value or you will break the Promise spec. + + }; + } + + const once = function () { + let wasCalled = false; + return function wrapper(wrappedFunction) { + return function () { + if (wasCalled) { + return; + } + + wasCalled = true; + wrappedFunction.apply(null, arguments); + }; + }; + }; + + const TYPE_ERROR = 'Promise resolved with itself'; + + const CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace'); // Promise Resolution + + + function resolvePromise(promise, state, value) { + const onceWrapper = once(); + + if (promise === value) { + throw new TypeError(TYPE_ERROR); + } + + if (promise[symbolState] === UNRESOLVED) { + // should only get value.then once based on promise spec. + let then = null; + + try { + if (typeof value === 'object' || typeof value === 'function') { + then = value && value.then; + } + } catch (err) { + onceWrapper(() => { + resolvePromise(promise, false, err); + })(); + return promise; + } // if (value instanceof ZoneAwarePromise) { + + + if (state !== REJECTED && value instanceof ZoneAwarePromise && value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) && value[symbolState] !== UNRESOLVED) { + clearRejectedNoCatch(value); + resolvePromise(promise, value[symbolState], value[symbolValue]); + } else if (state !== REJECTED && typeof then === 'function') { + try { + then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))); + } catch (err) { + onceWrapper(() => { + resolvePromise(promise, false, err); + })(); + } + } else { + promise[symbolState] = state; + const queue = promise[symbolValue]; + promise[symbolValue] = value; + + if (promise[symbolFinally] === symbolFinally) { + // the promise is generated by Promise.prototype.finally + if (state === RESOLVED) { + // the state is resolved, should ignore the value + // and use parent promise value + promise[symbolState] = promise[symbolParentPromiseState]; + promise[symbolValue] = promise[symbolParentPromiseValue]; + } + } // record task information in value when error occurs, so we can + // do some additional work such as render longStackTrace + + + if (state === REJECTED && value instanceof Error) { + // check if longStackTraceZone is here + const trace = Zone.currentTask && Zone.currentTask.data && Zone.currentTask.data[creationTrace]; + + if (trace) { + // only keep the long stack trace into error when in longStackTraceZone + ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { + configurable: true, + enumerable: false, + writable: true, + value: trace + }); + } + } + + for (let i = 0; i < queue.length;) { + scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]); + } + + if (queue.length == 0 && state == REJECTED) { + promise[symbolState] = REJECTED_NO_CATCH; + let uncaughtPromiseError = value; + + try { + // Here we throws a new Error to print more readable error log + // and if the value is not an error, zone.js builds an `Error` + // Object here to attach the stack information. + throw new Error('Uncaught (in promise): ' + readableObjectToString(value) + (value && value.stack ? '\n' + value.stack : '')); + } catch (err) { + uncaughtPromiseError = err; + } + + if (isDisableWrappingUncaughtPromiseRejection) { + // If disable wrapping uncaught promise reject + // use the value instead of wrapping it. + uncaughtPromiseError.throwOriginal = true; + } + + uncaughtPromiseError.rejection = value; + uncaughtPromiseError.promise = promise; + uncaughtPromiseError.zone = Zone.current; + uncaughtPromiseError.task = Zone.currentTask; + + _uncaughtPromiseErrors.push(uncaughtPromiseError); + + api.scheduleMicroTask(); // to make sure that it is running + } + } + } // Resolving an already resolved promise is a noop. + + + return promise; + } + + const REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler'); + + function clearRejectedNoCatch(promise) { + if (promise[symbolState] === REJECTED_NO_CATCH) { + // if the promise is rejected no catch status + // and queue.length > 0, means there is a error handler + // here to handle the rejected promise, we should trigger + // windows.rejectionhandled eventHandler or nodejs rejectionHandled + // eventHandler + try { + const handler = Zone[REJECTION_HANDLED_HANDLER]; + + if (handler && typeof handler === 'function') { + handler.call(this, { + rejection: promise[symbolValue], + promise: promise + }); + } + } catch (err) {} + + promise[symbolState] = REJECTED; + + for (let i = 0; i < _uncaughtPromiseErrors.length; i++) { + if (promise === _uncaughtPromiseErrors[i].promise) { + _uncaughtPromiseErrors.splice(i, 1); + } + } + } + } + + function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) { + clearRejectedNoCatch(promise); + const promiseState = promise[symbolState]; + const delegate = promiseState ? typeof onFulfilled === 'function' ? onFulfilled : forwardResolution : typeof onRejected === 'function' ? onRejected : forwardRejection; + zone.scheduleMicroTask(source, () => { + try { + const parentPromiseValue = promise[symbolValue]; + const isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally]; + + if (isFinallyPromise) { + // if the promise is generated from finally call, keep parent promise's state and value + chainPromise[symbolParentPromiseValue] = parentPromiseValue; + chainPromise[symbolParentPromiseState] = promiseState; + } // should not pass value to finally callback + + + const value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ? [] : [parentPromiseValue]); + resolvePromise(chainPromise, true, value); + } catch (error) { + // if error occurs, should always return this error + resolvePromise(chainPromise, false, error); + } + }, chainPromise); + } + + const ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }'; + + const noop = function () {}; + + const AggregateError = global.AggregateError; + + class ZoneAwarePromise { + static toString() { + return ZONE_AWARE_PROMISE_TO_STRING; + } + + static resolve(value) { + return resolvePromise(new this(null), RESOLVED, value); + } + + static reject(error) { + return resolvePromise(new this(null), REJECTED, error); + } + + static any(values) { + if (!values || typeof values[Symbol.iterator] !== 'function') { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + + const promises = []; + let count = 0; + + try { + for (let v of values) { + count++; + promises.push(ZoneAwarePromise.resolve(v)); + } + } catch (err) { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + + if (count === 0) { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + + let finished = false; + const errors = []; + return new ZoneAwarePromise((resolve, reject) => { + for (let i = 0; i < promises.length; i++) { + promises[i].then(v => { + if (finished) { + return; + } + + finished = true; + resolve(v); + }, err => { + errors.push(err); + count--; + + if (count === 0) { + finished = true; + reject(new AggregateError(errors, 'All promises were rejected')); + } + }); + } + }); + } + + static race(values) { + let resolve; + let reject; + let promise = new this((res, rej) => { + resolve = res; + reject = rej; + }); + + function onResolve(value) { + resolve(value); + } + + function onReject(error) { + reject(error); + } + + for (let value of values) { + if (!isThenable(value)) { + value = this.resolve(value); + } + + value.then(onResolve, onReject); + } + + return promise; + } + + static all(values) { + return ZoneAwarePromise.allWithCallback(values); + } + + static allSettled(values) { + const P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise; + return P.allWithCallback(values, { + thenCallback: value => ({ + status: 'fulfilled', + value + }), + errorCallback: err => ({ + status: 'rejected', + reason: err + }) + }); + } + + static allWithCallback(values, callback) { + let resolve; + let reject; + let promise = new this((res, rej) => { + resolve = res; + reject = rej; + }); // Start at 2 to prevent prematurely resolving if .then is called immediately. + + let unresolvedCount = 2; + let valueIndex = 0; + const resolvedValues = []; + + for (let value of values) { + if (!isThenable(value)) { + value = this.resolve(value); + } + + const curValueIndex = valueIndex; + + try { + value.then(value => { + resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value; + unresolvedCount--; + + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + }, err => { + if (!callback) { + reject(err); + } else { + resolvedValues[curValueIndex] = callback.errorCallback(err); + unresolvedCount--; + + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + } + }); + } catch (thenErr) { + reject(thenErr); + } + + unresolvedCount++; + valueIndex++; + } // Make the unresolvedCount zero-based again. + + + unresolvedCount -= 2; + + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + + return promise; + } + + constructor(executor) { + const promise = this; + + if (!(promise instanceof ZoneAwarePromise)) { + throw new Error('Must be an instanceof Promise.'); + } + + promise[symbolState] = UNRESOLVED; + promise[symbolValue] = []; // queue; + + try { + const onceWrapper = once(); + executor && executor(onceWrapper(makeResolver(promise, RESOLVED)), onceWrapper(makeResolver(promise, REJECTED))); + } catch (error) { + resolvePromise(promise, false, error); + } + } + + get [Symbol.toStringTag]() { + return 'Promise'; + } + + get [Symbol.species]() { + return ZoneAwarePromise; + } + + then(onFulfilled, onRejected) { + var _a; // We must read `Symbol.species` safely because `this` may be anything. For instance, `this` + // may be an object without a prototype (created through `Object.create(null)`); thus + // `this.constructor` will be undefined. One of the use cases is SystemJS creating + // prototype-less objects (modules) via `Object.create(null)`. The SystemJS creates an empty + // object and copies promise properties into that object (within the `getOrCreateLoad` + // function). The zone.js then checks if the resolved value has the `then` method and invokes + // it with the `value` context. Otherwise, this will throw an error: `TypeError: Cannot read + // properties of undefined (reading 'Symbol(Symbol.species)')`. + + + let C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species]; + + if (!C || typeof C !== 'function') { + C = this.constructor || ZoneAwarePromise; + } + + const chainPromise = new C(noop); + const zone = Zone.current; + + if (this[symbolState] == UNRESOLVED) { + this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected); + } else { + scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected); + } + + return chainPromise; + } + + catch(onRejected) { + return this.then(null, onRejected); + } + + finally(onFinally) { + var _a; // See comment on the call to `then` about why thee `Symbol.species` is safely accessed. + + + let C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species]; + + if (!C || typeof C !== 'function') { + C = ZoneAwarePromise; + } + + const chainPromise = new C(noop); + chainPromise[symbolFinally] = symbolFinally; + const zone = Zone.current; + + if (this[symbolState] == UNRESOLVED) { + this[symbolValue].push(zone, chainPromise, onFinally, onFinally); + } else { + scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally); + } + + return chainPromise; + } + + } // Protect against aggressive optimizers dropping seemingly unused properties. + // E.g. Closure Compiler in advanced mode. + + + ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve; + ZoneAwarePromise['reject'] = ZoneAwarePromise.reject; + ZoneAwarePromise['race'] = ZoneAwarePromise.race; + ZoneAwarePromise['all'] = ZoneAwarePromise.all; + const NativePromise = global[symbolPromise] = global['Promise']; + global['Promise'] = ZoneAwarePromise; + + const symbolThenPatched = __symbol__('thenPatched'); + + function patchThen(Ctor) { + const proto = Ctor.prototype; + const prop = ObjectGetOwnPropertyDescriptor(proto, 'then'); + + if (prop && (prop.writable === false || !prop.configurable)) { + // check Ctor.prototype.then propertyDescriptor is writable or not + // in meteor env, writable is false, we should ignore such case + return; + } + + const originalThen = proto.then; // Keep a reference to the original method. + + proto[symbolThen] = originalThen; + + Ctor.prototype.then = function (onResolve, onReject) { + const wrapped = new ZoneAwarePromise((resolve, reject) => { + originalThen.call(this, resolve, reject); + }); + return wrapped.then(onResolve, onReject); + }; + + Ctor[symbolThenPatched] = true; + } + + api.patchThen = patchThen; + + function zoneify(fn) { + return function (self, args) { + let resultPromise = fn.apply(self, args); + + if (resultPromise instanceof ZoneAwarePromise) { + return resultPromise; + } + + let ctor = resultPromise.constructor; + + if (!ctor[symbolThenPatched]) { + patchThen(ctor); + } + + return resultPromise; + }; + } + + if (NativePromise) { + patchThen(NativePromise); + patchMethod(global, 'fetch', delegate => zoneify(delegate)); + } // This is not part of public API, but it is useful for tests, so we expose it. + + + Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors; + return ZoneAwarePromise; +}); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// override Function.prototype.toString to make zone.js patched function +// look like native function + + +Zone.__load_patch('toString', global => { + // patch Func.prototype.toString to let them look like native + const originalFunctionToString = Function.prototype.toString; + const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate'); + const PROMISE_SYMBOL = zoneSymbol('Promise'); + const ERROR_SYMBOL = zoneSymbol('Error'); + + const newFunctionToString = function toString() { + if (typeof this === 'function') { + const originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL]; + + if (originalDelegate) { + if (typeof originalDelegate === 'function') { + return originalFunctionToString.call(originalDelegate); + } else { + return Object.prototype.toString.call(originalDelegate); + } + } + + if (this === Promise) { + const nativePromise = global[PROMISE_SYMBOL]; + + if (nativePromise) { + return originalFunctionToString.call(nativePromise); + } + } + + if (this === Error) { + const nativeError = global[ERROR_SYMBOL]; + + if (nativeError) { + return originalFunctionToString.call(nativeError); + } + } + } + + return originalFunctionToString.call(this); + }; + + newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString; + Function.prototype.toString = newFunctionToString; // patch Object.prototype.toString to let them look like native + + const originalObjectToString = Object.prototype.toString; + const PROMISE_OBJECT_TO_STRING = '[object Promise]'; + + Object.prototype.toString = function () { + if (typeof Promise === 'function' && this instanceof Promise) { + return PROMISE_OBJECT_TO_STRING; + } + + return originalObjectToString.call(this); + }; +}); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +let passiveSupported = false; + +if (typeof window !== 'undefined') { + try { + const options = Object.defineProperty({}, 'passive', { + get: function () { + passiveSupported = true; + } + }); // Note: We pass the `options` object as the event handler too. This is not compatible with the + // signature of `addEventListener` or `removeEventListener` but enables us to remove the handler + // without an actual handler. + + window.addEventListener('test', options, options); + window.removeEventListener('test', options, options); + } catch (err) { + passiveSupported = false; + } +} // an identifier to tell ZoneTask do not create a new invoke closure + + +const OPTIMIZED_ZONE_EVENT_TASK_DATA = { + useG: true +}; +const zoneSymbolEventNames = {}; +const globalSources = {}; +const EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\w+)(true|false)$'); +const IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped'); + +function prepareEventNames(eventName, eventNameToString) { + const falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR; + const trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR; + const symbol = ZONE_SYMBOL_PREFIX + falseEventName; + const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; + zoneSymbolEventNames[eventName] = {}; + zoneSymbolEventNames[eventName][FALSE_STR] = symbol; + zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; +} + +function patchEventTarget(_global, api, apis, patchOptions) { + const ADD_EVENT_LISTENER = patchOptions && patchOptions.add || ADD_EVENT_LISTENER_STR; + const REMOVE_EVENT_LISTENER = patchOptions && patchOptions.rm || REMOVE_EVENT_LISTENER_STR; + const LISTENERS_EVENT_LISTENER = patchOptions && patchOptions.listeners || 'eventListeners'; + const REMOVE_ALL_LISTENERS_EVENT_LISTENER = patchOptions && patchOptions.rmAll || 'removeAllListeners'; + const zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER); + const ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':'; + const PREPEND_EVENT_LISTENER = 'prependListener'; + const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':'; + + const invokeTask = function (task, target, event) { + // for better performance, check isRemoved which is set + // by removeEventListener + if (task.isRemoved) { + return; + } + + const delegate = task.callback; + + if (typeof delegate === 'object' && delegate.handleEvent) { + // create the bind version of handleEvent when invoke + task.callback = event => delegate.handleEvent(event); + + task.originalDelegate = delegate; + } // invoke static task.invoke + // need to try/catch error here, otherwise, the error in one event listener + // will break the executions of the other event listeners. Also error will + // not remove the event listener when `once` options is true. + + + let error; + + try { + task.invoke(task, target, [event]); + } catch (err) { + error = err; + } + + const options = task.options; + + if (options && typeof options === 'object' && options.once) { + // if options.once is true, after invoke once remove listener here + // only browser need to do this, nodejs eventEmitter will cal removeListener + // inside EventEmitter.once + const delegate = task.originalDelegate ? task.originalDelegate : task.callback; + target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate, options); + } + + return error; + }; + + function globalCallback(context, event, isCapture) { + // https://github.com/angular/zone.js/issues/911, in IE, sometimes + // event will be undefined, so we need to use window.event + event = event || _global.event; + + if (!event) { + return; + } // event.target is needed for Samsung TV and SourceBuffer + // || global is needed https://github.com/angular/zone.js/issues/190 + + + const target = context || event.target || _global; + const tasks = target[zoneSymbolEventNames[event.type][isCapture ? TRUE_STR : FALSE_STR]]; + + if (tasks) { + const errors = []; // invoke all tasks which attached to current target with given event.type and capture = false + // for performance concern, if task.length === 1, just invoke + + if (tasks.length === 1) { + const err = invokeTask(tasks[0], target, event); + err && errors.push(err); + } else { + // https://github.com/angular/zone.js/issues/836 + // copy the tasks array before invoke, to avoid + // the callback will remove itself or other listener + const copyTasks = tasks.slice(); + + for (let i = 0; i < copyTasks.length; i++) { + if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { + break; + } + + const err = invokeTask(copyTasks[i], target, event); + err && errors.push(err); + } + } // Since there is only one error, we don't need to schedule microTask + // to throw the error. + + + if (errors.length === 1) { + throw errors[0]; + } else { + for (let i = 0; i < errors.length; i++) { + const err = errors[i]; + api.nativeScheduleMicroTask(() => { + throw err; + }); + } + } + } + } // global shared zoneAwareCallback to handle all event callback with capture = false + + + const globalZoneAwareCallback = function (event) { + return globalCallback(this, event, false); + }; // global shared zoneAwareCallback to handle all event callback with capture = true + + + const globalZoneAwareCaptureCallback = function (event) { + return globalCallback(this, event, true); + }; + + function patchEventTargetMethods(obj, patchOptions) { + if (!obj) { + return false; + } + + let useGlobalCallback = true; + + if (patchOptions && patchOptions.useG !== undefined) { + useGlobalCallback = patchOptions.useG; + } + + const validateHandler = patchOptions && patchOptions.vh; + let checkDuplicate = true; + + if (patchOptions && patchOptions.chkDup !== undefined) { + checkDuplicate = patchOptions.chkDup; + } + + let returnTarget = false; + + if (patchOptions && patchOptions.rt !== undefined) { + returnTarget = patchOptions.rt; + } + + let proto = obj; + + while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { + proto = ObjectGetPrototypeOf(proto); + } + + if (!proto && obj[ADD_EVENT_LISTENER]) { + // somehow we did not find it, but we can see it. This happens on IE for Window properties. + proto = obj; + } + + if (!proto) { + return false; + } + + if (proto[zoneSymbolAddEventListener]) { + return false; + } + + const eventNameToString = patchOptions && patchOptions.eventNameToString; // a shared global taskData to pass data for scheduleEventTask + // so we do not need to create a new object just for pass some data + + const taskData = {}; + const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; + const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = proto[REMOVE_EVENT_LISTENER]; + const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = proto[LISTENERS_EVENT_LISTENER]; + const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; + let nativePrependEventListener; + + if (patchOptions && patchOptions.prepend) { + nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] = proto[patchOptions.prepend]; + } + /** + * This util function will build an option object with passive option + * to handle all possible input from the user. + */ + + + function buildEventListenerOptions(options, passive) { + if (!passiveSupported && typeof options === 'object' && options) { + // doesn't support passive but user want to pass an object as options. + // this will not work on some old browser, so we just pass a boolean + // as useCapture parameter + return !!options.capture; + } + + if (!passiveSupported || !passive) { + return options; + } + + if (typeof options === 'boolean') { + return { + capture: options, + passive: true + }; + } + + if (!options) { + return { + passive: true + }; + } + + if (typeof options === 'object' && options.passive !== false) { + return Object.assign(Object.assign({}, options), { + passive: true + }); + } + + return options; + } + + const customScheduleGlobal = function (task) { + // if there is already a task for the eventName + capture, + // just return, because we use the shared globalZoneAwareCallback here. + if (taskData.isExisting) { + return; + } + + return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options); + }; + + const customCancelGlobal = function (task) { + // if task is not marked as isRemoved, this call is directly + // from Zone.prototype.cancelTask, we should remove the task + // from tasksList of target first + if (!task.isRemoved) { + const symbolEventNames = zoneSymbolEventNames[task.eventName]; + let symbolEventName; + + if (symbolEventNames) { + symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; + } + + const existingTasks = symbolEventName && task.target[symbolEventName]; + + if (existingTasks) { + for (let i = 0; i < existingTasks.length; i++) { + const existingTask = existingTasks[i]; + + if (existingTask === task) { + existingTasks.splice(i, 1); // set isRemoved to data for faster invokeTask check + + task.isRemoved = true; + + if (existingTasks.length === 0) { + // all tasks for the eventName + capture have gone, + // remove globalZoneAwareCallback and remove the task cache from target + task.allRemoved = true; + task.target[symbolEventName] = null; + } + + break; + } + } + } + } // if all tasks for the eventName + capture have gone, + // we will really remove the global event callback, + // if not, return + + + if (!task.allRemoved) { + return; + } + + return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options); + }; + + const customScheduleNonGlobal = function (task) { + return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); + }; + + const customSchedulePrepend = function (task) { + return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); + }; + + const customCancelNonGlobal = function (task) { + return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options); + }; + + const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; + const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; + + const compareTaskCallbackVsDelegate = function (task, delegate) { + const typeOfDelegate = typeof delegate; + return typeOfDelegate === 'function' && task.callback === delegate || typeOfDelegate === 'object' && task.originalDelegate === delegate; + }; + + const compare = patchOptions && patchOptions.diff ? patchOptions.diff : compareTaskCallbackVsDelegate; + const unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')]; + + const passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')]; + + const makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget = false, prepend = false) { + return function () { + const target = this || _global; + let eventName = arguments[0]; + + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + + let delegate = arguments[1]; + + if (!delegate) { + return nativeListener.apply(this, arguments); + } + + if (isNode && eventName === 'uncaughtException') { + // don't patch uncaughtException of nodejs to prevent endless loop + return nativeListener.apply(this, arguments); + } // don't create the bind delegate function for handleEvent + // case here to improve addEventListener performance + // we will create the bind delegate when invoke + + + let isHandleEvent = false; + + if (typeof delegate !== 'function') { + if (!delegate.handleEvent) { + return nativeListener.apply(this, arguments); + } + + isHandleEvent = true; + } + + if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { + return; + } + + const passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1; + const options = buildEventListenerOptions(arguments[2], passive); + + if (unpatchedEvents) { + // check unpatched list + for (let i = 0; i < unpatchedEvents.length; i++) { + if (eventName === unpatchedEvents[i]) { + if (passive) { + return nativeListener.call(target, eventName, delegate, options); + } else { + return nativeListener.apply(this, arguments); + } + } + } + } + + const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; + const once = options && typeof options === 'object' ? options.once : false; + const zone = Zone.current; + let symbolEventNames = zoneSymbolEventNames[eventName]; + + if (!symbolEventNames) { + prepareEventNames(eventName, eventNameToString); + symbolEventNames = zoneSymbolEventNames[eventName]; + } + + const symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; + let existingTasks = target[symbolEventName]; + let isExisting = false; + + if (existingTasks) { + // already have task registered + isExisting = true; + + if (checkDuplicate) { + for (let i = 0; i < existingTasks.length; i++) { + if (compare(existingTasks[i], delegate)) { + // same callback, same capture, same event name, just return + return; + } + } + } + } else { + existingTasks = target[symbolEventName] = []; + } + + let source; + const constructorName = target.constructor['name']; + const targetSource = globalSources[constructorName]; + + if (targetSource) { + source = targetSource[eventName]; + } + + if (!source) { + source = constructorName + addSource + (eventNameToString ? eventNameToString(eventName) : eventName); + } // do not create a new object as task.data to pass those things + // just use the global shared one + + + taskData.options = options; + + if (once) { + // if addEventListener with once options, we don't pass it to + // native addEventListener, instead we keep the once setting + // and handle ourselves. + taskData.options.once = false; + } + + taskData.target = target; + taskData.capture = capture; + taskData.eventName = eventName; + taskData.isExisting = isExisting; + const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined; // keep taskData into data to allow onScheduleEventTask to access the task information + + if (data) { + data.taskData = taskData; + } + + const task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); // should clear taskData.target to avoid memory leak + // issue, https://github.com/angular/angular/issues/20442 + + taskData.target = null; // need to clear up taskData because it is a global object + + if (data) { + data.taskData = null; + } // have to save those information to task in case + // application may call task.zone.cancelTask() directly + + + if (once) { + options.once = true; + } + + if (!(!passiveSupported && typeof task.options === 'boolean')) { + // if not support passive, and we pass an option object + // to addEventListener, we should save the options to task + task.options = options; + } + + task.target = target; + task.capture = capture; + task.eventName = eventName; + + if (isHandleEvent) { + // save original delegate for compare to check duplicate + task.originalDelegate = delegate; + } + + if (!prepend) { + existingTasks.push(task); + } else { + existingTasks.unshift(task); + } + + if (returnTarget) { + return target; + } + }; + }; + + proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget); + + if (nativePrependEventListener) { + proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true); + } + + proto[REMOVE_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + + const options = arguments[2]; + const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; + const delegate = arguments[1]; + + if (!delegate) { + return nativeRemoveEventListener.apply(this, arguments); + } + + if (validateHandler && !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { + return; + } + + const symbolEventNames = zoneSymbolEventNames[eventName]; + let symbolEventName; + + if (symbolEventNames) { + symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; + } + + const existingTasks = symbolEventName && target[symbolEventName]; + + if (existingTasks) { + for (let i = 0; i < existingTasks.length; i++) { + const existingTask = existingTasks[i]; + + if (compare(existingTask, delegate)) { + existingTasks.splice(i, 1); // set isRemoved to data for faster invokeTask check + + existingTask.isRemoved = true; + + if (existingTasks.length === 0) { + // all tasks for the eventName + capture have gone, + // remove globalZoneAwareCallback and remove the task cache from target + existingTask.allRemoved = true; + target[symbolEventName] = null; // in the target, we have an event listener which is added by on_property + // such as target.onclick = function() {}, so we need to clear this internal + // property too if all delegates all removed + + if (typeof eventName === 'string') { + const onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName; + target[onPropertySymbol] = null; + } + } + + existingTask.zone.cancelTask(existingTask); + + if (returnTarget) { + return target; + } + + return; + } + } + } // issue 930, didn't find the event name or callback + // from zone kept existingTasks, the callback maybe + // added outside of zone, we need to call native removeEventListener + // to try to remove it. + + + return nativeRemoveEventListener.apply(this, arguments); + }; + + proto[LISTENERS_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + + const listeners = []; + const tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName); + + for (let i = 0; i < tasks.length; i++) { + const task = tasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + listeners.push(delegate); + } + + return listeners; + }; + + proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + + if (!eventName) { + const keys = Object.keys(target); + + for (let i = 0; i < keys.length; i++) { + const prop = keys[i]; + const match = EVENT_NAME_SYMBOL_REGX.exec(prop); + let evtName = match && match[1]; // in nodejs EventEmitter, removeListener event is + // used for monitoring the removeListener call, + // so just keep removeListener eventListener until + // all other eventListeners are removed + + if (evtName && evtName !== 'removeListener') { + this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName); + } + } // remove removeListener listener finally + + + this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener'); + } else { + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + + const symbolEventNames = zoneSymbolEventNames[eventName]; + + if (symbolEventNames) { + const symbolEventName = symbolEventNames[FALSE_STR]; + const symbolCaptureEventName = symbolEventNames[TRUE_STR]; + const tasks = target[symbolEventName]; + const captureTasks = target[symbolCaptureEventName]; + + if (tasks) { + const removeTasks = tasks.slice(); + + for (let i = 0; i < removeTasks.length; i++) { + const task = removeTasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); + } + } + + if (captureTasks) { + const removeTasks = captureTasks.slice(); + + for (let i = 0; i < removeTasks.length; i++) { + const task = removeTasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); + } + } + } + } + + if (returnTarget) { + return this; + } + }; // for native toString patch + + + attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); + attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); + + if (nativeRemoveAllListeners) { + attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); + } + + if (nativeListeners) { + attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); + } + + return true; + } + + let results = []; + + for (let i = 0; i < apis.length; i++) { + results[i] = patchEventTargetMethods(apis[i], patchOptions); + } + + return results; +} + +function findEventTasks(target, eventName) { + if (!eventName) { + const foundTasks = []; + + for (let prop in target) { + const match = EVENT_NAME_SYMBOL_REGX.exec(prop); + let evtName = match && match[1]; + + if (evtName && (!eventName || evtName === eventName)) { + const tasks = target[prop]; + + if (tasks) { + for (let i = 0; i < tasks.length; i++) { + foundTasks.push(tasks[i]); + } + } + } + } + + return foundTasks; + } + + let symbolEventName = zoneSymbolEventNames[eventName]; + + if (!symbolEventName) { + prepareEventNames(eventName); + symbolEventName = zoneSymbolEventNames[eventName]; + } + + const captureFalseTasks = target[symbolEventName[FALSE_STR]]; + const captureTrueTasks = target[symbolEventName[TRUE_STR]]; + + if (!captureFalseTasks) { + return captureTrueTasks ? captureTrueTasks.slice() : []; + } else { + return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) : captureFalseTasks.slice(); + } +} + +function patchEventPrototype(global, api) { + const Event = global['Event']; + + if (Event && Event.prototype) { + api.patchMethod(Event.prototype, 'stopImmediatePropagation', delegate => function (self, args) { + self[IMMEDIATE_PROPAGATION_SYMBOL] = true; // we need to call the native stopImmediatePropagation + // in case in some hybrid application, some part of + // application will be controlled by zone, some are not + + delegate && delegate.apply(self, args); + }); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function patchCallbacks(api, target, targetName, method, callbacks) { + const symbol = Zone.__symbol__(method); + + if (target[symbol]) { + return; + } + + const nativeDelegate = target[symbol] = target[method]; + + target[method] = function (name, opts, options) { + if (opts && opts.prototype) { + callbacks.forEach(function (callback) { + const source = `${targetName}.${method}::` + callback; + const prototype = opts.prototype; // Note: the `patchCallbacks` is used for patching the `document.registerElement` and + // `customElements.define`. We explicitly wrap the patching code into try-catch since + // callbacks may be already patched by other web components frameworks (e.g. LWC), and they + // make those properties non-writable. This means that patching callback will throw an error + // `cannot assign to read-only property`. See this code as an example: + // https://github.com/salesforce/lwc/blob/master/packages/@lwc/engine-core/src/framework/base-bridge-element.ts#L180-L186 + // We don't want to stop the application rendering if we couldn't patch some + // callback, e.g. `attributeChangedCallback`. + + try { + if (prototype.hasOwnProperty(callback)) { + const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback); + + if (descriptor && descriptor.value) { + descriptor.value = api.wrapWithCurrentZone(descriptor.value, source); + + api._redefineProperty(opts.prototype, callback, descriptor); + } else if (prototype[callback]) { + prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); + } + } else if (prototype[callback]) { + prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); + } + } catch (_a) {// Note: we leave the catch block empty since there's no way to handle the error related + // to non-writable property. + } + }); + } + + return nativeDelegate.call(target, name, opts, options); + }; + + api.attachOriginToPatched(target[method], nativeDelegate); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function filterProperties(target, onProperties, ignoreProperties) { + if (!ignoreProperties || ignoreProperties.length === 0) { + return onProperties; + } + + const tip = ignoreProperties.filter(ip => ip.target === target); + + if (!tip || tip.length === 0) { + return onProperties; + } + + const targetIgnoreProperties = tip[0].ignoreProperties; + return onProperties.filter(op => targetIgnoreProperties.indexOf(op) === -1); +} + +function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) { + // check whether target is available, sometimes target will be undefined + // because different browser or some 3rd party plugin. + if (!target) { + return; + } + + const filteredProperties = filterProperties(target, onProperties, ignoreProperties); + patchOnProperties(target, filteredProperties, prototype); +} +/** + * Get all event name properties which the event name startsWith `on` + * from the target object itself, inherited properties are not considered. + */ + + +function getOnEventNames(target) { + return Object.getOwnPropertyNames(target).filter(name => name.startsWith('on') && name.length > 2).map(name => name.substring(2)); +} + +function propertyDescriptorPatch(api, _global) { + if (isNode && !isMix) { + return; + } + + if (Zone[api.symbol('patchEvents')]) { + // events are already been patched by legacy patch. + return; + } + + const ignoreProperties = _global['__Zone_ignore_on_properties']; // for browsers that we can patch the descriptor: Chrome & Firefox + + let patchTargets = []; + + if (isBrowser) { + const internalWindow = window; + patchTargets = patchTargets.concat(['Document', 'SVGElement', 'Element', 'HTMLElement', 'HTMLBodyElement', 'HTMLMediaElement', 'HTMLFrameSetElement', 'HTMLFrameElement', 'HTMLIFrameElement', 'HTMLMarqueeElement', 'Worker']); + const ignoreErrorProperties = isIE() ? [{ + target: internalWindow, + ignoreProperties: ['error'] + }] : []; // in IE/Edge, onProp not exist in window object, but in WindowPrototype + // so we need to pass WindowPrototype to check onProp exist or not + + patchFilteredProperties(internalWindow, getOnEventNames(internalWindow), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow)); + } + + patchTargets = patchTargets.concat(['XMLHttpRequest', 'XMLHttpRequestEventTarget', 'IDBIndex', 'IDBRequest', 'IDBOpenDBRequest', 'IDBDatabase', 'IDBTransaction', 'IDBCursor', 'WebSocket']); + + for (let i = 0; i < patchTargets.length; i++) { + const target = _global[patchTargets[i]]; + target && target.prototype && patchFilteredProperties(target.prototype, getOnEventNames(target.prototype), ignoreProperties); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +Zone.__load_patch('util', (global, Zone, api) => { + // Collect native event names by looking at properties + // on the global namespace, e.g. 'onclick'. + const eventNames = getOnEventNames(global); + api.patchOnProperties = patchOnProperties; + api.patchMethod = patchMethod; + api.bindArguments = bindArguments; + api.patchMacroTask = patchMacroTask; // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` to + // define which events will not be patched by `Zone.js`. + // In newer version (>=0.9.0), we change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep + // the name consistent with angular repo. + // The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be supported for + // backwards compatibility. + + const SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS'); + + const SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS'); + + if (global[SYMBOL_UNPATCHED_EVENTS]) { + global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS]; + } + + if (global[SYMBOL_BLACK_LISTED_EVENTS]) { + Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS]; + } + + api.patchEventPrototype = patchEventPrototype; + api.patchEventTarget = patchEventTarget; + api.isIEOrEdge = isIEOrEdge; + api.ObjectDefineProperty = ObjectDefineProperty; + api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; + api.ObjectCreate = ObjectCreate; + api.ArraySlice = ArraySlice; + api.patchClass = patchClass; + api.wrapWithCurrentZone = wrapWithCurrentZone; + api.filterProperties = filterProperties; + api.attachOriginToPatched = attachOriginToPatched; + api._redefineProperty = Object.defineProperty; + api.patchCallbacks = patchCallbacks; + + api.getGlobalObjects = () => ({ + globalSources, + zoneSymbolEventNames, + eventNames, + isBrowser, + isMix, + isNode, + TRUE_STR, + FALSE_STR, + ZONE_SYMBOL_PREFIX, + ADD_EVENT_LISTENER_STR, + REMOVE_EVENT_LISTENER_STR + }); +}); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const taskSymbol = zoneSymbol('zoneTask'); + +function patchTimer(window, setName, cancelName, nameSuffix) { + let setNative = null; + let clearNative = null; + setName += nameSuffix; + cancelName += nameSuffix; + const tasksByHandleId = {}; + + function scheduleTask(task) { + const data = task.data; + + data.args[0] = function () { + return task.invoke.apply(this, arguments); + }; + + data.handleId = setNative.apply(window, data.args); + return task; + } + + function clearTask(task) { + return clearNative.call(window, task.data.handleId); + } + + setNative = patchMethod(window, setName, delegate => function (self, args) { + if (typeof args[0] === 'function') { + const options = { + isPeriodic: nameSuffix === 'Interval', + delay: nameSuffix === 'Timeout' || nameSuffix === 'Interval' ? args[1] || 0 : undefined, + args: args + }; + const callback = args[0]; + + args[0] = function timer() { + try { + return callback.apply(this, arguments); + } finally { + // issue-934, task will be cancelled + // even it is a periodic task such as + // setInterval + // https://github.com/angular/angular/issues/40387 + // Cleanup tasksByHandleId should be handled before scheduleTask + // Since some zoneSpec may intercept and doesn't trigger + // scheduleFn(scheduleTask) provided here. + if (!options.isPeriodic) { + if (typeof options.handleId === 'number') { + // in non-nodejs env, we remove timerId + // from local cache + delete tasksByHandleId[options.handleId]; + } else if (options.handleId) { + // Node returns complex objects as handleIds + // we remove task reference from timer object + options.handleId[taskSymbol] = null; + } + } + } + }; + + const task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask); + + if (!task) { + return task; + } // Node.js must additionally support the ref and unref functions. + + + const handle = task.data.handleId; + + if (typeof handle === 'number') { + // for non nodejs env, we save handleId: task + // mapping in local cache for clearTimeout + tasksByHandleId[handle] = task; + } else if (handle) { + // for nodejs env, we save task + // reference in timerId Object for clearTimeout + handle[taskSymbol] = task; + } // check whether handle is null, because some polyfill or browser + // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame + + + if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' && typeof handle.unref === 'function') { + task.ref = handle.ref.bind(handle); + task.unref = handle.unref.bind(handle); + } + + if (typeof handle === 'number' || handle) { + return handle; + } + + return task; + } else { + // cause an error by calling it directly. + return delegate.apply(window, args); + } + }); + clearNative = patchMethod(window, cancelName, delegate => function (self, args) { + const id = args[0]; + let task; + + if (typeof id === 'number') { + // non nodejs env. + task = tasksByHandleId[id]; + } else { + // nodejs env. + task = id && id[taskSymbol]; // other environments. + + if (!task) { + task = id; + } + } + + if (task && typeof task.type === 'string') { + if (task.state !== 'notScheduled' && (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) { + if (typeof id === 'number') { + delete tasksByHandleId[id]; + } else if (id) { + id[taskSymbol] = null; + } // Do not cancel already canceled functions + + + task.zone.cancelTask(task); + } + } else { + // cause an error by calling it directly. + delegate.apply(window, args); + } + }); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function patchCustomElements(_global, api) { + const { + isBrowser, + isMix + } = api.getGlobalObjects(); + + if (!isBrowser && !isMix || !_global['customElements'] || !('customElements' in _global)) { + return; + } + + const callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback']; + api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function eventTargetPatch(_global, api) { + if (Zone[api.symbol('patchEventTarget')]) { + // EventTarget is already patched. + return; + } + + const { + eventNames, + zoneSymbolEventNames, + TRUE_STR, + FALSE_STR, + ZONE_SYMBOL_PREFIX + } = api.getGlobalObjects(); // predefine all __zone_symbol__ + eventName + true/false string + + for (let i = 0; i < eventNames.length; i++) { + const eventName = eventNames[i]; + const falseEventName = eventName + FALSE_STR; + const trueEventName = eventName + TRUE_STR; + const symbol = ZONE_SYMBOL_PREFIX + falseEventName; + const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; + zoneSymbolEventNames[eventName] = {}; + zoneSymbolEventNames[eventName][FALSE_STR] = symbol; + zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; + } + + const EVENT_TARGET = _global['EventTarget']; + + if (!EVENT_TARGET || !EVENT_TARGET.prototype) { + return; + } + + api.patchEventTarget(_global, api, [EVENT_TARGET && EVENT_TARGET.prototype]); + return true; +} + +function patchEvent(global, api) { + api.patchEventPrototype(global, api); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +Zone.__load_patch('legacy', global => { + const legacyPatch = global[Zone.__symbol__('legacyPatch')]; + + if (legacyPatch) { + legacyPatch(); + } +}); + +Zone.__load_patch('queueMicrotask', (global, Zone, api) => { + api.patchMethod(global, 'queueMicrotask', delegate => { + return function (self, args) { + Zone.current.scheduleMicroTask('queueMicrotask', args[0]); + }; + }); +}); + +Zone.__load_patch('timers', global => { + const set = 'set'; + const clear = 'clear'; + patchTimer(global, set, clear, 'Timeout'); + patchTimer(global, set, clear, 'Interval'); + patchTimer(global, set, clear, 'Immediate'); +}); + +Zone.__load_patch('requestAnimationFrame', global => { + patchTimer(global, 'request', 'cancel', 'AnimationFrame'); + patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame'); + patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame'); +}); + +Zone.__load_patch('blocking', (global, Zone) => { + const blockingMethods = ['alert', 'prompt', 'confirm']; + + for (let i = 0; i < blockingMethods.length; i++) { + const name = blockingMethods[i]; + patchMethod(global, name, (delegate, symbol, name) => { + return function (s, args) { + return Zone.current.run(delegate, global, args, name); + }; + }); + } +}); + +Zone.__load_patch('EventTarget', (global, Zone, api) => { + patchEvent(global, api); + eventTargetPatch(global, api); // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener + + const XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget']; + + if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { + api.patchEventTarget(global, api, [XMLHttpRequestEventTarget.prototype]); + } +}); + +Zone.__load_patch('MutationObserver', (global, Zone, api) => { + patchClass('MutationObserver'); + patchClass('WebKitMutationObserver'); +}); + +Zone.__load_patch('IntersectionObserver', (global, Zone, api) => { + patchClass('IntersectionObserver'); +}); + +Zone.__load_patch('FileReader', (global, Zone, api) => { + patchClass('FileReader'); +}); + +Zone.__load_patch('on_property', (global, Zone, api) => { + propertyDescriptorPatch(api, global); +}); + +Zone.__load_patch('customElements', (global, Zone, api) => { + patchCustomElements(global, api); +}); + +Zone.__load_patch('XHR', (global, Zone) => { + // Treat XMLHttpRequest as a macrotask. + patchXHR(global); + const XHR_TASK = zoneSymbol('xhrTask'); + const XHR_SYNC = zoneSymbol('xhrSync'); + const XHR_LISTENER = zoneSymbol('xhrListener'); + const XHR_SCHEDULED = zoneSymbol('xhrScheduled'); + const XHR_URL = zoneSymbol('xhrURL'); + const XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled'); + + function patchXHR(window) { + const XMLHttpRequest = window['XMLHttpRequest']; + + if (!XMLHttpRequest) { + // XMLHttpRequest is not available in service worker + return; + } + + const XMLHttpRequestPrototype = XMLHttpRequest.prototype; + + function findPendingTask(target) { + return target[XHR_TASK]; + } + + let oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + let oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + + if (!oriAddListener) { + const XMLHttpRequestEventTarget = window['XMLHttpRequestEventTarget']; + + if (XMLHttpRequestEventTarget) { + const XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget.prototype; + oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + } + } + + const READY_STATE_CHANGE = 'readystatechange'; + const SCHEDULED = 'scheduled'; + + function scheduleTask(task) { + const data = task.data; + const target = data.target; + target[XHR_SCHEDULED] = false; + target[XHR_ERROR_BEFORE_SCHEDULED] = false; // remove existing event listener + + const listener = target[XHR_LISTENER]; + + if (!oriAddListener) { + oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + } + + if (listener) { + oriRemoveListener.call(target, READY_STATE_CHANGE, listener); + } + + const newListener = target[XHR_LISTENER] = () => { + if (target.readyState === target.DONE) { + // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with + // readyState=4 multiple times, so we need to check task state here + if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) { + // check whether the xhr has registered onload listener + // if that is the case, the task should invoke after all + // onload listeners finish. + // Also if the request failed without response (status = 0), the load event handler + // will not be triggered, in that case, we should also invoke the placeholder callback + // to close the XMLHttpRequest::send macroTask. + // https://github.com/angular/angular/issues/38795 + const loadTasks = target[Zone.__symbol__('loadfalse')]; + + if (target.status !== 0 && loadTasks && loadTasks.length > 0) { + const oriInvoke = task.invoke; + + task.invoke = function () { + // need to load the tasks again, because in other + // load listener, they may remove themselves + const loadTasks = target[Zone.__symbol__('loadfalse')]; + + for (let i = 0; i < loadTasks.length; i++) { + if (loadTasks[i] === task) { + loadTasks.splice(i, 1); + } + } + + if (!data.aborted && task.state === SCHEDULED) { + oriInvoke.call(task); + } + }; + + loadTasks.push(task); + } else { + task.invoke(); + } + } else if (!data.aborted && target[XHR_SCHEDULED] === false) { + // error occurs when xhr.send() + target[XHR_ERROR_BEFORE_SCHEDULED] = true; + } + } + }; + + oriAddListener.call(target, READY_STATE_CHANGE, newListener); + const storedTask = target[XHR_TASK]; + + if (!storedTask) { + target[XHR_TASK] = task; + } + + sendNative.apply(target, data.args); + target[XHR_SCHEDULED] = true; + return task; + } + + function placeholderCallback() {} + + function clearTask(task) { + const data = task.data; // Note - ideally, we would call data.target.removeEventListener here, but it's too late + // to prevent it from firing. So instead, we store info for the event listener. + + data.aborted = true; + return abortNative.apply(data.target, data.args); + } + + const openNative = patchMethod(XMLHttpRequestPrototype, 'open', () => function (self, args) { + self[XHR_SYNC] = args[2] == false; + self[XHR_URL] = args[1]; + return openNative.apply(self, args); + }); + const XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send'; + const fetchTaskAborting = zoneSymbol('fetchTaskAborting'); + const fetchTaskScheduling = zoneSymbol('fetchTaskScheduling'); + const sendNative = patchMethod(XMLHttpRequestPrototype, 'send', () => function (self, args) { + if (Zone.current[fetchTaskScheduling] === true) { + // a fetch is scheduling, so we are using xhr to polyfill fetch + // and because we already schedule macroTask for fetch, we should + // not schedule a macroTask for xhr again + return sendNative.apply(self, args); + } + + if (self[XHR_SYNC]) { + // if the XHR is sync there is no task to schedule, just execute the code. + return sendNative.apply(self, args); + } else { + const options = { + target: self, + url: self[XHR_URL], + isPeriodic: false, + args: args, + aborted: false + }; + const task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask); + + if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted && task.state === SCHEDULED) { + // xhr request throw error when send + // we should invoke task instead of leaving a scheduled + // pending macroTask + task.invoke(); + } + } + }); + const abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', () => function (self, args) { + const task = findPendingTask(self); + + if (task && typeof task.type == 'string') { + // If the XHR has already completed, do nothing. + // If the XHR has already been aborted, do nothing. + // Fix #569, call abort multiple times before done will cause + // macroTask task count be negative number + if (task.cancelFn == null || task.data && task.data.aborted) { + return; + } + + task.zone.cancelTask(task); + } else if (Zone.current[fetchTaskAborting] === true) { + // the abort is called from fetch polyfill, we need to call native abort of XHR. + return abortNative.apply(self, args); + } // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no + // task + // to cancel. Do nothing. + + }); + } +}); + +Zone.__load_patch('geolocation', global => { + /// GEO_LOCATION + if (global['navigator'] && global['navigator'].geolocation) { + patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']); + } +}); + +Zone.__load_patch('PromiseRejectionEvent', (global, Zone) => { + // handle unhandled promise rejection + function findPromiseRejectionHandler(evtName) { + return function (e) { + const eventTasks = findEventTasks(global, evtName); + eventTasks.forEach(eventTask => { + // windows has added unhandledrejection event listener + // trigger the event listener + const PromiseRejectionEvent = global['PromiseRejectionEvent']; + + if (PromiseRejectionEvent) { + const evt = new PromiseRejectionEvent(evtName, { + promise: e.promise, + reason: e.rejection + }); + eventTask.invoke(evt); + } + }); + }; + } + + if (global['PromiseRejectionEvent']) { + Zone[zoneSymbol('unhandledPromiseRejectionHandler')] = findPromiseRejectionHandler('unhandledrejection'); + Zone[zoneSymbol('rejectionHandledHandler')] = findPromiseRejectionHandler('rejectionhandled'); + } +}); + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(7435)); +/******/ } +]); +//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/polyfills.js.map b/cmd/pkgdash/assets/ui/polyfills.js.map new file mode 100644 index 0000000..ad70661 --- /dev/null +++ b/cmd/pkgdash/assets/ui/polyfills.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polyfills.js","mappings":"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","sources":["./src/polyfills.ts","./node_modules/zone.js/fesm2015/zone.js"],"sourcesContent":["/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n * 2. Application imports. Files imported after ZoneJS that should be loaded before your main\n * file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes recent versions of Safari, Chrome (including\n * Opera), Edge on the desktop, and iOS and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n * with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n * (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js'; // Included with Angular CLI.\n\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n","'use strict';\n/**\n * @license Angular v14.2.0-next.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n((function (global) {\n const performance = global['performance'];\n function mark(name) {\n performance && performance['mark'] && performance['mark'](name);\n }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n // Initialize before it's accessed below.\n // __Zone_symbol_prefix global can be used to override the default zone\n // symbol prefix with a custom one if needed.\n const symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__';\n function __symbol__(name) {\n return symbolPrefix + name;\n }\n const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (global['Zone']) {\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') {\n throw new Error('Zone already loaded.');\n }\n else {\n return global['Zone'];\n }\n }\n class Zone {\n constructor(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = zoneSpec && zoneSpec.properties || {};\n this._zoneDelegate =\n new _ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n static assertZonePatched() {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n }\n static get root() {\n let zone = Zone.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n }\n static get current() {\n return _currentZoneFrame.zone;\n }\n static get currentTask() {\n return _currentTask;\n }\n // tslint:disable-next-line:require-internal-with-underscore\n static __load_patch(name, fn, ignoreDuplicate = false) {\n if (patches.hasOwnProperty(name)) {\n // `checkDuplicate` option is defined from global variable\n // so it works for all modules.\n // `ignoreDuplicate` can work for the specified module\n if (!ignoreDuplicate && checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n const perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, Zone, _api);\n performanceMeasure(perfName, perfName);\n }\n }\n get parent() {\n return this._parent;\n }\n get name() {\n return this._name;\n }\n get(key) {\n const zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n }\n getZoneWith(key) {\n let current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n }\n fork(zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n }\n wrap(callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n const _callback = this._zoneDelegate.intercept(this, callback, source);\n const zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n }\n run(callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n }\n runGuarded(callback, applyThis = null, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n }\n runTask(task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n }\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) {\n return;\n }\n const reEntryGuard = task.state != running;\n reEntryGuard && task._transitionTo(running, scheduled);\n task.runCount++;\n const previousTask = _currentTask;\n _currentTask = task;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (task.type == macroTask && task.data && !task.data.isPeriodic) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n if (task.state !== notScheduled && task.state !== unknown) {\n if (task.type == eventTask || (task.data && task.data.isPeriodic)) {\n reEntryGuard && task._transitionTo(scheduled, running);\n }\n else {\n task.runCount = 0;\n this._updateTaskCount(task, -1);\n reEntryGuard &&\n task._transitionTo(notScheduled, running, notScheduled);\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n }\n scheduleTask(task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n let newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${task.zone.name}`);\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n const zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n }\n scheduleMicroTask(source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n }\n scheduleMacroTask(source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n }\n scheduleEventTask(source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n }\n cancelTask(task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = 0;\n return task;\n }\n _updateTaskCount(task, count) {\n const zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (let i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n }\n }\n // tslint:disable-next-line:require-internal-with-underscore\n Zone.__symbol__ = __symbol__;\n const DELEGATE_ZS = {\n name: '',\n onHasTask: (delegate, _, target, hasTaskState) => delegate.hasTask(target, hasTaskState),\n onScheduleTask: (delegate, _, target, task) => delegate.scheduleTask(target, task),\n onInvokeTask: (delegate, _, target, task, applyThis, applyArgs) => delegate.invokeTask(target, task, applyThis, applyArgs),\n onCancelTask: (delegate, _, target, task) => delegate.cancelTask(target, task)\n };\n class _ZoneDelegate {\n constructor(zone, parentDelegate, zoneSpec) {\n this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 };\n this.zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone =\n zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate._forkCurrZone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate._interceptCurrZone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone =\n zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate._invokeCurrZone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate._handleErrorCurrZone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt = zoneSpec &&\n (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate._scheduleTaskCurrZone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate._invokeTaskCurrZone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate._cancelTaskCurrZone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n const zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n const parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this.zone;\n }\n }\n }\n fork(targetZone, zoneSpec) {\n return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :\n new Zone(targetZone, zoneSpec);\n }\n intercept(targetZone, callback, source) {\n return this._interceptZS ?\n this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :\n callback;\n }\n invoke(targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :\n callback.apply(applyThis, applyArgs);\n }\n handleError(targetZone, error) {\n return this._handleErrorZS ?\n this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :\n true;\n }\n scheduleTask(targetZone, task) {\n let returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n // clang-format off\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n // clang-format on\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n }\n invokeTask(targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :\n task.callback.apply(applyThis, applyArgs);\n }\n cancelTask(targetZone, task) {\n let value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n }\n hasTask(targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n }\n // tslint:disable-next-line:require-internal-with-underscore\n _updateTaskCount(type, count) {\n const counts = this._taskCounts;\n const prev = counts[type];\n const next = counts[type] = prev + count;\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n const isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type\n };\n this.hasTask(this.zone, isEmpty);\n }\n }\n }\n class ZoneTask {\n constructor(type, source, callback, options, scheduleFn, cancelFn) {\n // tslint:disable-next-line:require-internal-with-underscore\n this._zone = null;\n this.runCount = 0;\n // tslint:disable-next-line:require-internal-with-underscore\n this._zoneDelegates = null;\n // tslint:disable-next-line:require-internal-with-underscore\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n if (!callback) {\n throw new Error('callback is not defined');\n }\n this.callback = callback;\n const self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n static invokeTask(task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n }\n get zone() {\n return this._zone;\n }\n get state() {\n return this._state;\n }\n cancelScheduleRequest() {\n this._transitionTo(notScheduled, scheduling);\n }\n // tslint:disable-next-line:require-internal-with-underscore\n _transitionTo(toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(`${this.type} '${this.source}': can not transition to '${toState}', expecting state '${fromState1}'${fromState2 ? ' or \\'' + fromState2 + '\\'' : ''}, was '${this._state}'.`);\n }\n }\n toString() {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n }\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n toJSON() {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount\n };\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n const symbolSetTimeout = __symbol__('setTimeout');\n const symbolPromise = __symbol__('Promise');\n const symbolThen = __symbol__('then');\n let _microTaskQueue = [];\n let _isDrainingMicrotaskQueue = false;\n let nativeMicroTaskQueuePromise;\n function nativeScheduleMicroTask(func) {\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n let nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, func);\n }\n else {\n global[symbolSetTimeout](func, 0);\n }\n }\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n nativeScheduleMicroTask(drainMicroTaskQueue);\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n const queue = _microTaskQueue;\n _microTaskQueue = [];\n for (let i = 0; i < queue.length; i++) {\n const task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n const NO_ZONE = { name: 'NO ZONE' };\n const notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n const microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n const patches = {};\n const _api = {\n symbol: __symbol__,\n currentZoneFrame: () => _currentZoneFrame,\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: () => !Zone[__symbol__('ignoreConsoleErrorUncaughtError')],\n patchEventTarget: () => [],\n patchOnProperties: noop,\n patchMethod: () => noop,\n bindArguments: () => [],\n patchThen: () => noop,\n patchMacroTask: () => noop,\n patchEventPrototype: () => noop,\n isIEOrEdge: () => false,\n getGlobalObjects: () => undefined,\n ObjectDefineProperty: () => noop,\n ObjectGetOwnPropertyDescriptor: () => undefined,\n ObjectCreate: () => undefined,\n ArraySlice: () => [],\n patchClass: () => noop,\n wrapWithCurrentZone: () => noop,\n filterProperties: () => [],\n attachOriginToPatched: () => noop,\n _redefineProperty: () => noop,\n patchCallbacks: () => noop,\n nativeScheduleMicroTask: nativeScheduleMicroTask\n };\n let _currentZoneFrame = { parent: null, zone: new Zone(null, null) };\n let _currentTask = null;\n let _numberOfNestedTaskFrames = 0;\n function noop() { }\n performanceMeasure('Zone', 'Zone');\n return global['Zone'] = Zone;\n}))(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global);\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n/// \n// issue #989, to reduce bundle size, use short name\n/** Object.getOwnPropertyDescriptor */\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n/** Object.defineProperty */\nconst ObjectDefineProperty = Object.defineProperty;\n/** Object.getPrototypeOf */\nconst ObjectGetPrototypeOf = Object.getPrototypeOf;\n/** Object.create */\nconst ObjectCreate = Object.create;\n/** Array.prototype.slice */\nconst ArraySlice = Array.prototype.slice;\n/** addEventListener string const */\nconst ADD_EVENT_LISTENER_STR = 'addEventListener';\n/** removeEventListener string const */\nconst REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n/** zoneSymbol addEventListener */\nconst ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR);\n/** zoneSymbol removeEventListener */\nconst ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR);\n/** true string const */\nconst TRUE_STR = 'true';\n/** false string const */\nconst FALSE_STR = 'false';\n/** Zone symbol prefix string const. */\nconst ZONE_SYMBOL_PREFIX = Zone.__symbol__('');\nfunction wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n}\nfunction scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n}\nconst zoneSymbol = Zone.__symbol__;\nconst isWindowExists = typeof window !== 'undefined';\nconst internalWindow = isWindowExists ? window : undefined;\nconst _global = isWindowExists && internalWindow || typeof self === 'object' && self || global;\nconst REMOVE_ATTRIBUTE = 'removeAttribute';\nfunction bindArguments(args, source) {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n}\nfunction patchPrototype(prototype, fnNames) {\n const source = prototype.constructor['name'];\n for (let i = 0; i < fnNames.length; i++) {\n const name = fnNames[i];\n const delegate = prototype[name];\n if (delegate) {\n const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name);\n if (!isPropertyWritable(prototypeDesc)) {\n continue;\n }\n prototype[name] = ((delegate) => {\n const patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n }\n}\nfunction isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n}\nconst isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nconst isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]');\nconst isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n// we are in electron of nw, so we are both browser and nodejs\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nconst isMix = typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]' && !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\nconst zoneSymbolEventNames$1 = {};\nconst wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n let eventNameSymbol = zoneSymbolEventNames$1[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n const target = this || event.target || _global;\n const listener = target[eventNameSymbol];\n let result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signature\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n const errorEvent = event;\n result = listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n};\nfunction patchProperty(obj, prop, prototype) {\n let desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n const onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n const originalDescGet = desc.get;\n const originalDescSet = desc.set;\n // slice(2) cuz 'onclick' -> 'click', etc\n const eventName = prop.slice(2);\n let eventNameSymbol = zoneSymbolEventNames$1[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n let target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n const previousValue = target[eventNameSymbol];\n if (typeof previousValue === 'function') {\n target.removeEventListener(eventName, wrapFn);\n }\n // issue #978, when onload handler was added before loading zone.js\n // we should remove it with originalDescSet\n originalDescSet && originalDescSet.call(target, null);\n target[eventNameSymbol] = newValue;\n if (typeof newValue === 'function') {\n target.addEventListener(eventName, wrapFn, false);\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n let target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n const listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n let value = originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n}\nfunction patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (let i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n const onProperties = [];\n for (const prop in obj) {\n if (prop.slice(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (let j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n}\nconst originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n const OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n const a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n const instance = new OriginalClass(function () { });\n let prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n }\n });\n }\n }(prop));\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n}\nfunction patchMethod(target, name, patchFn) {\n let proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n const delegateName = zoneSymbol(name);\n let delegate = null;\n if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n const desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n const patchDelegate = patchFn(delegate, delegateName, name);\n proto[name] = function () {\n return patchDelegate(this, arguments);\n };\n attachOriginToPatched(proto[name], delegate);\n }\n }\n return delegate;\n}\n// TODO: @JiaLiPassion, support cancel task later if necessary\nfunction patchMacroTask(obj, funcName, metaCreator) {\n let setNative = null;\n function scheduleTask(task) {\n const data = task.data;\n data.args[data.cbIdx] = function () {\n task.invoke.apply(this, arguments);\n };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, (delegate) => function (self, args) {\n const meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n });\n}\nfunction attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n}\nlet isDetectedIEOrEdge = false;\nlet ieOrEdge = false;\nfunction isIE() {\n try {\n const ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {\n return true;\n }\n }\n catch (error) {\n }\n return false;\n}\nfunction isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n const ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n }\n catch (error) {\n }\n return ieOrEdge;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nZone.__load_patch('ZoneAwarePromise', (global, Zone, api) => {\n const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n const ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n const className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n const __symbol__ = api.symbol;\n const _uncaughtPromiseErrors = [];\n const isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] === true;\n const symbolPromise = __symbol__('Promise');\n const symbolThen = __symbol__('then');\n const creationTrace = '__creationTrace__';\n api.onUnhandledError = (e) => {\n if (api.showUncaughtError()) {\n const rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = () => {\n while (_uncaughtPromiseErrors.length) {\n const uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(() => {\n if (uncaughtPromiseError.throwOriginal) {\n throw uncaughtPromiseError.rejection;\n }\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n }\n };\n const UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n const handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) {\n }\n }\n function isThenable(value) {\n return value && value.then;\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n const symbolState = __symbol__('state');\n const symbolValue = __symbol__('value');\n const symbolFinally = __symbol__('finally');\n const symbolParentPromiseValue = __symbol__('parentPromiseValue');\n const symbolParentPromiseState = __symbol__('parentPromiseState');\n const source = 'Promise.then';\n const UNRESOLVED = null;\n const RESOLVED = true;\n const REJECTED = false;\n const REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return (v) => {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n const once = function () {\n let wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n const TYPE_ERROR = 'Promise resolved with itself';\n const CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n const onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n let then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(() => {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED && value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(() => {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n const queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n const trace = Zone.currentTask && Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace });\n }\n }\n for (let i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n let uncaughtPromiseError = value;\n try {\n // Here we throws a new Error to print more readable error log\n // and if the value is not an error, zone.js builds an `Error`\n // Object here to attach the stack information.\n throw new Error('Uncaught (in promise): ' + readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n uncaughtPromiseError = err;\n }\n if (isDisableWrappingUncaughtPromiseRejection) {\n // If disable wrapping uncaught promise reject\n // use the value instead of wrapping it.\n uncaughtPromiseError.throwOriginal = true;\n }\n uncaughtPromiseError.rejection = value;\n uncaughtPromiseError.promise = promise;\n uncaughtPromiseError.zone = Zone.current;\n uncaughtPromiseError.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(uncaughtPromiseError);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n const REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n const handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) {\n }\n promise[symbolState] = REJECTED;\n for (let i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n const promiseState = promise[symbolState];\n const delegate = promiseState ?\n (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :\n (typeof onRejected === 'function') ? onRejected :\n forwardRejection;\n zone.scheduleMicroTask(source, () => {\n try {\n const parentPromiseValue = promise[symbolValue];\n const isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n const value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ?\n [] :\n [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n const ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n const noop = function () { };\n const AggregateError = global.AggregateError;\n class ZoneAwarePromise {\n static toString() {\n return ZONE_AWARE_PROMISE_TO_STRING;\n }\n static resolve(value) {\n return resolvePromise(new this(null), RESOLVED, value);\n }\n static reject(error) {\n return resolvePromise(new this(null), REJECTED, error);\n }\n static any(values) {\n if (!values || typeof values[Symbol.iterator] !== 'function') {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n const promises = [];\n let count = 0;\n try {\n for (let v of values) {\n count++;\n promises.push(ZoneAwarePromise.resolve(v));\n }\n }\n catch (err) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n if (count === 0) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n let finished = false;\n const errors = [];\n return new ZoneAwarePromise((resolve, reject) => {\n for (let i = 0; i < promises.length; i++) {\n promises[i].then(v => {\n if (finished) {\n return;\n }\n finished = true;\n resolve(v);\n }, err => {\n errors.push(err);\n count--;\n if (count === 0) {\n finished = true;\n reject(new AggregateError(errors, 'All promises were rejected'));\n }\n });\n }\n });\n }\n ;\n static race(values) {\n let resolve;\n let reject;\n let promise = new this((res, rej) => {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) {\n resolve(value);\n }\n function onReject(error) {\n reject(error);\n }\n for (let value of values) {\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n return promise;\n }\n static all(values) {\n return ZoneAwarePromise.allWithCallback(values);\n }\n static allSettled(values) {\n const P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise;\n return P.allWithCallback(values, {\n thenCallback: (value) => ({ status: 'fulfilled', value }),\n errorCallback: (err) => ({ status: 'rejected', reason: err })\n });\n }\n static allWithCallback(values, callback) {\n let resolve;\n let reject;\n let promise = new this((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n let unresolvedCount = 2;\n let valueIndex = 0;\n const resolvedValues = [];\n for (let value of values) {\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n const curValueIndex = valueIndex;\n try {\n value.then((value) => {\n resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, (err) => {\n if (!callback) {\n reject(err);\n }\n else {\n resolvedValues[curValueIndex] = callback.errorCallback(err);\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }\n });\n }\n catch (thenErr) {\n reject(thenErr);\n }\n unresolvedCount++;\n valueIndex++;\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n }\n constructor(executor) {\n const promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n const onceWrapper = once();\n executor &&\n executor(onceWrapper(makeResolver(promise, RESOLVED)), onceWrapper(makeResolver(promise, REJECTED)));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n get [Symbol.toStringTag]() {\n return 'Promise';\n }\n get [Symbol.species]() {\n return ZoneAwarePromise;\n }\n then(onFulfilled, onRejected) {\n var _a;\n // We must read `Symbol.species` safely because `this` may be anything. For instance, `this`\n // may be an object without a prototype (created through `Object.create(null)`); thus\n // `this.constructor` will be undefined. One of the use cases is SystemJS creating\n // prototype-less objects (modules) via `Object.create(null)`. The SystemJS creates an empty\n // object and copies promise properties into that object (within the `getOrCreateLoad`\n // function). The zone.js then checks if the resolved value has the `then` method and invokes\n // it with the `value` context. Otherwise, this will throw an error: `TypeError: Cannot read\n // properties of undefined (reading 'Symbol(Symbol.species)')`.\n let C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = this.constructor || ZoneAwarePromise;\n }\n const chainPromise = new C(noop);\n const zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n }\n catch(onRejected) {\n return this.then(null, onRejected);\n }\n finally(onFinally) {\n var _a;\n // See comment on the call to `then` about why thee `Symbol.species` is safely accessed.\n let C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = ZoneAwarePromise;\n }\n const chainPromise = new C(noop);\n chainPromise[symbolFinally] = symbolFinally;\n const zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n }\n }\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n const NativePromise = global[symbolPromise] = global['Promise'];\n global['Promise'] = ZoneAwarePromise;\n const symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n const proto = Ctor.prototype;\n const prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n const originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n const wrapped = new ZoneAwarePromise((resolve, reject) => {\n originalThen.call(this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n function zoneify(fn) {\n return function (self, args) {\n let resultPromise = fn.apply(self, args);\n if (resultPromise instanceof ZoneAwarePromise) {\n return resultPromise;\n }\n let ctor = resultPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n patchThen(ctor);\n }\n return resultPromise;\n };\n }\n if (NativePromise) {\n patchThen(NativePromise);\n patchMethod(global, 'fetch', delegate => zoneify(delegate));\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// override Function.prototype.toString to make zone.js patched function\n// look like native function\nZone.__load_patch('toString', (global) => {\n // patch Func.prototype.toString to let them look like native\n const originalFunctionToString = Function.prototype.toString;\n const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n const PROMISE_SYMBOL = zoneSymbol('Promise');\n const ERROR_SYMBOL = zoneSymbol('Error');\n const newFunctionToString = function toString() {\n if (typeof this === 'function') {\n const originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.call(originalDelegate);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n const nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.call(nativePromise);\n }\n }\n if (this === Error) {\n const nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.call(nativeError);\n }\n }\n }\n return originalFunctionToString.call(this);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n const originalObjectToString = Object.prototype.toString;\n const PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (typeof Promise === 'function' && this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.call(this);\n };\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n }\n });\n // Note: We pass the `options` object as the event handler too. This is not compatible with the\n // signature of `addEventListener` or `removeEventListener` but enables us to remove the handler\n // without an actual handler.\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\n// an identifier to tell ZoneTask do not create a new invoke closure\nconst OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true\n};\nconst zoneSymbolEventNames = {};\nconst globalSources = {};\nconst EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\\\w+)(true|false)$');\nconst IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped');\nfunction prepareEventNames(eventName, eventNameToString) {\n const falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n const trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n const symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n}\nfunction patchEventTarget(_global, api, apis, patchOptions) {\n const ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n const REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n const LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n const REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n const zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n const ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n const PREPEND_EVENT_LISTENER = 'prependListener';\n const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n const invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n const delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = (event) => delegate.handleEvent(event);\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n // need to try/catch error here, otherwise, the error in one event listener\n // will break the executions of the other event listeners. Also error will\n // not remove the event listener when `once` options is true.\n let error;\n try {\n task.invoke(task, target, [event]);\n }\n catch (err) {\n error = err;\n }\n const options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n const delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate, options);\n }\n return error;\n };\n function globalCallback(context, event, isCapture) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n const target = context || event.target || _global;\n const tasks = target[zoneSymbolEventNames[event.type][isCapture ? TRUE_STR : FALSE_STR]];\n if (tasks) {\n const errors = [];\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n const err = invokeTask(tasks[0], target, event);\n err && errors.push(err);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n const copyTasks = tasks.slice();\n for (let i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n const err = invokeTask(copyTasks[i], target, event);\n err && errors.push(err);\n }\n }\n // Since there is only one error, we don't need to schedule microTask\n // to throw the error.\n if (errors.length === 1) {\n throw errors[0];\n }\n else {\n for (let i = 0; i < errors.length; i++) {\n const err = errors[i];\n api.nativeScheduleMicroTask(() => {\n throw err;\n });\n }\n }\n }\n }\n // global shared zoneAwareCallback to handle all event callback with capture = false\n const globalZoneAwareCallback = function (event) {\n return globalCallback(this, event, false);\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n const globalZoneAwareCaptureCallback = function (event) {\n return globalCallback(this, event, true);\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n let useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n const validateHandler = patchOptions && patchOptions.vh;\n let checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n let returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n let proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n const eventNameToString = patchOptions && patchOptions.eventNameToString;\n // a shared global taskData to pass data for scheduleEventTask\n // so we do not need to create a new object just for pass some data\n const taskData = {};\n const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER];\n const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER];\n const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER];\n const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER];\n let nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n /**\n * This util function will build an option object with passive option\n * to handle all possible input from the user.\n */\n function buildEventListenerOptions(options, passive) {\n if (!passiveSupported && typeof options === 'object' && options) {\n // doesn't support passive but user want to pass an object as options.\n // this will not work on some old browser, so we just pass a boolean\n // as useCapture parameter\n return !!options.capture;\n }\n if (!passiveSupported || !passive) {\n return options;\n }\n if (typeof options === 'boolean') {\n return { capture: options, passive: true };\n }\n if (!options) {\n return { passive: true };\n }\n if (typeof options === 'object' && options.passive !== false) {\n return Object.assign(Object.assign({}, options), { passive: true });\n }\n return options;\n }\n const customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n const customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n const symbolEventNames = zoneSymbolEventNames[task.eventName];\n let symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n const existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (let i = 0; i < existingTasks.length; i++) {\n const existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n const customScheduleNonGlobal = function (task) {\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n const customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n const customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n const compareTaskCallbackVsDelegate = function (task, delegate) {\n const typeOfDelegate = typeof delegate;\n return (typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate);\n };\n const compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate;\n const unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')];\n const passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')];\n const makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget = false, prepend = false) {\n return function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n let delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // don't create the bind delegate function for handleEvent\n // case here to improve addEventListener performance\n // we will create the bind delegate when invoke\n let isHandleEvent = false;\n if (typeof delegate !== 'function') {\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isHandleEvent = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n const passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;\n const options = buildEventListenerOptions(arguments[2], passive);\n if (unpatchedEvents) {\n // check unpatched list\n for (let i = 0; i < unpatchedEvents.length; i++) {\n if (eventName === unpatchedEvents[i]) {\n if (passive) {\n return nativeListener.call(target, eventName, delegate, options);\n }\n else {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n }\n const capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n const once = options && typeof options === 'object' ? options.once : false;\n const zone = Zone.current;\n let symbolEventNames = zoneSymbolEventNames[eventName];\n if (!symbolEventNames) {\n prepareEventNames(eventName, eventNameToString);\n symbolEventNames = zoneSymbolEventNames[eventName];\n }\n const symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n let existingTasks = target[symbolEventName];\n let isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (let i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n let source;\n const constructorName = target.constructor['name'];\n const targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source = constructorName + addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // do not create a new object as task.data to pass those things\n // just use the global shared one\n taskData.options = options;\n if (once) {\n // if addEventListener with once options, we don't pass it to\n // native addEventListener, instead we keep the once setting\n // and handle ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n const task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n options.once = true;\n }\n if (!(!passiveSupported && typeof task.options === 'boolean')) {\n // if not support passive, and we pass an option object\n // to addEventListener, we should save the options to task\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isHandleEvent) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const options = arguments[2];\n const capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n const delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n const symbolEventNames = zoneSymbolEventNames[eventName];\n let symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n const existingTasks = symbolEventName && target[symbolEventName];\n if (existingTasks) {\n for (let i = 0; i < existingTasks.length; i++) {\n const existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n // in the target, we have an event listener which is added by on_property\n // such as target.onclick = function() {}, so we need to clear this internal\n // property too if all delegates all removed\n if (typeof eventName === 'string') {\n const onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName;\n target[onPropertySymbol] = null;\n }\n }\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // issue 930, didn't find the event name or callback\n // from zone kept existingTasks, the callback maybe\n // added outside of zone, we need to call native removeEventListener\n // to try to remove it.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const listeners = [];\n const tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (!eventName) {\n const keys = Object.keys(target);\n for (let i = 0; i < keys.length; i++) {\n const prop = keys[i];\n const match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n let evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const symbolEventNames = zoneSymbolEventNames[eventName];\n if (symbolEventNames) {\n const symbolEventName = symbolEventNames[FALSE_STR];\n const symbolCaptureEventName = symbolEventNames[TRUE_STR];\n const tasks = target[symbolEventName];\n const captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n const removeTasks = tasks.slice();\n for (let i = 0; i < removeTasks.length; i++) {\n const task = removeTasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n const removeTasks = captureTasks.slice();\n for (let i = 0; i < removeTasks.length; i++) {\n const task = removeTasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n let results = [];\n for (let i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n}\nfunction findEventTasks(target, eventName) {\n if (!eventName) {\n const foundTasks = [];\n for (let prop in target) {\n const match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n let evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n const tasks = target[prop];\n if (tasks) {\n for (let i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n }\n let symbolEventName = zoneSymbolEventNames[eventName];\n if (!symbolEventName) {\n prepareEventNames(eventName);\n symbolEventName = zoneSymbolEventNames[eventName];\n }\n const captureFalseTasks = target[symbolEventName[FALSE_STR]];\n const captureTrueTasks = target[symbolEventName[TRUE_STR]];\n if (!captureFalseTasks) {\n return captureTrueTasks ? captureTrueTasks.slice() : [];\n }\n else {\n return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) :\n captureFalseTasks.slice();\n }\n}\nfunction patchEventPrototype(global, api) {\n const Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', (delegate) => function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n });\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction patchCallbacks(api, target, targetName, method, callbacks) {\n const symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n const nativeDelegate = target[symbol] = target[method];\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n const source = `${targetName}.${method}::` + callback;\n const prototype = opts.prototype;\n // Note: the `patchCallbacks` is used for patching the `document.registerElement` and\n // `customElements.define`. We explicitly wrap the patching code into try-catch since\n // callbacks may be already patched by other web components frameworks (e.g. LWC), and they\n // make those properties non-writable. This means that patching callback will throw an error\n // `cannot assign to read-only property`. See this code as an example:\n // https://github.com/salesforce/lwc/blob/master/packages/@lwc/engine-core/src/framework/base-bridge-element.ts#L180-L186\n // We don't want to stop the application rendering if we couldn't patch some\n // callback, e.g. `attributeChangedCallback`.\n try {\n if (prototype.hasOwnProperty(callback)) {\n const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = api.wrapWithCurrentZone(descriptor.value, source);\n api._redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n catch (_a) {\n // Note: we leave the catch block empty since there's no way to handle the error related\n // to non-writable property.\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n api.attachOriginToPatched(target[method], nativeDelegate);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n const tip = ignoreProperties.filter(ip => ip.target === target);\n if (!tip || tip.length === 0) {\n return onProperties;\n }\n const targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter(op => targetIgnoreProperties.indexOf(op) === -1);\n}\nfunction patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n const filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n}\n/**\n * Get all event name properties which the event name startsWith `on`\n * from the target object itself, inherited properties are not considered.\n */\nfunction getOnEventNames(target) {\n return Object.getOwnPropertyNames(target)\n .filter(name => name.startsWith('on') && name.length > 2)\n .map(name => name.substring(2));\n}\nfunction propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n if (Zone[api.symbol('patchEvents')]) {\n // events are already been patched by legacy patch.\n return;\n }\n const ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n let patchTargets = [];\n if (isBrowser) {\n const internalWindow = window;\n patchTargets = patchTargets.concat([\n 'Document', 'SVGElement', 'Element', 'HTMLElement', 'HTMLBodyElement', 'HTMLMediaElement',\n 'HTMLFrameSetElement', 'HTMLFrameElement', 'HTMLIFrameElement', 'HTMLMarqueeElement', 'Worker'\n ]);\n const ignoreErrorProperties = isIE() ? [{ target: internalWindow, ignoreProperties: ['error'] }] : [];\n // in IE/Edge, onProp not exist in window object, but in WindowPrototype\n // so we need to pass WindowPrototype to check onProp exist or not\n patchFilteredProperties(internalWindow, getOnEventNames(internalWindow), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow));\n }\n patchTargets = patchTargets.concat([\n 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'IDBIndex', 'IDBRequest', 'IDBOpenDBRequest',\n 'IDBDatabase', 'IDBTransaction', 'IDBCursor', 'WebSocket'\n ]);\n for (let i = 0; i < patchTargets.length; i++) {\n const target = _global[patchTargets[i]];\n target && target.prototype &&\n patchFilteredProperties(target.prototype, getOnEventNames(target.prototype), ignoreProperties);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nZone.__load_patch('util', (global, Zone, api) => {\n // Collect native event names by looking at properties\n // on the global namespace, e.g. 'onclick'.\n const eventNames = getOnEventNames(global);\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n api.patchMacroTask = patchMacroTask;\n // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` to\n // define which events will not be patched by `Zone.js`.\n // In newer version (>=0.9.0), we change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep\n // the name consistent with angular repo.\n // The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be supported for\n // backwards compatibility.\n const SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n const SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS');\n if (global[SYMBOL_UNPATCHED_EVENTS]) {\n global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS];\n }\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] =\n global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n api.patchEventPrototype = patchEventPrototype;\n api.patchEventTarget = patchEventTarget;\n api.isIEOrEdge = isIEOrEdge;\n api.ObjectDefineProperty = ObjectDefineProperty;\n api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;\n api.ObjectCreate = ObjectCreate;\n api.ArraySlice = ArraySlice;\n api.patchClass = patchClass;\n api.wrapWithCurrentZone = wrapWithCurrentZone;\n api.filterProperties = filterProperties;\n api.attachOriginToPatched = attachOriginToPatched;\n api._redefineProperty = Object.defineProperty;\n api.patchCallbacks = patchCallbacks;\n api.getGlobalObjects = () => ({\n globalSources,\n zoneSymbolEventNames,\n eventNames,\n isBrowser,\n isMix,\n isNode,\n TRUE_STR,\n FALSE_STR,\n ZONE_SYMBOL_PREFIX,\n ADD_EVENT_LISTENER_STR,\n REMOVE_EVENT_LISTENER_STR\n });\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst taskSymbol = zoneSymbol('zoneTask');\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n let setNative = null;\n let clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n const tasksByHandleId = {};\n function scheduleTask(task) {\n const data = task.data;\n data.args[0] = function () {\n return task.invoke.apply(this, arguments);\n };\n data.handleId = setNative.apply(window, data.args);\n return task;\n }\n function clearTask(task) {\n return clearNative.call(window, task.data.handleId);\n }\n setNative =\n patchMethod(window, setName, (delegate) => function (self, args) {\n if (typeof args[0] === 'function') {\n const options = {\n isPeriodic: nameSuffix === 'Interval',\n delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 :\n undefined,\n args: args\n };\n const callback = args[0];\n args[0] = function timer() {\n try {\n return callback.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n // https://github.com/angular/angular/issues/40387\n // Cleanup tasksByHandleId should be handled before scheduleTask\n // Since some zoneSpec may intercept and doesn't trigger\n // scheduleFn(scheduleTask) provided here.\n if (!(options.isPeriodic)) {\n if (typeof options.handleId === 'number') {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[options.handleId];\n }\n else if (options.handleId) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n options.handleId[taskSymbol] = null;\n }\n }\n }\n };\n const task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n const handle = task.data.handleId;\n if (typeof handle === 'number') {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handle] = task;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task;\n }\n // check whether handle is null, because some polyfill or browser\n // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame\n if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&\n typeof handle.unref === 'function') {\n task.ref = handle.ref.bind(handle);\n task.unref = handle.unref.bind(handle);\n }\n if (typeof handle === 'number' || handle) {\n return handle;\n }\n return task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n });\n clearNative =\n patchMethod(window, cancelName, (delegate) => function (self, args) {\n const id = args[0];\n let task;\n if (typeof id === 'number') {\n // non nodejs env.\n task = tasksByHandleId[id];\n }\n else {\n // nodejs env.\n task = id && id[taskSymbol];\n // other environments.\n if (!task) {\n task = id;\n }\n }\n if (task && typeof task.type === 'string') {\n if (task.state !== 'notScheduled' &&\n (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {\n if (typeof id === 'number') {\n delete tasksByHandleId[id];\n }\n else if (id) {\n id[taskSymbol] = null;\n }\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction patchCustomElements(_global, api) {\n const { isBrowser, isMix } = api.getGlobalObjects();\n if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) {\n return;\n }\n const callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback'];\n api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction eventTargetPatch(_global, api) {\n if (Zone[api.symbol('patchEventTarget')]) {\n // EventTarget is already patched.\n return;\n }\n const { eventNames, zoneSymbolEventNames, TRUE_STR, FALSE_STR, ZONE_SYMBOL_PREFIX } = api.getGlobalObjects();\n // predefine all __zone_symbol__ + eventName + true/false string\n for (let i = 0; i < eventNames.length; i++) {\n const eventName = eventNames[i];\n const falseEventName = eventName + FALSE_STR;\n const trueEventName = eventName + TRUE_STR;\n const symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n const EVENT_TARGET = _global['EventTarget'];\n if (!EVENT_TARGET || !EVENT_TARGET.prototype) {\n return;\n }\n api.patchEventTarget(_global, api, [EVENT_TARGET && EVENT_TARGET.prototype]);\n return true;\n}\nfunction patchEvent(global, api) {\n api.patchEventPrototype(global, api);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nZone.__load_patch('legacy', (global) => {\n const legacyPatch = global[Zone.__symbol__('legacyPatch')];\n if (legacyPatch) {\n legacyPatch();\n }\n});\nZone.__load_patch('queueMicrotask', (global, Zone, api) => {\n api.patchMethod(global, 'queueMicrotask', delegate => {\n return function (self, args) {\n Zone.current.scheduleMicroTask('queueMicrotask', args[0]);\n };\n });\n});\nZone.__load_patch('timers', (global) => {\n const set = 'set';\n const clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n});\nZone.__load_patch('requestAnimationFrame', (global) => {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n});\nZone.__load_patch('blocking', (global, Zone) => {\n const blockingMethods = ['alert', 'prompt', 'confirm'];\n for (let i = 0; i < blockingMethods.length; i++) {\n const name = blockingMethods[i];\n patchMethod(global, name, (delegate, symbol, name) => {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n});\nZone.__load_patch('EventTarget', (global, Zone, api) => {\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n const XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, api, [XMLHttpRequestEventTarget.prototype]);\n }\n});\nZone.__load_patch('MutationObserver', (global, Zone, api) => {\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n});\nZone.__load_patch('IntersectionObserver', (global, Zone, api) => {\n patchClass('IntersectionObserver');\n});\nZone.__load_patch('FileReader', (global, Zone, api) => {\n patchClass('FileReader');\n});\nZone.__load_patch('on_property', (global, Zone, api) => {\n propertyDescriptorPatch(api, global);\n});\nZone.__load_patch('customElements', (global, Zone, api) => {\n patchCustomElements(global, api);\n});\nZone.__load_patch('XHR', (global, Zone) => {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n const XHR_TASK = zoneSymbol('xhrTask');\n const XHR_SYNC = zoneSymbol('xhrSync');\n const XHR_LISTENER = zoneSymbol('xhrListener');\n const XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n const XHR_URL = zoneSymbol('xhrURL');\n const XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n const XMLHttpRequest = window['XMLHttpRequest'];\n if (!XMLHttpRequest) {\n // XMLHttpRequest is not available in service worker\n return;\n }\n const XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) {\n return target[XHR_TASK];\n }\n let oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n let oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n const XMLHttpRequestEventTarget = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget) {\n const XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n const READY_STATE_CHANGE = 'readystatechange';\n const SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n const data = task.data;\n const target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n const listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n const newListener = target[XHR_LISTENER] = () => {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n // Also if the request failed without response (status = 0), the load event handler\n // will not be triggered, in that case, we should also invoke the placeholder callback\n // to close the XMLHttpRequest::send macroTask.\n // https://github.com/angular/angular/issues/38795\n const loadTasks = target[Zone.__symbol__('loadfalse')];\n if (target.status !== 0 && loadTasks && loadTasks.length > 0) {\n const oriInvoke = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n const loadTasks = target[Zone.__symbol__('loadfalse')];\n for (let i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n };\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n const storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n const data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n const openNative = patchMethod(XMLHttpRequestPrototype, 'open', () => function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n });\n const XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n const fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n const fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n const sendNative = patchMethod(XMLHttpRequestPrototype, 'send', () => function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n const options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false };\n const task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n });\n const abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', () => function (self, args) {\n const task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n });\n }\n});\nZone.__load_patch('geolocation', (global) => {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n});\nZone.__load_patch('PromiseRejectionEvent', (global, Zone) => {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n const eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach(eventTask => {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n const PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n const evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n});\n"],"names":["global","performance","mark","name","performanceMeasure","label","symbolPrefix","__symbol__","checkDuplicate","Error","Zone","constructor","parent","zoneSpec","_parent","_name","_properties","properties","_zoneDelegate","_ZoneDelegate","assertZonePatched","patches","root","zone","current","_currentZoneFrame","currentTask","_currentTask","__load_patch","fn","ignoreDuplicate","hasOwnProperty","perfName","_api","get","key","getZoneWith","fork","wrap","callback","source","_callback","intercept","runGuarded","arguments","run","applyThis","applyArgs","invoke","error","handleError","runTask","task","NO_ZONE","state","notScheduled","type","eventTask","macroTask","reEntryGuard","running","_transitionTo","scheduled","runCount","previousTask","data","isPeriodic","cancelFn","undefined","invokeTask","unknown","_updateTaskCount","scheduleTask","newZone","scheduling","zoneDelegates","_zoneDelegates","_zone","err","scheduleMicroTask","customSchedule","ZoneTask","microTask","scheduleMacroTask","customCancel","scheduleEventTask","cancelTask","canceling","count","i","length","DELEGATE_ZS","onHasTask","delegate","_","target","hasTaskState","hasTask","onScheduleTask","onInvokeTask","onCancelTask","parentDelegate","_taskCounts","_parentDelegate","_forkZS","onFork","_forkDlgt","_forkCurrZone","_interceptZS","onIntercept","_interceptDlgt","_interceptCurrZone","_invokeZS","onInvoke","_invokeDlgt","_invokeCurrZone","_handleErrorZS","onHandleError","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","parentHasTask","targetZone","apply","returnTask","push","scheduleFn","value","isEmpty","counts","prev","next","change","options","_state","self","useG","call","args","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","toState","fromState1","fromState2","toString","handleId","Object","prototype","toJSON","symbolSetTimeout","symbolPromise","symbolThen","_microTaskQueue","_isDrainingMicrotaskQueue","nativeMicroTaskQueuePromise","nativeScheduleMicroTask","func","resolve","nativeThen","queue","onUnhandledError","microtaskDrainDone","symbol","currentZoneFrame","noop","showUncaughtError","patchEventTarget","patchOnProperties","patchMethod","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","window","getOwnPropertyDescriptor","defineProperty","ObjectGetPrototypeOf","getPrototypeOf","create","Array","slice","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","scheduleMacroTaskWithCurrentZone","zoneSymbol","isWindowExists","internalWindow","_global","REMOVE_ATTRIBUTE","patchPrototype","fnNames","prototypeDesc","isPropertyWritable","patched","propertyDesc","writable","set","isWebWorker","WorkerGlobalScope","isNode","process","isBrowser","isMix","zoneSymbolEventNames$1","wrapFn","event","eventNameSymbol","listener","result","errorEvent","message","filename","lineno","colno","preventDefault","patchProperty","obj","prop","desc","enumerable","configurable","onPropPatchedSymbol","originalDescGet","originalDescSet","eventName","newValue","previousValue","removeEventListener","addEventListener","removeAttribute","onProperties","j","originalInstanceKey","className","OriginalClass","a","instance","patchFn","proto","delegateName","patchDelegate","funcName","metaCreator","setNative","cbIdx","meta","original","isDetectedIEOrEdge","ieOrEdge","isIE","ua","navigator","userAgent","indexOf","api","readableObjectToString","JSON","stringify","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","creationTrace","e","rejection","console","stack","uncaughtPromiseError","shift","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","handler","isThenable","then","forwardResolution","forwardRejection","ZoneAwarePromise","reject","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","RESOLVED","REJECTED","REJECTED_NO_CATCH","makeResolver","promise","v","resolvePromise","once","wasCalled","wrapper","wrappedFunction","TYPE_ERROR","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","TypeError","clearRejectedNoCatch","trace","scheduleResolveOrReject","REJECTION_HANDLED_HANDLER","splice","chainPromise","onFulfilled","onRejected","promiseState","parentPromiseValue","isFinallyPromise","ZONE_AWARE_PROMISE_TO_STRING","AggregateError","any","values","Symbol","iterator","Promise","promises","finished","errors","race","res","rej","onResolve","onReject","all","allWithCallback","allSettled","P","thenCallback","status","errorCallback","reason","unresolvedCount","valueIndex","resolvedValues","curValueIndex","thenErr","executor","toStringTag","species","_a","C","catch","finally","onFinally","NativePromise","symbolThenPatched","Ctor","originalThen","wrapped","zoneify","resultPromise","ctor","originalFunctionToString","Function","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","originalDelegate","nativePromise","nativeError","originalObjectToString","PROMISE_OBJECT_TO_STRING","passiveSupported","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames","globalSources","EVENT_NAME_SYMBOL_REGX","RegExp","IMMEDIATE_PROPAGATION_SYMBOL","prepareEventNames","eventNameToString","falseEventName","trueEventName","symbolCapture","apis","patchOptions","ADD_EVENT_LISTENER","add","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","listeners","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","PREPEND_EVENT_LISTENER","PREPEND_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","globalCallback","context","isCapture","tasks","copyTasks","globalZoneAwareCallback","globalZoneAwareCaptureCallback","patchEventTargetMethods","useGlobalCallback","validateHandler","vh","chkDup","returnTarget","rt","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","prepend","buildEventListenerOptions","passive","capture","assign","customScheduleGlobal","isExisting","customCancelGlobal","symbolEventNames","symbolEventName","existingTasks","existingTask","allRemoved","customScheduleNonGlobal","customSchedulePrepend","customCancelNonGlobal","compareTaskCallbackVsDelegate","typeOfDelegate","compare","diff","unpatchedEvents","passiveEvents","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isHandleEvent","constructorName","targetSource","unshift","onPropertySymbol","findEventTasks","keys","match","exec","evtName","symbolCaptureEventName","captureTasks","removeTasks","results","foundTasks","captureFalseTasks","captureTrueTasks","concat","Event","targetName","method","callbacks","nativeDelegate","opts","forEach","descriptor","ignoreProperties","tip","filter","ip","targetIgnoreProperties","op","patchFilteredProperties","filteredProperties","getOnEventNames","getOwnPropertyNames","startsWith","map","substring","propertyDescriptorPatch","patchTargets","ignoreErrorProperties","eventNames","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","taskSymbol","patchTimer","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","clearTask","delay","timer","handle","ref","unref","bind","id","patchCustomElements","customElements","eventTargetPatch","EVENT_TARGET","patchEvent","legacyPatch","clear","blockingMethods","s","XMLHttpRequestEventTarget","patchXHR","XHR_TASK","XHR_SYNC","XHR_LISTENER","XHR_SCHEDULED","XHR_URL","XHR_ERROR_BEFORE_SCHEDULED","XMLHttpRequest","XMLHttpRequestPrototype","findPendingTask","oriAddListener","oriRemoveListener","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","newListener","readyState","DONE","aborted","loadTasks","oriInvoke","storedTask","sendNative","placeholderCallback","abortNative","openNative","XMLHTTPREQUEST_SOURCE","fetchTaskAborting","fetchTaskScheduling","url","geolocation","findPromiseRejectionHandler","eventTasks","PromiseRejectionEvent","evt"],"sourceRoot":"webpack:///","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/runtime.7cb62255c16cf7ce.js b/cmd/pkgdash/assets/ui/runtime.7cb62255c16cf7ce.js deleted file mode 100644 index c51d3cc..0000000 --- a/cmd/pkgdash/assets/ui/runtime.7cb62255c16cf7ce.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,_={},i={};function n(e){var a=i[e];if(void 0!==a)return a.exports;var r=i[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,t,u)=>{if(!r){var o=1/0;for(f=0;f=u)&&Object.keys(n.O).every(h=>n.O[h](r[l]))?r.splice(l--,1):(s=!1,u0&&e[f-1][2]>u;f--)e[f]=e[f-1];e[f]=[r,t,u]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={666:0};n.O.j=t=>0===e[t];var a=(t,u)=>{var l,c,[f,o,s]=u,v=0;if(f.some(d=>0!==e[d])){for(l in o)n.o(o,l)&&(n.m[l]=o[l]);if(s)var b=s(n)}for(t&&t(u);v { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "runtime": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkui"] = self["webpackChunkui"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ +/******/ })() +; +//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/runtime.js.map b/cmd/pkgdash/assets/ui/runtime.js.map new file mode 100644 index 0000000..d5facf9 --- /dev/null +++ b/cmd/pkgdash/assets/ui/runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime.js","mappings":";;;;UAAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA,kBAAkB,qBAAqB;WACvC;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC3BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA","sources":["webpack/bootstrap","webpack/runtime/chunk loaded","webpack/runtime/compat get default export","webpack/runtime/define property getters","webpack/runtime/hasOwnProperty shorthand","webpack/runtime/make namespace object","webpack/runtime/jsonp chunk loading","webpack/before-startup","webpack/startup","webpack/after-startup"],"sourcesContent":["// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"runtime\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkui\"] = self[\"webpackChunkui\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","",""],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]} \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/styles.3073e10a0bddda7f.css b/cmd/pkgdash/assets/ui/styles.3073e10a0bddda7f.css deleted file mode 100644 index 8d8157f..0000000 --- a/cmd/pkgdash/assets/ui/styles.3073e10a0bddda7f.css +++ /dev/null @@ -1 +0,0 @@ -.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.mat-ripple-element{background-color:#0000001a}.mat-option{color:#000000de}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{background:rgba(0,0,0,.04);color:#000000de}.mat-option.mat-option-disabled{color:#00000061}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#3f51b5}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ff4081}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:#0000008a}.mat-optgroup-disabled .mat-optgroup-label{color:#00000061}.mat-pseudo-checkbox{color:#0000008a}.mat-pseudo-checkbox:after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#3f51b5}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#ff4081}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:#000000de}.mat-elevation-z0{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-elevation-z1{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-elevation-z2{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-elevation-z3{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-elevation-z4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-elevation-z5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.mat-elevation-z6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-elevation-z7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.mat-elevation-z8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-elevation-z9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.mat-elevation-z10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.mat-elevation-z11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.mat-elevation-z12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-elevation-z13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.mat-elevation-z14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.mat-elevation-z15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.mat-elevation-z16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-elevation-z17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.mat-elevation-z18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.mat-elevation-z19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.mat-elevation-z20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.mat-elevation-z21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.mat-elevation-z22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.mat-elevation-z23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.mat-elevation-z24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:#000000de}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:#000000de}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-badge-content{color:#fff;background:#3f51b5}.cdk-high-contrast-active .mat-badge-content{outline:solid 1px;border-radius:0}.mat-badge-accent .mat-badge-content{background:#ff4081;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:#00000061}.mat-bottom-sheet-container{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f;background:#fff;color:#000000de}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#3f51b5}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ff4081}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled{color:#00000042}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#3f51b5}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ff4081}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not(.mat-button-disabled){border-color:#0000001f}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:#000000de;background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary,.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent,.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{color:#00000042}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#3f51b5}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#ff4081}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#f44336}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{background-color:#0000001f}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:#ffffff1a}.mat-stroked-button:not([class*=mat-elevation-z]),.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:#00000061}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:#0000001f}.mat-button-toggle-appearance-standard{color:#000000de;background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:#0000008a}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:#000000de}.mat-button-toggle-disabled{color:#00000042;background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.mat-card{background:#fff;color:#000000de}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-card-subtitle{color:#0000008a}.mat-checkbox-frame{border-color:#0000008a}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#3f51b5}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#ff4081}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:#0000008a}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#3f51b5}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ff4081}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:#000000de}.mat-chip.mat-standard-chip .mat-chip-remove{color:#000000de;opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip:after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#3f51b5;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:#ffffff1a}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:#ffffff1a}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ff4081;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:#ffffff1a}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:#0000001f}.mat-header-cell{color:#0000008a}.mat-cell,.mat-footer-cell{color:#000000de}.mat-calendar-arrow{fill:#0000008a}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:#0000008a}.mat-calendar-table-header-divider:after{background:rgba(0,0,0,.12)}.mat-calendar-table-header,.mat-calendar-body-label{color:#0000008a}.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:#000000de;border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:#00000061}.mat-form-field-disabled .mat-date-range-input-separator{color:#00000061}.mat-calendar-body-in-preview{color:#0000003d}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:#00000061}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:#0000002e}.mat-calendar-body-in-range:before{background:rgba(63,81,181,.2)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-calendar-body-comparison-bridge-start:before,[dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(to right,rgba(63,81,181,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-calendar-body-comparison-bridge-end:before,[dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(to left,rgba(63,81,181,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after{background:#a8dab5}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-calendar-body-selected{background-color:#3f51b5;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:#3f51b566}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#3f51b54d}.mat-datepicker-content{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;background-color:#fff;color:#000000de}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background:rgba(255,64,129,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start:before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(to right,rgba(255,64,129,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end:before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(to left,rgba(255,64,129,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after{background:#a8dab5}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ff4081;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:#ff408166}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#ff40814d}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range:before{background:rgba(244,67,54,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start:before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(to right,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end:before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(to left,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after{background:#a8dab5}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:#f4433666}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#f443364d}.mat-datepicker-content-touch{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-datepicker-toggle-active{color:#3f51b5}.mat-datepicker-toggle-active.mat-accent{color:#ff4081}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-date-range-input-inner[disabled]{color:#00000061}.mat-dialog-container{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f;background:#fff;color:#000000de}.mat-divider{border-top-color:#0000001f}.mat-divider-vertical{border-right-color:#0000001f}.mat-expansion-panel{background:#fff;color:#000000de}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-action-row{border-top-color:#0000001f}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media (hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:#000000de}.mat-expansion-panel-header-description,.mat-expansion-indicator:after{color:#0000008a}.mat-expansion-panel-header[aria-disabled=true]{color:#00000042}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-form-field-label,.mat-hint{color:#0009}.mat-form-field.mat-focused .mat-form-field-label{color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ff4081}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ff4081}.mat-form-field-ripple{background-color:#000000de}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ff4081}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix:after{color:#3f51b5}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix:after{color:#ff4081}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix:after{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label,.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label,.mat-form-field-appearance-legacy .mat-hint{color:#0000008a}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:#0000006b}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:#0000006b}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#0000000a}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:#00000005}.mat-form-field-appearance-fill .mat-form-field-underline:before{background-color:#0000006b}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:#00000061}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline:before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:#0000001f}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:#000000de}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#3f51b5}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ff4081}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:#00000061}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:#0000000f}.mat-icon.mat-primary{color:#3f51b5}.mat-icon.mat-accent{color:#ff4081}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#0000008a}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix:after{color:#00000061}.mat-input-element{caret-color:#3f51b5}.mat-input-element::placeholder{color:#0000006b}.mat-input-element::-moz-placeholder{color:#0000006b}.mat-input-element::-webkit-input-placeholder{color:#0000006b}.mat-input-element:-ms-input-placeholder{color:#0000006b}.mat-form-field.mat-accent .mat-input-element{caret-color:#ff4081}.mat-form-field.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix:after{color:#f44336}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{color:#000000de}.mat-list-base .mat-subheader{color:#0000008a}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,.04)}.mat-list-single-selected-option,.mat-list-single-selected-option:hover,.mat-list-single-selected-option:focus{background:rgba(0,0,0,.12)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-menu-item{background:transparent;color:#000000de}.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-menu-submenu-icon,.mat-menu-item[disabled] .mat-icon-no-color{color:#00000061}.mat-menu-item .mat-icon-no-color,.mat-menu-submenu-icon{color:#0000008a}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:#0000008a}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:#00000061}.mat-paginator-container{min-height:56px}.mat-progress-bar-background{fill:#cbd0e9}.mat-progress-bar-buffer{background-color:#cbd0e9}.mat-progress-bar-fill:after{background-color:#3f51b5}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#ff4081}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#3f51b5}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ff4081}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:#0000008a}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#3f51b5}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#3f51b5}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff4081}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ff4081}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:#00000061}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:#00000061}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:#000000de}.mat-select-placeholder{color:#0000006b}.mat-select-disabled .mat-select-value{color:#00000061}.mat-select-arrow{color:#0000008a}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#3f51b5}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ff4081}.mat-form-field.mat-focused.mat-warn .mat-select-arrow,.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:#00000061}.mat-drawer-container{background-color:#fafafa;color:#000000de}.mat-drawer{background-color:#fff;color:#000000de}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end,[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:#0009}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ff4081}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:#ff40818a}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ff4081}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#3f51b5}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:#3f51b58a}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#3f51b5}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:#f443368a}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f;background-color:#fafafa}.mat-slide-toggle-bar{background-color:#00000061}.mat-slider-track-background{background-color:#00000042}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#3f51b5}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-primary .mat-slider-focus-ring{background-color:#3f51b533}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#ff4081}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-focus-ring{background-color:#ff408133}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-focus-ring{background-color:#f4433633}.mat-slider:hover .mat-slider-track-background,.mat-slider.cdk-focused .mat-slider-track-background{background-color:#00000061}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled:hover .mat-slider-track-background{background-color:#00000042}.mat-slider-min-value .mat-slider-focus-ring{background-color:#0000001f}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:#000000de}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:#00000042}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:#00000042;background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:#00000061}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:#00000042}.mat-slider-has-ticks .mat-slider-wrapper:after{border-color:#000000b3}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:#0000000a}.mat-step-header:hover[aria-disabled=true]{cursor:default}@media (hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:#0000008a}.mat-step-header .mat-step-icon{background-color:#0000008a;color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#3f51b5;color:#fff}.mat-step-header.mat-accent .mat-step-icon{color:#fff}.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ff4081;color:#fff}.mat-step-header.mat-warn .mat-step-icon{color:#fff}.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:#000000de}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line:before{border-left-color:#0000001f}.mat-horizontal-stepper-header:before,.mat-horizontal-stepper-header:after,.mat-stepper-horizontal-line{border-top-color:#0000001f}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px}.mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before{top:36px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:#000000de}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:#00000061}.mat-tab-header-pagination-chevron{border-color:#000000de}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#00000061}.mat-tab-group[class*=mat-background-]>.mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#c5cae94d}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#3f51b5}.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#ff80ab4d}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ff4081}.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#ffcdd24d}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#c5cae94d}.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination{background-color:#3f51b5}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:#fff6}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-group.mat-background-primary>.mat-tab-header .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-focus-indicator:before{border-color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#ff80ab4d}.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination{background-color:#ff4081}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:#fff6}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-group.mat-background-accent>.mat-tab-header .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-focus-indicator:before{border-color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:#ffcdd24d}.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination{background-color:#f44336}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:#fff6}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-group.mat-background-warn>.mat-tab-header .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-focus-indicator:before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-focus-indicator:before{border-color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-toolbar{background:#f5f5f5;color:#000000de}.mat-toolbar.mat-primary{background:#3f51b5;color:#fff}.mat-toolbar.mat-accent{background:#ff4081;color:#fff}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media (max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:#000000de}.mat-tree-node{min-height:48px}.mat-snack-bar-container{color:#ffffffb3;background:#323232;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-simple-snackbar-action{color:#ff4081}html,body{height:100%}body{margin:0;font-family:Roboto,Helvetica Neue,sans-serif} diff --git a/cmd/pkgdash/assets/ui/styles.css b/cmd/pkgdash/assets/ui/styles.css new file mode 100644 index 0000000..fa33301 --- /dev/null +++ b/cmd/pkgdash/assets/ui/styles.css @@ -0,0 +1,644 @@ +/*!********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[2]!./node_modules/@angular/material/prebuilt-themes/indigo-pink.css ***! + \********************************************************************************************************************************************************************************************************************************************************/ +.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(0.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(0.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-0.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(0.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-0.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59374em) scale(0.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-0.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(0.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-0.0625em}.mat-menu-item{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:normal}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-option{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-mdc-focus-indicator{position:relative}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#3f51b5}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ff4081}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#3f51b5}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#ff4081}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-badge-content{color:#fff;background:#3f51b5}.cdk-high-contrast-active .mat-badge-content{outline:solid 1px;border-radius:0}.mat-badge-accent .mat-badge-content{background:#ff4081;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#3f51b5}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ff4081}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#3f51b5}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ff4081}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,.87);background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:#fff}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#3f51b5}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#ff4081}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#f44336}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{background-color:rgba(0,0,0,.12)}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-stroked-button:not([class*=mat-elevation-z]),.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card:not([class*=mat-elevation-z]){box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#3f51b5}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#ff4081}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#3f51b5}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ff4081}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#3f51b5;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ff4081;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)}.mat-calendar-arrow{fill:rgba(0,0,0,.54)}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,.12)}.mat-calendar-table-header,.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:rgba(0,0,0,.38)}.mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)}.mat-calendar-body-in-preview{color:rgba(0,0,0,.24)}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)}.mat-calendar-body-in-range::before{background:rgba(63,81,181,.2)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(63, 81, 181, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(63, 81, 181, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-calendar-body-selected{background-color:#3f51b5;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(63,81,181,.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(63,81,181,.3)}.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12);background-color:#fff;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range::before{background:rgba(255,64,129,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(255, 64, 129, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(255, 64, 129, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ff4081;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,64,129,.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(255,64,129,.3)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range::before{background:rgba(244,67,54,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.mat-datepicker-content-touch{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-datepicker-toggle-active{color:#3f51b5}.mat-datepicker-toggle-active.mat-accent{color:#ff4081}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)}.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-form-field-label{color:rgba(0,0,0,.6)}.mat-hint{color:rgba(0,0,0,.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ff4081}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ff4081}.mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ff4081}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#3f51b5}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#ff4081}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#3f51b5}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ff4081}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.mat-icon.mat-primary{color:#3f51b5}.mat-icon.mat-accent{color:#ff4081}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,.54)}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,.38)}.mat-input-element{caret-color:#3f51b5}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-form-field.mat-accent .mat-input-element{caret-color:#ff4081}.mat-form-field.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#f44336}.mat-list-base .mat-list-item{color:rgba(0,0,0,.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,.04)}.mat-list-single-selected-option,.mat-list-single-selected-option:hover,.mat-list-single-selected-option:focus{background:rgba(0,0,0,.12)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-menu-submenu-icon,.mat-menu-item[disabled] .mat-icon-no-color{color:rgba(0,0,0,.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-submenu-icon{color:rgba(0,0,0,.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.mat-paginator-container{min-height:56px}.mat-progress-bar-background{fill:#cbd0e9}.mat-progress-bar-buffer{background-color:#cbd0e9}.mat-progress-bar-fill::after{background-color:#3f51b5}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#ff4081}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#3f51b5}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ff4081}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#3f51b5}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#3f51b5}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff4081}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ff4081}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#3f51b5}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ff4081}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ff4081}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,64,129,.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ff4081}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#3f51b5}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(63,81,181,.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#3f51b5}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#3f51b5}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-primary .mat-slider-focus-ring{background-color:rgba(63,81,181,.2)}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#ff4081}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-focus-ring{background-color:rgba(255,64,129,.2)}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.mat-slider:hover .mat-slider-track-background,.mat-slider.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:rgba(0,0,0,.04)}.mat-step-header:hover[aria-disabled=true]{cursor:default}@media(hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#3f51b5;color:#fff}.mat-step-header.mat-accent .mat-step-icon{color:#fff}.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ff4081;color:#fff}.mat-step-header.mat-warn .mat-step-icon{color:#fff}.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px 24px}.mat-stepper-vertical-line::before{top:-16px;bottom:-16px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before{top:36px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-]>.mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#3f51b5}.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ff4081}.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination{background-color:#3f51b5}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-primary>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination{background-color:#ff4081}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-accent>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination{background-color:#f44336}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-warn>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#3f51b5;color:#fff}.mat-toolbar.mat-accent{background:#ff4081;color:#fff}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,.87)}.mat-tree-node{min-height:48px}.mat-snack-bar-container{color:rgba(255,255,255,.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-simple-snackbar-action{color:#ff4081} + +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[2]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[6].rules[1].use[0]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].rules[1].use[1]!./src/styles.scss ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/* You can add global styles to this file, and also import other style files */ +.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-badge-small .mat-badge-content{font-size:9px} +.mat-badge-large .mat-badge-content{font-size:24px} +.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px} +.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px} +.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px} +.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 16px} +.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px} +.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px} +.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px} +.mat-small,.mat-caption{font:400 12px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.05em;margin:0 0 56px} +.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.02em;margin:0 0 64px} +.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-0.005em;margin:0 0 64px} +.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0 0 64px} +.mat-bottom-sheet-container{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500} +.mat-button-toggle{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-card{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-card-title{font-size:24px;font-weight:500} +.mat-card-header .mat-card-title{font-size:20px} +.mat-card-subtitle,.mat-card-content{font-size:14px} +.mat-checkbox{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-checkbox-layout .mat-checkbox-label{line-height:24px} +.mat-chip{font-size:14px;font-weight:500} +.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px} +.mat-table{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-header-cell{font-size:12px;font-weight:500} +.mat-cell,.mat-footer-cell{font-size:14px} +.mat-calendar{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-calendar-body{font-size:13px} +.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500} +.mat-calendar-table-header th{font-size:11px;font-weight:400} +.mat-dialog-title{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-expansion-panel-header{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:15px;font-weight:400} +.mat-expansion-panel-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-form-field-wrapper{padding-bottom:1.34375em} +.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125} +.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em} +.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125} +.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent} +.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(0.75);width:133.3333333333%} +.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(0.75);width:133.3333433333%} +.mat-form-field-label-wrapper{top:-0.84375em;padding-top:.84375em} +.mat-form-field-label{top:1.34375em} +.mat-form-field-underline{bottom:1.34375em} +.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)} +.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em} +.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0} +.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);width:133.3333333333%} +.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);width:133.3333433333%} +.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);width:133.3333533333%} +.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em} +.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em} +.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)} +@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(0.75)}} +.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0} +.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-0.5em} +.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59375em) scale(0.75);width:133.3333333333%} +.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59374em) scale(0.75);width:133.3333433333%} +.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0} +.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-0.25em} +.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(0.75);width:133.3333333333%} +.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(0.75);width:133.3333433333%} +.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px} +.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box} +.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px} +input.mat-input-element{margin-top:-0.0625em} +.mat-menu-item{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400} +.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px} +.mat-radio-button{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-select{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-select-trigger{height:1.125em} +.mat-slide-toggle-content{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-slider-thumb-label-text{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500} +.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-step-label{font-size:14px;font-weight:400} +.mat-step-sub-label-error{font-weight:normal} +.mat-step-label-error{font-size:14px} +.mat-step-label-selected{font-size:14px;font-weight:500} +.mat-tab-group{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-tab-label,.mat-tab-link{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500} +.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal;margin:0} +.mat-tooltip{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px} +.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px} +.mat-list-item{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-list-option{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-list-base .mat-list-item{font-size:16px} +.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box} +.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px} +.mat-list-base .mat-list-option{font-size:16px} +.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box} +.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px} +.mat-list-base .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500} +.mat-list-base[dense] .mat-list-item{font-size:12px} +.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box} +.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px} +.mat-list-base[dense] .mat-list-option{font-size:12px} +.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box} +.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px} +.mat-list-base[dense] .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500} +.mat-option{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px} +.mat-optgroup-label{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif;letter-spacing:normal} +.mat-simple-snackbar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px} +.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500} +.mat-tree{font-family:Roboto, "Helvetica Neue", sans-serif} +.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px} +.mat-ripple{overflow:hidden;position:relative} +.mat-ripple:not(:empty){transform:translateZ(0)} +.mat-ripple.mat-ripple-unbounded{overflow:visible} +.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)} +.cdk-high-contrast-active .mat-ripple-element{display:none} +.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none} +.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%} +.cdk-overlay-container{position:fixed;z-index:1000} +.cdk-overlay-container:empty{display:none} +.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000} +.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%} +.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0} +.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1} +.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6} +.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)} +.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0} +.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px} +.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll} +textarea.cdk-textarea-autosize{resize:none} +textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important} +textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important} +@keyframes cdk-text-field-autofill-start{/*!*/} +@keyframes cdk-text-field-autofill-end{/*!*/} +.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms} +.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms} +.mat-focus-indicator{position:relative} +.mat-mdc-focus-indicator{position:relative} +.mat-ripple-element{background-color:rgba(0,0,0,.1)} +.mat-option{color:rgba(0,0,0,.87)} +.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,.04)} +.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)} +.mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)} +.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)} +.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#673ab7} +.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffd740} +.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336} +.mat-optgroup-label{color:rgba(0,0,0,.54)} +.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)} +.mat-pseudo-checkbox{color:rgba(0,0,0,.54)} +.mat-pseudo-checkbox::after{color:#fafafa} +.mat-pseudo-checkbox-disabled{color:#b0b0b0} +.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#673ab7} +.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#ffd740} +.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336} +.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0} +.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)} +.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)} +.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0, 0, 0, 0.12)} +.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)} +.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0, 0, 0, 0.12)} +.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12)} +.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0, 0, 0, 0.12)} +.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)} +.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0, 0, 0, 0.12)} +.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0, 0, 0, 0.12)} +.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0, 0, 0, 0.12)} +.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)} +.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0, 0, 0, 0.12)} +.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0, 0, 0, 0.12)} +.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0, 0, 0, 0.12)} +.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0, 0, 0, 0.12)} +.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0, 0, 0, 0.12)} +.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0, 0, 0, 0.12)} +.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0, 0, 0, 0.12)} +.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)} +.mat-theme-loaded-marker{display:none} +.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)} +.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)} +.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff} +.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)} +.mat-badge{position:relative} +.mat-badge-hidden .mat-badge-content{display:none} +.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none} +.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none} +.mat-badge-content.mat-badge-active{transform:none} +.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px} +.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px} +.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px} +.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px} +[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px} +.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px} +[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px} +.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px} +[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px} +.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px} +[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px} +.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px} +.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px} +.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px} +.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px} +[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px} +.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px} +[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px} +.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px} +[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px} +.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px} +[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px} +.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px} +.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px} +.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px} +.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px} +[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px} +.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px} +[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px} +.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px} +[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px} +.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px} +[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px} +.mat-badge-content{color:#fff;background:#673ab7} +.cdk-high-contrast-active .mat-badge-content{outline:solid 1px;border-radius:0} +.mat-badge-accent .mat-badge-content{background:#ffd740;color:rgba(0,0,0,.87)} +.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336} +.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)} +.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)} +.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent} +.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#673ab7} +.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ffd740} +.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336} +.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)} +.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#673ab7} +.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ffd740} +.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336} +.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:transparent} +.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor} +.mat-button-focus-overlay{background:#000} +.mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)} +.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,.87);background-color:#fff} +.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff} +.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:rgba(0,0,0,.87)} +.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff} +.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)} +.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#673ab7} +.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#ffd740} +.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#f44336} +.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{background-color:rgba(0,0,0,.12)} +.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)} +.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)} +.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)} +.mat-stroked-button:not([class*=mat-elevation-z]),.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)} +.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)} +.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)} +.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)} +.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)} +.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)} +.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)} +.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)} +.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none} +.mat-button-toggle{color:rgba(0,0,0,.38)} +.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)} +.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff} +.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000} +.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)} +[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)} +.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)} +.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)} +.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)} +.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee} +.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff} +.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd} +.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,.12)} +.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px} +.mat-card{background:#fff;color:rgba(0,0,0,.87)} +.mat-card:not([class*=mat-elevation-z]){box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)} +.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)} +.mat-card-subtitle{color:rgba(0,0,0,.54)} +.mat-checkbox-frame{border-color:rgba(0,0,0,.54)} +.mat-checkbox-checkmark{fill:#fafafa} +.mat-checkbox-checkmark-path{stroke:#fafafa !important} +.mat-checkbox-mixedmark{background-color:#fafafa} +.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#673ab7} +.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#ffd740} +.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#f44336} +.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0} +.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0} +.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)} +.mat-checkbox .mat-ripple-element{background-color:#000} +.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#673ab7} +.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ffd740} +.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336} +.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)} +.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4} +.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)} +.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54} +.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4} +.mat-chip.mat-standard-chip::after{background:#000} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#673ab7;color:#fff} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ffd740;color:rgba(0,0,0,.87)} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4} +.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)} +.mat-table{background:#fff} +.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit} +mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,.12)} +.mat-header-cell{color:rgba(0,0,0,.54)} +.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)} +.mat-calendar-arrow{fill:rgba(0,0,0,.54)} +.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,.54)} +.mat-calendar-table-header-divider::after{background:rgba(0,0,0,.12)} +.mat-calendar-table-header,.mat-calendar-body-label{color:rgba(0,0,0,.54)} +.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent} +.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:rgba(0,0,0,.38)} +.mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)} +.mat-calendar-body-in-preview{color:rgba(0,0,0,.24)} +.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)} +.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)} +.mat-calendar-body-in-range::before{background:rgba(103,58,183,.2)} +.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)} +.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(103, 58, 183, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(103, 58, 183, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5} +.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e} +.mat-calendar-body-selected{background-color:#673ab7;color:#fff} +.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(103,58,183,.4)} +.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff} +.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(103,58,183,.3)} +.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12);background-color:#fff;color:rgba(0,0,0,.87)} +.mat-datepicker-content.mat-accent .mat-calendar-body-in-range::before{background:rgba(255,215,64,.2)} +.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)} +.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(255, 215, 64, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(255, 215, 64, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5} +.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e} +.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ffd740;color:rgba(0,0,0,.87)} +.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,215,64,.4)} +.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)} +.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(255,215,64,.3)} +.mat-datepicker-content.mat-warn .mat-calendar-body-in-range::before{background:rgba(244,67,54,.2)} +.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)} +.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)} +.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5} +.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e} +.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff} +.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)} +.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff} +.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)} +.mat-datepicker-content-touch{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)} +.mat-datepicker-toggle-active{color:#673ab7} +.mat-datepicker-toggle-active.mat-accent{color:#ffd740} +.mat-datepicker-toggle-active.mat-warn{color:#f44336} +.mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)} +.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)} +.mat-divider{border-top-color:rgba(0,0,0,.12)} +.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)} +.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)} +.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)} +.mat-action-row{border-top-color:rgba(0,0,0,.12)} +.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)} +@media(hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}} +.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)} +.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,.54)} +.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)} +.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit} +.mat-expansion-panel-header{height:48px} +.mat-expansion-panel-header.mat-expanded{height:64px} +.mat-form-field-label{color:rgba(0,0,0,.6)} +.mat-hint{color:rgba(0,0,0,.6)} +.mat-form-field.mat-focused .mat-form-field-label{color:#673ab7} +.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ffd740} +.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336} +.mat-focused .mat-form-field-required-marker{color:#ffd740} +.mat-form-field-ripple{background-color:rgba(0,0,0,.87)} +.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#673ab7} +.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ffd740} +.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336} +.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#673ab7} +.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#ffd740} +.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#f44336} +.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336} +.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336} +.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336} +.mat-error{color:#f44336} +.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,.54)} +.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)} +.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)} +.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x} +.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)} +.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x} +.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)} +.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)} +.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,.42)} +.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)} +.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent} +.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)} +.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)} +.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#673ab7} +.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ffd740} +.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336} +.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336} +.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)} +.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)} +.mat-icon.mat-primary{color:#673ab7} +.mat-icon.mat-accent{color:#ffd740} +.mat-icon.mat-warn{color:#f44336} +.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,.54)} +.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,.38)} +.mat-input-element{caret-color:#673ab7} +.mat-input-element::placeholder{color:rgba(0,0,0,.42)} +.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)} +.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)} +.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)} +.mat-form-field.mat-accent .mat-input-element{caret-color:#ffd740} +.mat-form-field.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#f44336} +.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#f44336} +.mat-list-base .mat-list-item{color:rgba(0,0,0,.87)} +.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)} +.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)} +.mat-list-item-disabled{background-color:#eee} +.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,.04)} +.mat-list-single-selected-option,.mat-list-single-selected-option:hover,.mat-list-single-selected-option:focus{background:rgba(0,0,0,.12)} +.mat-menu-panel{background:#fff} +.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)} +.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)} +.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-menu-submenu-icon,.mat-menu-item[disabled] .mat-icon-no-color{color:rgba(0,0,0,.38)} +.mat-menu-item .mat-icon-no-color,.mat-menu-submenu-icon{color:rgba(0,0,0,.54)} +.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,.04)} +.mat-paginator{background:#fff} +.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)} +.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)} +.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)} +.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)} +.mat-paginator-container{min-height:56px} +.mat-progress-bar-background{fill:#d5cae9} +.mat-progress-bar-buffer{background-color:#d5cae9} +.mat-progress-bar-fill::after{background-color:#673ab7} +.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#fbf1cc} +.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#fbf1cc} +.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#ffd740} +.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#f9ccc9} +.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#f9ccc9} +.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336} +.mat-progress-spinner circle,.mat-spinner circle{stroke:#673ab7} +.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffd740} +.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336} +.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)} +.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#673ab7} +.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#673ab7} +.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffd740} +.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ffd740} +.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336} +.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336} +.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)} +.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,.38)} +.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)} +.mat-radio-button .mat-ripple-element{background-color:#000} +.mat-select-value{color:rgba(0,0,0,.87)} +.mat-select-placeholder{color:rgba(0,0,0,.42)} +.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)} +.mat-select-arrow{color:rgba(0,0,0,.54)} +.mat-select-panel{background:#fff} +.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)} +.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)} +.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#673ab7} +.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffd740} +.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336} +.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336} +.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)} +.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)} +.mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)} +.mat-drawer.mat-drawer-push{background-color:#fff} +.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)} +.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)} +.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,.12);border-right:none} +[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none} +[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)} +.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)} +.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ffd740} +.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,215,64,.54)} +.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ffd740} +.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#673ab7} +.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(103,58,183,.54)} +.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#673ab7} +.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336} +.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)} +.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336} +.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000} +.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12);background-color:#fafafa} +.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)} +.mat-slider-track-background{background-color:rgba(0,0,0,.26)} +.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#673ab7} +.mat-primary .mat-slider-thumb-label-text{color:#fff} +.mat-primary .mat-slider-focus-ring{background-color:rgba(103,58,183,.2)} +.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#ffd740} +.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)} +.mat-accent .mat-slider-focus-ring{background-color:rgba(255,215,64,.2)} +.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#f44336} +.mat-warn .mat-slider-thumb-label-text{color:#fff} +.mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)} +.mat-slider:hover .mat-slider-track-background,.mat-slider.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,.38)} +.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,.26)} +.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)} +.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)} +.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)} +.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)} +.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent} +.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,.38)} +.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)} +.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,.7)} +.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)} +.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)} +.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:rgba(0,0,0,.04)} +.mat-step-header:hover[aria-disabled=true]{cursor:default} +@media(hover: none){.mat-step-header:hover{background:none}} +.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)} +.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff} +.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#673ab7;color:#fff} +.mat-step-header.mat-accent .mat-step-icon{color:rgba(0,0,0,.87)} +.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ffd740;color:rgba(0,0,0,.87)} +.mat-step-header.mat-warn .mat-step-icon{color:#fff} +.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff} +.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336} +.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)} +.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336} +.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff} +.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,.12)} +.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)} +.mat-horizontal-stepper-header{height:72px} +.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px 24px} +.mat-stepper-vertical-line::before{top:-16px;bottom:-16px} +.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before{top:36px} +.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px} +.mat-sort-header-arrow{color:#757575} +.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,.12)} +.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,.12);border-bottom:none} +.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)} +.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)} +.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)} +.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)} +.mat-tab-group[class*=mat-background-]>.mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none} +.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)} +.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#673ab7} +.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff} +.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)} +.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffd740} +.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:rgba(0,0,0,.87)} +.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)} +.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336} +.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff} +.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)} +.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination{background-color:#673ab7} +.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff} +.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)} +.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-primary>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-focus-indicator::before{border-color:#fff} +.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4} +.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12} +.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)} +.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination{background-color:#ffd740} +.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:rgba(0,0,0,.87)} +.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)} +.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-accent>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-focus-indicator::before{border-color:rgba(0,0,0,.87)} +.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#000;opacity:.4} +.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element{background-color:#000;opacity:.12} +.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)} +.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination{background-color:#f44336} +.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff} +.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)} +.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-warn>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-focus-indicator::before{border-color:#fff} +.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4} +.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12} +.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)} +.mat-toolbar.mat-primary{background:#673ab7;color:#fff} +.mat-toolbar.mat-accent{background:#ffd740;color:rgba(0,0,0,.87)} +.mat-toolbar.mat-warn{background:#f44336;color:#fff} +.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor} +.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit} +.mat-toolbar .mat-input-element{caret-color:currentColor} +.mat-toolbar-multiple-rows{min-height:64px} +.mat-toolbar-row,.mat-toolbar-single-row{height:64px} +@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}} +.mat-tooltip{background:rgba(97,97,97,.9)} +.mat-tree{background:#fff} +.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,.87)} +.mat-tree-node{min-height:48px} +.mat-snack-bar-container{color:rgba(255,255,255,.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)} +.mat-simple-snackbar-action{color:#ffd740} +html, body { + height: 100%; +} +body { + margin: 0; + font-family: Roboto, "Helvetica Neue", sans-serif; +} +.mat-table { + overflow-x: scroll; + display: table; + width: 100%; +} +.mat-cell, +.mat-header-cell { + word-wrap: initial; + display: table-cell; + padding: 0px 4px 4px 4px; + line-break: unset; + width: auto; + white-space: nowrap; + overflow: hidden; + vertical-align: middle; +} +.mat-row, +.mat-header-row { + display: table-row; +} +.mat-mdc-row .mat-mdc-cell { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + cursor: pointer; +} +.mat-mdc-row:hover .mat-mdc-cell { + border-color: currentColor; +} +.demo-row-is-clicked { + font-weight: bold; +} + +/*# sourceMappingURL=styles.css.map*/ \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/styles.css.map b/cmd/pkgdash/assets/ui/styles.css.map new file mode 100644 index 0000000..cfb5e67 --- /dev/null +++ b/cmd/pkgdash/assets/ui/styles.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles.css","mappings":";;;AAAA,mBAAmB,eAAe,CAAC,cAAc,CAAC,gDAAgD,CAAC,oCAAoC,aAAa,CAAC,oCAAoC,cAAc,CAAC,yCAAyC,uDAAuD,CAAC,qBAAqB,CAAC,eAAe,CAAC,sCAAsC,uDAAuD,CAAC,qBAAqB,CAAC,eAAe,CAAC,6CAA6C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe,CAAC,6CAA6C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe,CAAC,2BAA2B,oEAAoE,CAAC,eAAe,CAAC,2BAA2B,oEAAoE,CAAC,eAAe,CAAC,6BAA6B,uDAAuD,CAAC,qBAAqB,CAAC,sCAAsC,uDAAuD,CAAC,qBAAqB,CAAC,4CAA4C,eAAe,CAAC,wBAAwB,uDAAuD,CAAC,qBAAqB,CAAC,8CAA8C,yDAAyD,CAAC,sBAAsB,CAAC,eAAe,CAAC,8CAA8C,uDAAuD,CAAC,sBAAsB,CAAC,eAAe,CAAC,8CAA8C,uDAAuD,CAAC,uBAAuB,CAAC,eAAe,CAAC,8CAA8C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe,CAAC,4BAA4B,uDAAuD,CAAC,qBAAqB,CAAC,4GAA4G,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,mBAAmB,gDAAgD,CAAC,UAAU,gDAAgD,CAAC,gBAAgB,cAAc,CAAC,eAAe,CAAC,iCAAiC,cAAc,CAAC,qCAAqC,cAAc,CAAC,cAAc,gDAAgD,CAAC,yCAAyC,gBAAgB,CAAC,UAAU,cAAc,CAAC,eAAe,CAAC,+EAA+E,cAAc,CAAC,WAAW,gDAAgD,CAAC,iBAAiB,cAAc,CAAC,eAAe,CAAC,2BAA2B,cAAc,CAAC,cAAc,gDAAgD,CAAC,mBAAmB,cAAc,CAAC,qDAAqD,cAAc,CAAC,eAAe,CAAC,8BAA8B,cAAc,CAAC,eAAe,CAAC,kBAAkB,uDAAuD,CAAC,qBAAqB,CAAC,4BAA4B,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,6BAA6B,uDAAuD,CAAC,qBAAqB,CAAC,gBAAgB,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,gDAAgD,CAAC,qBAAqB,CAAC,wBAAwB,wBAAwB,CAAC,kEAAkE,cAAc,CAAC,iBAAiB,CAAC,gFAAgF,YAAY,CAAC,WAAW,CAAC,oGAAoG,cAAc,CAAC,iBAAiB,CAAC,sBAAsB,cAAc,CAAC,qCAAqC,CAAC,kLAAkL,4CAA4C,CAAC,qBAAqB,CAAC,yHAAyH,4CAA4C,CAAC,qBAAqB,CAAC,8BAA8B,cAAc,CAAC,oBAAoB,CAAC,sBAAsB,aAAa,CAAC,0BAA0B,gBAAgB,CAAC,kCAAkC,aAAa,CAAC,wBAAwB,CAAC,+BAA+B,CAAC,0DAA0D,qBAAqB,CAAC,wDAAwD,iBAAiB,CAAC,oPAAoP,mFAAmF,CAAC,qBAAqB,CAAC,iKAAiK,qFAAqF,CAAC,qBAAqB,CAAC,0JAA0J,qFAAqF,CAAC,qBAAqB,CAAC,wDAAwD,aAAa,CAAC,4DAA4D,aAAa,CAAC,oEAAoE,wBAAwB,CAAC,+BAA+B,CAAC,aAAa,oPAAoP,4CAA4C,CAAC,iKAAiK,4CAA4C,CAAC,0JAA0J,2CAA2C,CAAC,CAAC,sDAAsD,uBAAuB,CAAC,sDAAsD,aAAa,CAAC,iBAAiB,CAAC,gPAAgP,4CAA4C,CAAC,qBAAqB,CAAC,wJAAwJ,4CAA4C,CAAC,qBAAqB,CAAC,yDAAyD,mBAAmB,CAAC,yDAAyD,aAAa,CAAC,kBAAkB,CAAC,sPAAsP,4CAA4C,CAAC,qBAAqB,CAAC,2JAA2J,4CAA4C,CAAC,qBAAqB,CAAC,4CAA4C,cAAc,CAAC,gEAAgE,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB,CAAC,8FAA8F,cAAc,CAAC,wBAAwB,oBAAoB,CAAC,eAAe,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,4DAA4D,gDAAgD,CAAC,cAAc,CAAC,kBAAkB,gDAAgD,CAAC,YAAY,gDAAgD,CAAC,oBAAoB,cAAc,CAAC,0BAA0B,gDAAgD,CAAC,6BAA6B,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,8CAA8C,gDAAgD,CAAC,gBAAgB,cAAc,CAAC,eAAe,CAAC,0BAA0B,kBAAkB,CAAC,sBAAsB,cAAc,CAAC,yBAAyB,cAAc,CAAC,eAAe,CAAC,eAAe,gDAAgD,CAAC,6BAA6B,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,6GAA6G,uDAAuD,CAAC,qBAAqB,CAAC,QAAQ,CAAC,aAAa,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC,qBAAqB,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC,eAAe,gDAAgD,CAAC,iBAAiB,gDAAgD,CAAC,8BAA8B,cAAc,CAAC,wCAAwC,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB,CAAC,uDAAuD,cAAc,CAAC,gCAAgC,cAAc,CAAC,0CAA0C,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB,CAAC,yDAAyD,cAAc,CAAC,8BAA8B,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,qCAAqC,cAAc,CAAC,+CAA+C,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB,CAAC,8DAA8D,cAAc,CAAC,uCAAuC,cAAc,CAAC,iDAAiD,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB,CAAC,gEAAgE,cAAc,CAAC,qCAAqC,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,gDAAgD,CAAC,cAAc,CAAC,oBAAoB,uDAAuD,CAAC,qBAAqB,CAAC,qBAAqB,gDAAgD,CAAC,cAAc,CAAC,4BAA4B,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,gDAAgD,CAAC,qCAAqC,eAAe,CAAC,cAAc,CAAC,YAAY,eAAe,CAAC,iBAAiB,CAAC,wBAAwB,uBAAuB,CAAC,iCAAiC,gBAAgB,CAAC,oBAAoB,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,2DAA2D,CAAC,kBAAkB,CAAC,8CAA8C,YAAY,CAAC,qBAAqB,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,mDAAmD,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,uBAAuB,cAAc,CAAC,YAAY,CAAC,6BAA6B,YAAY,CAAC,4BAA4B,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,kBAAkB,iBAAiB,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,sBAAsB,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,uCAAuC,CAAC,yDAAyD,CAAC,SAAS,CAAC,mDAAmD,SAAS,CAAC,6EAA6E,UAAU,CAAC,2BAA2B,0BAA0B,CAAC,iGAAiG,SAAS,CAAC,6CAA6C,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,qBAAqB,CAAC,aAAa,CAAC,cAAc,CAAC,wBAAwB,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,+BAA+B,WAAW,CAAC,yCAAyC,wBAAwB,CAAC,iCAAiC,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,iDAAiD,wBAAwB,CAAC,iCAAiC,CAAC,mBAAmB,CAAC,yCAAyC,IAAI,CAAC,CAAC,uCAAuC,IAAI,CAAC,CAAC,oDAAoD,8CAA8C,CAAC,0DAA0D,4CAA4C,CAAC,qBAAqB,iBAAiB,CAAC,yBAAyB,iBAAiB,CAAC,oBAAoB,+BAA+B,CAAC,YAAY,qBAAqB,CAAC,wFAAwF,0BAA0B,CAAC,6EAA6E,0BAA0B,CAAC,uBAAuB,0BAA0B,CAAC,qBAAqB,CAAC,gCAAgC,qBAAqB,CAAC,gEAAgE,aAAa,CAAC,+DAA+D,aAAa,CAAC,6DAA6D,aAAa,CAAC,oBAAoB,qBAAqB,CAAC,2CAA2C,qBAAqB,CAAC,qBAAqB,qBAAqB,CAAC,4BAA4B,aAAa,CAAC,8BAA8B,aAAa,CAAC,0FAA0F,kBAAkB,CAAC,wJAAwJ,kBAAkB,CAAC,oFAAoF,kBAAkB,CAAC,0HAA0H,kBAAkB,CAAC,oBAAoB,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,qHAAqH,CAAC,kBAAkB,sHAAsH,CAAC,kBAAkB,sHAAsH,CAAC,kBAAkB,sHAAsH,CAAC,kBAAkB,uHAAuH,CAAC,kBAAkB,uHAAuH,CAAC,kBAAkB,wHAAwH,CAAC,kBAAkB,wHAAwH,CAAC,kBAAkB,wHAAwH,CAAC,kBAAkB,wHAAwH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,yHAAyH,CAAC,mBAAmB,0HAA0H,CAAC,mBAAmB,0HAA0H,CAAC,mBAAmB,0HAA0H,CAAC,mBAAmB,0HAA0H,CAAC,mBAAmB,2HAA2H,CAAC,mBAAmB,2HAA2H,CAAC,mBAAmB,2HAA2H,CAAC,mBAAmB,2HAA2H,CAAC,mBAAmB,2HAA2H,CAAC,yBAAyB,YAAY,CAAC,wBAAwB,eAAe,CAAC,qBAAqB,CAAC,sDAAsD,uHAAuH,CAAC,8EAA8E,eAAe,CAAC,wGAAwG,qBAAqB,CAAC,WAAW,iBAAiB,CAAC,qCAAqC,YAAY,CAAC,mBAAmB,iBAAiB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,mFAAmF,eAAe,CAAC,oCAAoC,cAAc,CAAC,oCAAoC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,oDAAoD,QAAQ,CAAC,oDAAoD,WAAW,CAAC,qDAAqD,UAAU,CAAC,+DAA+D,SAAS,CAAC,WAAW,CAAC,oDAAoD,WAAW,CAAC,8DAA8D,UAAU,CAAC,UAAU,CAAC,uEAAuE,SAAS,CAAC,iFAAiF,SAAS,CAAC,UAAU,CAAC,sEAAsE,UAAU,CAAC,gFAAgF,UAAU,CAAC,SAAS,CAAC,qCAAqC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,qDAAqD,SAAS,CAAC,qDAAqD,YAAY,CAAC,sDAAsD,UAAU,CAAC,gEAAgE,SAAS,CAAC,WAAW,CAAC,qDAAqD,WAAW,CAAC,+DAA+D,UAAU,CAAC,UAAU,CAAC,wEAAwE,UAAU,CAAC,kFAAkF,SAAS,CAAC,WAAW,CAAC,uEAAuE,WAAW,CAAC,iFAAiF,UAAU,CAAC,UAAU,CAAC,oCAAoC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,oDAAoD,SAAS,CAAC,oDAAoD,YAAY,CAAC,qDAAqD,UAAU,CAAC,+DAA+D,SAAS,CAAC,WAAW,CAAC,oDAAoD,WAAW,CAAC,8DAA8D,UAAU,CAAC,UAAU,CAAC,uEAAuE,UAAU,CAAC,iFAAiF,SAAS,CAAC,WAAW,CAAC,sEAAsE,WAAW,CAAC,gFAAgF,UAAU,CAAC,UAAU,CAAC,mBAAmB,UAAU,CAAC,kBAAkB,CAAC,6CAA6C,iBAAiB,CAAC,eAAe,CAAC,qCAAqC,kBAAkB,CAAC,UAAU,CAAC,mCAAmC,UAAU,CAAC,kBAAkB,CAAC,uCAAuC,kBAAkB,CAAC,qBAAqB,CAAC,4BAA4B,0HAA0H,CAAC,eAAe,CAAC,qBAAqB,CAAC,iDAAiD,aAAa,CAAC,sBAAsB,CAAC,qFAAqF,aAAa,CAAC,kFAAkF,aAAa,CAAC,4EAA4E,aAAa,CAAC,glBAAglB,qBAAqB,CAAC,mKAAmK,wBAAwB,CAAC,gKAAgK,wBAAwB,CAAC,0JAA0J,wBAAwB,CAAC,2LAA2L,4BAA4B,CAAC,6GAA6G,UAAU,CAAC,6BAA6B,CAAC,0BAA0B,eAAe,CAAC,8CAA8C,4BAA4B,CAAC,2DAA2D,qBAAqB,CAAC,qBAAqB,CAAC,2GAA2G,UAAU,CAAC,uGAAuG,UAAU,CAAC,+FAA+F,UAAU,CAAC,4vBAA4vB,qBAAqB,CAAC,2GAA2G,wBAAwB,CAAC,uGAAuG,wBAAwB,CAAC,+FAA+F,wBAAwB,CAAC,4vBAA4vB,gCAAgC,CAAC,2LAA2L,qCAAqC,CAAC,uLAAuL,qCAAqC,CAAC,+KAA+K,qCAAqC,CAAC,iGAAiG,qHAAqH,CAAC,iDAAiD,sHAAsH,CAAC,kFAAkF,wHAAwH,CAAC,qEAAqE,qHAAqH,CAAC,mFAAmF,wHAAwH,CAAC,qJAAqJ,yHAAyH,CAAC,2HAA2H,qHAAqH,CAAC,uDAAuD,sHAAsH,CAAC,iHAAiH,eAAe,CAAC,mBAAmB,qBAAqB,CAAC,oDAAoD,gCAAgC,CAAC,uCAAuC,qBAAqB,CAAC,eAAe,CAAC,wEAAwE,qBAAqB,CAAC,mFAAmF,qCAAqC,CAAC,6FAA6F,gBAAgB,CAAC,sCAAsC,CAAC,8GAA8G,gBAAgB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,2BAA2B,wBAAwB,CAAC,qBAAqB,CAAC,iEAAiE,qBAAqB,CAAC,4BAA4B,qBAAqB,CAAC,qBAAqB,CAAC,kEAAkE,eAAe,CAAC,sDAAsD,wBAAwB,CAAC,iHAAiH,gCAAgC,CAAC,wEAAwE,gBAAgB,CAAC,UAAU,eAAe,CAAC,qBAAqB,CAAC,wCAAwC,sHAAsH,CAAC,sDAAsD,qHAAqH,CAAC,mBAAmB,qBAAqB,CAAC,oBAAoB,4BAA4B,CAAC,wBAAwB,YAAY,CAAC,6BAA6B,yBAAyB,CAAC,wBAAwB,wBAAwB,CAAC,4HAA4H,wBAAwB,CAAC,0HAA0H,wBAAwB,CAAC,sHAAsH,wBAAwB,CAAC,gJAAgJ,wBAAwB,CAAC,sEAAsE,oBAAoB,CAAC,2CAA2C,qBAAqB,CAAC,kCAAkC,qBAAqB,CAAC,mKAAmK,kBAAkB,CAAC,iKAAiK,kBAAkB,CAAC,6JAA6J,kBAAkB,CAAC,4BAA4B,wBAAwB,CAAC,qBAAqB,CAAC,6CAA6C,qBAAqB,CAAC,UAAU,CAAC,2DAA2D,sHAAsH,CAAC,2EAA2E,WAAW,CAAC,8CAA8C,UAAU,CAAC,mCAAmC,eAAe,CAAC,0DAA0D,wBAAwB,CAAC,UAAU,CAAC,2EAA2E,UAAU,CAAC,UAAU,CAAC,8EAA8E,qCAAqC,CAAC,uDAAuD,wBAAwB,CAAC,UAAU,CAAC,wEAAwE,UAAU,CAAC,UAAU,CAAC,2EAA2E,qCAAqC,CAAC,yDAAyD,wBAAwB,CAAC,UAAU,CAAC,0EAA0E,UAAU,CAAC,UAAU,CAAC,6EAA6E,qCAAqC,CAAC,WAAW,eAAe,CAAC,uJAAuJ,kBAAkB,CAAC,wFAAwF,mCAAmC,CAAC,iBAAiB,qBAAqB,CAAC,2BAA2B,qBAAqB,CAAC,oBAAoB,oBAAoB,CAAC,+HAA+H,qBAAqB,CAAC,0CAA0C,0BAA0B,CAAC,oDAAoD,qBAAqB,CAAC,gEAAgE,qBAAqB,CAAC,wBAAwB,CAAC,0IAA0I,qBAAqB,CAAC,yDAAyD,qBAAqB,CAAC,8BAA8B,qBAAqB,CAAC,uGAAuG,4BAA4B,CAAC,mIAAmI,4BAA4B,CAAC,oCAAoC,6BAA6B,CAAC,uFAAuF,6BAA6B,CAAC,8GAA8G,4FAA4F,CAAC,8GAA8G,2FAA2F,CAAC,6IAA6I,kBAAkB,CAAC,sIAAsI,kBAAkB,CAAC,4BAA4B,wBAAwB,CAAC,UAAU,CAAC,wDAAwD,mCAAmC,CAAC,oDAAoD,+BAA+B,CAAC,weAAwe,mCAAmC,CAAC,wBAAwB,uHAAuH,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uEAAuE,8BAA8B,CAAC,6JAA6J,6BAA6B,CAAC,oLAAoL,6FAA6F,CAAC,oLAAoL,4FAA4F,CAAC,mNAAmN,kBAAkB,CAAC,4MAA4M,kBAAkB,CAAC,+DAA+D,wBAAwB,CAAC,UAAU,CAAC,2FAA2F,oCAAoC,CAAC,uFAAuF,+BAA+B,CAAC,ilBAAilB,oCAAoC,CAAC,qEAAqE,6BAA6B,CAAC,yJAAyJ,6BAA6B,CAAC,gLAAgL,4FAA4F,CAAC,gLAAgL,2FAA2F,CAAC,+MAA+M,kBAAkB,CAAC,wMAAwM,kBAAkB,CAAC,6DAA6D,wBAAwB,CAAC,UAAU,CAAC,yFAAyF,mCAAmC,CAAC,qFAAqF,+BAA+B,CAAC,2kBAA2kB,mCAAmC,CAAC,8BAA8B,2HAA2H,CAAC,8BAA8B,aAAa,CAAC,yCAAyC,aAAa,CAAC,uCAAuC,aAAa,CAAC,sCAAsC,qBAAqB,CAAC,sBAAsB,2HAA2H,CAAC,eAAe,CAAC,qBAAqB,CAAC,aAAa,gCAAgC,CAAC,sBAAsB,kCAAkC,CAAC,qBAAqB,eAAe,CAAC,qBAAqB,CAAC,mDAAmD,sHAAsH,CAAC,gBAAgB,gCAAgC,CAAC,mSAAmS,0BAA0B,CAAC,oBAAoB,oGAAoG,eAAe,CAAC,CAAC,kCAAkC,qBAAqB,CAAC,wEAAwE,qBAAqB,CAAC,gDAAgD,qBAAqB,CAAC,0KAA0K,aAAa,CAAC,4BAA4B,WAAW,CAAC,yCAAyC,WAAW,CAAC,sBAAsB,oBAAoB,CAAC,UAAU,oBAAoB,CAAC,kDAAkD,aAAa,CAAC,6DAA6D,aAAa,CAAC,2DAA2D,aAAa,CAAC,6CAA6C,aAAa,CAAC,uBAAuB,gCAAgC,CAAC,mDAAmD,wBAAwB,CAAC,8DAA8D,wBAAwB,CAAC,4DAA4D,wBAAwB,CAAC,6GAA6G,aAAa,CAAC,wHAAwH,aAAa,CAAC,sHAAsH,aAAa,CAAC,6DAA6D,aAAa,CAAC,qKAAqK,aAAa,CAAC,uIAAuI,wBAAwB,CAAC,WAAW,aAAa,CAAC,wDAAwD,qBAAqB,CAAC,4CAA4C,qBAAqB,CAAC,4DAA4D,gCAAgC,CAAC,oFAAoF,2GAA2G,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,8DAA8D,gCAAgC,CAAC,sFAAsF,2GAA2G,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,qDAAqD,gCAAgC,CAAC,6EAA6E,gCAAgC,CAAC,kEAAkE,gCAAgC,CAAC,8EAA8E,qBAAqB,CAAC,0FAA0F,4BAA4B,CAAC,2DAA2D,qBAAqB,CAAC,iEAAiE,qBAAqB,CAAC,6EAA6E,aAAa,CAAC,wFAAwF,aAAa,CAAC,sFAAsF,aAAa,CAAC,+GAA+G,aAAa,CAAC,iFAAiF,qBAAqB,CAAC,mFAAmF,qBAAqB,CAAC,sBAAsB,aAAa,CAAC,qBAAqB,aAAa,CAAC,mBAAmB,aAAa,CAAC,oEAAoE,qBAAqB,CAAC,wHAAwH,qBAAqB,CAAC,mBAAmB,mBAAmB,CAAC,gCAAgC,qBAAqB,CAAC,qCAAqC,qBAAqB,CAAC,8CAA8C,qBAAqB,CAAC,yCAAyC,qBAAqB,CAAC,8CAA8C,mBAAmB,CAAC,uFAAuF,mBAAmB,CAAC,2FAA2F,aAAa,CAAC,8BAA8B,qBAAqB,CAAC,gCAAgC,qBAAqB,CAAC,8BAA8B,qBAAqB,CAAC,wBAAwB,qBAAqB,CAAC,gMAAgM,0BAA0B,CAAC,+GAA+G,0BAA0B,CAAC,gBAAgB,eAAe,CAAC,8CAA8C,uHAAuH,CAAC,eAAe,sBAAsB,CAAC,qBAAqB,CAAC,qHAAqH,qBAAqB,CAAC,yDAAyD,qBAAqB,CAAC,uLAAuL,0BAA0B,CAAC,eAAe,eAAe,CAAC,4DAA4D,qBAAqB,CAAC,kDAAkD,oCAAoC,CAAC,sCAAsC,CAAC,yCAAyC,oCAAoC,CAAC,uMAAuM,4BAA4B,CAAC,yBAAyB,eAAe,CAAC,6BAA6B,YAAY,CAAC,yBAAyB,wBAAwB,CAAC,8BAA8B,wBAAwB,CAAC,0DAA0D,YAAY,CAAC,sDAAsD,wBAAwB,CAAC,2DAA2D,wBAAwB,CAAC,wDAAwD,YAAY,CAAC,oDAAoD,wBAAwB,CAAC,yDAAyD,wBAAwB,CAAC,iDAAiD,cAAc,CAAC,uEAAuE,cAAc,CAAC,mEAAmE,cAAc,CAAC,wBAAwB,4BAA4B,CAAC,wEAAwE,oBAAoB,CAAC,2SAA2S,wBAAwB,CAAC,uEAAuE,oBAAoB,CAAC,uSAAuS,wBAAwB,CAAC,qEAAqE,oBAAoB,CAAC,+RAA+R,wBAAwB,CAAC,4IAA4I,4BAA4B,CAAC,wIAAwI,gCAAgC,CAAC,8DAA8D,qBAAqB,CAAC,sCAAsC,qBAAqB,CAAC,kBAAkB,qBAAqB,CAAC,wBAAwB,qBAAqB,CAAC,uCAAuC,qBAAqB,CAAC,kBAAkB,qBAAqB,CAAC,kBAAkB,eAAe,CAAC,gDAAgD,uHAAuH,CAAC,qEAAqE,0BAA0B,CAAC,0DAA0D,aAAa,CAAC,yDAAyD,aAAa,CAAC,uDAAuD,aAAa,CAAC,iEAAiE,aAAa,CAAC,kEAAkE,qBAAqB,CAAC,sBAAsB,wBAAwB,CAAC,qBAAqB,CAAC,YAAY,qBAAqB,CAAC,qBAAqB,CAAC,4BAA4B,qBAAqB,CAAC,kCAAkC,0HAA0H,CAAC,iBAAiB,sCAAsC,CAAC,gCAAgC,qCAAqC,CAAC,iBAAiB,CAAC,2BAA2B,qCAAqC,CAAC,iBAAiB,CAAC,0CAA0C,gBAAgB,CAAC,sCAAsC,CAAC,sCAAsC,+BAA+B,CAAC,sDAAsD,wBAAwB,CAAC,oDAAoD,qCAAqC,CAAC,kDAAkD,wBAAwB,CAAC,kEAAkE,wBAAwB,CAAC,gEAAgE,oCAAoC,CAAC,8DAA8D,wBAAwB,CAAC,+DAA+D,wBAAwB,CAAC,6DAA6D,oCAAoC,CAAC,2DAA2D,wBAAwB,CAAC,wDAAwD,qBAAqB,CAAC,wBAAwB,sHAAsH,CAAC,wBAAwB,CAAC,sBAAsB,gCAAgC,CAAC,6BAA6B,gCAAgC,CAAC,wGAAwG,wBAAwB,CAAC,0CAA0C,UAAU,CAAC,oCAAoC,mCAAmC,CAAC,qGAAqG,wBAAwB,CAAC,yCAAyC,UAAU,CAAC,mCAAmC,oCAAoC,CAAC,+FAA+F,wBAAwB,CAAC,uCAAuC,UAAU,CAAC,iCAAiC,mCAAmC,CAAC,oGAAoG,gCAAgC,CAAC,qIAAqI,gCAAgC,CAAC,wDAAwD,gCAAgC,CAAC,6CAA6C,gCAAgC,CAAC,oJAAoJ,gCAAgC,CAAC,4KAA4K,gCAAgC,CAAC,6EAA6E,4BAA4B,CAAC,4BAA4B,CAAC,4KAA4K,4BAA4B,CAAC,oNAAoN,4BAA4B,CAAC,iDAAiD,2BAA2B,CAAC,yCAAyC,4HAA4H,CAAC,kIAAkI,CAAC,uCAAuC,6HAA6H,CAAC,mKAAmK,gCAAgC,CAAC,2CAA2C,cAAc,CAAC,oBAAoB,uBAAuB,eAAe,CAAC,CAAC,qEAAqE,qBAAqB,CAAC,gCAAgC,gCAAgC,CAAC,UAAU,CAAC,+HAA+H,wBAAwB,CAAC,UAAU,CAAC,2CAA2C,UAAU,CAAC,gKAAgK,wBAAwB,CAAC,UAAU,CAAC,yCAAyC,UAAU,CAAC,0JAA0J,wBAAwB,CAAC,UAAU,CAAC,4CAA4C,4BAA4B,CAAC,aAAa,CAAC,uDAAuD,qBAAqB,CAAC,sDAAsD,aAAa,CAAC,8CAA8C,qBAAqB,CAAC,mCAAmC,iCAAiC,CAAC,0GAA0G,gCAAgC,CAAC,+BAA+B,WAAW,CAAC,+FAA+F,iBAAiB,CAAC,mCAAmC,SAAS,CAAC,YAAY,CAAC,mJAAmJ,QAAQ,CAAC,gEAAgE,QAAQ,CAAC,uBAAuB,aAAa,CAAC,iCAAiC,uCAAuC,CAAC,+FAA+F,oCAAoC,CAAC,kBAAkB,CAAC,6BAA6B,qBAAqB,CAAC,+DAA+D,qBAAqB,CAAC,mCAAmC,4BAA4B,CAAC,uEAAuE,4BAA4B,CAAC,gGAAgG,kBAAkB,CAAC,eAAe,CAAC,grBAAgrB,qCAAqC,CAAC,kFAAkF,wBAAwB,CAAC,gVAAgV,qBAAqB,CAAC,wqBAAwqB,qCAAqC,CAAC,gFAAgF,wBAAwB,CAAC,wUAAwU,qBAAqB,CAAC,wpBAAwpB,qCAAqC,CAAC,4EAA4E,wBAAwB,CAAC,wTAAwT,qBAAqB,CAAC,wwBAAwwB,qCAAqC,CAAC,gXAAgX,wBAAwB,CAAC,sSAAsS,UAAU,CAAC,0WAA0W,0BAA0B,CAAC,8tBAA8tB,iBAAiB,CAAC,wdAAwd,iBAAiB,CAAC,UAAU,CAAC,weAAwe,qBAAqB,CAAC,WAAW,CAAC,gwBAAgwB,qCAAqC,CAAC,0WAA0W,wBAAwB,CAAC,kSAAkS,UAAU,CAAC,sWAAsW,0BAA0B,CAAC,stBAAstB,iBAAiB,CAAC,odAAod,iBAAiB,CAAC,UAAU,CAAC,keAAke,qBAAqB,CAAC,WAAW,CAAC,gvBAAgvB,qCAAqC,CAAC,8VAA8V,wBAAwB,CAAC,0RAA0R,UAAU,CAAC,8VAA8V,0BAA0B,CAAC,ssBAAssB,iBAAiB,CAAC,4cAA4c,iBAAiB,CAAC,UAAU,CAAC,sdAAsd,qBAAqB,CAAC,WAAW,CAAC,aAAa,kBAAkB,CAAC,qBAAqB,CAAC,yBAAyB,kBAAkB,CAAC,UAAU,CAAC,wBAAwB,kBAAkB,CAAC,UAAU,CAAC,sBAAsB,kBAAkB,CAAC,UAAU,CAAC,4HAA4H,6BAA6B,CAAC,4MAA4M,aAAa,CAAC,gCAAgC,wBAAwB,CAAC,2BAA2B,eAAe,CAAC,yCAAyC,WAAW,CAAC,yBAAyB,2BAA2B,eAAe,CAAC,yCAAyC,WAAW,CAAC,CAAC,aAAa,4BAA4B,CAAC,UAAU,eAAe,CAAC,qCAAqC,qBAAqB,CAAC,eAAe,eAAe,CAAC,yBAAyB,0BAA0B,CAAC,kBAAkB,CAAC,wHAAwH,CAAC,4BAA4B,aAAa;;;;;ACApl3E;ACAA,mBAAmB,eAAe,CAAC,cAAc,CAAC,gDAAgD;AAAC,oCAAoC,aAAa;AAAC,oCAAoC,cAAc;AAAC,yCAAyC,uDAAuD,CAAC,qBAAqB,CAAC,eAAe;AAAC,sCAAsC,uDAAuD,CAAC,qBAAqB,CAAC,eAAe;AAAC,6CAA6C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe;AAAC,6CAA6C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe;AAAC,2BAA2B,oEAAoE,CAAC,eAAe;AAAC,2BAA2B,oEAAoE,CAAC,eAAe;AAAC,6BAA6B,uDAAuD,CAAC,qBAAqB;AAAC,sCAAsC,uDAAuD,CAAC,qBAAqB;AAAC,4CAA4C,eAAe;AAAC,wBAAwB,uDAAuD,CAAC,qBAAqB;AAAC,8CAA8C,yDAAyD,CAAC,sBAAsB,CAAC,eAAe;AAAC,8CAA8C,uDAAuD,CAAC,sBAAsB,CAAC,eAAe;AAAC,8CAA8C,uDAAuD,CAAC,uBAAuB,CAAC,eAAe;AAAC,8CAA8C,uDAAuD,CAAC,qBAAqB,CAAC,eAAe;AAAC,4BAA4B,uDAAuD,CAAC,qBAAqB;AAAC,4GAA4G,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,mBAAmB,gDAAgD;AAAC,UAAU,gDAAgD;AAAC,gBAAgB,cAAc,CAAC,eAAe;AAAC,iCAAiC,cAAc;AAAC,qCAAqC,cAAc;AAAC,cAAc,gDAAgD;AAAC,yCAAyC,gBAAgB;AAAC,UAAU,cAAc,CAAC,eAAe;AAAC,+EAA+E,cAAc;AAAC,WAAW,gDAAgD;AAAC,iBAAiB,cAAc,CAAC,eAAe;AAAC,2BAA2B,cAAc;AAAC,cAAc,gDAAgD;AAAC,mBAAmB,cAAc;AAAC,qDAAqD,cAAc,CAAC,eAAe;AAAC,8BAA8B,cAAc,CAAC,eAAe;AAAC,kBAAkB,uDAAuD,CAAC,qBAAqB;AAAC,4BAA4B,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,6BAA6B,uDAAuD,CAAC,qBAAqB;AAAC,gBAAgB,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,gDAAgD,CAAC,qBAAqB;AAAC,wBAAwB,wBAAwB;AAAC,kEAAkE,cAAc,CAAC,iBAAiB;AAAC,gFAAgF,YAAY,CAAC,WAAW;AAAC,oGAAoG,cAAc,CAAC,iBAAiB;AAAC,sBAAsB,cAAc,CAAC,qCAAqC;AAAC,kLAAkL,4CAA4C,CAAC,qBAAqB;AAAC,yHAAyH,4CAA4C,CAAC,qBAAqB;AAAC,8BAA8B,cAAc,CAAC,oBAAoB;AAAC,sBAAsB,aAAa;AAAC,0BAA0B,gBAAgB;AAAC,kCAAkC,aAAa,CAAC,wBAAwB,CAAC,+BAA+B;AAAC,0DAA0D,qBAAqB;AAAC,wDAAwD,iBAAiB;AAAC,oPAAoP,mFAAmF,CAAC,qBAAqB;AAAC,iKAAiK,qFAAqF,CAAC,qBAAqB;AAAC,0JAA0J,qFAAqF,CAAC,qBAAqB;AAAC,wDAAwD,aAAa;AAAC,4DAA4D,aAAa;AAAC,oEAAoE,wBAAwB,CAAC,+BAA+B;AAAC,aAAa,oPAAoP,4CAA4C,CAAC,iKAAiK,4CAA4C,CAAC,0JAA0J,2CAA2C,CAAC;AAAC,sDAAsD,uBAAuB;AAAC,sDAAsD,aAAa,CAAC,iBAAiB;AAAC,gPAAgP,4CAA4C,CAAC,qBAAqB;AAAC,wJAAwJ,4CAA4C,CAAC,qBAAqB;AAAC,yDAAyD,mBAAmB;AAAC,yDAAyD,aAAa,CAAC,kBAAkB;AAAC,sPAAsP,4CAA4C,CAAC,qBAAqB;AAAC,2JAA2J,4CAA4C,CAAC,qBAAqB;AAAC,4CAA4C,cAAc;AAAC,gEAAgE,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB;AAAC,8FAA8F,cAAc;AAAC,wBAAwB,oBAAoB;AAAC,eAAe,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,4DAA4D,gDAAgD,CAAC,cAAc;AAAC,kBAAkB,gDAAgD;AAAC,YAAY,gDAAgD;AAAC,oBAAoB,cAAc;AAAC,0BAA0B,gDAAgD;AAAC,6BAA6B,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,8CAA8C,gDAAgD;AAAC,gBAAgB,cAAc,CAAC,eAAe;AAAC,0BAA0B,kBAAkB;AAAC,sBAAsB,cAAc;AAAC,yBAAyB,cAAc,CAAC,eAAe;AAAC,eAAe,gDAAgD;AAAC,6BAA6B,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,6GAA6G,uDAAuD,CAAC,qBAAqB,CAAC,QAAQ;AAAC,aAAa,gDAAgD,CAAC,cAAc,CAAC,eAAe,CAAC,kBAAkB;AAAC,qBAAqB,cAAc,CAAC,eAAe,CAAC,kBAAkB;AAAC,eAAe,gDAAgD;AAAC,iBAAiB,gDAAgD;AAAC,8BAA8B,cAAc;AAAC,wCAAwC,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB;AAAC,uDAAuD,cAAc;AAAC,gCAAgC,cAAc;AAAC,0CAA0C,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB;AAAC,yDAAyD,cAAc;AAAC,8BAA8B,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,qCAAqC,cAAc;AAAC,+CAA+C,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB;AAAC,8DAA8D,cAAc;AAAC,uCAAuC,cAAc;AAAC,iDAAiD,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,qBAAqB;AAAC,gEAAgE,cAAc;AAAC,qCAAqC,gDAAgD,CAAC,cAAc,CAAC,eAAe;AAAC,YAAY,gDAAgD,CAAC,cAAc;AAAC,oBAAoB,uDAAuD,CAAC,qBAAqB;AAAC,qBAAqB,gDAAgD,CAAC,cAAc;AAAC,4BAA4B,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,eAAe;AAAC,UAAU,gDAAgD;AAAC,qCAAqC,eAAe,CAAC,cAAc;AAAC,YAAY,eAAe,CAAC,iBAAiB;AAAC,wBAAwB,uBAAuB;AAAC,iCAAiC,gBAAgB;AAAC,oBAAoB,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,2DAA2D,CAAC,kBAAkB;AAAC,8CAA8C,YAAY;AAAC,qBAAqB,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,uBAAuB,CAAC,oBAAoB;AAAC,mDAAmD,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU;AAAC,uBAAuB,cAAc,CAAC,YAAY;AAAC,6BAA6B,YAAY;AAAC,4BAA4B,YAAY,CAAC,iBAAiB,CAAC,YAAY;AAAC,kBAAkB,iBAAiB,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe;AAAC,sBAAsB,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,uCAAuC,CAAC,yDAAyD,CAAC,SAAS;AAAC,mDAAmD,SAAS;AAAC,6EAA6E,UAAU;AAAC,2BAA2B,0BAA0B;AAAC,iGAAiG,SAAS;AAAC,6CAA6C,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,qBAAqB,CAAC,aAAa,CAAC,cAAc;AAAC,wBAAwB,cAAc,CAAC,UAAU,CAAC,iBAAiB;AAAC,+BAA+B,WAAW;AAAC,yCAAyC,wBAAwB,CAAC,iCAAiC,CAAC,sBAAsB,CAAC,0BAA0B;AAAC,iDAAiD,wBAAwB,CAAC,iCAAiC,CAAC,mBAAmB;AAAC,yCAAyC,IAAI,CAAC;AAAC,uCAAuC,IAAI,CAAC;AAAC,oDAAoD,8CAA8C;AAAC,0DAA0D,4CAA4C;AAAC,qBAAqB,iBAAiB;AAAC,yBAAyB,iBAAiB;AAAC,oBAAoB,+BAA+B;AAAC,YAAY,qBAAqB;AAAC,wFAAwF,0BAA0B;AAAC,6EAA6E,0BAA0B;AAAC,uBAAuB,0BAA0B,CAAC,qBAAqB;AAAC,gCAAgC,qBAAqB;AAAC,gEAAgE,aAAa;AAAC,+DAA+D,aAAa;AAAC,6DAA6D,aAAa;AAAC,oBAAoB,qBAAqB;AAAC,2CAA2C,qBAAqB;AAAC,qBAAqB,qBAAqB;AAAC,4BAA4B,aAAa;AAAC,8BAA8B,aAAa;AAAC,0FAA0F,kBAAkB;AAAC,wJAAwJ,kBAAkB;AAAC,oFAAoF,kBAAkB;AAAC,0HAA0H,kBAAkB;AAAC,oBAAoB,wBAAwB,CAAC,qBAAqB;AAAC,kBAAkB,qHAAqH;AAAC,kBAAkB,sHAAsH;AAAC,kBAAkB,sHAAsH;AAAC,kBAAkB,sHAAsH;AAAC,kBAAkB,uHAAuH;AAAC,kBAAkB,uHAAuH;AAAC,kBAAkB,wHAAwH;AAAC,kBAAkB,wHAAwH;AAAC,kBAAkB,wHAAwH;AAAC,kBAAkB,wHAAwH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,yHAAyH;AAAC,mBAAmB,0HAA0H;AAAC,mBAAmB,0HAA0H;AAAC,mBAAmB,0HAA0H;AAAC,mBAAmB,0HAA0H;AAAC,mBAAmB,2HAA2H;AAAC,mBAAmB,2HAA2H;AAAC,mBAAmB,2HAA2H;AAAC,mBAAmB,2HAA2H;AAAC,mBAAmB,2HAA2H;AAAC,yBAAyB,YAAY;AAAC,wBAAwB,eAAe,CAAC,qBAAqB;AAAC,sDAAsD,uHAAuH;AAAC,8EAA8E,eAAe;AAAC,wGAAwG,qBAAqB;AAAC,WAAW,iBAAiB;AAAC,qCAAqC,YAAY;AAAC,mBAAmB,iBAAiB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,mBAAmB;AAAC,mFAAmF,eAAe;AAAC,oCAAoC,cAAc;AAAC,oCAAoC,UAAU,CAAC,WAAW,CAAC,gBAAgB;AAAC,oDAAoD,QAAQ;AAAC,oDAAoD,WAAW;AAAC,qDAAqD,UAAU;AAAC,+DAA+D,SAAS,CAAC,WAAW;AAAC,oDAAoD,WAAW;AAAC,8DAA8D,UAAU,CAAC,UAAU;AAAC,uEAAuE,SAAS;AAAC,iFAAiF,SAAS,CAAC,UAAU;AAAC,sEAAsE,UAAU;AAAC,gFAAgF,UAAU,CAAC,SAAS;AAAC,qCAAqC,UAAU,CAAC,WAAW,CAAC,gBAAgB;AAAC,qDAAqD,SAAS;AAAC,qDAAqD,YAAY;AAAC,sDAAsD,UAAU;AAAC,gEAAgE,SAAS,CAAC,WAAW;AAAC,qDAAqD,WAAW;AAAC,+DAA+D,UAAU,CAAC,UAAU;AAAC,wEAAwE,UAAU;AAAC,kFAAkF,SAAS,CAAC,WAAW;AAAC,uEAAuE,WAAW;AAAC,iFAAiF,UAAU,CAAC,UAAU;AAAC,oCAAoC,UAAU,CAAC,WAAW,CAAC,gBAAgB;AAAC,oDAAoD,SAAS;AAAC,oDAAoD,YAAY;AAAC,qDAAqD,UAAU;AAAC,+DAA+D,SAAS,CAAC,WAAW;AAAC,oDAAoD,WAAW;AAAC,8DAA8D,UAAU,CAAC,UAAU;AAAC,uEAAuE,UAAU;AAAC,iFAAiF,SAAS,CAAC,WAAW;AAAC,sEAAsE,WAAW;AAAC,gFAAgF,UAAU,CAAC,UAAU;AAAC,mBAAmB,UAAU,CAAC,kBAAkB;AAAC,6CAA6C,iBAAiB,CAAC,eAAe;AAAC,qCAAqC,kBAAkB,CAAC,qBAAqB;AAAC,mCAAmC,UAAU,CAAC,kBAAkB;AAAC,uCAAuC,kBAAkB,CAAC,qBAAqB;AAAC,4BAA4B,0HAA0H,CAAC,eAAe,CAAC,qBAAqB;AAAC,iDAAiD,aAAa,CAAC,sBAAsB;AAAC,qFAAqF,aAAa;AAAC,kFAAkF,aAAa;AAAC,4EAA4E,aAAa;AAAC,glBAAglB,qBAAqB;AAAC,mKAAmK,wBAAwB;AAAC,gKAAgK,wBAAwB;AAAC,0JAA0J,wBAAwB;AAAC,2LAA2L,4BAA4B;AAAC,6GAA6G,UAAU,CAAC,6BAA6B;AAAC,0BAA0B,eAAe;AAAC,8CAA8C,4BAA4B;AAAC,2DAA2D,qBAAqB,CAAC,qBAAqB;AAAC,2GAA2G,UAAU;AAAC,uGAAuG,qBAAqB;AAAC,+FAA+F,UAAU;AAAC,4vBAA4vB,qBAAqB;AAAC,2GAA2G,wBAAwB;AAAC,uGAAuG,wBAAwB;AAAC,+FAA+F,wBAAwB;AAAC,4vBAA4vB,gCAAgC;AAAC,2LAA2L,qCAAqC;AAAC,uLAAuL,+BAA+B;AAAC,+KAA+K,qCAAqC;AAAC,iGAAiG,qHAAqH;AAAC,iDAAiD,sHAAsH;AAAC,kFAAkF,wHAAwH;AAAC,qEAAqE,qHAAqH;AAAC,mFAAmF,wHAAwH;AAAC,qJAAqJ,yHAAyH;AAAC,2HAA2H,qHAAqH;AAAC,uDAAuD,sHAAsH;AAAC,iHAAiH,eAAe;AAAC,mBAAmB,qBAAqB;AAAC,oDAAoD,gCAAgC;AAAC,uCAAuC,qBAAqB,CAAC,eAAe;AAAC,wEAAwE,qBAAqB;AAAC,mFAAmF,qCAAqC;AAAC,6FAA6F,gBAAgB,CAAC,sCAAsC;AAAC,8GAA8G,gBAAgB,CAAC,iBAAiB,CAAC,oCAAoC;AAAC,2BAA2B,wBAAwB,CAAC,qBAAqB;AAAC,iEAAiE,qBAAqB;AAAC,4BAA4B,qBAAqB,CAAC,qBAAqB;AAAC,kEAAkE,eAAe;AAAC,sDAAsD,wBAAwB;AAAC,iHAAiH,gCAAgC;AAAC,wEAAwE,gBAAgB;AAAC,UAAU,eAAe,CAAC,qBAAqB;AAAC,wCAAwC,sHAAsH;AAAC,sDAAsD,qHAAqH;AAAC,mBAAmB,qBAAqB;AAAC,oBAAoB,4BAA4B;AAAC,wBAAwB,YAAY;AAAC,6BAA6B,yBAAyB;AAAC,wBAAwB,wBAAwB;AAAC,4HAA4H,wBAAwB;AAAC,0HAA0H,wBAAwB;AAAC,sHAAsH,wBAAwB;AAAC,gJAAgJ,wBAAwB;AAAC,sEAAsE,oBAAoB;AAAC,2CAA2C,qBAAqB;AAAC,kCAAkC,qBAAqB;AAAC,mKAAmK,kBAAkB;AAAC,iKAAiK,kBAAkB;AAAC,6JAA6J,kBAAkB;AAAC,4BAA4B,wBAAwB,CAAC,qBAAqB;AAAC,6CAA6C,qBAAqB,CAAC,UAAU;AAAC,2DAA2D,sHAAsH;AAAC,2EAA2E,WAAW;AAAC,8CAA8C,UAAU;AAAC,mCAAmC,eAAe;AAAC,0DAA0D,wBAAwB,CAAC,UAAU;AAAC,2EAA2E,UAAU,CAAC,UAAU;AAAC,8EAA8E,qCAAqC;AAAC,uDAAuD,wBAAwB,CAAC,UAAU;AAAC,wEAAwE,UAAU,CAAC,UAAU;AAAC,2EAA2E,qCAAqC;AAAC,yDAAyD,wBAAwB,CAAC,qBAAqB;AAAC,0EAA0E,qBAAqB,CAAC,UAAU;AAAC,6EAA6E,+BAA+B;AAAC,WAAW,eAAe;AAAC,uJAAuJ,kBAAkB;AAAC,wFAAwF,mCAAmC;AAAC,iBAAiB,qBAAqB;AAAC,2BAA2B,qBAAqB;AAAC,oBAAoB,oBAAoB;AAAC,+HAA+H,qBAAqB;AAAC,0CAA0C,0BAA0B;AAAC,oDAAoD,qBAAqB;AAAC,gEAAgE,qBAAqB,CAAC,wBAAwB;AAAC,0IAA0I,qBAAqB;AAAC,yDAAyD,qBAAqB;AAAC,8BAA8B,qBAAqB;AAAC,uGAAuG,4BAA4B;AAAC,mIAAmI,4BAA4B;AAAC,oCAAoC,8BAA8B;AAAC,uFAAuF,6BAA6B;AAAC,8GAA8G,6FAA6F;AAAC,8GAA8G,4FAA4F;AAAC,6IAA6I,kBAAkB;AAAC,sIAAsI,kBAAkB;AAAC,4BAA4B,wBAAwB,CAAC,UAAU;AAAC,wDAAwD,oCAAoC;AAAC,oDAAoD,+BAA+B;AAAC,weAAwe,oCAAoC;AAAC,wBAAwB,uHAAuH,CAAC,qBAAqB,CAAC,qBAAqB;AAAC,uEAAuE,8BAA8B;AAAC,6JAA6J,6BAA6B;AAAC,oLAAoL,6FAA6F;AAAC,oLAAoL,4FAA4F;AAAC,mNAAmN,kBAAkB;AAAC,4MAA4M,kBAAkB;AAAC,+DAA+D,wBAAwB,CAAC,qBAAqB;AAAC,2FAA2F,oCAAoC;AAAC,uFAAuF,0CAA0C;AAAC,ilBAAilB,oCAAoC;AAAC,qEAAqE,6BAA6B;AAAC,yJAAyJ,6BAA6B;AAAC,gLAAgL,4FAA4F;AAAC,gLAAgL,2FAA2F;AAAC,+MAA+M,kBAAkB;AAAC,wMAAwM,kBAAkB;AAAC,6DAA6D,wBAAwB,CAAC,UAAU;AAAC,yFAAyF,mCAAmC;AAAC,qFAAqF,+BAA+B;AAAC,2kBAA2kB,mCAAmC;AAAC,8BAA8B,2HAA2H;AAAC,8BAA8B,aAAa;AAAC,yCAAyC,aAAa;AAAC,uCAAuC,aAAa;AAAC,sCAAsC,qBAAqB;AAAC,sBAAsB,2HAA2H,CAAC,eAAe,CAAC,qBAAqB;AAAC,aAAa,gCAAgC;AAAC,sBAAsB,kCAAkC;AAAC,qBAAqB,eAAe,CAAC,qBAAqB;AAAC,mDAAmD,sHAAsH;AAAC,gBAAgB,gCAAgC;AAAC,mSAAmS,0BAA0B;AAAC,oBAAoB,oGAAoG,eAAe,CAAC;AAAC,kCAAkC,qBAAqB;AAAC,wEAAwE,qBAAqB;AAAC,gDAAgD,qBAAqB;AAAC,0KAA0K,aAAa;AAAC,4BAA4B,WAAW;AAAC,yCAAyC,WAAW;AAAC,sBAAsB,oBAAoB;AAAC,UAAU,oBAAoB;AAAC,kDAAkD,aAAa;AAAC,6DAA6D,aAAa;AAAC,2DAA2D,aAAa;AAAC,6CAA6C,aAAa;AAAC,uBAAuB,gCAAgC;AAAC,mDAAmD,wBAAwB;AAAC,8DAA8D,wBAAwB;AAAC,4DAA4D,wBAAwB;AAAC,6GAA6G,aAAa;AAAC,wHAAwH,aAAa;AAAC,sHAAsH,aAAa;AAAC,6DAA6D,aAAa;AAAC,qKAAqK,aAAa;AAAC,uIAAuI,wBAAwB;AAAC,WAAW,aAAa;AAAC,wDAAwD,qBAAqB;AAAC,4CAA4C,qBAAqB;AAAC,4DAA4D,gCAAgC;AAAC,oFAAoF,2GAA2G,CAAC,wBAAwB,CAAC,0BAA0B;AAAC,8DAA8D,gCAAgC;AAAC,sFAAsF,2GAA2G,CAAC,wBAAwB,CAAC,0BAA0B;AAAC,qDAAqD,gCAAgC;AAAC,6EAA6E,gCAAgC;AAAC,kEAAkE,gCAAgC;AAAC,8EAA8E,qBAAqB;AAAC,0FAA0F,4BAA4B;AAAC,2DAA2D,qBAAqB;AAAC,iEAAiE,qBAAqB;AAAC,6EAA6E,aAAa;AAAC,wFAAwF,aAAa;AAAC,sFAAsF,aAAa;AAAC,+GAA+G,aAAa;AAAC,iFAAiF,qBAAqB;AAAC,mFAAmF,qBAAqB;AAAC,sBAAsB,aAAa;AAAC,qBAAqB,aAAa;AAAC,mBAAmB,aAAa;AAAC,oEAAoE,qBAAqB;AAAC,wHAAwH,qBAAqB;AAAC,mBAAmB,mBAAmB;AAAC,gCAAgC,qBAAqB;AAAC,qCAAqC,qBAAqB;AAAC,8CAA8C,qBAAqB;AAAC,yCAAyC,qBAAqB;AAAC,8CAA8C,mBAAmB;AAAC,uFAAuF,mBAAmB;AAAC,2FAA2F,aAAa;AAAC,8BAA8B,qBAAqB;AAAC,gCAAgC,qBAAqB;AAAC,8BAA8B,qBAAqB;AAAC,wBAAwB,qBAAqB;AAAC,gMAAgM,0BAA0B;AAAC,+GAA+G,0BAA0B;AAAC,gBAAgB,eAAe;AAAC,8CAA8C,uHAAuH;AAAC,eAAe,sBAAsB,CAAC,qBAAqB;AAAC,qHAAqH,qBAAqB;AAAC,yDAAyD,qBAAqB;AAAC,uLAAuL,0BAA0B;AAAC,eAAe,eAAe;AAAC,4DAA4D,qBAAqB;AAAC,kDAAkD,oCAAoC,CAAC,sCAAsC;AAAC,yCAAyC,oCAAoC;AAAC,uMAAuM,4BAA4B;AAAC,yBAAyB,eAAe;AAAC,6BAA6B,YAAY;AAAC,yBAAyB,wBAAwB;AAAC,8BAA8B,wBAAwB;AAAC,0DAA0D,YAAY;AAAC,sDAAsD,wBAAwB;AAAC,2DAA2D,wBAAwB;AAAC,wDAAwD,YAAY;AAAC,oDAAoD,wBAAwB;AAAC,yDAAyD,wBAAwB;AAAC,iDAAiD,cAAc;AAAC,uEAAuE,cAAc;AAAC,mEAAmE,cAAc;AAAC,wBAAwB,4BAA4B;AAAC,wEAAwE,oBAAoB;AAAC,2SAA2S,wBAAwB;AAAC,uEAAuE,oBAAoB;AAAC,uSAAuS,wBAAwB;AAAC,qEAAqE,oBAAoB;AAAC,+RAA+R,wBAAwB;AAAC,4IAA4I,4BAA4B;AAAC,wIAAwI,gCAAgC;AAAC,8DAA8D,qBAAqB;AAAC,sCAAsC,qBAAqB;AAAC,kBAAkB,qBAAqB;AAAC,wBAAwB,qBAAqB;AAAC,uCAAuC,qBAAqB;AAAC,kBAAkB,qBAAqB;AAAC,kBAAkB,eAAe;AAAC,gDAAgD,uHAAuH;AAAC,qEAAqE,0BAA0B;AAAC,0DAA0D,aAAa;AAAC,yDAAyD,aAAa;AAAC,uDAAuD,aAAa;AAAC,iEAAiE,aAAa;AAAC,kEAAkE,qBAAqB;AAAC,sBAAsB,wBAAwB,CAAC,qBAAqB;AAAC,YAAY,qBAAqB,CAAC,qBAAqB;AAAC,4BAA4B,qBAAqB;AAAC,kCAAkC,0HAA0H;AAAC,iBAAiB,sCAAsC;AAAC,gCAAgC,qCAAqC,CAAC,iBAAiB;AAAC,2BAA2B,qCAAqC,CAAC,iBAAiB;AAAC,0CAA0C,gBAAgB,CAAC,sCAAsC;AAAC,sCAAsC,+BAA+B;AAAC,sDAAsD,wBAAwB;AAAC,oDAAoD,qCAAqC;AAAC,kDAAkD,wBAAwB;AAAC,kEAAkE,wBAAwB;AAAC,gEAAgE,qCAAqC;AAAC,8DAA8D,wBAAwB;AAAC,+DAA+D,wBAAwB;AAAC,6DAA6D,oCAAoC;AAAC,2DAA2D,wBAAwB;AAAC,wDAAwD,qBAAqB;AAAC,wBAAwB,sHAAsH,CAAC,wBAAwB;AAAC,sBAAsB,gCAAgC;AAAC,6BAA6B,gCAAgC;AAAC,wGAAwG,wBAAwB;AAAC,0CAA0C,UAAU;AAAC,oCAAoC,oCAAoC;AAAC,qGAAqG,wBAAwB;AAAC,yCAAyC,qBAAqB;AAAC,mCAAmC,oCAAoC;AAAC,+FAA+F,wBAAwB;AAAC,uCAAuC,UAAU;AAAC,iCAAiC,mCAAmC;AAAC,oGAAoG,gCAAgC;AAAC,qIAAqI,gCAAgC;AAAC,wDAAwD,gCAAgC;AAAC,6CAA6C,gCAAgC;AAAC,oJAAoJ,gCAAgC;AAAC,4KAA4K,gCAAgC;AAAC,6EAA6E,4BAA4B,CAAC,4BAA4B;AAAC,4KAA4K,4BAA4B;AAAC,oNAAoN,4BAA4B;AAAC,iDAAiD,2BAA2B;AAAC,yCAAyC,4HAA4H,CAAC,kIAAkI;AAAC,uCAAuC,6HAA6H;AAAC,mKAAmK,gCAAgC;AAAC,2CAA2C,cAAc;AAAC,oBAAoB,uBAAuB,eAAe,CAAC;AAAC,qEAAqE,qBAAqB;AAAC,gCAAgC,gCAAgC,CAAC,UAAU;AAAC,+HAA+H,wBAAwB,CAAC,UAAU;AAAC,2CAA2C,qBAAqB;AAAC,gKAAgK,wBAAwB,CAAC,qBAAqB;AAAC,yCAAyC,UAAU;AAAC,0JAA0J,wBAAwB,CAAC,UAAU;AAAC,4CAA4C,4BAA4B,CAAC,aAAa;AAAC,uDAAuD,qBAAqB;AAAC,sDAAsD,aAAa;AAAC,8CAA8C,qBAAqB;AAAC,mCAAmC,iCAAiC;AAAC,0GAA0G,gCAAgC;AAAC,+BAA+B,WAAW;AAAC,+FAA+F,iBAAiB;AAAC,mCAAmC,SAAS,CAAC,YAAY;AAAC,mJAAmJ,QAAQ;AAAC,gEAAgE,QAAQ;AAAC,uBAAuB,aAAa;AAAC,iCAAiC,uCAAuC;AAAC,+FAA+F,oCAAoC,CAAC,kBAAkB;AAAC,6BAA6B,qBAAqB;AAAC,+DAA+D,qBAAqB;AAAC,mCAAmC,4BAA4B;AAAC,uEAAuE,4BAA4B;AAAC,gGAAgG,kBAAkB,CAAC,eAAe;AAAC,grBAAgrB,qCAAqC;AAAC,kFAAkF,wBAAwB;AAAC,gVAAgV,qBAAqB;AAAC,wqBAAwqB,qCAAqC;AAAC,gFAAgF,wBAAwB;AAAC,wUAAwU,gCAAgC;AAAC,wpBAAwpB,qCAAqC;AAAC,4EAA4E,wBAAwB;AAAC,wTAAwT,qBAAqB;AAAC,wwBAAwwB,qCAAqC;AAAC,gXAAgX,wBAAwB;AAAC,sSAAsS,UAAU;AAAC,0WAA0W,0BAA0B;AAAC,8tBAA8tB,iBAAiB;AAAC,wdAAwd,iBAAiB,CAAC,UAAU;AAAC,weAAwe,qBAAqB,CAAC,WAAW;AAAC,gwBAAgwB,qCAAqC;AAAC,0WAA0W,wBAAwB;AAAC,kSAAkS,qBAAqB;AAAC,sWAAsW,oBAAoB;AAAC,stBAAstB,4BAA4B;AAAC,odAAod,iBAAiB,CAAC,UAAU;AAAC,keAAke,qBAAqB,CAAC,WAAW;AAAC,gvBAAgvB,qCAAqC;AAAC,8VAA8V,wBAAwB;AAAC,0RAA0R,UAAU;AAAC,8VAA8V,0BAA0B;AAAC,ssBAAssB,iBAAiB;AAAC,4cAA4c,iBAAiB,CAAC,UAAU;AAAC,sdAAsd,qBAAqB,CAAC,WAAW;AAAC,aAAa,kBAAkB,CAAC,qBAAqB;AAAC,yBAAyB,kBAAkB,CAAC,UAAU;AAAC,wBAAwB,kBAAkB,CAAC,qBAAqB;AAAC,sBAAsB,kBAAkB,CAAC,UAAU;AAAC,4HAA4H,6BAA6B;AAAC,4MAA4M,aAAa;AAAC,gCAAgC,wBAAwB;AAAC,2BAA2B,eAAe;AAAC,yCAAyC,WAAW;AAAC,yBAAyB,2BAA2B,eAAe,CAAC,yCAAyC,WAAW,CAAC;AAAC,aAAa,4BAA4B;AAAC,UAAU,eAAe;AAAC,qCAAqC,qBAAqB;AAAC,eAAe,eAAe;AAAC,yBAAyB,0BAA0B,CAAC,kBAAkB,CAAC,wHAAwH;AAAC,4BAA4B,aAAa;ADGxt3E;EAAa;AACb;AAAA;EAAO;EAAW;AAKlB;AAHA;EACE;EACA;EACA;AAMF;AAJA;;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAOF;AALA;;EAEE;AAQF;AALA;EACE;EACA;EACA;AAQF;AALA;EACE;AAQF;AALA;EACE;AAQF,C","sources":["./node_modules/@angular/material/prebuilt-themes/indigo-pink.css","./src/styles.scss","./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css"],"sourcesContent":[".mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-card{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(0.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(0.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-0.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(0.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-0.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59374em) scale(0.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-0.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(0.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-0.0625em}.mat-menu-item{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-select{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:normal}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-list-option{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-mdc-focus-indicator{position:relative}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#3f51b5}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ff4081}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#3f51b5}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#ff4081}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-badge-content{color:#fff;background:#3f51b5}.cdk-high-contrast-active .mat-badge-content{outline:solid 1px;border-radius:0}.mat-badge-accent .mat-badge-content{background:#ff4081;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#3f51b5}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ff4081}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#3f51b5}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ff4081}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,.87);background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:#fff}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#3f51b5}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#ff4081}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#f44336}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{background-color:rgba(0,0,0,.12)}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-stroked-button:not([class*=mat-elevation-z]),.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card:not([class*=mat-elevation-z]){box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#3f51b5}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#ff4081}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#3f51b5}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ff4081}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#3f51b5;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ff4081;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)}.mat-calendar-arrow{fill:rgba(0,0,0,.54)}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,.12)}.mat-calendar-table-header,.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:rgba(0,0,0,.38)}.mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)}.mat-calendar-body-in-preview{color:rgba(0,0,0,.24)}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)}.mat-calendar-body-in-range::before{background:rgba(63,81,181,.2)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(63, 81, 181, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(63, 81, 181, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-calendar-body-selected{background-color:#3f51b5;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(63,81,181,.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(63,81,181,.3)}.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12);background-color:#fff;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range::before{background:rgba(255,64,129,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(255, 64, 129, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(255, 64, 129, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ff4081;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,64,129,.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(255,64,129,.3)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range::before{background:rgba(244,67,54,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.mat-datepicker-content-touch{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-datepicker-toggle-active{color:#3f51b5}.mat-datepicker-toggle-active.mat-accent{color:#ff4081}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)}.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-form-field-label{color:rgba(0,0,0,.6)}.mat-hint{color:rgba(0,0,0,.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ff4081}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ff4081}.mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ff4081}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#3f51b5}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#ff4081}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#3f51b5}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ff4081}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.mat-icon.mat-primary{color:#3f51b5}.mat-icon.mat-accent{color:#ff4081}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,.54)}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,.38)}.mat-input-element{caret-color:#3f51b5}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-form-field.mat-accent .mat-input-element{caret-color:#ff4081}.mat-form-field.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#f44336}.mat-list-base .mat-list-item{color:rgba(0,0,0,.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,.04)}.mat-list-single-selected-option,.mat-list-single-selected-option:hover,.mat-list-single-selected-option:focus{background:rgba(0,0,0,.12)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-menu-submenu-icon,.mat-menu-item[disabled] .mat-icon-no-color{color:rgba(0,0,0,.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-submenu-icon{color:rgba(0,0,0,.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.mat-paginator-container{min-height:56px}.mat-progress-bar-background{fill:#cbd0e9}.mat-progress-bar-buffer{background-color:#cbd0e9}.mat-progress-bar-fill::after{background-color:#3f51b5}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#fbccdc}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#ff4081}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#3f51b5}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ff4081}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#3f51b5}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#3f51b5}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff4081}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ff4081}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#3f51b5}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ff4081}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ff4081}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,64,129,.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ff4081}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#3f51b5}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(63,81,181,.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#3f51b5}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#3f51b5}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-primary .mat-slider-focus-ring{background-color:rgba(63,81,181,.2)}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#ff4081}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-focus-ring{background-color:rgba(255,64,129,.2)}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.mat-slider:hover .mat-slider-track-background,.mat-slider.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:rgba(0,0,0,.04)}.mat-step-header:hover[aria-disabled=true]{cursor:default}@media(hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#3f51b5;color:#fff}.mat-step-header.mat-accent .mat-step-icon{color:#fff}.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ff4081;color:#fff}.mat-step-header.mat-warn .mat-step-icon{color:#fff}.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px 24px}.mat-stepper-vertical-line::before{top:-16px;bottom:-16px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before{top:36px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-]>.mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#3f51b5}.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ff4081}.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination{background-color:#3f51b5}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-primary>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination{background-color:#ff4081}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-accent>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination{background-color:#f44336}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-warn>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#3f51b5;color:#fff}.mat-toolbar.mat-accent{background:#ff4081;color:#fff}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,.87)}.mat-tree-node{min-height:48px}.mat-snack-bar-container{color:rgba(255,255,255,.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-simple-snackbar-action{color:#ff4081}\n","/* You can add global styles to this file, and also import other style files */\n@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';\n\nhtml, body { height: 100%; }\nbody { margin: 0; font-family: Roboto, \"Helvetica Neue\", sans-serif; }\n\n.mat-table {\n overflow-x: scroll;\n display: table;\n width: 100%;\n}\n.mat-cell,\n.mat-header-cell {\n word-wrap: initial;\n display: table-cell;\n padding: 0px 4px 4px 4px;\n line-break: unset;\n width: auto; \n white-space: nowrap;\n overflow: hidden;\n vertical-align: middle;\n}\n.mat-row,\n.mat-header-row {\n display: table-row;\n}\n\n.mat-mdc-row .mat-mdc-cell {\n border-bottom: 1px solid transparent;\n border-top: 1px solid transparent;\n cursor: pointer;\n}\n\n.mat-mdc-row:hover .mat-mdc-cell {\n border-color: currentColor;\n}\n\n.demo-row-is-clicked {\n font-weight: bold;\n}",".mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:-0.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-card{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(0.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(0.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-0.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(0.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(0.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-0.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-0.59374em) scale(0.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-0.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(0.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(0.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-0.0625em}.mat-menu-item{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-select{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:normal}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-list-option{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto, \"Helvetica Neue\", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto, \"Helvetica Neue\", sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-mdc-focus-indicator{position:relative}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#673ab7}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffd740}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#673ab7}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#ffd740}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-badge-content{color:#fff;background:#673ab7}.cdk-high-contrast-active .mat-badge-content{outline:solid 1px;border-radius:0}.mat-badge-accent .mat-badge-content{background:#ffd740;color:rgba(0,0,0,.87)}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#673ab7}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ffd740}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#673ab7}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ffd740}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,.87);background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:rgba(0,0,0,.87)}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#673ab7}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#ffd740}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#f44336}.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled{background-color:rgba(0,0,0,.12)}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-stroked-button:not([class*=mat-elevation-z]),.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card:not([class*=mat-elevation-z]){box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#673ab7}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#ffd740}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#673ab7}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ffd740}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#673ab7;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ffd740;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)}.mat-calendar-arrow{fill:rgba(0,0,0,.54)}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,.12)}.mat-calendar-table-header,.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:rgba(0,0,0,.38)}.mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)}.mat-calendar-body-in-preview{color:rgba(0,0,0,.24)}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)}.mat-calendar-body-in-range::before{background:rgba(103,58,183,.2)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(103, 58, 183, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(103, 58, 183, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-calendar-body-selected{background-color:#673ab7;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(103,58,183,.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(103,58,183,.3)}.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12);background-color:#fff;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range::before{background:rgba(255,215,64,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(255, 215, 64, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(255, 215, 64, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ffd740;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,215,64,.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(255,215,64,.3)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range::before{background:rgba(244,67,54,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range::before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end::before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, rgba(244, 67, 54, 0.2) 50%, rgba(249, 171, 0, 0.2) 50%)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:#a8dab5}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.mat-datepicker-content-touch{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-datepicker-toggle-active{color:#673ab7}.mat-datepicker-toggle-active.mat-accent{color:#ffd740}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)}.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12);background:#fff;color:rgba(0,0,0,.87)}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-form-field-label{color:rgba(0,0,0,.6)}.mat-hint{color:rgba(0,0,0,.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#673ab7}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ffd740}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ffd740}.mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#673ab7}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ffd740}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#673ab7}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#ffd740}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#673ab7}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ffd740}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.mat-icon.mat-primary{color:#673ab7}.mat-icon.mat-accent{color:#ffd740}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,.54)}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,.38)}.mat-input-element{caret-color:#673ab7}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-form-field.mat-accent .mat-input-element{caret-color:#ffd740}.mat-form-field.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#f44336}.mat-list-base .mat-list-item{color:rgba(0,0,0,.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,.04)}.mat-list-single-selected-option,.mat-list-single-selected-option:hover,.mat-list-single-selected-option:focus{background:rgba(0,0,0,.12)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-menu-submenu-icon,.mat-menu-item[disabled] .mat-icon-no-color{color:rgba(0,0,0,.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-submenu-icon{color:rgba(0,0,0,.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.mat-paginator-container{min-height:56px}.mat-progress-bar-background{fill:#d5cae9}.mat-progress-bar-buffer{background-color:#d5cae9}.mat-progress-bar-fill::after{background-color:#673ab7}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#fbf1cc}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#fbf1cc}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#ffd740}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#f9ccc9}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#673ab7}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffd740}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#673ab7}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#673ab7}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffd740}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ffd740}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#673ab7}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffd740}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ffd740}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,215,64,.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ffd740}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#673ab7}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(103,58,183,.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#673ab7}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#673ab7}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-primary .mat-slider-focus-ring{background-color:rgba(103,58,183,.2)}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#ffd740}.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-accent .mat-slider-focus-ring{background-color:rgba(255,215,64,.2)}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.mat-slider:hover .mat-slider-track-background,.mat-slider.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:rgba(0,0,0,.04)}.mat-step-header:hover[aria-disabled=true]{cursor:default}@media(hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#673ab7;color:#fff}.mat-step-header.mat-accent .mat-step-icon{color:rgba(0,0,0,.87)}.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ffd740;color:rgba(0,0,0,.87)}.mat-step-header.mat-warn .mat-step-icon{color:#fff}.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px 24px}.mat-stepper-vertical-line::before{top:-16px;bottom:-16px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before{top:36px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-]>.mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#673ab7}.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffd740}.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)}.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination{background-color:#673ab7}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-primary>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)}.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination{background-color:#ffd740}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-accent>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-focus-indicator::before{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#000;opacity:.4}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-ripple-element{background-color:#000;opacity:.12}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination{background-color:#f44336}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-group.mat-background-warn>.mat-tab-header .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-focus-indicator::before,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-focus-indicator::before{border-color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:#fff;opacity:.4}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-ripple-element{background-color:#fff;opacity:.12}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#673ab7;color:#fff}.mat-toolbar.mat-accent{background:#ffd740;color:rgba(0,0,0,.87)}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,.87)}.mat-tree-node{min-height:48px}.mat-snack-bar-container{color:rgba(255,255,255,.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-simple-snackbar-action{color:#ffd740}\n"],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[0,2]} \ No newline at end of file diff --git a/cmd/pkgdash/assets/ui/vendor.js b/cmd/pkgdash/assets/ui/vendor.js new file mode 100644 index 0000000..06f0c46 --- /dev/null +++ b/cmd/pkgdash/assets/ui/vendor.js @@ -0,0 +1,121153 @@ +"use strict"; +(self["webpackChunkui"] = self["webpackChunkui"] || []).push([["vendor"],{ + +/***/ 6317: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/BehaviorSubject.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BehaviorSubject": () => (/* binding */ BehaviorSubject) +/* harmony export */ }); +/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subject */ 228); + +class BehaviorSubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__.Subject { + constructor(_value) { + super(); + this._value = _value; + } + + get value() { + return this.getValue(); + } + + _subscribe(subscriber) { + const subscription = super._subscribe(subscriber); + + !subscription.closed && subscriber.next(this._value); + return subscription; + } + + getValue() { + const { + hasError, + thrownError, + _value + } = this; + + if (hasError) { + throw thrownError; + } + + this._throwIfClosed(); + + return _value; + } + + next(value) { + super.next(this._value = value); + } + +} + +/***/ }), + +/***/ 3279: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/NotificationFactories.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "COMPLETE_NOTIFICATION": () => (/* binding */ COMPLETE_NOTIFICATION), +/* harmony export */ "createNotification": () => (/* binding */ createNotification), +/* harmony export */ "errorNotification": () => (/* binding */ errorNotification), +/* harmony export */ "nextNotification": () => (/* binding */ nextNotification) +/* harmony export */ }); +const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined))(); +function errorNotification(error) { + return createNotification('E', undefined, error); +} +function nextNotification(value) { + return createNotification('N', value, undefined); +} +function createNotification(kind, value, error) { + return { + kind, + value, + error + }; +} + +/***/ }), + +/***/ 833: +/*!***********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/Observable.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Observable": () => (/* binding */ Observable) +/* harmony export */ }); +/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subscriber */ 9904); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Subscription */ 6078); +/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/observable */ 4585); +/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/pipe */ 629); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config */ 9057); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/isFunction */ 2971); +/* harmony import */ var _util_errorContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/errorContext */ 2309); + + + + + + + +class Observable { + constructor(subscribe) { + if (subscribe) { + this._subscribe = subscribe; + } + } + + lift(operator) { + const observable = new Observable(); + observable.source = this; + observable.operator = operator; + return observable; + } + + subscribe(observerOrNext, error, complete) { + const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.SafeSubscriber(observerOrNext, error, complete); + (0,_util_errorContext__WEBPACK_IMPORTED_MODULE_1__.errorContext)(() => { + const { + operator, + source + } = this; + subscriber.add(operator ? operator.call(subscriber, source) : source ? this._subscribe(subscriber) : this._trySubscribe(subscriber)); + }); + return subscriber; + } + + _trySubscribe(sink) { + try { + return this._subscribe(sink); + } catch (err) { + sink.error(err); + } + } + + forEach(next, promiseCtor) { + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor((resolve, reject) => { + let subscription; + subscription = this.subscribe(value => { + try { + next(value); + } catch (err) { + reject(err); + subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe(); + } + }, reject, resolve); + }); + } + + _subscribe(subscriber) { + var _a; + + return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber); + } + + [_symbol_observable__WEBPACK_IMPORTED_MODULE_2__.observable]() { + return this; + } + + pipe(...operations) { + return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_3__.pipeFromArray)(operations)(this); + } + + toPromise(promiseCtor) { + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor((resolve, reject) => { + let value; + this.subscribe(x => value = x, err => reject(err), () => resolve(value)); + }); + } + +} + +Observable.create = subscribe => { + return new Observable(subscribe); +}; + +function getPromiseCtor(promiseCtor) { + var _a; + + return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : _config__WEBPACK_IMPORTED_MODULE_4__.config.Promise) !== null && _a !== void 0 ? _a : Promise; +} + +function isObserver(value) { + return value && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_5__.isFunction)(value.next) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_5__.isFunction)(value.error) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_5__.isFunction)(value.complete); +} + +function isSubscriber(value) { + return value && value instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber || isObserver(value) && (0,_Subscription__WEBPACK_IMPORTED_MODULE_6__.isSubscription)(value); +} + +/***/ }), + +/***/ 6067: +/*!**************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/ReplaySubject.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReplaySubject": () => (/* binding */ ReplaySubject) +/* harmony export */ }); +/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subject */ 228); +/* harmony import */ var _scheduler_dateTimestampProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scheduler/dateTimestampProvider */ 7654); + + +class ReplaySubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__.Subject { + constructor(_bufferSize = Infinity, _windowTime = Infinity, _timestampProvider = _scheduler_dateTimestampProvider__WEBPACK_IMPORTED_MODULE_1__.dateTimestampProvider) { + super(); + this._bufferSize = _bufferSize; + this._windowTime = _windowTime; + this._timestampProvider = _timestampProvider; + this._buffer = []; + this._infiniteTimeWindow = true; + this._infiniteTimeWindow = _windowTime === Infinity; + this._bufferSize = Math.max(1, _bufferSize); + this._windowTime = Math.max(1, _windowTime); + } + + next(value) { + const { + isStopped, + _buffer, + _infiniteTimeWindow, + _timestampProvider, + _windowTime + } = this; + + if (!isStopped) { + _buffer.push(value); + + !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime); + } + + this._trimBuffer(); + + super.next(value); + } + + _subscribe(subscriber) { + this._throwIfClosed(); + + this._trimBuffer(); + + const subscription = this._innerSubscribe(subscriber); + + const { + _infiniteTimeWindow, + _buffer + } = this; + + const copy = _buffer.slice(); + + for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) { + subscriber.next(copy[i]); + } + + this._checkFinalizedStatuses(subscriber); + + return subscription; + } + + _trimBuffer() { + const { + _bufferSize, + _timestampProvider, + _buffer, + _infiniteTimeWindow + } = this; + const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize; + _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize); + + if (!_infiniteTimeWindow) { + const now = _timestampProvider.now(); + + let last = 0; + + for (let i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) { + last = i; + } + + last && _buffer.splice(0, last + 1); + } + } + +} + +/***/ }), + +/***/ 5014: +/*!**********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/Scheduler.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Scheduler": () => (/* binding */ Scheduler) +/* harmony export */ }); +/* harmony import */ var _scheduler_dateTimestampProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scheduler/dateTimestampProvider */ 7654); + +class Scheduler { + constructor(schedulerActionCtor, now = Scheduler.now) { + this.schedulerActionCtor = schedulerActionCtor; + this.now = now; + } + + schedule(work, delay = 0, state) { + return new this.schedulerActionCtor(this, work).schedule(state, delay); + } + +} +Scheduler.now = _scheduler_dateTimestampProvider__WEBPACK_IMPORTED_MODULE_0__.dateTimestampProvider.now; + +/***/ }), + +/***/ 228: +/*!********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/Subject.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnonymousSubject": () => (/* binding */ AnonymousSubject), +/* harmony export */ "Subject": () => (/* binding */ Subject) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Observable */ 833); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Subscription */ 6078); +/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/ObjectUnsubscribedError */ 9872); +/* harmony import */ var _util_arrRemove__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/arrRemove */ 9663); +/* harmony import */ var _util_errorContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/errorContext */ 2309); + + + + + +class Subject extends _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable { + constructor() { + super(); + this.closed = false; + this.observers = []; + this.isStopped = false; + this.hasError = false; + this.thrownError = null; + } + + lift(operator) { + const subject = new AnonymousSubject(this, this); + subject.operator = operator; + return subject; + } + + _throwIfClosed() { + if (this.closed) { + throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__.ObjectUnsubscribedError(); + } + } + + next(value) { + (0,_util_errorContext__WEBPACK_IMPORTED_MODULE_2__.errorContext)(() => { + this._throwIfClosed(); + + if (!this.isStopped) { + const copy = this.observers.slice(); + + for (const observer of copy) { + observer.next(value); + } + } + }); + } + + error(err) { + (0,_util_errorContext__WEBPACK_IMPORTED_MODULE_2__.errorContext)(() => { + this._throwIfClosed(); + + if (!this.isStopped) { + this.hasError = this.isStopped = true; + this.thrownError = err; + const { + observers + } = this; + + while (observers.length) { + observers.shift().error(err); + } + } + }); + } + + complete() { + (0,_util_errorContext__WEBPACK_IMPORTED_MODULE_2__.errorContext)(() => { + this._throwIfClosed(); + + if (!this.isStopped) { + this.isStopped = true; + const { + observers + } = this; + + while (observers.length) { + observers.shift().complete(); + } + } + }); + } + + unsubscribe() { + this.isStopped = this.closed = true; + this.observers = null; + } + + get observed() { + var _a; + + return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0; + } + + _trySubscribe(subscriber) { + this._throwIfClosed(); + + return super._trySubscribe(subscriber); + } + + _subscribe(subscriber) { + this._throwIfClosed(); + + this._checkFinalizedStatuses(subscriber); + + return this._innerSubscribe(subscriber); + } + + _innerSubscribe(subscriber) { + const { + hasError, + isStopped, + observers + } = this; + return hasError || isStopped ? _Subscription__WEBPACK_IMPORTED_MODULE_3__.EMPTY_SUBSCRIPTION : (observers.push(subscriber), new _Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription(() => (0,_util_arrRemove__WEBPACK_IMPORTED_MODULE_4__.arrRemove)(observers, subscriber))); + } + + _checkFinalizedStatuses(subscriber) { + const { + hasError, + thrownError, + isStopped + } = this; + + if (hasError) { + subscriber.error(thrownError); + } else if (isStopped) { + subscriber.complete(); + } + } + + asObservable() { + const observable = new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(); + observable.source = this; + return observable; + } + +} + +Subject.create = (destination, source) => { + return new AnonymousSubject(destination, source); +}; + +class AnonymousSubject extends Subject { + constructor(destination, source) { + super(); + this.destination = destination; + this.source = source; + } + + next(value) { + var _a, _b; + + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value); + } + + error(err) { + var _a, _b; + + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err); + } + + complete() { + var _a, _b; + + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a); + } + + _subscribe(subscriber) { + var _a, _b; + + return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : _Subscription__WEBPACK_IMPORTED_MODULE_3__.EMPTY_SUBSCRIPTION; + } + +} + +/***/ }), + +/***/ 9904: +/*!***********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/Subscriber.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EMPTY_OBSERVER": () => (/* binding */ EMPTY_OBSERVER), +/* harmony export */ "SafeSubscriber": () => (/* binding */ SafeSubscriber), +/* harmony export */ "Subscriber": () => (/* binding */ Subscriber) +/* harmony export */ }); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/isFunction */ 2971); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subscription */ 6078); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config */ 9057); +/* harmony import */ var _util_reportUnhandledError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util/reportUnhandledError */ 4709); +/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/noop */ 9635); +/* harmony import */ var _NotificationFactories__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NotificationFactories */ 3279); +/* harmony import */ var _scheduler_timeoutProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./scheduler/timeoutProvider */ 3542); +/* harmony import */ var _util_errorContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/errorContext */ 2309); + + + + + + + + +class Subscriber extends _Subscription__WEBPACK_IMPORTED_MODULE_0__.Subscription { + constructor(destination) { + super(); + this.isStopped = false; + + if (destination) { + this.destination = destination; + + if ((0,_Subscription__WEBPACK_IMPORTED_MODULE_0__.isSubscription)(destination)) { + destination.add(this); + } + } else { + this.destination = EMPTY_OBSERVER; + } + } + + static create(next, error, complete) { + return new SafeSubscriber(next, error, complete); + } + + next(value) { + if (this.isStopped) { + handleStoppedNotification((0,_NotificationFactories__WEBPACK_IMPORTED_MODULE_1__.nextNotification)(value), this); + } else { + this._next(value); + } + } + + error(err) { + if (this.isStopped) { + handleStoppedNotification((0,_NotificationFactories__WEBPACK_IMPORTED_MODULE_1__.errorNotification)(err), this); + } else { + this.isStopped = true; + + this._error(err); + } + } + + complete() { + if (this.isStopped) { + handleStoppedNotification(_NotificationFactories__WEBPACK_IMPORTED_MODULE_1__.COMPLETE_NOTIFICATION, this); + } else { + this.isStopped = true; + + this._complete(); + } + } + + unsubscribe() { + if (!this.closed) { + this.isStopped = true; + super.unsubscribe(); + this.destination = null; + } + } + + _next(value) { + this.destination.next(value); + } + + _error(err) { + try { + this.destination.error(err); + } finally { + this.unsubscribe(); + } + } + + _complete() { + try { + this.destination.complete(); + } finally { + this.unsubscribe(); + } + } + +} +class SafeSubscriber extends Subscriber { + constructor(observerOrNext, error, complete) { + super(); + let next; + + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observerOrNext)) { + next = observerOrNext; + } else if (observerOrNext) { + ({ + next, + error, + complete + } = observerOrNext); + let context; + + if (this && _config__WEBPACK_IMPORTED_MODULE_3__.config.useDeprecatedNextContext) { + context = Object.create(observerOrNext); + + context.unsubscribe = () => this.unsubscribe(); + } else { + context = observerOrNext; + } + + next = next === null || next === void 0 ? void 0 : next.bind(context); + error = error === null || error === void 0 ? void 0 : error.bind(context); + complete = complete === null || complete === void 0 ? void 0 : complete.bind(context); + } + + this.destination = { + next: next ? wrapForErrorHandling(next, this) : _util_noop__WEBPACK_IMPORTED_MODULE_4__.noop, + error: wrapForErrorHandling(error !== null && error !== void 0 ? error : defaultErrorHandler, this), + complete: complete ? wrapForErrorHandling(complete, this) : _util_noop__WEBPACK_IMPORTED_MODULE_4__.noop + }; + } + +} + +function wrapForErrorHandling(handler, instance) { + return (...args) => { + try { + handler(...args); + } catch (err) { + if (_config__WEBPACK_IMPORTED_MODULE_3__.config.useDeprecatedSynchronousErrorHandling) { + (0,_util_errorContext__WEBPACK_IMPORTED_MODULE_5__.captureError)(err); + } else { + (0,_util_reportUnhandledError__WEBPACK_IMPORTED_MODULE_6__.reportUnhandledError)(err); + } + } + }; +} + +function defaultErrorHandler(err) { + throw err; +} + +function handleStoppedNotification(notification, subscriber) { + const { + onStoppedNotification + } = _config__WEBPACK_IMPORTED_MODULE_3__.config; + onStoppedNotification && _scheduler_timeoutProvider__WEBPACK_IMPORTED_MODULE_7__.timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber)); +} + +const EMPTY_OBSERVER = { + closed: true, + next: _util_noop__WEBPACK_IMPORTED_MODULE_4__.noop, + error: defaultErrorHandler, + complete: _util_noop__WEBPACK_IMPORTED_MODULE_4__.noop +}; + +/***/ }), + +/***/ 6078: +/*!*************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/Subscription.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EMPTY_SUBSCRIPTION": () => (/* binding */ EMPTY_SUBSCRIPTION), +/* harmony export */ "Subscription": () => (/* binding */ Subscription), +/* harmony export */ "isSubscription": () => (/* binding */ isSubscription) +/* harmony export */ }); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/isFunction */ 2971); +/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/UnsubscriptionError */ 2524); +/* harmony import */ var _util_arrRemove__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/arrRemove */ 9663); + + + +class Subscription { + constructor(initialTeardown) { + this.initialTeardown = initialTeardown; + this.closed = false; + this._parentage = null; + this._teardowns = null; + } + + unsubscribe() { + let errors; + + if (!this.closed) { + this.closed = true; + const { + _parentage + } = this; + + if (_parentage) { + this._parentage = null; + + if (Array.isArray(_parentage)) { + for (const parent of _parentage) { + parent.remove(this); + } + } else { + _parentage.remove(this); + } + } + + const { + initialTeardown + } = this; + + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(initialTeardown)) { + try { + initialTeardown(); + } catch (e) { + errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError ? e.errors : [e]; + } + } + + const { + _teardowns + } = this; + + if (_teardowns) { + this._teardowns = null; + + for (const teardown of _teardowns) { + try { + execTeardown(teardown); + } catch (err) { + errors = errors !== null && errors !== void 0 ? errors : []; + + if (err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError) { + errors = [...errors, ...err.errors]; + } else { + errors.push(err); + } + } + } + } + + if (errors) { + throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError(errors); + } + } + } + + add(teardown) { + var _a; + + if (teardown && teardown !== this) { + if (this.closed) { + execTeardown(teardown); + } else { + if (teardown instanceof Subscription) { + if (teardown.closed || teardown._hasParent(this)) { + return; + } + + teardown._addParent(this); + } + + (this._teardowns = (_a = this._teardowns) !== null && _a !== void 0 ? _a : []).push(teardown); + } + } + } + + _hasParent(parent) { + const { + _parentage + } = this; + return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent); + } + + _addParent(parent) { + const { + _parentage + } = this; + this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent; + } + + _removeParent(parent) { + const { + _parentage + } = this; + + if (_parentage === parent) { + this._parentage = null; + } else if (Array.isArray(_parentage)) { + (0,_util_arrRemove__WEBPACK_IMPORTED_MODULE_2__.arrRemove)(_parentage, parent); + } + } + + remove(teardown) { + const { + _teardowns + } = this; + _teardowns && (0,_util_arrRemove__WEBPACK_IMPORTED_MODULE_2__.arrRemove)(_teardowns, teardown); + + if (teardown instanceof Subscription) { + teardown._removeParent(this); + } + } + +} + +Subscription.EMPTY = (() => { + const empty = new Subscription(); + empty.closed = true; + return empty; +})(); + +const EMPTY_SUBSCRIPTION = Subscription.EMPTY; +function isSubscription(value) { + return value instanceof Subscription || value && 'closed' in value && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(value.remove) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(value.add) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(value.unsubscribe); +} + +function execTeardown(teardown) { + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(teardown)) { + teardown(); + } else { + teardown.unsubscribe(); + } +} + +/***/ }), + +/***/ 9057: +/*!*******************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/config.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "config": () => (/* binding */ config) +/* harmony export */ }); +const config = { + onUnhandledError: null, + onStoppedNotification: null, + Promise: undefined, + useDeprecatedSynchronousErrorHandling: false, + useDeprecatedNextContext: false +}; + +/***/ }), + +/***/ 3932: +/*!*********************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/ConnectableObservable.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ConnectableObservable": () => (/* binding */ ConnectableObservable) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscription */ 6078); +/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../operators/refCount */ 6074); +/* harmony import */ var _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../operators/OperatorSubscriber */ 3945); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); + + + + + +class ConnectableObservable extends _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable { + constructor(source, subjectFactory) { + super(); + this.source = source; + this.subjectFactory = subjectFactory; + this._subject = null; + this._refCount = 0; + this._connection = null; + + if ((0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.hasLift)(source)) { + this.lift = source.lift; + } + } + + _subscribe(subscriber) { + return this.getSubject().subscribe(subscriber); + } + + getSubject() { + const subject = this._subject; + + if (!subject || subject.isStopped) { + this._subject = this.subjectFactory(); + } + + return this._subject; + } + + _teardown() { + this._refCount = 0; + const { + _connection + } = this; + this._subject = this._connection = null; + _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe(); + } + + connect() { + let connection = this._connection; + + if (!connection) { + connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription(); + const subject = this.getSubject(); + connection.add(this.source.subscribe(new _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_3__.OperatorSubscriber(subject, undefined, () => { + this._teardown(); + + subject.complete(); + }, err => { + this._teardown(); + + subject.error(err); + }, () => this._teardown()))); + + if (connection.closed) { + this._connection = null; + connection = _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription.EMPTY; + } + } + + return connection; + } + + refCount() { + return (0,_operators_refCount__WEBPACK_IMPORTED_MODULE_4__.refCount)()(this); + } + +} + +/***/ }), + +/***/ 6562: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/combineLatest.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "combineLatest": () => (/* binding */ combineLatest), +/* harmony export */ "combineLatestInit": () => (/* binding */ combineLatestInit) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _util_argsArgArrayOrObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/argsArgArrayOrObject */ 5756); +/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./from */ 9346); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/identity */ 9173); +/* harmony import */ var _util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/mapOneOrManyArgs */ 8385); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _util_createObject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/createObject */ 1054); +/* harmony import */ var _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../operators/OperatorSubscriber */ 3945); +/* harmony import */ var _util_executeSchedule__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/executeSchedule */ 1817); + + + + + + + + + +function combineLatest(...args) { + const scheduler = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popScheduler)(args); + const resultSelector = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popResultSelector)(args); + const { + args: observables, + keys + } = (0,_util_argsArgArrayOrObject__WEBPACK_IMPORTED_MODULE_1__.argsArgArrayOrObject)(args); + + if (observables.length === 0) { + return (0,_from__WEBPACK_IMPORTED_MODULE_2__.from)([], scheduler); + } + + const result = new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(combineLatestInit(observables, scheduler, keys ? values => (0,_util_createObject__WEBPACK_IMPORTED_MODULE_4__.createObject)(keys, values) : _util_identity__WEBPACK_IMPORTED_MODULE_5__.identity)); + return resultSelector ? result.pipe((0,_util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_6__.mapOneOrManyArgs)(resultSelector)) : result; +} +function combineLatestInit(observables, scheduler, valueTransform = _util_identity__WEBPACK_IMPORTED_MODULE_5__.identity) { + return subscriber => { + maybeSchedule(scheduler, () => { + const { + length + } = observables; + const values = new Array(length); + let active = length; + let remainingFirstValues = length; + + for (let i = 0; i < length; i++) { + maybeSchedule(scheduler, () => { + const source = (0,_from__WEBPACK_IMPORTED_MODULE_2__.from)(observables[i], scheduler); + let hasFirstValue = false; + source.subscribe(new _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_7__.OperatorSubscriber(subscriber, value => { + values[i] = value; + + if (!hasFirstValue) { + hasFirstValue = true; + remainingFirstValues--; + } + + if (!remainingFirstValues) { + subscriber.next(valueTransform(values.slice())); + } + }, () => { + if (! --active) { + subscriber.complete(); + } + })); + }, subscriber); + } + }, subscriber); + }; +} + +function maybeSchedule(scheduler, execute, subscription) { + if (scheduler) { + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_8__.executeSchedule)(subscription, scheduler, execute); + } else { + execute(); + } +} + +/***/ }), + +/***/ 4240: +/*!******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/concat.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "concat": () => (/* binding */ concat) +/* harmony export */ }); +/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../operators/concatAll */ 4770); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./from */ 9346); + + + +function concat(...args) { + return (0,_operators_concatAll__WEBPACK_IMPORTED_MODULE_0__.concatAll)()((0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(args, (0,_util_args__WEBPACK_IMPORTED_MODULE_2__.popScheduler)(args))); +} + +/***/ }), + +/***/ 1954: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/defer.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defer": () => (/* binding */ defer) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _innerFrom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./innerFrom */ 4987); + + +function defer(observableFactory) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + (0,_innerFrom__WEBPACK_IMPORTED_MODULE_1__.innerFrom)(observableFactory()).subscribe(subscriber); + }); +} + +/***/ }), + +/***/ 591: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/empty.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EMPTY": () => (/* binding */ EMPTY), +/* harmony export */ "empty": () => (/* binding */ empty) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); + +const EMPTY = new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => subscriber.complete()); +function empty(scheduler) { + return scheduler ? emptyScheduled(scheduler) : EMPTY; +} + +function emptyScheduled(scheduler) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => scheduler.schedule(() => subscriber.complete())); +} + +/***/ }), + +/***/ 1640: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/forkJoin.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "forkJoin": () => (/* binding */ forkJoin) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _util_argsArgArrayOrObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/argsArgArrayOrObject */ 5756); +/* harmony import */ var _innerFrom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./innerFrom */ 4987); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../operators/OperatorSubscriber */ 3945); +/* harmony import */ var _util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/mapOneOrManyArgs */ 8385); +/* harmony import */ var _util_createObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/createObject */ 1054); + + + + + + + +function forkJoin(...args) { + const resultSelector = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popResultSelector)(args); + const { + args: sources, + keys + } = (0,_util_argsArgArrayOrObject__WEBPACK_IMPORTED_MODULE_1__.argsArgArrayOrObject)(args); + const result = new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(subscriber => { + const { + length + } = sources; + + if (!length) { + subscriber.complete(); + return; + } + + const values = new Array(length); + let remainingCompletions = length; + let remainingEmissions = length; + + for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) { + let hasValue = false; + (0,_innerFrom__WEBPACK_IMPORTED_MODULE_3__.innerFrom)(sources[sourceIndex]).subscribe(new _operators_OperatorSubscriber__WEBPACK_IMPORTED_MODULE_4__.OperatorSubscriber(subscriber, value => { + if (!hasValue) { + hasValue = true; + remainingEmissions--; + } + + values[sourceIndex] = value; + }, () => remainingCompletions--, undefined, () => { + if (!remainingCompletions || !hasValue) { + if (!remainingEmissions) { + subscriber.next(keys ? (0,_util_createObject__WEBPACK_IMPORTED_MODULE_5__.createObject)(keys, values) : values); + } + + subscriber.complete(); + } + })); + } + }); + return resultSelector ? result.pipe((0,_util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_6__.mapOneOrManyArgs)(resultSelector)) : result; +} + +/***/ }), + +/***/ 9346: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/from.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "from": () => (/* binding */ from) +/* harmony export */ }); +/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduled/scheduled */ 9517); +/* harmony import */ var _innerFrom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./innerFrom */ 4987); + + +function from(input, scheduler) { + return scheduler ? (0,_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_0__.scheduled)(input, scheduler) : (0,_innerFrom__WEBPACK_IMPORTED_MODULE_1__.innerFrom)(input); +} + +/***/ }), + +/***/ 3280: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/fromEvent.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "fromEvent": () => (/* binding */ fromEvent) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _operators_mergeMap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../operators/mergeMap */ 1353); +/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isArrayLike */ 9806); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isFunction */ 2971); +/* harmony import */ var _util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/mapOneOrManyArgs */ 8385); + + + + + + +const nodeEventEmitterMethods = ['addListener', 'removeListener']; +const eventTargetMethods = ['addEventListener', 'removeEventListener']; +const jqueryMethods = ['on', 'off']; +function fromEvent(target, eventName, options, resultSelector) { + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(options)) { + resultSelector = options; + options = undefined; + } + + if (resultSelector) { + return fromEvent(target, eventName, options).pipe((0,_util_mapOneOrManyArgs__WEBPACK_IMPORTED_MODULE_1__.mapOneOrManyArgs)(resultSelector)); + } + + const [add, remove] = isEventTarget(target) ? eventTargetMethods.map(methodName => handler => target[methodName](eventName, handler, options)) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : []; + + if (!add) { + if ((0,_util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__.isArrayLike)(target)) { + return (0,_operators_mergeMap__WEBPACK_IMPORTED_MODULE_3__.mergeMap)(subTarget => fromEvent(subTarget, eventName, options))((0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_4__.innerFrom)(target)); + } + } + + if (!add) { + throw new TypeError('Invalid event target'); + } + + return new _Observable__WEBPACK_IMPORTED_MODULE_5__.Observable(subscriber => { + const handler = (...args) => subscriber.next(1 < args.length ? args : args[0]); + + add(handler); + return () => remove(handler); + }); +} + +function toCommonHandlerRegistry(target, eventName) { + return methodName => handler => target[methodName](eventName, handler); +} + +function isNodeStyleEventEmitter(target) { + return (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.addListener) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.removeListener); +} + +function isJQueryStyleEventEmitter(target) { + return (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.on) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.off); +} + +function isEventTarget(target) { + return (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.addEventListener) && (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(target.removeEventListener); +} + +/***/ }), + +/***/ 4987: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/innerFrom.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "fromArrayLike": () => (/* binding */ fromArrayLike), +/* harmony export */ "fromAsyncIterable": () => (/* binding */ fromAsyncIterable), +/* harmony export */ "fromInteropObservable": () => (/* binding */ fromInteropObservable), +/* harmony export */ "fromIterable": () => (/* binding */ fromIterable), +/* harmony export */ "fromPromise": () => (/* binding */ fromPromise), +/* harmony export */ "fromReadableStreamLike": () => (/* binding */ fromReadableStreamLike), +/* harmony export */ "innerFrom": () => (/* binding */ innerFrom) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tslib */ 9126); +/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isArrayLike */ 9806); +/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isPromise */ 9548); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isInteropObservable */ 1331); +/* harmony import */ var _util_isAsyncIterable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isAsyncIterable */ 470); +/* harmony import */ var _util_throwUnobservableError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/throwUnobservableError */ 7785); +/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/isIterable */ 3433); +/* harmony import */ var _util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/isReadableStreamLike */ 181); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/isFunction */ 2971); +/* harmony import */ var _util_reportUnhandledError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/reportUnhandledError */ 4709); +/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../symbol/observable */ 4585); + + + + + + + + + + + + +function innerFrom(input) { + if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable) { + return input; + } + + if (input != null) { + if ((0,_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_1__.isInteropObservable)(input)) { + return fromInteropObservable(input); + } + + if ((0,_util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__.isArrayLike)(input)) { + return fromArrayLike(input); + } + + if ((0,_util_isPromise__WEBPACK_IMPORTED_MODULE_3__.isPromise)(input)) { + return fromPromise(input); + } + + if ((0,_util_isAsyncIterable__WEBPACK_IMPORTED_MODULE_4__.isAsyncIterable)(input)) { + return fromAsyncIterable(input); + } + + if ((0,_util_isIterable__WEBPACK_IMPORTED_MODULE_5__.isIterable)(input)) { + return fromIterable(input); + } + + if ((0,_util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_6__.isReadableStreamLike)(input)) { + return fromReadableStreamLike(input); + } + } + + throw (0,_util_throwUnobservableError__WEBPACK_IMPORTED_MODULE_7__.createInvalidObservableTypeError)(input); +} +function fromInteropObservable(obj) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + const obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__.observable](); + + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_9__.isFunction)(obs.subscribe)) { + return obs.subscribe(subscriber); + } + + throw new TypeError('Provided object does not correctly implement Symbol.observable'); + }); +} +function fromArrayLike(array) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + for (let i = 0; i < array.length && !subscriber.closed; i++) { + subscriber.next(array[i]); + } + + subscriber.complete(); + }); +} +function fromPromise(promise) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + promise.then(value => { + if (!subscriber.closed) { + subscriber.next(value); + subscriber.complete(); + } + }, err => subscriber.error(err)).then(null, _util_reportUnhandledError__WEBPACK_IMPORTED_MODULE_10__.reportUnhandledError); + }); +} +function fromIterable(iterable) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + for (const value of iterable) { + subscriber.next(value); + + if (subscriber.closed) { + return; + } + } + + subscriber.complete(); + }); +} +function fromAsyncIterable(asyncIterable) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + process(asyncIterable, subscriber).catch(err => subscriber.error(err)); + }); +} +function fromReadableStreamLike(readableStream) { + return fromAsyncIterable((0,_util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_6__.readableStreamLikeToAsyncGenerator)(readableStream)); +} + +function process(asyncIterable, subscriber) { + var asyncIterable_1, asyncIterable_1_1; + + var e_1, _a; + + return (0,tslib__WEBPACK_IMPORTED_MODULE_11__.__awaiter)(this, void 0, void 0, function* () { + try { + for (asyncIterable_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_11__.__asyncValues)(asyncIterable); asyncIterable_1_1 = yield asyncIterable_1.next(), !asyncIterable_1_1.done;) { + const value = asyncIterable_1_1.value; + subscriber.next(value); + + if (subscriber.closed) { + return; + } + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { + try { + if (asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)) yield _a.call(asyncIterable_1); + } finally { + if (e_1) throw e_1.error; + } + } + + subscriber.complete(); + }); +} + +/***/ }), + +/***/ 6646: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/merge.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "merge": () => (/* binding */ merge) +/* harmony export */ }); +/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../operators/mergeAll */ 1308); +/* harmony import */ var _innerFrom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./innerFrom */ 4987); +/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty */ 591); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./from */ 9346); + + + + + +function merge(...args) { + const scheduler = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popScheduler)(args); + const concurrent = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popNumber)(args, Infinity); + const sources = args; + return !sources.length ? _empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY : sources.length === 1 ? (0,_innerFrom__WEBPACK_IMPORTED_MODULE_2__.innerFrom)(sources[0]) : (0,_operators_mergeAll__WEBPACK_IMPORTED_MODULE_3__.mergeAll)(concurrent)((0,_from__WEBPACK_IMPORTED_MODULE_4__.from)(sources, scheduler)); +} + +/***/ }), + +/***/ 745: +/*!**************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/of.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "of": () => (/* binding */ of) +/* harmony export */ }); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./from */ 9346); + + +function of(...args) { + const scheduler = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popScheduler)(args); + return (0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(args, scheduler); +} + +/***/ }), + +/***/ 5474: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/throwError.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "throwError": () => (/* binding */ throwError) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isFunction */ 2971); + + +function throwError(errorOrErrorFactory, scheduler) { + const errorFactory = (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory; + + const init = subscriber => subscriber.error(errorFactory()); + + return new _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable(scheduler ? subscriber => scheduler.schedule(init, 0, subscriber) : init); +} + +/***/ }), + +/***/ 8947: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/observable/timer.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "timer": () => (/* binding */ timer) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ 6936); +/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isScheduler */ 9867); +/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isDate */ 7885); + + + + +function timer(dueTime = 0, intervalOrScheduler, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async) { + let intervalDuration = -1; + + if (intervalOrScheduler != null) { + if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(intervalOrScheduler)) { + scheduler = intervalOrScheduler; + } else { + intervalDuration = intervalOrScheduler; + } + } + + return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(subscriber => { + let due = (0,_util_isDate__WEBPACK_IMPORTED_MODULE_3__.isValidDate)(dueTime) ? +dueTime - scheduler.now() : dueTime; + + if (due < 0) { + due = 0; + } + + let n = 0; + return scheduler.schedule(function () { + if (!subscriber.closed) { + subscriber.next(n++); + + if (0 <= intervalDuration) { + this.schedule(undefined, intervalDuration); + } else { + subscriber.complete(); + } + } + }, due); + }); +} + +/***/ }), + +/***/ 3945: +/*!*****************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OperatorSubscriber": () => (/* binding */ OperatorSubscriber) +/* harmony export */ }); +/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ 9904); + +class OperatorSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber { + constructor(destination, onNext, onComplete, onError, onFinalize) { + super(destination); + this.onFinalize = onFinalize; + this._next = onNext ? function (value) { + try { + onNext(value); + } catch (err) { + destination.error(err); + } + } : super._next; + this._error = onError ? function (err) { + try { + onError(err); + } catch (err) { + destination.error(err); + } finally { + this.unsubscribe(); + } + } : super._error; + this._complete = onComplete ? function () { + try { + onComplete(); + } catch (err) { + destination.error(err); + } finally { + this.unsubscribe(); + } + } : super._complete; + } + + unsubscribe() { + var _a; + + const { + closed + } = this; + super.unsubscribe(); + !closed && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this)); + } + +} + +/***/ }), + +/***/ 4844: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/audit.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "audit": () => (/* binding */ audit) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function audit(durationSelector) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let hasValue = false; + let lastValue = null; + let durationSubscriber = null; + let isComplete = false; + + const endDuration = () => { + durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); + durationSubscriber = null; + + if (hasValue) { + hasValue = false; + const value = lastValue; + lastValue = null; + subscriber.next(value); + } + + isComplete && subscriber.complete(); + }; + + const cleanupDuration = () => { + durationSubscriber = null; + isComplete && subscriber.complete(); + }; + + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + hasValue = true; + lastValue = value; + + if (!durationSubscriber) { + (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__.innerFrom)(durationSelector(value)).subscribe(durationSubscriber = new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, endDuration, cleanupDuration)); + } + }, () => { + isComplete = true; + (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete(); + })); + }); +} + +/***/ }), + +/***/ 998: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/auditTime.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "auditTime": () => (/* binding */ auditTime) +/* harmony export */ }); +/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ 6936); +/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./audit */ 4844); +/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/timer */ 8947); + + + +function auditTime(duration, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async) { + return (0,_audit__WEBPACK_IMPORTED_MODULE_1__.audit)(() => (0,_observable_timer__WEBPACK_IMPORTED_MODULE_2__.timer)(duration, scheduler)); +} + +/***/ }), + +/***/ 3158: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/catchError.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "catchError": () => (/* binding */ catchError) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); + + + +function catchError(selector) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let innerSub = null; + let syncUnsub = false; + let handledResult; + innerSub = source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, undefined, undefined, err => { + handledResult = (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__.innerFrom)(selector(err, catchError(selector)(source))); + + if (innerSub) { + innerSub.unsubscribe(); + innerSub = null; + handledResult.subscribe(subscriber); + } else { + syncUnsub = true; + } + })); + + if (syncUnsub) { + innerSub.unsubscribe(); + innerSub = null; + handledResult.subscribe(subscriber); + } + }); +} + +/***/ }), + +/***/ 4770: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/concatAll.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "concatAll": () => (/* binding */ concatAll) +/* harmony export */ }); +/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeAll */ 1308); + +function concatAll() { + return (0,_mergeAll__WEBPACK_IMPORTED_MODULE_0__.mergeAll)(1); +} + +/***/ }), + +/***/ 3853: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/concatMap.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "concatMap": () => (/* binding */ concatMap) +/* harmony export */ }); +/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergeMap */ 1353); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isFunction */ 2971); + + +function concatMap(project, resultSelector) { + return (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(resultSelector) ? (0,_mergeMap__WEBPACK_IMPORTED_MODULE_1__.mergeMap)(project, resultSelector, 1) : (0,_mergeMap__WEBPACK_IMPORTED_MODULE_1__.mergeMap)(project, 1); +} + +/***/ }), + +/***/ 1989: +/*!***********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/debounceTime.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "debounceTime": () => (/* binding */ debounceTime) +/* harmony export */ }); +/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ 6936); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function debounceTime(dueTime, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.asyncScheduler) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + let activeTask = null; + let lastValue = null; + let lastTime = null; + + const emit = () => { + if (activeTask) { + activeTask.unsubscribe(); + activeTask = null; + const value = lastValue; + lastValue = null; + subscriber.next(value); + } + }; + + function emitWhenIdle() { + const targetTime = lastTime + dueTime; + const now = scheduler.now(); + + if (now < targetTime) { + activeTask = this.schedule(undefined, targetTime - now); + subscriber.add(activeTask); + return; + } + + emit(); + } + + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + lastValue = value; + lastTime = scheduler.now(); + + if (!activeTask) { + activeTask = scheduler.schedule(emitWhenIdle, dueTime); + subscriber.add(activeTask); + } + }, () => { + emit(); + subscriber.complete(); + }, undefined, () => { + lastValue = activeTask = null; + })); + }); +} + +/***/ }), + +/***/ 4744: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defaultIfEmpty": () => (/* binding */ defaultIfEmpty) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function defaultIfEmpty(defaultValue) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let hasValue = false; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + hasValue = true; + subscriber.next(value); + }, () => { + if (!hasValue) { + subscriber.next(defaultValue); + } + + subscriber.complete(); + })); + }); +} + +/***/ }), + +/***/ 1339: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/delay.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "delay": () => (/* binding */ delay) +/* harmony export */ }); +/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ 6936); +/* harmony import */ var _delayWhen__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./delayWhen */ 5716); +/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/timer */ 8947); + + + +function delay(due, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.asyncScheduler) { + const duration = (0,_observable_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(due, scheduler); + return (0,_delayWhen__WEBPACK_IMPORTED_MODULE_2__.delayWhen)(() => duration); +} + +/***/ }), + +/***/ 5716: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/delayWhen.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "delayWhen": () => (/* binding */ delayWhen) +/* harmony export */ }); +/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/concat */ 4240); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./take */ 9295); +/* harmony import */ var _ignoreElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ignoreElements */ 23); +/* harmony import */ var _mapTo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mapTo */ 73); +/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mergeMap */ 1353); + + + + + +function delayWhen(delayDurationSelector, subscriptionDelay) { + if (subscriptionDelay) { + return source => (0,_observable_concat__WEBPACK_IMPORTED_MODULE_0__.concat)(subscriptionDelay.pipe((0,_take__WEBPACK_IMPORTED_MODULE_1__.take)(1), (0,_ignoreElements__WEBPACK_IMPORTED_MODULE_2__.ignoreElements)()), source.pipe(delayWhen(delayDurationSelector))); + } + + return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_3__.mergeMap)((value, index) => delayDurationSelector(value, index).pipe((0,_take__WEBPACK_IMPORTED_MODULE_1__.take)(1), (0,_mapTo__WEBPACK_IMPORTED_MODULE_4__.mapTo)(value))); +} + +/***/ }), + +/***/ 8977: +/*!*******************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "distinctUntilChanged": () => (/* binding */ distinctUntilChanged) +/* harmony export */ }); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/identity */ 9173); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function distinctUntilChanged(comparator, keySelector = _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity) { + comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare; + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + let previousKey; + let first = true; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + const currentKey = keySelector(value); + + if (first || !comparator(previousKey, currentKey)) { + first = false; + previousKey = currentKey; + subscriber.next(value); + } + })); + }); +} + +function defaultCompare(a, b) { + return a === b; +} + +/***/ }), + +/***/ 116: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/filter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "filter": () => (/* binding */ filter) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function filter(predicate, thisArg) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let index = 0; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => predicate.call(thisArg, value, index++) && subscriber.next(value))); + }); +} + +/***/ }), + +/***/ 2313: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/finalize.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "finalize": () => (/* binding */ finalize) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); + +function finalize(callback) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + try { + source.subscribe(subscriber); + } finally { + subscriber.add(callback); + } + }); +} + +/***/ }), + +/***/ 155: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/first.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "first": () => (/* binding */ first) +/* harmony export */ }); +/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/EmptyError */ 4423); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./filter */ 116); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./take */ 9295); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaultIfEmpty */ 4744); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./throwIfEmpty */ 7354); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ 9173); + + + + + + +function first(predicate, defaultValue) { + const hasDefaultValue = arguments.length >= 2; + return source => source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((v, i) => predicate(v, i, source)) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_take__WEBPACK_IMPORTED_MODULE_2__.take)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(() => new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError())); +} + +/***/ }), + +/***/ 23: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/ignoreElements.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ignoreElements": () => (/* binding */ ignoreElements) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); +/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/noop */ 9635); + + + +function ignoreElements() { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, _util_noop__WEBPACK_IMPORTED_MODULE_2__.noop)); + }); +} + +/***/ }), + +/***/ 1955: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/last.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "last": () => (/* binding */ last) +/* harmony export */ }); +/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/EmptyError */ 4423); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./filter */ 116); +/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./takeLast */ 9601); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./throwIfEmpty */ 7354); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaultIfEmpty */ 4744); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ 9173); + + + + + + +function last(predicate, defaultValue) { + const hasDefaultValue = arguments.length >= 2; + return source => source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((v, i) => predicate(v, i, source)) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(() => new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError())); +} + +/***/ }), + +/***/ 635: +/*!**************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/map.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "map": () => (/* binding */ map) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function map(project, thisArg) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let index = 0; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + subscriber.next(project.call(thisArg, value, index++)); + })); + }); +} + +/***/ }), + +/***/ 73: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/mapTo.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "mapTo": () => (/* binding */ mapTo) +/* harmony export */ }); +/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ 635); + +function mapTo(value) { + return (0,_map__WEBPACK_IMPORTED_MODULE_0__.map)(() => value); +} + +/***/ }), + +/***/ 1308: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/mergeAll.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "mergeAll": () => (/* binding */ mergeAll) +/* harmony export */ }); +/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeMap */ 1353); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ 9173); + + +function mergeAll(concurrent = Infinity) { + return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(_util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, concurrent); +} + +/***/ }), + +/***/ 9280: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "mergeInternals": () => (/* binding */ mergeInternals) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/executeSchedule */ 1817); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalTeardown) { + const buffer = []; + let active = 0; + let index = 0; + let isComplete = false; + + const checkComplete = () => { + if (isComplete && !buffer.length && !active) { + subscriber.complete(); + } + }; + + const outerNext = value => active < concurrent ? doInnerSub(value) : buffer.push(value); + + const doInnerSub = value => { + expand && subscriber.next(value); + active++; + let innerComplete = false; + (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__.innerFrom)(project(value, index++)).subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, innerValue => { + onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); + + if (expand) { + outerNext(innerValue); + } else { + subscriber.next(innerValue); + } + }, () => { + innerComplete = true; + }, undefined, () => { + if (innerComplete) { + try { + active--; + + while (buffer.length && active < concurrent) { + const bufferedValue = buffer.shift(); + + if (innerSubScheduler) { + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__.executeSchedule)(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue)); + } else { + doInnerSub(bufferedValue); + } + } + + checkComplete(); + } catch (err) { + subscriber.error(err); + } + } + })); + }; + + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, outerNext, () => { + isComplete = true; + checkComplete(); + })); + return () => { + additionalTeardown === null || additionalTeardown === void 0 ? void 0 : additionalTeardown(); + }; +} + +/***/ }), + +/***/ 1353: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/mergeMap.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "mergeMap": () => (/* binding */ mergeMap) +/* harmony export */ }); +/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./map */ 635); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _mergeInternals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mergeInternals */ 9280); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isFunction */ 2971); + + + + + +function mergeMap(project, resultSelector, concurrent = Infinity) { + if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(resultSelector)) { + return mergeMap((a, i) => (0,_map__WEBPACK_IMPORTED_MODULE_1__.map)((b, ii) => resultSelector(a, b, i, ii))((0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__.innerFrom)(project(a, i))), concurrent); + } else if (typeof resultSelector === 'number') { + concurrent = resultSelector; + } + + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_3__.operate)((source, subscriber) => (0,_mergeInternals__WEBPACK_IMPORTED_MODULE_4__.mergeInternals)(source, subscriber, project, concurrent)); +} + +/***/ }), + +/***/ 8728: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/observeOn.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "observeOn": () => (/* binding */ observeOn) +/* harmony export */ }); +/* harmony import */ var _util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/executeSchedule */ 1817); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function observeOn(scheduler, delay = 0) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__.executeSchedule)(subscriber, scheduler, () => subscriber.next(value), delay), () => (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__.executeSchedule)(subscriber, scheduler, () => subscriber.complete(), delay), err => (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_2__.executeSchedule)(subscriber, scheduler, () => subscriber.error(err), delay))); + }); +} + +/***/ }), + +/***/ 679: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/pairwise.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "pairwise": () => (/* binding */ pairwise) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function pairwise() { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let prev; + let hasPrev = false; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + const p = prev; + prev = value; + hasPrev && subscriber.next([p, value]); + hasPrev = true; + })); + }); +} + +/***/ }), + +/***/ 6074: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/refCount.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "refCount": () => (/* binding */ refCount) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function refCount() { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let connection = null; + source._refCount++; + const refCounter = new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, undefined, undefined, undefined, () => { + if (!source || source._refCount <= 0 || 0 < --source._refCount) { + connection = null; + return; + } + + const sharedConnection = source._connection; + const conn = connection; + connection = null; + + if (sharedConnection && (!conn || sharedConnection === conn)) { + sharedConnection.unsubscribe(); + } + + subscriber.unsubscribe(); + }); + source.subscribe(refCounter); + + if (!refCounter.closed) { + connection = source.connect(); + } + }); +} + +/***/ }), + +/***/ 8504: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/retry.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "retry": () => (/* binding */ retry) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/identity */ 9173); +/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../observable/timer */ 8947); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); + + + + + +function retry(configOrCount = Infinity) { + let config; + + if (configOrCount && typeof configOrCount === 'object') { + config = configOrCount; + } else { + config = { + count: configOrCount + }; + } + + const { + count = Infinity, + delay, + resetOnSuccess = false + } = config; + return count <= 0 ? _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity : (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + let soFar = 0; + let innerSub; + + const subscribeForRetry = () => { + let syncUnsub = false; + innerSub = source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + if (resetOnSuccess) { + soFar = 0; + } + + subscriber.next(value); + }, undefined, err => { + if (soFar++ < count) { + const resub = () => { + if (innerSub) { + innerSub.unsubscribe(); + innerSub = null; + subscribeForRetry(); + } else { + syncUnsub = true; + } + }; + + if (delay != null) { + const notifier = typeof delay === 'number' ? (0,_observable_timer__WEBPACK_IMPORTED_MODULE_3__.timer)(delay) : (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_4__.innerFrom)(delay(err, soFar)); + const notifierSubscriber = new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, () => { + notifierSubscriber.unsubscribe(); + resub(); + }, () => { + subscriber.complete(); + }); + notifier.subscribe(notifierSubscriber); + } else { + resub(); + } + } else { + subscriber.error(err); + } + })); + + if (syncUnsub) { + innerSub.unsubscribe(); + innerSub = null; + subscribeForRetry(); + } + }; + + subscribeForRetry(); + }); +} + +/***/ }), + +/***/ 4503: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/scan.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scan": () => (/* binding */ scan) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _scanInternals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scanInternals */ 4382); + + +function scan(accumulator, seed) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((0,_scanInternals__WEBPACK_IMPORTED_MODULE_1__.scanInternals)(accumulator, seed, arguments.length >= 2, true)); +} + +/***/ }), + +/***/ 4382: +/*!************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/scanInternals.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scanInternals": () => (/* binding */ scanInternals) +/* harmony export */ }); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + +function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) { + return (source, subscriber) => { + let hasState = hasSeed; + let state = seed; + let index = 0; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_0__.OperatorSubscriber(subscriber, value => { + const i = index++; + state = hasState ? accumulator(state, value, i) : (hasState = true, value); + emitOnNext && subscriber.next(state); + }, emitBeforeComplete && (() => { + hasState && subscriber.next(state); + subscriber.complete(); + }))); + }; +} + +/***/ }), + +/***/ 1203: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/share.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "share": () => (/* binding */ share) +/* harmony export */ }); +/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../observable/from */ 9346); +/* harmony import */ var _operators_take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../operators/take */ 9295); +/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ 228); +/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscriber */ 9904); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); + + + + + +function share(options = {}) { + const { + connector = () => new _Subject__WEBPACK_IMPORTED_MODULE_0__.Subject(), + resetOnError = true, + resetOnComplete = true, + resetOnRefCountZero = true + } = options; + return wrapperSource => { + let connection = null; + let resetConnection = null; + let subject = null; + let refCount = 0; + let hasCompleted = false; + let hasErrored = false; + + const cancelReset = () => { + resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe(); + resetConnection = null; + }; + + const reset = () => { + cancelReset(); + connection = subject = null; + hasCompleted = hasErrored = false; + }; + + const resetAndUnsubscribe = () => { + const conn = connection; + reset(); + conn === null || conn === void 0 ? void 0 : conn.unsubscribe(); + }; + + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + refCount++; + + if (!hasErrored && !hasCompleted) { + cancelReset(); + } + + const dest = subject = subject !== null && subject !== void 0 ? subject : connector(); + subscriber.add(() => { + refCount--; + + if (refCount === 0 && !hasErrored && !hasCompleted) { + resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero); + } + }); + dest.subscribe(subscriber); + + if (!connection) { + connection = new _Subscriber__WEBPACK_IMPORTED_MODULE_2__.SafeSubscriber({ + next: value => dest.next(value), + error: err => { + hasErrored = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnError, err); + dest.error(err); + }, + complete: () => { + hasCompleted = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnComplete); + dest.complete(); + } + }); + (0,_observable_from__WEBPACK_IMPORTED_MODULE_3__.from)(source).subscribe(connection); + } + })(wrapperSource); + }; +} + +function handleReset(reset, on, ...args) { + if (on === true) { + reset(); + return null; + } + + if (on === false) { + return null; + } + + return on(...args).pipe((0,_operators_take__WEBPACK_IMPORTED_MODULE_4__.take)(1)).subscribe(() => reset()); +} + +/***/ }), + +/***/ 9196: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/shareReplay.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "shareReplay": () => (/* binding */ shareReplay) +/* harmony export */ }); +/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ReplaySubject */ 6067); +/* harmony import */ var _share__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./share */ 1203); + + +function shareReplay(configOrBufferSize, windowTime, scheduler) { + var _a, _b; + + let bufferSize; + let refCount = false; + + if (configOrBufferSize && typeof configOrBufferSize === 'object') { + bufferSize = (_a = configOrBufferSize.bufferSize) !== null && _a !== void 0 ? _a : Infinity; + windowTime = (_b = configOrBufferSize.windowTime) !== null && _b !== void 0 ? _b : Infinity; + refCount = !!configOrBufferSize.refCount; + scheduler = configOrBufferSize.scheduler; + } else { + bufferSize = configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity; + } + + return (0,_share__WEBPACK_IMPORTED_MODULE_0__.share)({ + connector: () => new _ReplaySubject__WEBPACK_IMPORTED_MODULE_1__.ReplaySubject(bufferSize, windowTime, scheduler), + resetOnError: true, + resetOnComplete: false, + resetOnRefCountZero: refCount + }); +} + +/***/ }), + +/***/ 7260: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/skip.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "skip": () => (/* binding */ skip) +/* harmony export */ }); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./filter */ 116); + +function skip(count) { + return (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((_, index) => count <= index); +} + +/***/ }), + +/***/ 4874: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/startWith.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "startWith": () => (/* binding */ startWith) +/* harmony export */ }); +/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/concat */ 4240); +/* harmony import */ var _util_args__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/args */ 420); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); + + + +function startWith(...values) { + const scheduler = (0,_util_args__WEBPACK_IMPORTED_MODULE_0__.popScheduler)(values); + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + (scheduler ? (0,_observable_concat__WEBPACK_IMPORTED_MODULE_2__.concat)(values, source, scheduler) : (0,_observable_concat__WEBPACK_IMPORTED_MODULE_2__.concat)(values, source)).subscribe(subscriber); + }); +} + +/***/ }), + +/***/ 4317: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "subscribeOn": () => (/* binding */ subscribeOn) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); + +function subscribeOn(scheduler, delay = 0) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay)); + }); +} + +/***/ }), + +/***/ 2673: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/switchMap.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "switchMap": () => (/* binding */ switchMap) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function switchMap(project, resultSelector) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let innerSubscriber = null; + let index = 0; + let isComplete = false; + + const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete(); + + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe(); + let innerIndex = 0; + const outerIndex = index++; + (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_2__.innerFrom)(project(value, outerIndex)).subscribe(innerSubscriber = new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, innerValue => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue), () => { + innerSubscriber = null; + checkComplete(); + })); + }, () => { + isComplete = true; + checkComplete(); + })); + }); +} + +/***/ }), + +/***/ 9295: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/take.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "take": () => (/* binding */ take) +/* harmony export */ }); +/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/empty */ 591); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function take(count) { + return count <= 0 ? () => _observable_empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY : (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + let seen = 0; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + if (++seen <= count) { + subscriber.next(value); + + if (count <= seen) { + subscriber.complete(); + } + } + })); + }); +} + +/***/ }), + +/***/ 9601: +/*!*******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/takeLast.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "takeLast": () => (/* binding */ takeLast) +/* harmony export */ }); +/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/empty */ 591); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function takeLast(count) { + return count <= 0 ? () => _observable_empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY : (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + let buffer = []; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + buffer.push(value); + count < buffer.length && buffer.shift(); + }, () => { + for (const value of buffer) { + subscriber.next(value); + } + + subscriber.complete(); + }, undefined, () => { + buffer = null; + })); + }); +} + +/***/ }), + +/***/ 8951: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/takeUntil.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "takeUntil": () => (/* binding */ takeUntil) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/noop */ 9635); + + + + +function takeUntil(notifier) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_1__.innerFrom)(notifier).subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, () => subscriber.complete(), _util_noop__WEBPACK_IMPORTED_MODULE_3__.noop)); + !subscriber.closed && source.subscribe(subscriber); + }); +} + +/***/ }), + +/***/ 2566: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "takeWhile": () => (/* binding */ takeWhile) +/* harmony export */ }); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + +function takeWhile(predicate, inclusive = false) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let index = 0; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + const result = predicate(value, index++); + (result || inclusive) && subscriber.next(value); + !result && subscriber.complete(); + })); + }); +} + +/***/ }), + +/***/ 9337: +/*!**************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/tap.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "tap": () => (/* binding */ tap) +/* harmony export */ }); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isFunction */ 2971); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); +/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/identity */ 9173); + + + + +function tap(observerOrNext, error, complete) { + const tapObserver = (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(observerOrNext) || error || complete ? { + next: observerOrNext, + error, + complete + } : observerOrNext; + return tapObserver ? (0,_util_lift__WEBPACK_IMPORTED_MODULE_1__.operate)((source, subscriber) => { + var _a; + + (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + let isUnsub = true; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_2__.OperatorSubscriber(subscriber, value => { + var _a; + + (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value); + subscriber.next(value); + }, () => { + var _a; + + isUnsub = false; + (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + subscriber.complete(); + }, err => { + var _a; + + isUnsub = false; + (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err); + subscriber.error(err); + }, () => { + var _a, _b; + + if (isUnsub) { + (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + } + + (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver); + })); + }) : _util_identity__WEBPACK_IMPORTED_MODULE_3__.identity; +} + +/***/ }), + +/***/ 7354: +/*!***********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "throwIfEmpty": () => (/* binding */ throwIfEmpty) +/* harmony export */ }); +/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/EmptyError */ 4423); +/* harmony import */ var _util_lift__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/lift */ 1944); +/* harmony import */ var _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OperatorSubscriber */ 3945); + + + +function throwIfEmpty(errorFactory = defaultErrorFactory) { + return (0,_util_lift__WEBPACK_IMPORTED_MODULE_0__.operate)((source, subscriber) => { + let hasValue = false; + source.subscribe(new _OperatorSubscriber__WEBPACK_IMPORTED_MODULE_1__.OperatorSubscriber(subscriber, value => { + hasValue = true; + subscriber.next(value); + }, () => hasValue ? subscriber.complete() : subscriber.error(errorFactory()))); + }); +} + +function defaultErrorFactory() { + return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__.EmptyError(); +} + +/***/ }), + +/***/ 3417: +/*!************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduleArray": () => (/* binding */ scheduleArray) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); + +function scheduleArray(input, scheduler) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + let i = 0; + return scheduler.schedule(function () { + if (i === input.length) { + subscriber.complete(); + } else { + subscriber.next(input[i++]); + + if (!subscriber.closed) { + this.schedule(); + } + } + }); + }); +} + +/***/ }), + +/***/ 5646: +/*!********************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduleAsyncIterable": () => (/* binding */ scheduleAsyncIterable) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/executeSchedule */ 1817); + + +function scheduleAsyncIterable(input, scheduler) { + if (!input) { + throw new Error('Iterable cannot be null'); + } + + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__.executeSchedule)(subscriber, scheduler, () => { + const iterator = input[Symbol.asyncIterator](); + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__.executeSchedule)(subscriber, scheduler, () => { + iterator.next().then(result => { + if (result.done) { + subscriber.complete(); + } else { + subscriber.next(result.value); + } + }); + }, 0, true); + }); + }); +} + +/***/ }), + +/***/ 4924: +/*!***************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduleIterable": () => (/* binding */ scheduleIterable) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../symbol/iterator */ 7321); +/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isFunction */ 2971); +/* harmony import */ var _util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/executeSchedule */ 1817); + + + + +function scheduleIterable(input, scheduler) { + return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(subscriber => { + let iterator; + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__.executeSchedule)(subscriber, scheduler, () => { + iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__.iterator](); + (0,_util_executeSchedule__WEBPACK_IMPORTED_MODULE_1__.executeSchedule)(subscriber, scheduler, () => { + let value; + let done; + + try { + ({ + value, + done + } = iterator.next()); + } catch (err) { + subscriber.error(err); + return; + } + + if (done) { + subscriber.complete(); + } else { + subscriber.next(value); + } + }, 0, true); + }); + return () => (0,_util_isFunction__WEBPACK_IMPORTED_MODULE_3__.isFunction)(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); + }); +} + +/***/ }), + +/***/ 4349: +/*!*****************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduleObservable": () => (/* binding */ scheduleObservable) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/observeOn */ 8728); +/* harmony import */ var _operators_subscribeOn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../operators/subscribeOn */ 4317); + + + +function scheduleObservable(input, scheduler) { + return (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__.innerFrom)(input).pipe((0,_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_1__.subscribeOn)(scheduler), (0,_operators_observeOn__WEBPACK_IMPORTED_MODULE_2__.observeOn)(scheduler)); +} + +/***/ }), + +/***/ 6642: +/*!**************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "schedulePromise": () => (/* binding */ schedulePromise) +/* harmony export */ }); +/* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/innerFrom */ 4987); +/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/observeOn */ 8728); +/* harmony import */ var _operators_subscribeOn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../operators/subscribeOn */ 4317); + + + +function schedulePromise(input, scheduler) { + return (0,_observable_innerFrom__WEBPACK_IMPORTED_MODULE_0__.innerFrom)(input).pipe((0,_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_1__.subscribeOn)(scheduler), (0,_operators_observeOn__WEBPACK_IMPORTED_MODULE_2__.observeOn)(scheduler)); +} + +/***/ }), + +/***/ 316: +/*!*************************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduleReadableStreamLike": () => (/* binding */ scheduleReadableStreamLike) +/* harmony export */ }); +/* harmony import */ var _scheduleAsyncIterable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scheduleAsyncIterable */ 5646); +/* harmony import */ var _util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isReadableStreamLike */ 181); + + +function scheduleReadableStreamLike(input, scheduler) { + return (0,_scheduleAsyncIterable__WEBPACK_IMPORTED_MODULE_0__.scheduleAsyncIterable)((0,_util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_1__.readableStreamLikeToAsyncGenerator)(input), scheduler); +} + +/***/ }), + +/***/ 9517: +/*!********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "scheduled": () => (/* binding */ scheduled) +/* harmony export */ }); +/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scheduleObservable */ 4349); +/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./schedulePromise */ 6642); +/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./scheduleArray */ 3417); +/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./scheduleIterable */ 4924); +/* harmony import */ var _scheduleAsyncIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./scheduleAsyncIterable */ 5646); +/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isInteropObservable */ 1331); +/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isPromise */ 9548); +/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isArrayLike */ 9806); +/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/isIterable */ 3433); +/* harmony import */ var _util_isAsyncIterable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/isAsyncIterable */ 470); +/* harmony import */ var _util_throwUnobservableError__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../util/throwUnobservableError */ 7785); +/* harmony import */ var _util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/isReadableStreamLike */ 181); +/* harmony import */ var _scheduleReadableStreamLike__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./scheduleReadableStreamLike */ 316); + + + + + + + + + + + + + +function scheduled(input, scheduler) { + if (input != null) { + if ((0,_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__.isInteropObservable)(input)) { + return (0,_scheduleObservable__WEBPACK_IMPORTED_MODULE_1__.scheduleObservable)(input, scheduler); + } + + if ((0,_util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__.isArrayLike)(input)) { + return (0,_scheduleArray__WEBPACK_IMPORTED_MODULE_3__.scheduleArray)(input, scheduler); + } + + if ((0,_util_isPromise__WEBPACK_IMPORTED_MODULE_4__.isPromise)(input)) { + return (0,_schedulePromise__WEBPACK_IMPORTED_MODULE_5__.schedulePromise)(input, scheduler); + } + + if ((0,_util_isAsyncIterable__WEBPACK_IMPORTED_MODULE_6__.isAsyncIterable)(input)) { + return (0,_scheduleAsyncIterable__WEBPACK_IMPORTED_MODULE_7__.scheduleAsyncIterable)(input, scheduler); + } + + if ((0,_util_isIterable__WEBPACK_IMPORTED_MODULE_8__.isIterable)(input)) { + return (0,_scheduleIterable__WEBPACK_IMPORTED_MODULE_9__.scheduleIterable)(input, scheduler); + } + + if ((0,_util_isReadableStreamLike__WEBPACK_IMPORTED_MODULE_10__.isReadableStreamLike)(input)) { + return (0,_scheduleReadableStreamLike__WEBPACK_IMPORTED_MODULE_11__.scheduleReadableStreamLike)(input, scheduler); + } + } + + throw (0,_util_throwUnobservableError__WEBPACK_IMPORTED_MODULE_12__.createInvalidObservableTypeError)(input); +} + +/***/ }), + +/***/ 6733: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/Action.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Action": () => (/* binding */ Action) +/* harmony export */ }); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ 6078); + +class Action extends _Subscription__WEBPACK_IMPORTED_MODULE_0__.Subscription { + constructor(scheduler, work) { + super(); + } + + schedule(state, delay = 0) { + return this; + } + +} + +/***/ }), + +/***/ 3018: +/*!*******************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameAction.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnimationFrameAction": () => (/* binding */ AnimationFrameAction) +/* harmony export */ }); +/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ 5198); +/* harmony import */ var _animationFrameProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./animationFrameProvider */ 2915); + + +class AnimationFrameAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_0__.AsyncAction { + constructor(scheduler, work) { + super(scheduler, work); + this.scheduler = scheduler; + this.work = work; + } + + requestAsyncId(scheduler, id, delay = 0) { + if (delay !== null && delay > 0) { + return super.requestAsyncId(scheduler, id, delay); + } + + scheduler.actions.push(this); + return scheduler._scheduled || (scheduler._scheduled = _animationFrameProvider__WEBPACK_IMPORTED_MODULE_1__.animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined))); + } + + recycleAsyncId(scheduler, id, delay = 0) { + if (delay != null && delay > 0 || delay == null && this.delay > 0) { + return super.recycleAsyncId(scheduler, id, delay); + } + + if (scheduler.actions.length === 0) { + _animationFrameProvider__WEBPACK_IMPORTED_MODULE_1__.animationFrameProvider.cancelAnimationFrame(id); + scheduler._scheduled = undefined; + } + + return undefined; + } + +} + +/***/ }), + +/***/ 9415: +/*!**********************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameScheduler.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnimationFrameScheduler": () => (/* binding */ AnimationFrameScheduler) +/* harmony export */ }); +/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ 5744); + +class AnimationFrameScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__.AsyncScheduler { + flush(action) { + this._active = true; + this._scheduled = undefined; + const { + actions + } = this; + let error; + let index = -1; + action = action || actions.shift(); + const count = actions.length; + + do { + if (error = action.execute(action.state, action.delay)) { + break; + } + } while (++index < count && (action = actions.shift())); + + this._active = false; + + if (error) { + while (++index < count && (action = actions.shift())) { + action.unsubscribe(); + } + + throw error; + } + } + +} + +/***/ }), + +/***/ 4594: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AsapAction.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AsapAction": () => (/* binding */ AsapAction) +/* harmony export */ }); +/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ 5198); +/* harmony import */ var _immediateProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./immediateProvider */ 7666); + + +class AsapAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_0__.AsyncAction { + constructor(scheduler, work) { + super(scheduler, work); + this.scheduler = scheduler; + this.work = work; + } + + requestAsyncId(scheduler, id, delay = 0) { + if (delay !== null && delay > 0) { + return super.requestAsyncId(scheduler, id, delay); + } + + scheduler.actions.push(this); + return scheduler._scheduled || (scheduler._scheduled = _immediateProvider__WEBPACK_IMPORTED_MODULE_1__.immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined))); + } + + recycleAsyncId(scheduler, id, delay = 0) { + if (delay != null && delay > 0 || delay == null && this.delay > 0) { + return super.recycleAsyncId(scheduler, id, delay); + } + + if (scheduler.actions.length === 0) { + _immediateProvider__WEBPACK_IMPORTED_MODULE_1__.immediateProvider.clearImmediate(id); + scheduler._scheduled = undefined; + } + + return undefined; + } + +} + +/***/ }), + +/***/ 321: +/*!************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AsapScheduler.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AsapScheduler": () => (/* binding */ AsapScheduler) +/* harmony export */ }); +/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ 5744); + +class AsapScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__.AsyncScheduler { + flush(action) { + this._active = true; + this._scheduled = undefined; + const { + actions + } = this; + let error; + let index = -1; + action = action || actions.shift(); + const count = actions.length; + + do { + if (error = action.execute(action.state, action.delay)) { + break; + } + } while (++index < count && (action = actions.shift())); + + this._active = false; + + if (error) { + while (++index < count && (action = actions.shift())) { + action.unsubscribe(); + } + + throw error; + } + } + +} + +/***/ }), + +/***/ 5198: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AsyncAction": () => (/* binding */ AsyncAction) +/* harmony export */ }); +/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Action */ 6733); +/* harmony import */ var _intervalProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intervalProvider */ 1103); +/* harmony import */ var _util_arrRemove__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/arrRemove */ 9663); + + + +class AsyncAction extends _Action__WEBPACK_IMPORTED_MODULE_0__.Action { + constructor(scheduler, work) { + super(scheduler, work); + this.scheduler = scheduler; + this.work = work; + this.pending = false; + } + + schedule(state, delay = 0) { + if (this.closed) { + return this; + } + + this.state = state; + const id = this.id; + const scheduler = this.scheduler; + + if (id != null) { + this.id = this.recycleAsyncId(scheduler, id, delay); + } + + this.pending = true; + this.delay = delay; + this.id = this.id || this.requestAsyncId(scheduler, this.id, delay); + return this; + } + + requestAsyncId(scheduler, _id, delay = 0) { + return _intervalProvider__WEBPACK_IMPORTED_MODULE_1__.intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay); + } + + recycleAsyncId(_scheduler, id, delay = 0) { + if (delay != null && this.delay === delay && this.pending === false) { + return id; + } + + _intervalProvider__WEBPACK_IMPORTED_MODULE_1__.intervalProvider.clearInterval(id); + return undefined; + } + + execute(state, delay) { + if (this.closed) { + return new Error('executing a cancelled action'); + } + + this.pending = false; + + const error = this._execute(state, delay); + + if (error) { + return error; + } else if (this.pending === false && this.id != null) { + this.id = this.recycleAsyncId(this.scheduler, this.id, null); + } + } + + _execute(state, _delay) { + let errored = false; + let errorValue; + + try { + this.work(state); + } catch (e) { + errored = true; + errorValue = e ? e : new Error('Scheduled action threw falsy error'); + } + + if (errored) { + this.unsubscribe(); + return errorValue; + } + } + + unsubscribe() { + if (!this.closed) { + const { + id, + scheduler + } = this; + const { + actions + } = scheduler; + this.work = this.state = this.scheduler = null; + this.pending = false; + (0,_util_arrRemove__WEBPACK_IMPORTED_MODULE_2__.arrRemove)(actions, this); + + if (id != null) { + this.id = this.recycleAsyncId(scheduler, id, null); + } + + this.delay = null; + super.unsubscribe(); + } + } + +} + +/***/ }), + +/***/ 5744: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AsyncScheduler": () => (/* binding */ AsyncScheduler) +/* harmony export */ }); +/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Scheduler */ 5014); + +class AsyncScheduler extends _Scheduler__WEBPACK_IMPORTED_MODULE_0__.Scheduler { + constructor(SchedulerAction, now = _Scheduler__WEBPACK_IMPORTED_MODULE_0__.Scheduler.now) { + super(SchedulerAction, now); + this.actions = []; + this._active = false; + this._scheduled = undefined; + } + + flush(action) { + const { + actions + } = this; + + if (this._active) { + actions.push(action); + return; + } + + let error; + this._active = true; + + do { + if (error = action.execute(action.state, action.delay)) { + break; + } + } while (action = actions.shift()); + + this._active = false; + + if (error) { + while (action = actions.shift()) { + action.unsubscribe(); + } + + throw error; + } + } + +} + +/***/ }), + +/***/ 8184: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/animationFrame.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "animationFrame": () => (/* binding */ animationFrame), +/* harmony export */ "animationFrameScheduler": () => (/* binding */ animationFrameScheduler) +/* harmony export */ }); +/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AnimationFrameAction */ 3018); +/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AnimationFrameScheduler */ 9415); + + +const animationFrameScheduler = new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__.AnimationFrameScheduler(_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__.AnimationFrameAction); +const animationFrame = animationFrameScheduler; + +/***/ }), + +/***/ 2915: +/*!*********************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/animationFrameProvider.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "animationFrameProvider": () => (/* binding */ animationFrameProvider) +/* harmony export */ }); +/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ 6078); + +const animationFrameProvider = { + schedule(callback) { + let request = requestAnimationFrame; + let cancel = cancelAnimationFrame; + const { + delegate + } = animationFrameProvider; + + if (delegate) { + request = delegate.requestAnimationFrame; + cancel = delegate.cancelAnimationFrame; + } + + const handle = request(timestamp => { + cancel = undefined; + callback(timestamp); + }); + return new _Subscription__WEBPACK_IMPORTED_MODULE_0__.Subscription(() => cancel === null || cancel === void 0 ? void 0 : cancel(handle)); + }, + + requestAnimationFrame(...args) { + const { + delegate + } = animationFrameProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame)(...args); + }, + + cancelAnimationFrame(...args) { + const { + delegate + } = animationFrameProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame)(...args); + }, + + delegate: undefined +}; + +/***/ }), + +/***/ 9672: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/asap.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "asap": () => (/* binding */ asap), +/* harmony export */ "asapScheduler": () => (/* binding */ asapScheduler) +/* harmony export */ }); +/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsapAction */ 4594); +/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsapScheduler */ 321); + + +const asapScheduler = new _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__.AsapScheduler(_AsapAction__WEBPACK_IMPORTED_MODULE_1__.AsapAction); +const asap = asapScheduler; + +/***/ }), + +/***/ 6936: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/async.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "async": () => (/* binding */ async), +/* harmony export */ "asyncScheduler": () => (/* binding */ asyncScheduler) +/* harmony export */ }); +/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncAction */ 5198); +/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ 5744); + + +const asyncScheduler = new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__.AsyncScheduler(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction); +const async = asyncScheduler; + +/***/ }), + +/***/ 7654: +/*!********************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "dateTimestampProvider": () => (/* binding */ dateTimestampProvider) +/* harmony export */ }); +const dateTimestampProvider = { + now() { + return (dateTimestampProvider.delegate || Date).now(); + }, + + delegate: undefined +}; + +/***/ }), + +/***/ 7666: +/*!****************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/immediateProvider.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "immediateProvider": () => (/* binding */ immediateProvider) +/* harmony export */ }); +/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/Immediate */ 1714); + +const { + setImmediate, + clearImmediate +} = _util_Immediate__WEBPACK_IMPORTED_MODULE_0__.Immediate; +const immediateProvider = { + setImmediate(...args) { + const { + delegate + } = immediateProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate)(...args); + }, + + clearImmediate(handle) { + const { + delegate + } = immediateProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle); + }, + + delegate: undefined +}; + +/***/ }), + +/***/ 1103: +/*!***************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "intervalProvider": () => (/* binding */ intervalProvider) +/* harmony export */ }); +const intervalProvider = { + setInterval(...args) { + const { + delegate + } = intervalProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) || setInterval)(...args); + }, + + clearInterval(handle) { + const { + delegate + } = intervalProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle); + }, + + delegate: undefined +}; + +/***/ }), + +/***/ 3542: +/*!**************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "timeoutProvider": () => (/* binding */ timeoutProvider) +/* harmony export */ }); +const timeoutProvider = { + setTimeout(...args) { + const { + delegate + } = timeoutProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) || setTimeout)(...args); + }, + + clearTimeout(handle) { + const { + delegate + } = timeoutProvider; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle); + }, + + delegate: undefined +}; + +/***/ }), + +/***/ 7321: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/symbol/iterator.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getSymbolIterator": () => (/* binding */ getSymbolIterator), +/* harmony export */ "iterator": () => (/* binding */ iterator) +/* harmony export */ }); +function getSymbolIterator() { + if (typeof Symbol !== 'function' || !Symbol.iterator) { + return '@@iterator'; + } + + return Symbol.iterator; +} +const iterator = getSymbolIterator(); + +/***/ }), + +/***/ 4585: +/*!******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/symbol/observable.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "observable": () => (/* binding */ observable) +/* harmony export */ }); +const observable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')(); + +/***/ }), + +/***/ 4423: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/EmptyError.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EmptyError": () => (/* binding */ EmptyError) +/* harmony export */ }); +/* harmony import */ var _createErrorClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createErrorClass */ 7543); + +const EmptyError = (0,_createErrorClass__WEBPACK_IMPORTED_MODULE_0__.createErrorClass)(_super => function EmptyErrorImpl() { + _super(this); + + this.name = 'EmptyError'; + this.message = 'no elements in sequence'; +}); + +/***/ }), + +/***/ 1714: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/Immediate.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Immediate": () => (/* binding */ Immediate), +/* harmony export */ "TestTools": () => (/* binding */ TestTools) +/* harmony export */ }); +let nextHandle = 1; +let resolved; +const activeHandles = {}; + +function findAndClearHandle(handle) { + if (handle in activeHandles) { + delete activeHandles[handle]; + return true; + } + + return false; +} + +const Immediate = { + setImmediate(cb) { + const handle = nextHandle++; + activeHandles[handle] = true; + + if (!resolved) { + resolved = Promise.resolve(); + } + + resolved.then(() => findAndClearHandle(handle) && cb()); + return handle; + }, + + clearImmediate(handle) { + findAndClearHandle(handle); + } + +}; +const TestTools = { + pending() { + return Object.keys(activeHandles).length; + } + +}; + +/***/ }), + +/***/ 9872: +/*!*****************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ObjectUnsubscribedError": () => (/* binding */ ObjectUnsubscribedError) +/* harmony export */ }); +/* harmony import */ var _createErrorClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createErrorClass */ 7543); + +const ObjectUnsubscribedError = (0,_createErrorClass__WEBPACK_IMPORTED_MODULE_0__.createErrorClass)(_super => function ObjectUnsubscribedErrorImpl() { + _super(this); + + this.name = 'ObjectUnsubscribedError'; + this.message = 'object unsubscribed'; +}); + +/***/ }), + +/***/ 2524: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UnsubscriptionError": () => (/* binding */ UnsubscriptionError) +/* harmony export */ }); +/* harmony import */ var _createErrorClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createErrorClass */ 7543); + +const UnsubscriptionError = (0,_createErrorClass__WEBPACK_IMPORTED_MODULE_0__.createErrorClass)(_super => function UnsubscriptionErrorImpl(errors) { + _super(this); + + this.message = errors ? `${errors.length} errors occurred during unsubscription: +${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\n ')}` : ''; + this.name = 'UnsubscriptionError'; + this.errors = errors; +}); + +/***/ }), + +/***/ 420: +/*!**********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/args.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "popNumber": () => (/* binding */ popNumber), +/* harmony export */ "popResultSelector": () => (/* binding */ popResultSelector), +/* harmony export */ "popScheduler": () => (/* binding */ popScheduler) +/* harmony export */ }); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); +/* harmony import */ var _isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isScheduler */ 9867); + + + +function last(arr) { + return arr[arr.length - 1]; +} + +function popResultSelector(args) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(last(args)) ? args.pop() : undefined; +} +function popScheduler(args) { + return (0,_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(last(args)) ? args.pop() : undefined; +} +function popNumber(args, defaultValue) { + return typeof last(args) === 'number' ? args.pop() : defaultValue; +} + +/***/ }), + +/***/ 5756: +/*!**************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "argsArgArrayOrObject": () => (/* binding */ argsArgArrayOrObject) +/* harmony export */ }); +const { + isArray +} = Array; +const { + getPrototypeOf, + prototype: objectProto, + keys: getKeys +} = Object; +function argsArgArrayOrObject(args) { + if (args.length === 1) { + const first = args[0]; + + if (isArray(first)) { + return { + args: first, + keys: null + }; + } + + if (isPOJO(first)) { + const keys = getKeys(first); + return { + args: keys.map(key => first[key]), + keys + }; + } + } + + return { + args: args, + keys: null + }; +} + +function isPOJO(obj) { + return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto; +} + +/***/ }), + +/***/ 9663: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/arrRemove.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "arrRemove": () => (/* binding */ arrRemove) +/* harmony export */ }); +function arrRemove(arr, item) { + if (arr) { + const index = arr.indexOf(item); + 0 <= index && arr.splice(index, 1); + } +} + +/***/ }), + +/***/ 7543: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createErrorClass": () => (/* binding */ createErrorClass) +/* harmony export */ }); +function createErrorClass(createImpl) { + const _super = instance => { + Error.call(instance); + instance.stack = new Error().stack; + }; + + const ctorFunc = createImpl(_super); + ctorFunc.prototype = Object.create(Error.prototype); + ctorFunc.prototype.constructor = ctorFunc; + return ctorFunc; +} + +/***/ }), + +/***/ 1054: +/*!******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/createObject.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createObject": () => (/* binding */ createObject) +/* harmony export */ }); +function createObject(keys, values) { + return keys.reduce((result, key, i) => (result[key] = values[i], result), {}); +} + +/***/ }), + +/***/ 2309: +/*!******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/errorContext.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "captureError": () => (/* binding */ captureError), +/* harmony export */ "errorContext": () => (/* binding */ errorContext) +/* harmony export */ }); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ 9057); + +let context = null; +function errorContext(cb) { + if (_config__WEBPACK_IMPORTED_MODULE_0__.config.useDeprecatedSynchronousErrorHandling) { + const isRoot = !context; + + if (isRoot) { + context = { + errorThrown: false, + error: null + }; + } + + cb(); + + if (isRoot) { + const { + errorThrown, + error + } = context; + context = null; + + if (errorThrown) { + throw error; + } + } + } else { + cb(); + } +} +function captureError(err) { + if (_config__WEBPACK_IMPORTED_MODULE_0__.config.useDeprecatedSynchronousErrorHandling && context) { + context.errorThrown = true; + context.error = err; + } +} + +/***/ }), + +/***/ 1817: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/executeSchedule.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "executeSchedule": () => (/* binding */ executeSchedule) +/* harmony export */ }); +function executeSchedule(parentSubscription, scheduler, work, delay = 0, repeat = false) { + const scheduleSubscription = scheduler.schedule(function () { + work(); + + if (repeat) { + parentSubscription.add(this.schedule(null, delay)); + } else { + this.unsubscribe(); + } + }, delay); + parentSubscription.add(scheduleSubscription); + + if (!repeat) { + return scheduleSubscription; + } +} + +/***/ }), + +/***/ 9173: +/*!**************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/identity.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "identity": () => (/* binding */ identity) +/* harmony export */ }); +function identity(x) { + return x; +} + +/***/ }), + +/***/ 9806: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isArrayLike.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isArrayLike": () => (/* binding */ isArrayLike) +/* harmony export */ }); +const isArrayLike = x => x && typeof x.length === 'number' && typeof x !== 'function'; + +/***/ }), + +/***/ 470: +/*!*********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isAsyncIterable": () => (/* binding */ isAsyncIterable) +/* harmony export */ }); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + +function isAsyncIterable(obj) { + return Symbol.asyncIterator && (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]); +} + +/***/ }), + +/***/ 7885: +/*!************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isDate.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isValidDate": () => (/* binding */ isValidDate) +/* harmony export */ }); +function isValidDate(value) { + return value instanceof Date && !isNaN(value); +} + +/***/ }), + +/***/ 2971: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isFunction.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isFunction": () => (/* binding */ isFunction) +/* harmony export */ }); +function isFunction(value) { + return typeof value === 'function'; +} + +/***/ }), + +/***/ 1331: +/*!*************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isInteropObservable": () => (/* binding */ isInteropObservable) +/* harmony export */ }); +/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../symbol/observable */ 4585); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + + +function isInteropObservable(input) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(input[_symbol_observable__WEBPACK_IMPORTED_MODULE_1__.observable]); +} + +/***/ }), + +/***/ 3433: +/*!****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isIterable.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isIterable": () => (/* binding */ isIterable) +/* harmony export */ }); +/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../symbol/iterator */ 7321); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + + +function isIterable(input) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(input === null || input === void 0 ? void 0 : input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_1__.iterator]); +} + +/***/ }), + +/***/ 4437: +/*!******************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isObservable.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isObservable": () => (/* binding */ isObservable) +/* harmony export */ }); +/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ 833); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isFunction */ 2971); + + +function isObservable(obj) { + return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable || (0,_isFunction__WEBPACK_IMPORTED_MODULE_1__.isFunction)(obj.lift) && (0,_isFunction__WEBPACK_IMPORTED_MODULE_1__.isFunction)(obj.subscribe)); +} + +/***/ }), + +/***/ 9548: +/*!***************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isPromise.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isPromise": () => (/* binding */ isPromise) +/* harmony export */ }); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + +function isPromise(value) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(value === null || value === void 0 ? void 0 : value.then); +} + +/***/ }), + +/***/ 181: +/*!**************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isReadableStreamLike": () => (/* binding */ isReadableStreamLike), +/* harmony export */ "readableStreamLikeToAsyncGenerator": () => (/* binding */ readableStreamLikeToAsyncGenerator) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ 9126); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isFunction */ 2971); + + +function readableStreamLikeToAsyncGenerator(readableStream) { + return (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__asyncGenerator)(this, arguments, function* readableStreamLikeToAsyncGenerator_1() { + const reader = readableStream.getReader(); + + try { + while (true) { + const { + value, + done + } = yield (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__await)(reader.read()); + + if (done) { + return yield (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__await)(void 0); + } + + yield yield (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__await)(value); + } + } finally { + reader.releaseLock(); + } + }); +} +function isReadableStreamLike(obj) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_1__.isFunction)(obj === null || obj === void 0 ? void 0 : obj.getReader); +} + +/***/ }), + +/***/ 9867: +/*!*****************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/isScheduler.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isScheduler": () => (/* binding */ isScheduler) +/* harmony export */ }); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + +function isScheduler(value) { + return value && (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(value.schedule); +} + +/***/ }), + +/***/ 1944: +/*!**********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/lift.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "hasLift": () => (/* binding */ hasLift), +/* harmony export */ "operate": () => (/* binding */ operate) +/* harmony export */ }); +/* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction */ 2971); + +function hasLift(source) { + return (0,_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(source === null || source === void 0 ? void 0 : source.lift); +} +function operate(init) { + return source => { + if (hasLift(source)) { + return source.lift(function (liftedSource) { + try { + return init(liftedSource, this); + } catch (err) { + this.error(err); + } + }); + } + + throw new TypeError('Unable to lift unknown Observable type'); + }; +} + +/***/ }), + +/***/ 8385: +/*!**********************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "mapOneOrManyArgs": () => (/* binding */ mapOneOrManyArgs) +/* harmony export */ }); +/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../operators/map */ 635); + +const { + isArray +} = Array; + +function callOrApply(fn, args) { + return isArray(args) ? fn(...args) : fn(args); +} + +function mapOneOrManyArgs(fn) { + return (0,_operators_map__WEBPACK_IMPORTED_MODULE_0__.map)(args => callOrApply(fn, args)); +} + +/***/ }), + +/***/ 9635: +/*!**********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/noop.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "noop": () => (/* binding */ noop) +/* harmony export */ }); +function noop() {} + +/***/ }), + +/***/ 629: +/*!**********************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/pipe.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "pipe": () => (/* binding */ pipe), +/* harmony export */ "pipeFromArray": () => (/* binding */ pipeFromArray) +/* harmony export */ }); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity */ 9173); + +function pipe(...fns) { + return pipeFromArray(fns); +} +function pipeFromArray(fns) { + if (fns.length === 0) { + return _identity__WEBPACK_IMPORTED_MODULE_0__.identity; + } + + if (fns.length === 1) { + return fns[0]; + } + + return function piped(input) { + return fns.reduce((prev, fn) => fn(prev), input); + }; +} + +/***/ }), + +/***/ 4709: +/*!**************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "reportUnhandledError": () => (/* binding */ reportUnhandledError) +/* harmony export */ }); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config */ 9057); +/* harmony import */ var _scheduler_timeoutProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/timeoutProvider */ 3542); + + +function reportUnhandledError(err) { + _scheduler_timeoutProvider__WEBPACK_IMPORTED_MODULE_0__.timeoutProvider.setTimeout(() => { + const { + onUnhandledError + } = _config__WEBPACK_IMPORTED_MODULE_1__.config; + + if (onUnhandledError) { + onUnhandledError(err); + } else { + throw err; + } + }); +} + +/***/ }), + +/***/ 7785: +/*!****************************************************************************!*\ + !*** ./node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createInvalidObservableTypeError": () => (/* binding */ createInvalidObservableTypeError) +/* harmony export */ }); +function createInvalidObservableTypeError(input) { + return new TypeError(`You provided ${input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`); +} + +/***/ }), + +/***/ 5856: +/*!*****************************************************!*\ + !*** ./node_modules/zone.js/fesm2015/zone-error.js ***! + \*****************************************************/ +/***/ (() => { + + +/** + * @license Angular v14.2.0-next.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @fileoverview + * @suppress {globalThis,undefinedVars} + */ + +Zone.__load_patch('Error', (global, Zone, api) => { + /* + * This code patches Error so that: + * - It ignores un-needed stack frames. + * - It Shows the associated Zone for reach frame. + */ + const zoneJsInternalStackFramesSymbol = api.symbol('zoneJsInternalStackFrames'); + const NativeError = global[api.symbol('Error')] = global['Error']; // Store the frames which should be removed from the stack frames + + const zoneJsInternalStackFrames = {}; // We must find the frame where Error was created, otherwise we assume we don't understand stack + + let zoneAwareFrame1; + let zoneAwareFrame2; + let zoneAwareFrame1WithoutNew; + let zoneAwareFrame2WithoutNew; + let zoneAwareFrame3WithoutNew; + global['Error'] = ZoneAwareError; + const stackRewrite = 'stackRewrite'; + const zoneJsInternalStackFramesPolicy = global['__Zone_Error_BlacklistedStackFrames_policy'] || global['__Zone_Error_ZoneJsInternalStackFrames_policy'] || 'default'; + + function buildZoneFrameNames(zoneFrame) { + let zoneFrameName = { + zoneName: zoneFrame.zone.name + }; + let result = zoneFrameName; + + while (zoneFrame.parent) { + zoneFrame = zoneFrame.parent; + const parentZoneFrameName = { + zoneName: zoneFrame.zone.name + }; + zoneFrameName.parent = parentZoneFrameName; + zoneFrameName = parentZoneFrameName; + } + + return result; + } + + function buildZoneAwareStackFrames(originalStack, zoneFrame, isZoneFrame = true) { + let frames = originalStack.split('\n'); + let i = 0; // Find the first frame + + while (!(frames[i] === zoneAwareFrame1 || frames[i] === zoneAwareFrame2 || frames[i] === zoneAwareFrame1WithoutNew || frames[i] === zoneAwareFrame2WithoutNew || frames[i] === zoneAwareFrame3WithoutNew) && i < frames.length) { + i++; + } + + for (; i < frames.length && zoneFrame; i++) { + let frame = frames[i]; + + if (frame.trim()) { + switch (zoneJsInternalStackFrames[frame]) { + case 0 + /* FrameType.zoneJsInternal */ + : + frames.splice(i, 1); + i--; + break; + + case 1 + /* FrameType.transition */ + : + if (zoneFrame.parent) { + // This is the special frame where zone changed. Print and process it accordingly + zoneFrame = zoneFrame.parent; + } else { + zoneFrame = null; + } + + frames.splice(i, 1); + i--; + break; + + default: + frames[i] += isZoneFrame ? ` [${zoneFrame.zone.name}]` : ` [${zoneFrame.zoneName}]`; + } + } + } + + return frames.join('\n'); + } + /** + * This is ZoneAwareError which processes the stack frame and cleans up extra frames as well as + * adds zone information to it. + */ + + + function ZoneAwareError() { + // We always have to return native error otherwise the browser console will not work. + let error = NativeError.apply(this, arguments); // Save original stack trace + + const originalStack = error['originalStack'] = error.stack; // Process the stack trace and rewrite the frames. + + if (ZoneAwareError[stackRewrite] && originalStack) { + let zoneFrame = api.currentZoneFrame(); + + if (zoneJsInternalStackFramesPolicy === 'lazy') { + // don't handle stack trace now + error[api.symbol('zoneFrameNames')] = buildZoneFrameNames(zoneFrame); + } else if (zoneJsInternalStackFramesPolicy === 'default') { + try { + error.stack = error.zoneAwareStack = buildZoneAwareStackFrames(originalStack, zoneFrame); + } catch (e) {// ignore as some browsers don't allow overriding of stack + } + } + } + + if (this instanceof NativeError && this.constructor != NativeError) { + // We got called with a `new` operator AND we are subclass of ZoneAwareError + // in that case we have to copy all of our properties to `this`. + Object.keys(error).concat('stack', 'message').forEach(key => { + const value = error[key]; + + if (value !== undefined) { + try { + this[key] = value; + } catch (e) {// ignore the assignment in case it is a setter and it throws. + } + } + }); + return this; + } + + return error; + } // Copy the prototype so that instanceof operator works as expected + + + ZoneAwareError.prototype = NativeError.prototype; + ZoneAwareError[zoneJsInternalStackFramesSymbol] = zoneJsInternalStackFrames; + ZoneAwareError[stackRewrite] = false; + const zoneAwareStackSymbol = api.symbol('zoneAwareStack'); // try to define zoneAwareStack property when zoneJsInternal frames policy is delay + + if (zoneJsInternalStackFramesPolicy === 'lazy') { + Object.defineProperty(ZoneAwareError.prototype, 'zoneAwareStack', { + configurable: true, + enumerable: true, + get: function () { + if (!this[zoneAwareStackSymbol]) { + this[zoneAwareStackSymbol] = buildZoneAwareStackFrames(this.originalStack, this[api.symbol('zoneFrameNames')], false); + } + + return this[zoneAwareStackSymbol]; + }, + set: function (newStack) { + this.originalStack = newStack; + this[zoneAwareStackSymbol] = buildZoneAwareStackFrames(this.originalStack, this[api.symbol('zoneFrameNames')], false); + } + }); + } // those properties need special handling + + + const specialPropertyNames = ['stackTraceLimit', 'captureStackTrace', 'prepareStackTrace']; // those properties of NativeError should be set to ZoneAwareError + + const nativeErrorProperties = Object.keys(NativeError); + + if (nativeErrorProperties) { + nativeErrorProperties.forEach(prop => { + if (specialPropertyNames.filter(sp => sp === prop).length === 0) { + Object.defineProperty(ZoneAwareError, prop, { + get: function () { + return NativeError[prop]; + }, + set: function (value) { + NativeError[prop] = value; + } + }); + } + }); + } + + if (NativeError.hasOwnProperty('stackTraceLimit')) { + // Extend default stack limit as we will be removing few frames. + NativeError.stackTraceLimit = Math.max(NativeError.stackTraceLimit, 15); // make sure that ZoneAwareError has the same property which forwards to NativeError. + + Object.defineProperty(ZoneAwareError, 'stackTraceLimit', { + get: function () { + return NativeError.stackTraceLimit; + }, + set: function (value) { + return NativeError.stackTraceLimit = value; + } + }); + } + + if (NativeError.hasOwnProperty('captureStackTrace')) { + Object.defineProperty(ZoneAwareError, 'captureStackTrace', { + // add named function here because we need to remove this + // stack frame when prepareStackTrace below + value: function zoneCaptureStackTrace(targetObject, constructorOpt) { + NativeError.captureStackTrace(targetObject, constructorOpt); + } + }); + } + + const ZONE_CAPTURESTACKTRACE = 'zoneCaptureStackTrace'; + Object.defineProperty(ZoneAwareError, 'prepareStackTrace', { + get: function () { + return NativeError.prepareStackTrace; + }, + set: function (value) { + if (!value || typeof value !== 'function') { + return NativeError.prepareStackTrace = value; + } + + return NativeError.prepareStackTrace = function (error, structuredStackTrace) { + // remove additional stack information from ZoneAwareError.captureStackTrace + if (structuredStackTrace) { + for (let i = 0; i < structuredStackTrace.length; i++) { + const st = structuredStackTrace[i]; // remove the first function which name is zoneCaptureStackTrace + + if (st.getFunctionName() === ZONE_CAPTURESTACKTRACE) { + structuredStackTrace.splice(i, 1); + break; + } + } + } + + return value.call(this, error, structuredStackTrace); + }; + } + }); + + if (zoneJsInternalStackFramesPolicy === 'disable') { + // don't need to run detectZone to populate zoneJs internal stack frames + return; + } // Now we need to populate the `zoneJsInternalStackFrames` as well as find the + // run/runGuarded/runTask frames. This is done by creating a detect zone and then threading + // the execution through all of the above methods so that we can look at the stack trace and + // find the frames of interest. + + + let detectZone = Zone.current.fork({ + name: 'detect', + onHandleError: function (parentZD, current, target, error) { + if (error.originalStack && Error === ZoneAwareError) { + let frames = error.originalStack.split(/\n/); + let runFrame = false, + runGuardedFrame = false, + runTaskFrame = false; + + while (frames.length) { + let frame = frames.shift(); // On safari it is possible to have stack frame with no line number. + // This check makes sure that we don't filter frames on name only (must have + // line number or exact equals to `ZoneAwareError`) + + if (/:\d+:\d+/.test(frame) || frame === 'ZoneAwareError') { + // Get rid of the path so that we don't accidentally find function name in path. + // In chrome the separator is `(` and `@` in FF and safari + // Chrome: at Zone.run (zone.js:100) + // Chrome: at Zone.run (http://localhost:9876/base/build/lib/zone.js:100:24) + // FireFox: Zone.prototype.run@http://localhost:9876/base/build/lib/zone.js:101:24 + // Safari: run@http://localhost:9876/base/build/lib/zone.js:101:24 + let fnName = frame.split('(')[0].split('@')[0]; + let frameType = 1 + /* FrameType.transition */ + ; + + if (fnName.indexOf('ZoneAwareError') !== -1) { + if (fnName.indexOf('new ZoneAwareError') !== -1) { + zoneAwareFrame1 = frame; + zoneAwareFrame2 = frame.replace('new ZoneAwareError', 'new Error.ZoneAwareError'); + } else { + zoneAwareFrame1WithoutNew = frame; + zoneAwareFrame2WithoutNew = frame.replace('Error.', ''); + + if (frame.indexOf('Error.ZoneAwareError') === -1) { + zoneAwareFrame3WithoutNew = frame.replace('ZoneAwareError', 'Error.ZoneAwareError'); + } + } + + zoneJsInternalStackFrames[zoneAwareFrame2] = 0 + /* FrameType.zoneJsInternal */ + ; + } + + if (fnName.indexOf('runGuarded') !== -1) { + runGuardedFrame = true; + } else if (fnName.indexOf('runTask') !== -1) { + runTaskFrame = true; + } else if (fnName.indexOf('run') !== -1) { + runFrame = true; + } else { + frameType = 0 + /* FrameType.zoneJsInternal */ + ; + } + + zoneJsInternalStackFrames[frame] = frameType; // Once we find all of the frames we can stop looking. + + if (runFrame && runGuardedFrame && runTaskFrame) { + ZoneAwareError[stackRewrite] = true; + break; + } + } + } + } + + return false; + } + }); // carefully constructor a stack frame which contains all of the frames of interest which + // need to be detected and marked as an internal zoneJs frame. + + const childDetectZone = detectZone.fork({ + name: 'child', + onScheduleTask: function (delegate, curr, target, task) { + return delegate.scheduleTask(target, task); + }, + onInvokeTask: function (delegate, curr, target, task, applyThis, applyArgs) { + return delegate.invokeTask(target, task, applyThis, applyArgs); + }, + onCancelTask: function (delegate, curr, target, task) { + return delegate.cancelTask(target, task); + }, + onInvoke: function (delegate, curr, target, callback, applyThis, applyArgs, source) { + return delegate.invoke(target, callback, applyThis, applyArgs, source); + } + }); // we need to detect all zone related frames, it will + // exceed default stackTraceLimit, so we set it to + // larger number here, and restore it after detect finish. + // We cast through any so we don't need to depend on nodejs typings. + + const originalStackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = 100; // we schedule event/micro/macro task, and invoke them + // when onSchedule, so we can get all stack traces for + // all kinds of tasks with one error thrown. + + childDetectZone.run(() => { + childDetectZone.runGuarded(() => { + const fakeTransitionTo = () => {}; + + childDetectZone.scheduleEventTask(zoneJsInternalStackFramesSymbol, () => { + childDetectZone.scheduleMacroTask(zoneJsInternalStackFramesSymbol, () => { + childDetectZone.scheduleMicroTask(zoneJsInternalStackFramesSymbol, () => { + throw new Error(); + }, undefined, t => { + t._transitionTo = fakeTransitionTo; + t.invoke(); + }); + childDetectZone.scheduleMicroTask(zoneJsInternalStackFramesSymbol, () => { + throw Error(); + }, undefined, t => { + t._transitionTo = fakeTransitionTo; + t.invoke(); + }); + }, undefined, t => { + t._transitionTo = fakeTransitionTo; + t.invoke(); + }, () => {}); + }, undefined, t => { + t._transitionTo = fakeTransitionTo; + t.invoke(); + }, () => {}); + }); + }); + Error.stackTraceLimit = originalStackTraceLimit; +}); + +/***/ }), + +/***/ 9126: +/*!***********************************************************!*\ + !*** ./node_modules/rxjs/node_modules/tslib/tslib.es6.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__assign": () => (/* binding */ __assign), +/* harmony export */ "__asyncDelegator": () => (/* binding */ __asyncDelegator), +/* harmony export */ "__asyncGenerator": () => (/* binding */ __asyncGenerator), +/* harmony export */ "__asyncValues": () => (/* binding */ __asyncValues), +/* harmony export */ "__await": () => (/* binding */ __await), +/* harmony export */ "__awaiter": () => (/* binding */ __awaiter), +/* harmony export */ "__classPrivateFieldGet": () => (/* binding */ __classPrivateFieldGet), +/* harmony export */ "__classPrivateFieldSet": () => (/* binding */ __classPrivateFieldSet), +/* harmony export */ "__createBinding": () => (/* binding */ __createBinding), +/* harmony export */ "__decorate": () => (/* binding */ __decorate), +/* harmony export */ "__exportStar": () => (/* binding */ __exportStar), +/* harmony export */ "__extends": () => (/* binding */ __extends), +/* harmony export */ "__generator": () => (/* binding */ __generator), +/* harmony export */ "__importDefault": () => (/* binding */ __importDefault), +/* harmony export */ "__importStar": () => (/* binding */ __importStar), +/* harmony export */ "__makeTemplateObject": () => (/* binding */ __makeTemplateObject), +/* harmony export */ "__metadata": () => (/* binding */ __metadata), +/* harmony export */ "__param": () => (/* binding */ __param), +/* harmony export */ "__read": () => (/* binding */ __read), +/* harmony export */ "__rest": () => (/* binding */ __rest), +/* harmony export */ "__spread": () => (/* binding */ __spread), +/* harmony export */ "__spreadArray": () => (/* binding */ __spreadArray), +/* harmony export */ "__spreadArrays": () => (/* binding */ __spreadArrays), +/* harmony export */ "__values": () => (/* binding */ __values) +/* harmony export */ }); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} + +function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var __createBinding = Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); + +function __exportStar(m, o) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); +} + +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +/** @deprecated */ +function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; +} + +/** @deprecated */ +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +} + +function __spreadArray(to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +} + +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} + +function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} + +function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } +} + +function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; + +var __setModuleDefault = Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}; + +function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +} + +function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} + +function __classPrivateFieldGet(receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +} + +function __classPrivateFieldSet(receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +} + + +/***/ }), + +/***/ 4851: +/*!******************************************************************!*\ + !*** ./node_modules/@angular/animations/fesm2020/animations.mjs ***! + \******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AUTO_STYLE": () => (/* binding */ AUTO_STYLE), +/* harmony export */ "AnimationBuilder": () => (/* binding */ AnimationBuilder), +/* harmony export */ "AnimationFactory": () => (/* binding */ AnimationFactory), +/* harmony export */ "NoopAnimationPlayer": () => (/* binding */ NoopAnimationPlayer), +/* harmony export */ "animate": () => (/* binding */ animate), +/* harmony export */ "animateChild": () => (/* binding */ animateChild), +/* harmony export */ "animation": () => (/* binding */ animation), +/* harmony export */ "group": () => (/* binding */ group), +/* harmony export */ "keyframes": () => (/* binding */ keyframes), +/* harmony export */ "query": () => (/* binding */ query), +/* harmony export */ "sequence": () => (/* binding */ sequence), +/* harmony export */ "stagger": () => (/* binding */ stagger), +/* harmony export */ "state": () => (/* binding */ state), +/* harmony export */ "style": () => (/* binding */ style), +/* harmony export */ "transition": () => (/* binding */ transition), +/* harmony export */ "trigger": () => (/* binding */ trigger), +/* harmony export */ "useAnimation": () => (/* binding */ useAnimation), +/* harmony export */ "ɵAnimationGroupPlayer": () => (/* binding */ AnimationGroupPlayer), +/* harmony export */ "ɵPRE_STYLE": () => (/* binding */ ɵPRE_STYLE) +/* harmony export */ }); +/** + * @license Angular v14.3.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + +/** + * An injectable service that produces an animation sequence programmatically within an + * Angular component or directive. + * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`. + * + * @usageNotes + * + * To use this service, add it to your component or directive as a dependency. + * The service is instantiated along with your component. + * + * Apps do not typically need to create their own animation players, but if you + * do need to, follow these steps: + * + * 1. Use the [AnimationBuilder.build](api/animations/AnimationBuilder#build)() method + * to create a programmatic animation. The method returns an `AnimationFactory` instance. + * + * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element. + * + * 3. Use the player object to control the animation programmatically. + * + * For example: + * + * ```ts + * // import the service from BrowserAnimationsModule + * import {AnimationBuilder} from '@angular/animations'; + * // require the service as a dependency + * class MyCmp { + * constructor(private _builder: AnimationBuilder) {} + * + * makeAnimation(element: any) { + * // first define a reusable animation + * const myAnimation = this._builder.build([ + * style({ width: 0 }), + * animate(1000, style({ width: '100px' })) + * ]); + * + * // use the returned factory object to create a player + * const player = myAnimation.create(element); + * + * player.play(); + * } + * } + * ``` + * + * @publicApi + */ +class AnimationBuilder {} +/** + * A factory object returned from the + * [AnimationBuilder.build](api/animations/AnimationBuilder#build)() + * method. + * + * @publicApi + */ + + +class AnimationFactory {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Specifies automatic styling. + * + * @publicApi + */ + + +const AUTO_STYLE = '*'; +/** + * Creates a named animation trigger, containing a list of [`state()`](api/animations/state) + * and `transition()` entries to be evaluated when the expression + * bound to the trigger changes. + * + * @param name An identifying string. + * @param definitions An animation definition object, containing an array of + * [`state()`](api/animations/state) and `transition()` declarations. + * + * @return An object that encapsulates the trigger data. + * + * @usageNotes + * Define an animation trigger in the `animations` section of `@Component` metadata. + * In the template, reference the trigger by name and bind it to a trigger expression that + * evaluates to a defined animation state, using the following format: + * + * `[@triggerName]="expression"` + * + * Animation trigger bindings convert all values to strings, and then match the + * previous and current values against any linked transitions. + * Booleans can be specified as `1` or `true` and `0` or `false`. + * + * ### Usage Example + * + * The following example creates an animation trigger reference based on the provided + * name value. + * The provided animation value is expected to be an array consisting of state and + * transition declarations. + * + * ```typescript + * @Component({ + * selector: "my-component", + * templateUrl: "my-component-tpl.html", + * animations: [ + * trigger("myAnimationTrigger", [ + * state(...), + * state(...), + * transition(...), + * transition(...) + * ]) + * ] + * }) + * class MyComponent { + * myStatusExp = "something"; + * } + * ``` + * + * The template associated with this component makes use of the defined trigger + * by binding to an element within its template code. + * + * ```html + * + *
...
+ * ``` + * + * ### Using an inline function + * The `transition` animation method also supports reading an inline function which can decide + * if its associated animation should be run. + * + * ```typescript + * // this method is run each time the `myAnimationTrigger` trigger value changes. + * function myInlineMatcherFn(fromState: string, toState: string, element: any, params: {[key: + string]: any}): boolean { + * // notice that `element` and `params` are also available here + * return toState == 'yes-please-animate'; + * } + * + * @Component({ + * selector: 'my-component', + * templateUrl: 'my-component-tpl.html', + * animations: [ + * trigger('myAnimationTrigger', [ + * transition(myInlineMatcherFn, [ + * // the animation sequence code + * ]), + * ]) + * ] + * }) + * class MyComponent { + * myStatusExp = "yes-please-animate"; + * } + * ``` + * + * ### Disabling Animations + * When true, the special animation control binding `@.disabled` binding prevents + * all animations from rendering. + * Place the `@.disabled` binding on an element to disable + * animations on the element itself, as well as any inner animation triggers + * within the element. + * + * The following example shows how to use this feature: + * + * ```typescript + * @Component({ + * selector: 'my-component', + * template: ` + *
+ *
+ *
+ * `, + * animations: [ + * trigger("childAnimation", [ + * // ... + * ]) + * ] + * }) + * class MyComponent { + * isDisabled = true; + * exp = '...'; + * } + * ``` + * + * When `@.disabled` is true, it prevents the `@childAnimation` trigger from animating, + * along with any inner animations. + * + * ### Disable animations application-wide + * When an area of the template is set to have animations disabled, + * **all** inner components have their animations disabled as well. + * This means that you can disable all animations for an app + * by placing a host binding set on `@.disabled` on the topmost Angular component. + * + * ```typescript + * import {Component, HostBinding} from '@angular/core'; + * + * @Component({ + * selector: 'app-component', + * templateUrl: 'app.component.html', + * }) + * class AppComponent { + * @HostBinding('@.disabled') + * public animationsDisabled = true; + * } + * ``` + * + * ### Overriding disablement of inner animations + * Despite inner animations being disabled, a parent animation can `query()` + * for inner elements located in disabled areas of the template and still animate + * them if needed. This is also the case for when a sub animation is + * queried by a parent and then later animated using `animateChild()`. + * + * ### Detecting when an animation is disabled + * If a region of the DOM (or the entire application) has its animations disabled, the animation + * trigger callbacks still fire, but for zero seconds. When the callback fires, it provides + * an instance of an `AnimationEvent`. If animations are disabled, + * the `.disabled` flag on the event is true. + * + * @publicApi + */ + +function trigger(name, definitions) { + return { + type: 7 + /* AnimationMetadataType.Trigger */ + , + name, + definitions, + options: {} + }; +} +/** + * Defines an animation step that combines styling information with timing information. + * + * @param timings Sets `AnimateTimings` for the parent animation. + * A string in the format "duration [delay] [easing]". + * - Duration and delay are expressed as a number and optional time unit, + * such as "1s" or "10ms" for one second and 10 milliseconds, respectively. + * The default unit is milliseconds. + * - The easing value controls how the animation accelerates and decelerates + * during its runtime. Value is one of `ease`, `ease-in`, `ease-out`, + * `ease-in-out`, or a `cubic-bezier()` function call. + * If not supplied, no easing is applied. + * + * For example, the string "1s 100ms ease-out" specifies a duration of + * 1000 milliseconds, and delay of 100 ms, and the "ease-out" easing style, + * which decelerates near the end of the duration. + * @param styles Sets AnimationStyles for the parent animation. + * A function call to either `style()` or `keyframes()` + * that returns a collection of CSS style entries to be applied to the parent animation. + * When null, uses the styles from the destination state. + * This is useful when describing an animation step that will complete an animation; + * see "Animating to the final state" in `transitions()`. + * @returns An object that encapsulates the animation step. + * + * @usageNotes + * Call within an animation `sequence()`, `{@link animations/group group()}`, or + * `transition()` call to specify an animation step + * that applies given style data to the parent animation for a given amount of time. + * + * ### Syntax Examples + * **Timing examples** + * + * The following examples show various `timings` specifications. + * - `animate(500)` : Duration is 500 milliseconds. + * - `animate("1s")` : Duration is 1000 milliseconds. + * - `animate("100ms 0.5s")` : Duration is 100 milliseconds, delay is 500 milliseconds. + * - `animate("5s ease-in")` : Duration is 5000 milliseconds, easing in. + * - `animate("5s 10ms cubic-bezier(.17,.67,.88,.1)")` : Duration is 5000 milliseconds, delay is 10 + * milliseconds, easing according to a bezier curve. + * + * **Style examples** + * + * The following example calls `style()` to set a single CSS style. + * ```typescript + * animate(500, style({ background: "red" })) + * ``` + * The following example calls `keyframes()` to set a CSS style + * to different values for successive keyframes. + * ```typescript + * animate(500, keyframes( + * [ + * style({ background: "blue" }), + * style({ background: "red" }) + * ]) + * ``` + * + * @publicApi + */ + + +function animate(timings, styles = null) { + return { + type: 4 + /* AnimationMetadataType.Animate */ + , + styles, + timings + }; +} +/** + * @description Defines a list of animation steps to be run in parallel. + * + * @param steps An array of animation step objects. + * - When steps are defined by `style()` or `animate()` + * function calls, each call within the group is executed instantly. + * - To specify offset styles to be applied at a later time, define steps with + * `keyframes()`, or use `animate()` calls with a delay value. + * For example: + * + * ```typescript + * group([ + * animate("1s", style({ background: "black" })), + * animate("2s", style({ color: "white" })) + * ]) + * ``` + * + * @param options An options object containing a delay and + * developer-defined parameters that provide styling defaults and + * can be overridden on invocation. + * + * @return An object that encapsulates the group data. + * + * @usageNotes + * Grouped animations are useful when a series of styles must be + * animated at different starting times and closed off at different ending times. + * + * When called within a `sequence()` or a + * `transition()` call, does not continue to the next + * instruction until all of the inner animation steps have completed. + * + * @publicApi + */ + + +function group(steps, options = null) { + return { + type: 3 + /* AnimationMetadataType.Group */ + , + steps, + options + }; +} +/** + * Defines a list of animation steps to be run sequentially, one by one. + * + * @param steps An array of animation step objects. + * - Steps defined by `style()` calls apply the styling data immediately. + * - Steps defined by `animate()` calls apply the styling data over time + * as specified by the timing data. + * + * ```typescript + * sequence([ + * style({ opacity: 0 }), + * animate("1s", style({ opacity: 1 })) + * ]) + * ``` + * + * @param options An options object containing a delay and + * developer-defined parameters that provide styling defaults and + * can be overridden on invocation. + * + * @return An object that encapsulates the sequence data. + * + * @usageNotes + * When you pass an array of steps to a + * `transition()` call, the steps run sequentially by default. + * Compare this to the `{@link animations/group group()}` call, which runs animation steps in + *parallel. + * + * When a sequence is used within a `{@link animations/group group()}` or a `transition()` call, + * execution continues to the next instruction only after each of the inner animation + * steps have completed. + * + * @publicApi + **/ + + +function sequence(steps, options = null) { + return { + type: 2 + /* AnimationMetadataType.Sequence */ + , + steps, + options + }; +} +/** + * Declares a key/value object containing CSS properties/styles that + * can then be used for an animation [`state`](api/animations/state), within an animation + *`sequence`, or as styling data for calls to `animate()` and `keyframes()`. + * + * @param tokens A set of CSS styles or HTML styles associated with an animation state. + * The value can be any of the following: + * - A key-value style pair associating a CSS property with a value. + * - An array of key-value style pairs. + * - An asterisk (*), to use auto-styling, where styles are derived from the element + * being animated and applied to the animation when it starts. + * + * Auto-styling can be used to define a state that depends on layout or other + * environmental factors. + * + * @return An object that encapsulates the style data. + * + * @usageNotes + * The following examples create animation styles that collect a set of + * CSS property values: + * + * ```typescript + * // string values for CSS properties + * style({ background: "red", color: "blue" }) + * + * // numerical pixel values + * style({ width: 100, height: 0 }) + * ``` + * + * The following example uses auto-styling to allow an element to animate from + * a height of 0 up to its full height: + * + * ``` + * style({ height: 0 }), + * animate("1s", style({ height: "*" })) + * ``` + * + * @publicApi + **/ + + +function style(tokens) { + return { + type: 6 + /* AnimationMetadataType.Style */ + , + styles: tokens, + offset: null + }; +} +/** + * Declares an animation state within a trigger attached to an element. + * + * @param name One or more names for the defined state in a comma-separated string. + * The following reserved state names can be supplied to define a style for specific use + * cases: + * + * - `void` You can associate styles with this name to be used when + * the element is detached from the application. For example, when an `ngIf` evaluates + * to false, the state of the associated element is void. + * - `*` (asterisk) Indicates the default state. You can associate styles with this name + * to be used as the fallback when the state that is being animated is not declared + * within the trigger. + * + * @param styles A set of CSS styles associated with this state, created using the + * `style()` function. + * This set of styles persists on the element once the state has been reached. + * @param options Parameters that can be passed to the state when it is invoked. + * 0 or more key-value pairs. + * @return An object that encapsulates the new state data. + * + * @usageNotes + * Use the `trigger()` function to register states to an animation trigger. + * Use the `transition()` function to animate between states. + * When a state is active within a component, its associated styles persist on the element, + * even when the animation ends. + * + * @publicApi + **/ + + +function state(name, styles, options) { + return { + type: 0 + /* AnimationMetadataType.State */ + , + name, + styles, + options + }; +} +/** + * Defines a set of animation styles, associating each style with an optional `offset` value. + * + * @param steps A set of animation styles with optional offset data. + * The optional `offset` value for a style specifies a percentage of the total animation + * time at which that style is applied. + * @returns An object that encapsulates the keyframes data. + * + * @usageNotes + * Use with the `animate()` call. Instead of applying animations + * from the current state + * to the destination state, keyframes describe how each style entry is applied and at what point + * within the animation arc. + * Compare [CSS Keyframe Animations](https://www.w3schools.com/css/css3_animations.asp). + * + * ### Usage + * + * In the following example, the offset values describe + * when each `backgroundColor` value is applied. The color is red at the start, and changes to + * blue when 20% of the total time has elapsed. + * + * ```typescript + * // the provided offset values + * animate("5s", keyframes([ + * style({ backgroundColor: "red", offset: 0 }), + * style({ backgroundColor: "blue", offset: 0.2 }), + * style({ backgroundColor: "orange", offset: 0.3 }), + * style({ backgroundColor: "black", offset: 1 }) + * ])) + * ``` + * + * If there are no `offset` values specified in the style entries, the offsets + * are calculated automatically. + * + * ```typescript + * animate("5s", keyframes([ + * style({ backgroundColor: "red" }) // offset = 0 + * style({ backgroundColor: "blue" }) // offset = 0.33 + * style({ backgroundColor: "orange" }) // offset = 0.66 + * style({ backgroundColor: "black" }) // offset = 1 + * ])) + *``` + + * @publicApi + */ + + +function keyframes(steps) { + return { + type: 5 + /* AnimationMetadataType.Keyframes */ + , + steps + }; +} +/** + * Declares an animation transition which is played when a certain specified condition is met. + * + * @param stateChangeExpr A string with a specific format or a function that specifies when the + * animation transition should occur (see [State Change Expression](#state-change-expression)). + * + * @param steps One or more animation objects that represent the animation's instructions. + * + * @param options An options object that can be used to specify a delay for the animation or provide + * custom parameters for it. + * + * @returns An object that encapsulates the transition data. + * + * @usageNotes + * + * ### State Change Expression + * + * The State Change Expression instructs Angular when to run the transition's animations, it can + *either be + * - a string with a specific syntax + * - or a function that compares the previous and current state (value of the expression bound to + * the element's trigger) and returns `true` if the transition should occur or `false` otherwise + * + * The string format can be: + * - `fromState => toState`, which indicates that the transition's animations should occur then the + * expression bound to the trigger's element goes from `fromState` to `toState` + * + * _Example:_ + * ```typescript + * transition('open => closed', animate('.5s ease-out', style({ height: 0 }) )) + * ``` + * + * - `fromState <=> toState`, which indicates that the transition's animations should occur then + * the expression bound to the trigger's element goes from `fromState` to `toState` or vice versa + * + * _Example:_ + * ```typescript + * transition('enabled <=> disabled', animate('1s cubic-bezier(0.8,0.3,0,1)')) + * ``` + * + * - `:enter`/`:leave`, which indicates that the transition's animations should occur when the + * element enters or exists the DOM + * + * _Example:_ + * ```typescript + * transition(':enter', [ + * style({ opacity: 0 }), + * animate('500ms', style({ opacity: 1 })) + * ]) + * ``` + * + * - `:increment`/`:decrement`, which indicates that the transition's animations should occur when + * the numerical expression bound to the trigger's element has increased in value or decreased + * + * _Example:_ + * ```typescript + * transition(':increment', query('@counter', animateChild())) + * ``` + * + * - a sequence of any of the above divided by commas, which indicates that transition's animations + * should occur whenever one of the state change expressions matches + * + * _Example:_ + * ```typescript + * transition(':increment, * => enabled, :enter', animate('1s ease', keyframes([ + * style({ transform: 'scale(1)', offset: 0}), + * style({ transform: 'scale(1.1)', offset: 0.7}), + * style({ transform: 'scale(1)', offset: 1}) + * ]))), + * ``` + * + * Also note that in such context: + * - `void` can be used to indicate the absence of the element + * - asterisks can be used as wildcards that match any state + * - (as a consequence of the above, `void => *` is equivalent to `:enter` and `* => void` is + * equivalent to `:leave`) + * - `true` and `false` also match expression values of `1` and `0` respectively (but do not match + * _truthy_ and _falsy_ values) + * + *
+ * + * Be careful about entering end leaving elements as their transitions present a common + * pitfall for developers. + * + * Note that when an element with a trigger enters the DOM its `:enter` transition always + * gets executed, but its `:leave` transition will not be executed if the element is removed + * alongside its parent (as it will be removed "without warning" before its transition has + * a chance to be executed, the only way that such transition can occur is if the element + * is exiting the DOM on its own). + * + * + *
+ * + * ### Animating to a Final State + * + * If the final step in a transition is a call to `animate()` that uses a timing value + * with no `style` data, that step is automatically considered the final animation arc, + * for the element to reach the final state, in such case Angular automatically adds or removes + * CSS styles to ensure that the element is in the correct final state. + * + * + * ### Usage Examples + * + * - Transition animations applied based on + * the trigger's expression value + * + * ```HTML + *
+ * ... + *
+ * ``` + * + * ```typescript + * trigger("myAnimationTrigger", [ + * ..., // states + * transition("on => off, open => closed", animate(500)), + * transition("* <=> error", query('.indicator', animateChild())) + * ]) + * ``` + * + * - Transition animations applied based on custom logic dependent + * on the trigger's expression value and provided parameters + * + * ```HTML + *
+ * ... + *
+ * ``` + * + * ```typescript + * trigger("myAnimationTrigger", [ + * ..., // states + * transition( + * (fromState, toState, _element, params) => + * ['firststep', 'laststep'].includes(fromState.toLowerCase()) + * && toState === params?.['target'], + * animate('1s') + * ) + * ]) + * ``` + * + * @publicApi + **/ + + +function transition(stateChangeExpr, steps, options = null) { + return { + type: 1 + /* AnimationMetadataType.Transition */ + , + expr: stateChangeExpr, + animation: steps, + options + }; +} +/** + * Produces a reusable animation that can be invoked in another animation or sequence, + * by calling the `useAnimation()` function. + * + * @param steps One or more animation objects, as returned by the `animate()` + * or `sequence()` function, that form a transformation from one state to another. + * A sequence is used by default when you pass an array. + * @param options An options object that can contain a delay value for the start of the + * animation, and additional developer-defined parameters. + * Provided values for additional parameters are used as defaults, + * and override values can be passed to the caller on invocation. + * @returns An object that encapsulates the animation data. + * + * @usageNotes + * The following example defines a reusable animation, providing some default parameter + * values. + * + * ```typescript + * var fadeAnimation = animation([ + * style({ opacity: '{{ start }}' }), + * animate('{{ time }}', + * style({ opacity: '{{ end }}'})) + * ], + * { params: { time: '1000ms', start: 0, end: 1 }}); + * ``` + * + * The following invokes the defined animation with a call to `useAnimation()`, + * passing in override parameter values. + * + * ```js + * useAnimation(fadeAnimation, { + * params: { + * time: '2s', + * start: 1, + * end: 0 + * } + * }) + * ``` + * + * If any of the passed-in parameter values are missing from this call, + * the default values are used. If one or more parameter values are missing before a step is + * animated, `useAnimation()` throws an error. + * + * @publicApi + */ + + +function animation(steps, options = null) { + return { + type: 8 + /* AnimationMetadataType.Reference */ + , + animation: steps, + options + }; +} +/** + * Executes a queried inner animation element within an animation sequence. + * + * @param options An options object that can contain a delay value for the start of the + * animation, and additional override values for developer-defined parameters. + * @return An object that encapsulates the child animation data. + * + * @usageNotes + * Each time an animation is triggered in Angular, the parent animation + * has priority and any child animations are blocked. In order + * for a child animation to run, the parent animation must query each of the elements + * containing child animations, and run them using this function. + * + * Note that this feature is designed to be used with `query()` and it will only work + * with animations that are assigned using the Angular animation library. CSS keyframes + * and transitions are not handled by this API. + * + * @publicApi + */ + + +function animateChild(options = null) { + return { + type: 9 + /* AnimationMetadataType.AnimateChild */ + , + options + }; +} +/** + * Starts a reusable animation that is created using the `animation()` function. + * + * @param animation The reusable animation to start. + * @param options An options object that can contain a delay value for the start of + * the animation, and additional override values for developer-defined parameters. + * @return An object that contains the animation parameters. + * + * @publicApi + */ + + +function useAnimation(animation, options = null) { + return { + type: 10 + /* AnimationMetadataType.AnimateRef */ + , + animation, + options + }; +} +/** + * Finds one or more inner elements within the current element that is + * being animated within a sequence. Use with `animate()`. + * + * @param selector The element to query, or a set of elements that contain Angular-specific + * characteristics, specified with one or more of the following tokens. + * - `query(":enter")` or `query(":leave")` : Query for newly inserted/removed elements (not + * all elements can be queried via these tokens, see + * [Entering and Leaving Elements](#entering-and-leaving-elements)) + * - `query(":animating")` : Query all currently animating elements. + * - `query("@triggerName")` : Query elements that contain an animation trigger. + * - `query("@*")` : Query all elements that contain an animation triggers. + * - `query(":self")` : Include the current element into the animation sequence. + * + * @param animation One or more animation steps to apply to the queried element or elements. + * An array is treated as an animation sequence. + * @param options An options object. Use the 'limit' field to limit the total number of + * items to collect. + * @return An object that encapsulates the query data. + * + * @usageNotes + * + * ### Multiple Tokens + * + * Tokens can be merged into a combined query selector string. For example: + * + * ```typescript + * query(':self, .record:enter, .record:leave, @subTrigger', [...]) + * ``` + * + * The `query()` function collects multiple elements and works internally by using + * `element.querySelectorAll`. Use the `limit` field of an options object to limit + * the total number of items to be collected. For example: + * + * ```js + * query('div', [ + * animate(...), + * animate(...) + * ], { limit: 1 }) + * ``` + * + * By default, throws an error when zero items are found. Set the + * `optional` flag to ignore this error. For example: + * + * ```js + * query('.some-element-that-may-not-be-there', [ + * animate(...), + * animate(...) + * ], { optional: true }) + * ``` + * + * ### Entering and Leaving Elements + * + * Not all elements can be queried via the `:enter` and `:leave` tokens, the only ones + * that can are those that Angular assumes can enter/leave based on their own logic + * (if their insertion/removal is simply a consequence of that of their parent they + * should be queried via a different token in their parent's `:enter`/`:leave` transitions). + * + * The only elements Angular assumes can enter/leave based on their own logic (thus the only + * ones that can be queried via the `:enter` and `:leave` tokens) are: + * - Those inserted dynamically (via `ViewContainerRef`) + * - Those that have a structural directive (which, under the hood, are a subset of the above ones) + * + *
+ * + * Note that elements will be successfully queried via `:enter`/`:leave` even if their + * insertion/removal is not done manually via `ViewContainerRef`or caused by their structural + * directive (e.g. they enter/exit alongside their parent). + * + *
+ * + *
+ * + * There is an exception to what previously mentioned, besides elements entering/leaving based on + * their own logic, elements with an animation trigger can always be queried via `:leave` when + * their parent is also leaving. + * + *
+ * + * ### Usage Example + * + * The following example queries for inner elements and animates them + * individually using `animate()`. + * + * ```typescript + * @Component({ + * selector: 'inner', + * template: ` + *
+ *

Title

+ *
+ * Blah blah blah + *
+ *
+ * `, + * animations: [ + * trigger('queryAnimation', [ + * transition('* => goAnimate', [ + * // hide the inner elements + * query('h1', style({ opacity: 0 })), + * query('.content', style({ opacity: 0 })), + * + * // animate the inner elements in, one by one + * query('h1', animate(1000, style({ opacity: 1 }))), + * query('.content', animate(1000, style({ opacity: 1 }))), + * ]) + * ]) + * ] + * }) + * class Cmp { + * exp = ''; + * + * goAnimate() { + * this.exp = 'goAnimate'; + * } + * } + * ``` + * + * @publicApi + */ + + +function query(selector, animation, options = null) { + return { + type: 11 + /* AnimationMetadataType.Query */ + , + selector, + animation, + options + }; +} +/** + * Use within an animation `query()` call to issue a timing gap after + * each queried item is animated. + * + * @param timings A delay value. + * @param animation One ore more animation steps. + * @returns An object that encapsulates the stagger data. + * + * @usageNotes + * In the following example, a container element wraps a list of items stamped out + * by an `ngFor`. The container element contains an animation trigger that will later be set + * to query for each of the inner items. + * + * Each time items are added, the opacity fade-in animation runs, + * and each removed item is faded out. + * When either of these animations occur, the stagger effect is + * applied after each item's animation is started. + * + * ```html + * + * + *
+ *
+ *
+ * {{ item }} + *
+ *
+ * ``` + * + * Here is the component code: + * + * ```typescript + * import {trigger, transition, style, animate, query, stagger} from '@angular/animations'; + * @Component({ + * templateUrl: 'list.component.html', + * animations: [ + * trigger('listAnimation', [ + * ... + * ]) + * ] + * }) + * class ListComponent { + * items = []; + * + * showItems() { + * this.items = [0,1,2,3,4]; + * } + * + * hideItems() { + * this.items = []; + * } + * + * toggle() { + * this.items.length ? this.hideItems() : this.showItems(); + * } + * } + * ``` + * + * Here is the animation trigger code: + * + * ```typescript + * trigger('listAnimation', [ + * transition('* => *', [ // each time the binding value changes + * query(':leave', [ + * stagger(100, [ + * animate('0.5s', style({ opacity: 0 })) + * ]) + * ]), + * query(':enter', [ + * style({ opacity: 0 }), + * stagger(100, [ + * animate('0.5s', style({ opacity: 1 })) + * ]) + * ]) + * ]) + * ]) + * ``` + * + * @publicApi + */ + + +function stagger(timings, animation) { + return { + type: 12 + /* AnimationMetadataType.Stagger */ + , + timings, + animation + }; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function scheduleMicroTask(cb) { + Promise.resolve().then(cb); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * An empty programmatic controller for reusable animations. + * Used internally when animations are disabled, to avoid + * checking for the null case when an animation player is expected. + * + * @see `animate()` + * @see `AnimationPlayer` + * @see `GroupPlayer` + * + * @publicApi + */ + + +class NoopAnimationPlayer { + constructor(duration = 0, delay = 0) { + this._onDoneFns = []; + this._onStartFns = []; + this._onDestroyFns = []; + this._originalOnDoneFns = []; + this._originalOnStartFns = []; + this._started = false; + this._destroyed = false; + this._finished = false; + this._position = 0; + this.parentPlayer = null; + this.totalTime = duration + delay; + } + + _onFinish() { + if (!this._finished) { + this._finished = true; + + this._onDoneFns.forEach(fn => fn()); + + this._onDoneFns = []; + } + } + + onStart(fn) { + this._originalOnStartFns.push(fn); + + this._onStartFns.push(fn); + } + + onDone(fn) { + this._originalOnDoneFns.push(fn); + + this._onDoneFns.push(fn); + } + + onDestroy(fn) { + this._onDestroyFns.push(fn); + } + + hasStarted() { + return this._started; + } + + init() {} + + play() { + if (!this.hasStarted()) { + this._onStart(); + + this.triggerMicrotask(); + } + + this._started = true; + } + /** @internal */ + + + triggerMicrotask() { + scheduleMicroTask(() => this._onFinish()); + } + + _onStart() { + this._onStartFns.forEach(fn => fn()); + + this._onStartFns = []; + } + + pause() {} + + restart() {} + + finish() { + this._onFinish(); + } + + destroy() { + if (!this._destroyed) { + this._destroyed = true; + + if (!this.hasStarted()) { + this._onStart(); + } + + this.finish(); + + this._onDestroyFns.forEach(fn => fn()); + + this._onDestroyFns = []; + } + } + + reset() { + this._started = false; + this._finished = false; + this._onStartFns = this._originalOnStartFns; + this._onDoneFns = this._originalOnDoneFns; + } + + setPosition(position) { + this._position = this.totalTime ? position * this.totalTime : 1; + } + + getPosition() { + return this.totalTime ? this._position / this.totalTime : 1; + } + /** @internal */ + + + triggerCallback(phaseName) { + const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns; + methods.forEach(fn => fn()); + methods.length = 0; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A programmatic controller for a group of reusable animations. + * Used internally to control animations. + * + * @see `AnimationPlayer` + * @see `{@link animations/group group()}` + * + */ + + +class AnimationGroupPlayer { + constructor(_players) { + this._onDoneFns = []; + this._onStartFns = []; + this._finished = false; + this._started = false; + this._destroyed = false; + this._onDestroyFns = []; + this.parentPlayer = null; + this.totalTime = 0; + this.players = _players; + let doneCount = 0; + let destroyCount = 0; + let startCount = 0; + const total = this.players.length; + + if (total == 0) { + scheduleMicroTask(() => this._onFinish()); + } else { + this.players.forEach(player => { + player.onDone(() => { + if (++doneCount == total) { + this._onFinish(); + } + }); + player.onDestroy(() => { + if (++destroyCount == total) { + this._onDestroy(); + } + }); + player.onStart(() => { + if (++startCount == total) { + this._onStart(); + } + }); + }); + } + + this.totalTime = this.players.reduce((time, player) => Math.max(time, player.totalTime), 0); + } + + _onFinish() { + if (!this._finished) { + this._finished = true; + + this._onDoneFns.forEach(fn => fn()); + + this._onDoneFns = []; + } + } + + init() { + this.players.forEach(player => player.init()); + } + + onStart(fn) { + this._onStartFns.push(fn); + } + + _onStart() { + if (!this.hasStarted()) { + this._started = true; + + this._onStartFns.forEach(fn => fn()); + + this._onStartFns = []; + } + } + + onDone(fn) { + this._onDoneFns.push(fn); + } + + onDestroy(fn) { + this._onDestroyFns.push(fn); + } + + hasStarted() { + return this._started; + } + + play() { + if (!this.parentPlayer) { + this.init(); + } + + this._onStart(); + + this.players.forEach(player => player.play()); + } + + pause() { + this.players.forEach(player => player.pause()); + } + + restart() { + this.players.forEach(player => player.restart()); + } + + finish() { + this._onFinish(); + + this.players.forEach(player => player.finish()); + } + + destroy() { + this._onDestroy(); + } + + _onDestroy() { + if (!this._destroyed) { + this._destroyed = true; + + this._onFinish(); + + this.players.forEach(player => player.destroy()); + + this._onDestroyFns.forEach(fn => fn()); + + this._onDestroyFns = []; + } + } + + reset() { + this.players.forEach(player => player.reset()); + this._destroyed = false; + this._finished = false; + this._started = false; + } + + setPosition(p) { + const timeAtPosition = p * this.totalTime; + this.players.forEach(player => { + const position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1; + player.setPosition(position); + }); + } + + getPosition() { + const longestPlayer = this.players.reduce((longestSoFar, player) => { + const newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime; + return newPlayerIsLongest ? player : longestSoFar; + }, null); + return longestPlayer != null ? longestPlayer.getPosition() : 0; + } + + beforeDestroy() { + this.players.forEach(player => { + if (player.beforeDestroy) { + player.beforeDestroy(); + } + }); + } + /** @internal */ + + + triggerCallback(phaseName) { + const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns; + methods.forEach(fn => fn()); + methods.length = 0; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const ɵPRE_STYLE = '!'; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + +/***/ }), + +/***/ 5787: +/*!***************************************************************!*\ + !*** ./node_modules/@angular/animations/fesm2020/browser.mjs ***! + \***************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnimationDriver": () => (/* binding */ AnimationDriver), +/* harmony export */ "ɵAnimation": () => (/* binding */ Animation), +/* harmony export */ "ɵAnimationEngine": () => (/* binding */ AnimationEngine), +/* harmony export */ "ɵAnimationStyleNormalizer": () => (/* binding */ AnimationStyleNormalizer), +/* harmony export */ "ɵNoopAnimationDriver": () => (/* binding */ NoopAnimationDriver), +/* harmony export */ "ɵNoopAnimationStyleNormalizer": () => (/* binding */ NoopAnimationStyleNormalizer), +/* harmony export */ "ɵWebAnimationsDriver": () => (/* binding */ WebAnimationsDriver), +/* harmony export */ "ɵWebAnimationsPlayer": () => (/* binding */ WebAnimationsPlayer), +/* harmony export */ "ɵWebAnimationsStyleNormalizer": () => (/* binding */ WebAnimationsStyleNormalizer), +/* harmony export */ "ɵallowPreviousPlayerStylesMerge": () => (/* binding */ allowPreviousPlayerStylesMerge), +/* harmony export */ "ɵcontainsElement": () => (/* binding */ containsElement), +/* harmony export */ "ɵgetParentElement": () => (/* binding */ getParentElement), +/* harmony export */ "ɵinvokeQuery": () => (/* binding */ invokeQuery), +/* harmony export */ "ɵnormalizeKeyframes": () => (/* binding */ normalizeKeyframes), +/* harmony export */ "ɵvalidateStyleProperty": () => (/* binding */ validateStyleProperty) +/* harmony export */ }); +/* harmony import */ var _angular_animations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/animations */ 4851); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/** + * @license Angular v14.3.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +const LINE_START = '\n - '; + +function invalidTimingValue(exp) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3000 + /* RuntimeErrorCode.INVALID_TIMING_VALUE */ + , ngDevMode && `The provided timing value "${exp}" is invalid.`); +} + +function negativeStepValue() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3100 + /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */ + , ngDevMode && 'Duration values below 0 are not allowed for this animation step.'); +} + +function negativeDelayValue() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3101 + /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */ + , ngDevMode && 'Delay values below 0 are not allowed for this animation step.'); +} + +function invalidStyleParams(varName) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3001 + /* RuntimeErrorCode.INVALID_STYLE_PARAMS */ + , ngDevMode && `Unable to resolve the local animation param ${varName} in the given list of values`); +} + +function invalidParamValue(varName) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3003 + /* RuntimeErrorCode.INVALID_PARAM_VALUE */ + , ngDevMode && `Please provide a value for the animation param ${varName}`); +} + +function invalidNodeType(nodeType) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3004 + /* RuntimeErrorCode.INVALID_NODE_TYPE */ + , ngDevMode && `Unable to resolve animation metadata node #${nodeType}`); +} + +function invalidCssUnitValue(userProvidedProperty, value) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3005 + /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */ + , ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`); +} + +function invalidTrigger() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3006 + /* RuntimeErrorCode.INVALID_TRIGGER */ + , ngDevMode && 'animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\'@foo\', [...]))'); +} + +function invalidDefinition() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3007 + /* RuntimeErrorCode.INVALID_DEFINITION */ + , ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()'); +} + +function invalidState(metadataName, missingSubs) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3008 + /* RuntimeErrorCode.INVALID_STATE */ + , ngDevMode && `state("${metadataName}", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`); +} + +function invalidStyleValue(value) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3002 + /* RuntimeErrorCode.INVALID_STYLE_VALUE */ + , ngDevMode && `The provided style string value ${value} is not allowed.`); +} + +function invalidProperty(prop) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3009 + /* RuntimeErrorCode.INVALID_PROPERTY */ + , ngDevMode && `The provided animation property "${prop}" is not a supported CSS property for animations`); +} + +function invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3010 + /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */ + , ngDevMode && `The CSS property "${prop}" that exists between the times of "${firstStart}ms" and "${firstEnd}ms" is also being animated in a parallel animation between the times of "${secondStart}ms" and "${secondEnd}ms"`); +} + +function invalidKeyframes() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3011 + /* RuntimeErrorCode.INVALID_KEYFRAMES */ + , ngDevMode && `keyframes() must be placed inside of a call to animate()`); +} + +function invalidOffset() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3012 + /* RuntimeErrorCode.INVALID_OFFSET */ + , ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`); +} + +function keyframeOffsetsOutOfOrder() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3200 + /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */ + , ngDevMode && `Please ensure that all keyframe offsets are in order`); +} + +function keyframesMissingOffsets() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3202 + /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */ + , ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`); +} + +function invalidStagger() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3013 + /* RuntimeErrorCode.INVALID_STAGGER */ + , ngDevMode && `stagger() can only be used inside of query()`); +} + +function invalidQuery(selector) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3014 + /* RuntimeErrorCode.INVALID_QUERY */ + , ngDevMode && `\`query("${selector}")\` returned zero elements. (Use \`query("${selector}", { optional: true })\` if you wish to allow this.)`); +} + +function invalidExpression(expr) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3015 + /* RuntimeErrorCode.INVALID_EXPRESSION */ + , ngDevMode && `The provided transition expression "${expr}" is not supported`); +} + +function invalidTransitionAlias(alias) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3016 + /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */ + , ngDevMode && `The transition alias value "${alias}" is not supported`); +} + +function validationFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3500 + /* RuntimeErrorCode.VALIDATION_FAILED */ + , ngDevMode && `animation validation failed:\n${errors.map(err => err.message).join('\n')}`); +} + +function buildingFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3501 + /* RuntimeErrorCode.BUILDING_FAILED */ + , ngDevMode && `animation building failed:\n${errors.map(err => err.message).join('\n')}`); +} + +function triggerBuildFailed(name, errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3404 + /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */ + , ngDevMode && `The animation trigger "${name}" has failed to build due to the following errors:\n - ${errors.map(err => err.message).join('\n - ')}`); +} + +function animationFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3502 + /* RuntimeErrorCode.ANIMATION_FAILED */ + , ngDevMode && `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`); +} + +function registerFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3503 + /* RuntimeErrorCode.REGISTRATION_FAILED */ + , ngDevMode && `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\n')}`); +} + +function missingOrDestroyedAnimation() { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3300 + /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */ + , ngDevMode && 'The requested animation doesn\'t exist or has already been destroyed'); +} + +function createAnimationFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3504 + /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */ + , ngDevMode && `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\n')}`); +} + +function missingPlayer(id) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3301 + /* RuntimeErrorCode.MISSING_PLAYER */ + , ngDevMode && `Unable to find the timeline player referenced by ${id}`); +} + +function missingTrigger(phase, name) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3302 + /* RuntimeErrorCode.MISSING_TRIGGER */ + , ngDevMode && `Unable to listen on the animation trigger event "${phase}" because the animation trigger "${name}" doesn\'t exist!`); +} + +function missingEvent(name) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3303 + /* RuntimeErrorCode.MISSING_EVENT */ + , ngDevMode && `Unable to listen on the animation trigger "${name}" because the provided event is undefined!`); +} + +function unsupportedTriggerEvent(phase, name) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3400 + /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */ + , ngDevMode && `The provided animation trigger event "${phase}" for the animation trigger "${name}" is not supported!`); +} + +function unregisteredTrigger(name) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3401 + /* RuntimeErrorCode.UNREGISTERED_TRIGGER */ + , ngDevMode && `The provided animation trigger "${name}" has not been registered!`); +} + +function triggerTransitionsFailed(errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3402 + /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */ + , ngDevMode && `Unable to process animations due to the following failed trigger transitions\n ${errors.map(err => err.message).join('\n')}`); +} + +function triggerParsingFailed(name, errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3403 + /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */ + , ngDevMode && `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`); +} + +function transitionFailed(name, errors) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](3505 + /* RuntimeErrorCode.TRANSITION_FAILED */ + , ngDevMode && `@${name} has failed due to:\n ${errors.map(err => err.message).join('\n- ')}`); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Set of all animatable CSS properties + * + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties + */ + + +const ANIMATABLE_PROP_SET = new Set(['-moz-outline-radius', '-moz-outline-radius-bottomleft', '-moz-outline-radius-bottomright', '-moz-outline-radius-topleft', '-moz-outline-radius-topright', '-ms-grid-columns', '-ms-grid-rows', '-webkit-line-clamp', '-webkit-text-fill-color', '-webkit-text-stroke', '-webkit-text-stroke-color', 'accent-color', 'all', 'backdrop-filter', 'background', 'background-color', 'background-position', 'background-size', 'block-size', 'border', 'border-block-end', 'border-block-end-color', 'border-block-end-width', 'border-block-start', 'border-block-start-color', 'border-block-start-width', 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', 'border-bottom-right-radius', 'border-bottom-width', 'border-color', 'border-end-end-radius', 'border-end-start-radius', 'border-image-outset', 'border-image-slice', 'border-image-width', 'border-inline-end', 'border-inline-end-color', 'border-inline-end-width', 'border-inline-start', 'border-inline-start-color', 'border-inline-start-width', 'border-left', 'border-left-color', 'border-left-width', 'border-radius', 'border-right', 'border-right-color', 'border-right-width', 'border-start-end-radius', 'border-start-start-radius', 'border-top', 'border-top-color', 'border-top-left-radius', 'border-top-right-radius', 'border-top-width', 'border-width', 'bottom', 'box-shadow', 'caret-color', 'clip', 'clip-path', 'color', 'column-count', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', 'column-width', 'columns', 'filter', 'flex', 'flex-basis', 'flex-grow', 'flex-shrink', 'font', 'font-size', 'font-size-adjust', 'font-stretch', 'font-variation-settings', 'font-weight', 'gap', 'grid-column-gap', 'grid-gap', 'grid-row-gap', 'grid-template-columns', 'grid-template-rows', 'height', 'inline-size', 'input-security', 'inset', 'inset-block', 'inset-block-end', 'inset-block-start', 'inset-inline', 'inset-inline-end', 'inset-inline-start', 'left', 'letter-spacing', 'line-clamp', 'line-height', 'margin', 'margin-block-end', 'margin-block-start', 'margin-bottom', 'margin-inline-end', 'margin-inline-start', 'margin-left', 'margin-right', 'margin-top', 'mask', 'mask-border', 'mask-position', 'mask-size', 'max-block-size', 'max-height', 'max-inline-size', 'max-lines', 'max-width', 'min-block-size', 'min-height', 'min-inline-size', 'min-width', 'object-position', 'offset', 'offset-anchor', 'offset-distance', 'offset-path', 'offset-position', 'offset-rotate', 'opacity', 'order', 'outline', 'outline-color', 'outline-offset', 'outline-width', 'padding', 'padding-block-end', 'padding-block-start', 'padding-bottom', 'padding-inline-end', 'padding-inline-start', 'padding-left', 'padding-right', 'padding-top', 'perspective', 'perspective-origin', 'right', 'rotate', 'row-gap', 'scale', 'scroll-margin', 'scroll-margin-block', 'scroll-margin-block-end', 'scroll-margin-block-start', 'scroll-margin-bottom', 'scroll-margin-inline', 'scroll-margin-inline-end', 'scroll-margin-inline-start', 'scroll-margin-left', 'scroll-margin-right', 'scroll-margin-top', 'scroll-padding', 'scroll-padding-block', 'scroll-padding-block-end', 'scroll-padding-block-start', 'scroll-padding-bottom', 'scroll-padding-inline', 'scroll-padding-inline-end', 'scroll-padding-inline-start', 'scroll-padding-left', 'scroll-padding-right', 'scroll-padding-top', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scrollbar-color', 'shape-image-threshold', 'shape-margin', 'shape-outside', 'tab-size', 'text-decoration', 'text-decoration-color', 'text-decoration-thickness', 'text-emphasis', 'text-emphasis-color', 'text-indent', 'text-shadow', 'text-underline-offset', 'top', 'transform', 'transform-origin', 'translate', 'vertical-align', 'visibility', 'width', 'word-spacing', 'z-index', 'zoom']); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +function isBrowser() { + return typeof window !== 'undefined' && typeof window.document !== 'undefined'; +} + +function isNode() { + // Checking only for `process` isn't enough to identify whether or not we're in a Node + // environment, because Webpack by default will polyfill the `process`. While we can discern + // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and + // might not be future-proof. Instead we look at the stringified version of `process` which + // is `[object process]` in Node and `[object Object]` when polyfilled. + return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; +} + +function optimizeGroupPlayer(players) { + switch (players.length) { + case 0: + return new _angular_animations__WEBPACK_IMPORTED_MODULE_1__.NoopAnimationPlayer(); + + case 1: + return players[0]; + + default: + return new _angular_animations__WEBPACK_IMPORTED_MODULE_1__["ɵAnimationGroupPlayer"](players); + } +} + +function normalizeKeyframes$1(driver, normalizer, element, keyframes, preStyles = new Map(), postStyles = new Map()) { + const errors = []; + const normalizedKeyframes = []; + let previousOffset = -1; + let previousKeyframe = null; + keyframes.forEach(kf => { + const offset = kf.get('offset'); + const isSameOffset = offset == previousOffset; + const normalizedKeyframe = isSameOffset && previousKeyframe || new Map(); + kf.forEach((val, prop) => { + let normalizedProp = prop; + let normalizedValue = val; + + if (prop !== 'offset') { + normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors); + + switch (normalizedValue) { + case _angular_animations__WEBPACK_IMPORTED_MODULE_1__["ɵPRE_STYLE"]: + normalizedValue = preStyles.get(prop); + break; + + case _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE: + normalizedValue = postStyles.get(prop); + break; + + default: + normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors); + break; + } + } + + normalizedKeyframe.set(normalizedProp, normalizedValue); + }); + + if (!isSameOffset) { + normalizedKeyframes.push(normalizedKeyframe); + } + + previousKeyframe = normalizedKeyframe; + previousOffset = offset; + }); + + if (errors.length) { + throw animationFailed(errors); + } + + return normalizedKeyframes; +} + +function listenOnPlayer(player, eventName, event, callback) { + switch (eventName) { + case 'start': + player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player))); + break; + + case 'done': + player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player))); + break; + + case 'destroy': + player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player))); + break; + } +} + +function copyAnimationEvent(e, phaseName, player) { + const totalTime = player.totalTime; + const disabled = player.disabled ? true : false; + const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled); + const data = e['_data']; + + if (data != null) { + event['_data'] = data; + } + + return event; +} + +function makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) { + return { + element, + triggerName, + fromState, + toState, + phaseName, + totalTime, + disabled: !!disabled + }; +} + +function getOrSetDefaultValue(map, key, defaultValue) { + let value = map.get(key); + + if (!value) { + map.set(key, value = defaultValue); + } + + return value; +} + +function parseTimelineCommand(command) { + const separatorPos = command.indexOf(':'); + const id = command.substring(1, separatorPos); + const action = command.slice(separatorPos + 1); + return [id, action]; +} + +let _contains = (elm1, elm2) => false; + +let _query = (element, selector, multi) => { + return []; +}; + +let _documentElement = null; + +function getParentElement(element) { + const parent = element.parentNode || element.host; // consider host to support shadow DOM + + if (parent === _documentElement) { + return null; + } + + return parent; +} // Define utility methods for browsers and platform-server(domino) where Element +// and utility methods exist. + + +const _isNode = isNode(); + +if (_isNode || typeof Element !== 'undefined') { + if (!isBrowser()) { + _contains = (elm1, elm2) => elm1.contains(elm2); + } else { + // Read the document element in an IIFE that's been marked pure to avoid a top-level property + // read that may prevent tree-shaking. + _documentElement = /* @__PURE__ */(() => document.documentElement)(); + + _contains = (elm1, elm2) => { + while (elm2) { + if (elm2 === elm1) { + return true; + } + + elm2 = getParentElement(elm2); + } + + return false; + }; + } + + _query = (element, selector, multi) => { + if (multi) { + return Array.from(element.querySelectorAll(selector)); + } + + const elem = element.querySelector(selector); + return elem ? [elem] : []; + }; +} + +function containsVendorPrefix(prop) { + // Webkit is the only real popular vendor prefix nowadays + // cc: http://shouldiprefix.com/ + return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit +} + +let _CACHED_BODY = null; +let _IS_WEBKIT = false; + +function validateStyleProperty(prop) { + if (!_CACHED_BODY) { + _CACHED_BODY = getBodyNode() || {}; + _IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false; + } + + let result = true; + + if (_CACHED_BODY.style && !containsVendorPrefix(prop)) { + result = prop in _CACHED_BODY.style; + + if (!result && _IS_WEBKIT) { + const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1); + result = camelProp in _CACHED_BODY.style; + } + } + + return result; +} + +function validateWebAnimatableStyleProperty(prop) { + return ANIMATABLE_PROP_SET.has(prop); +} + +function getBodyNode() { + if (typeof document != 'undefined') { + return document.body; + } + + return null; +} + +const containsElement = _contains; +const invokeQuery = _query; + +function hypenatePropsKeys(original) { + const newMap = new Map(); + original.forEach((val, prop) => { + const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2'); + newMap.set(newProp, val); + }); + return newMap; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @publicApi + */ + + +class NoopAnimationDriver { + validateStyleProperty(prop) { + return validateStyleProperty(prop); + } + + matchesElement(_element, _selector) { + // This method is deprecated and no longer in use so we return false. + return false; + } + + containsElement(elm1, elm2) { + return containsElement(elm1, elm2); + } + + getParentElement(element) { + return getParentElement(element); + } + + query(element, selector, multi) { + return invokeQuery(element, selector, multi); + } + + computeStyle(element, prop, defaultValue) { + return defaultValue || ''; + } + + animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) { + return new _angular_animations__WEBPACK_IMPORTED_MODULE_1__.NoopAnimationPlayer(duration, delay); + } + +} + +NoopAnimationDriver.ɵfac = function NoopAnimationDriver_Factory(t) { + return new (t || NoopAnimationDriver)(); +}; + +NoopAnimationDriver.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: NoopAnimationDriver, + factory: NoopAnimationDriver.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NoopAnimationDriver, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable + }], null, null); +})(); +/** + * @publicApi + */ + + +class AnimationDriver {} + +AnimationDriver.NOOP = /* @__PURE__ */new NoopAnimationDriver(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +const ONE_SECOND = 1000; +const SUBSTITUTION_EXPR_START = '{{'; +const SUBSTITUTION_EXPR_END = '}}'; +const ENTER_CLASSNAME = 'ng-enter'; +const LEAVE_CLASSNAME = 'ng-leave'; +const NG_TRIGGER_CLASSNAME = 'ng-trigger'; +const NG_TRIGGER_SELECTOR = '.ng-trigger'; +const NG_ANIMATING_CLASSNAME = 'ng-animating'; +const NG_ANIMATING_SELECTOR = '.ng-animating'; + +function resolveTimingValue(value) { + if (typeof value == 'number') return value; + const matches = value.match(/^(-?[\.\d]+)(m?s)/); + if (!matches || matches.length < 2) return 0; + return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]); +} + +function _convertTimeValueToMS(value, unit) { + switch (unit) { + case 's': + return value * ONE_SECOND; + + default: + // ms or something else + return value; + } +} + +function resolveTiming(timings, errors, allowNegativeValues) { + return timings.hasOwnProperty('duration') ? timings : parseTimeExpression(timings, errors, allowNegativeValues); +} + +function parseTimeExpression(exp, errors, allowNegativeValues) { + const regex = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i; + let duration; + let delay = 0; + let easing = ''; + + if (typeof exp === 'string') { + const matches = exp.match(regex); + + if (matches === null) { + errors.push(invalidTimingValue(exp)); + return { + duration: 0, + delay: 0, + easing: '' + }; + } + + duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]); + const delayMatch = matches[3]; + + if (delayMatch != null) { + delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]); + } + + const easingVal = matches[5]; + + if (easingVal) { + easing = easingVal; + } + } else { + duration = exp; + } + + if (!allowNegativeValues) { + let containsErrors = false; + let startIndex = errors.length; + + if (duration < 0) { + errors.push(negativeStepValue()); + containsErrors = true; + } + + if (delay < 0) { + errors.push(negativeDelayValue()); + containsErrors = true; + } + + if (containsErrors) { + errors.splice(startIndex, 0, invalidTimingValue(exp)); + } + } + + return { + duration, + delay, + easing + }; +} + +function copyObj(obj, destination = {}) { + Object.keys(obj).forEach(prop => { + destination[prop] = obj[prop]; + }); + return destination; +} + +function convertToMap(obj) { + const styleMap = new Map(); + Object.keys(obj).forEach(prop => { + const val = obj[prop]; + styleMap.set(prop, val); + }); + return styleMap; +} + +function normalizeKeyframes(keyframes) { + if (!keyframes.length) { + return []; + } + + if (keyframes[0] instanceof Map) { + return keyframes; + } + + return keyframes.map(kf => convertToMap(kf)); +} + +function normalizeStyles(styles) { + const normalizedStyles = new Map(); + + if (Array.isArray(styles)) { + styles.forEach(data => copyStyles(data, normalizedStyles)); + } else { + copyStyles(styles, normalizedStyles); + } + + return normalizedStyles; +} + +function copyStyles(styles, destination = new Map(), backfill) { + if (backfill) { + for (let [prop, val] of backfill) { + destination.set(prop, val); + } + } + + for (let [prop, val] of styles) { + destination.set(prop, val); + } + + return destination; +} + +function getStyleAttributeString(element, key, value) { + // Return the key-value pair string to be added to the style attribute for the + // given CSS style key. + if (value) { + return key + ':' + value + ';'; + } else { + return ''; + } +} + +function writeStyleAttribute(element) { + // Read the style property of the element and manually reflect it to the + // style attribute. This is needed because Domino on platform-server doesn't + // understand the full set of allowed CSS properties and doesn't reflect some + // of them automatically. + let styleAttrValue = ''; + + for (let i = 0; i < element.style.length; i++) { + const key = element.style.item(i); + styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key)); + } + + for (const key in element.style) { + // Skip internal Domino properties that don't need to be reflected. + if (!element.style.hasOwnProperty(key) || key.startsWith('_')) { + continue; + } + + const dashKey = camelCaseToDashCase(key); + styleAttrValue += getStyleAttributeString(element, dashKey, element.style[key]); + } + + element.setAttribute('style', styleAttrValue); +} + +function setStyles(element, styles, formerStyles) { + if (element['style']) { + styles.forEach((val, prop) => { + const camelProp = dashCaseToCamelCase(prop); + + if (formerStyles && !formerStyles.has(prop)) { + formerStyles.set(prop, element.style[camelProp]); + } + + element.style[camelProp] = val; + }); // On the server set the 'style' attribute since it's not automatically reflected. + + if (isNode()) { + writeStyleAttribute(element); + } + } +} + +function eraseStyles(element, styles) { + if (element['style']) { + styles.forEach((_, prop) => { + const camelProp = dashCaseToCamelCase(prop); + element.style[camelProp] = ''; + }); // On the server set the 'style' attribute since it's not automatically reflected. + + if (isNode()) { + writeStyleAttribute(element); + } + } +} + +function normalizeAnimationEntry(steps) { + if (Array.isArray(steps)) { + if (steps.length == 1) return steps[0]; + return (0,_angular_animations__WEBPACK_IMPORTED_MODULE_1__.sequence)(steps); + } + + return steps; +} + +function validateStyleParams(value, options, errors) { + const params = options.params || {}; + const matches = extractStyleParams(value); + + if (matches.length) { + matches.forEach(varName => { + if (!params.hasOwnProperty(varName)) { + errors.push(invalidStyleParams(varName)); + } + }); + } +} + +const PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\s*(.+?)\\s*${SUBSTITUTION_EXPR_END}`, 'g'); + +function extractStyleParams(value) { + let params = []; + + if (typeof value === 'string') { + let match; + + while (match = PARAM_REGEX.exec(value)) { + params.push(match[1]); + } + + PARAM_REGEX.lastIndex = 0; + } + + return params; +} + +function interpolateParams(value, params, errors) { + const original = value.toString(); + const str = original.replace(PARAM_REGEX, (_, varName) => { + let localVal = params[varName]; // this means that the value was never overridden by the data passed in by the user + + if (localVal == null) { + errors.push(invalidParamValue(varName)); + localVal = ''; + } + + return localVal.toString(); + }); // we do this to assert that numeric values stay as they are + + return str == original ? value : str; +} + +function iteratorToArray(iterator) { + const arr = []; + let item = iterator.next(); + + while (!item.done) { + arr.push(item.value); + item = iterator.next(); + } + + return arr; +} + +const DASH_CASE_REGEXP = /-+([a-z0-9])/g; + +function dashCaseToCamelCase(input) { + return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase()); +} + +function camelCaseToDashCase(input) { + return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); +} + +function allowPreviousPlayerStylesMerge(duration, delay) { + return duration === 0 || delay === 0; +} + +function balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) { + if (previousStyles.size && keyframes.length) { + let startingKeyframe = keyframes[0]; + let missingStyleProps = []; + previousStyles.forEach((val, prop) => { + if (!startingKeyframe.has(prop)) { + missingStyleProps.push(prop); + } + + startingKeyframe.set(prop, val); + }); + + if (missingStyleProps.length) { + for (let i = 1; i < keyframes.length; i++) { + let kf = keyframes[i]; + missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop))); + } + } + } + + return keyframes; +} + +function visitDslNode(visitor, node, context) { + switch (node.type) { + case 7 + /* AnimationMetadataType.Trigger */ + : + return visitor.visitTrigger(node, context); + + case 0 + /* AnimationMetadataType.State */ + : + return visitor.visitState(node, context); + + case 1 + /* AnimationMetadataType.Transition */ + : + return visitor.visitTransition(node, context); + + case 2 + /* AnimationMetadataType.Sequence */ + : + return visitor.visitSequence(node, context); + + case 3 + /* AnimationMetadataType.Group */ + : + return visitor.visitGroup(node, context); + + case 4 + /* AnimationMetadataType.Animate */ + : + return visitor.visitAnimate(node, context); + + case 5 + /* AnimationMetadataType.Keyframes */ + : + return visitor.visitKeyframes(node, context); + + case 6 + /* AnimationMetadataType.Style */ + : + return visitor.visitStyle(node, context); + + case 8 + /* AnimationMetadataType.Reference */ + : + return visitor.visitReference(node, context); + + case 9 + /* AnimationMetadataType.AnimateChild */ + : + return visitor.visitAnimateChild(node, context); + + case 10 + /* AnimationMetadataType.AnimateRef */ + : + return visitor.visitAnimateRef(node, context); + + case 11 + /* AnimationMetadataType.Query */ + : + return visitor.visitQuery(node, context); + + case 12 + /* AnimationMetadataType.Stagger */ + : + return visitor.visitStagger(node, context); + + default: + throw invalidNodeType(node.type); + } +} + +function computeStyle(element, prop) { + return window.getComputedStyle(element)[prop]; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode; + +function createListOfWarnings(warnings) { + const LINE_START = '\n - '; + return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`; +} + +function warnValidation(warnings) { + NG_DEV_MODE && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`); +} + +function warnTriggerBuild(name, warnings) { + NG_DEV_MODE && console.warn(`The animation trigger "${name}" has built with the following warnings:${createListOfWarnings(warnings)}`); +} + +function warnRegister(warnings) { + NG_DEV_MODE && console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`); +} + +function triggerParsingWarnings(name, warnings) { + NG_DEV_MODE && console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`); +} + +function pushUnrecognizedPropertiesWarning(warnings, props) { + if (props.length) { + warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const ANY_STATE = '*'; + +function parseTransitionExpr(transitionValue, errors) { + const expressions = []; + + if (typeof transitionValue == 'string') { + transitionValue.split(/\s*,\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors)); + } else { + expressions.push(transitionValue); + } + + return expressions; +} + +function parseInnerTransitionStr(eventStr, expressions, errors) { + if (eventStr[0] == ':') { + const result = parseAnimationAlias(eventStr, errors); + + if (typeof result == 'function') { + expressions.push(result); + return; + } + + eventStr = result; + } + + const match = eventStr.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/); + + if (match == null || match.length < 4) { + errors.push(invalidExpression(eventStr)); + return expressions; + } + + const fromState = match[1]; + const separator = match[2]; + const toState = match[3]; + expressions.push(makeLambdaFromStates(fromState, toState)); + const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE; + + if (separator[0] == '<' && !isFullAnyStateExpr) { + expressions.push(makeLambdaFromStates(toState, fromState)); + } +} + +function parseAnimationAlias(alias, errors) { + switch (alias) { + case ':enter': + return 'void => *'; + + case ':leave': + return '* => void'; + + case ':increment': + return (fromState, toState) => parseFloat(toState) > parseFloat(fromState); + + case ':decrement': + return (fromState, toState) => parseFloat(toState) < parseFloat(fromState); + + default: + errors.push(invalidTransitionAlias(alias)); + return '* => *'; + } +} // DO NOT REFACTOR ... keep the follow set instantiations +// with the values intact (closure compiler for some reason +// removes follow-up lines that add the values outside of +// the constructor... + + +const TRUE_BOOLEAN_VALUES = new Set(['true', '1']); +const FALSE_BOOLEAN_VALUES = new Set(['false', '0']); + +function makeLambdaFromStates(lhs, rhs) { + const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs); + const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs); + return (fromState, toState) => { + let lhsMatch = lhs == ANY_STATE || lhs == fromState; + let rhsMatch = rhs == ANY_STATE || rhs == toState; + + if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') { + lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs); + } + + if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') { + rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs); + } + + return lhsMatch && rhsMatch; + }; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const SELF_TOKEN = ':self'; +const SELF_TOKEN_REGEX = new RegExp(`\s*${SELF_TOKEN}\s*,?`, 'g'); +/* + * [Validation] + * The visitor code below will traverse the animation AST generated by the animation verb functions + * (the output is a tree of objects) and attempt to perform a series of validations on the data. The + * following corner-cases will be validated: + * + * 1. Overlap of animations + * Given that a CSS property cannot be animated in more than one place at the same time, it's + * important that this behavior is detected and validated. The way in which this occurs is that + * each time a style property is examined, a string-map containing the property will be updated with + * the start and end times for when the property is used within an animation step. + * + * If there are two or more parallel animations that are currently running (these are invoked by the + * group()) on the same element then the validator will throw an error. Since the start/end timing + * values are collected for each property then if the current animation step is animating the same + * property and its timing values fall anywhere into the window of time that the property is + * currently being animated within then this is what causes an error. + * + * 2. Timing values + * The validator will validate to see if a timing value of `duration delay easing` or + * `durationNumber` is valid or not. + * + * (note that upon validation the code below will replace the timing data with an object containing + * {duration,delay,easing}. + * + * 3. Offset Validation + * Each of the style() calls are allowed to have an offset value when placed inside of keyframes(). + * Offsets within keyframes() are considered valid when: + * + * - No offsets are used at all + * - Each style() entry contains an offset value + * - Each offset is between 0 and 1 + * - Each offset is greater to or equal than the previous one + * + * Otherwise an error will be thrown. + */ + +function buildAnimationAst(driver, metadata, errors, warnings) { + return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings); +} + +const ROOT_SELECTOR = ''; + +class AnimationAstBuilderVisitor { + constructor(_driver) { + this._driver = _driver; + } + + build(metadata, errors, warnings) { + const context = new AnimationAstBuilderContext(errors); + + this._resetContextStyleTimingState(context); + + const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context); + + if (typeof ngDevMode === 'undefined' || ngDevMode) { + if (context.unsupportedCSSPropertiesFound.size) { + pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]); + } + } + + return ast; + } + + _resetContextStyleTimingState(context) { + context.currentQuerySelector = ROOT_SELECTOR; + context.collectedStyles = new Map(); + context.collectedStyles.set(ROOT_SELECTOR, new Map()); + context.currentTime = 0; + } + + visitTrigger(metadata, context) { + let queryCount = context.queryCount = 0; + let depCount = context.depCount = 0; + const states = []; + const transitions = []; + + if (metadata.name.charAt(0) == '@') { + context.errors.push(invalidTrigger()); + } + + metadata.definitions.forEach(def => { + this._resetContextStyleTimingState(context); + + if (def.type == 0 + /* AnimationMetadataType.State */ + ) { + const stateDef = def; + const name = stateDef.name; + name.toString().split(/\s*,\s*/).forEach(n => { + stateDef.name = n; + states.push(this.visitState(stateDef, context)); + }); + stateDef.name = name; + } else if (def.type == 1 + /* AnimationMetadataType.Transition */ + ) { + const transition = this.visitTransition(def, context); + queryCount += transition.queryCount; + depCount += transition.depCount; + transitions.push(transition); + } else { + context.errors.push(invalidDefinition()); + } + }); + return { + type: 7 + /* AnimationMetadataType.Trigger */ + , + name: metadata.name, + states, + transitions, + queryCount, + depCount, + options: null + }; + } + + visitState(metadata, context) { + const styleAst = this.visitStyle(metadata.styles, context); + const astParams = metadata.options && metadata.options.params || null; + + if (styleAst.containsDynamicStyles) { + const missingSubs = new Set(); + const params = astParams || {}; + styleAst.styles.forEach(style => { + if (style instanceof Map) { + style.forEach(value => { + extractStyleParams(value).forEach(sub => { + if (!params.hasOwnProperty(sub)) { + missingSubs.add(sub); + } + }); + }); + } + }); + + if (missingSubs.size) { + const missingSubsArr = iteratorToArray(missingSubs.values()); + context.errors.push(invalidState(metadata.name, missingSubsArr)); + } + } + + return { + type: 0 + /* AnimationMetadataType.State */ + , + name: metadata.name, + style: styleAst, + options: astParams ? { + params: astParams + } : null + }; + } + + visitTransition(metadata, context) { + context.queryCount = 0; + context.depCount = 0; + const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context); + const matchers = parseTransitionExpr(metadata.expr, context.errors); + return { + type: 1 + /* AnimationMetadataType.Transition */ + , + matchers, + animation, + queryCount: context.queryCount, + depCount: context.depCount, + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitSequence(metadata, context) { + return { + type: 2 + /* AnimationMetadataType.Sequence */ + , + steps: metadata.steps.map(s => visitDslNode(this, s, context)), + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitGroup(metadata, context) { + const currentTime = context.currentTime; + let furthestTime = 0; + const steps = metadata.steps.map(step => { + context.currentTime = currentTime; + const innerAst = visitDslNode(this, step, context); + furthestTime = Math.max(furthestTime, context.currentTime); + return innerAst; + }); + context.currentTime = furthestTime; + return { + type: 3 + /* AnimationMetadataType.Group */ + , + steps, + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitAnimate(metadata, context) { + const timingAst = constructTimingAst(metadata.timings, context.errors); + context.currentAnimateTimings = timingAst; + let styleAst; + let styleMetadata = metadata.styles ? metadata.styles : (0,_angular_animations__WEBPACK_IMPORTED_MODULE_1__.style)({}); + + if (styleMetadata.type == 5 + /* AnimationMetadataType.Keyframes */ + ) { + styleAst = this.visitKeyframes(styleMetadata, context); + } else { + let styleMetadata = metadata.styles; + let isEmpty = false; + + if (!styleMetadata) { + isEmpty = true; + const newStyleData = {}; + + if (timingAst.easing) { + newStyleData['easing'] = timingAst.easing; + } + + styleMetadata = (0,_angular_animations__WEBPACK_IMPORTED_MODULE_1__.style)(newStyleData); + } + + context.currentTime += timingAst.duration + timingAst.delay; + + const _styleAst = this.visitStyle(styleMetadata, context); + + _styleAst.isEmptyStep = isEmpty; + styleAst = _styleAst; + } + + context.currentAnimateTimings = null; + return { + type: 4 + /* AnimationMetadataType.Animate */ + , + timings: timingAst, + style: styleAst, + options: null + }; + } + + visitStyle(metadata, context) { + const ast = this._makeStyleAst(metadata, context); + + this._validateStyleAst(ast, context); + + return ast; + } + + _makeStyleAst(metadata, context) { + const styles = []; + const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles]; + + for (let styleTuple of metadataStyles) { + if (typeof styleTuple === 'string') { + if (styleTuple === _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE) { + styles.push(styleTuple); + } else { + context.errors.push(invalidStyleValue(styleTuple)); + } + } else { + styles.push(convertToMap(styleTuple)); + } + } + + let containsDynamicStyles = false; + let collectedEasing = null; + styles.forEach(styleData => { + if (styleData instanceof Map) { + if (styleData.has('easing')) { + collectedEasing = styleData.get('easing'); + styleData.delete('easing'); + } + + if (!containsDynamicStyles) { + for (let value of styleData.values()) { + if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) { + containsDynamicStyles = true; + break; + } + } + } + } + }); + return { + type: 6 + /* AnimationMetadataType.Style */ + , + styles, + easing: collectedEasing, + offset: metadata.offset, + containsDynamicStyles, + options: null + }; + } + + _validateStyleAst(ast, context) { + const timings = context.currentAnimateTimings; + let endTime = context.currentTime; + let startTime = context.currentTime; + + if (timings && startTime > 0) { + startTime -= timings.duration + timings.delay; + } + + ast.styles.forEach(tuple => { + if (typeof tuple === 'string') return; + tuple.forEach((value, prop) => { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + if (!this._driver.validateStyleProperty(prop)) { + tuple.delete(prop); + context.unsupportedCSSPropertiesFound.add(prop); + return; + } + } // This is guaranteed to have a defined Map at this querySelector location making it + // safe to add the assertion here. It is set as a default empty map in prior methods. + + + const collectedStyles = context.collectedStyles.get(context.currentQuerySelector); + const collectedEntry = collectedStyles.get(prop); + let updateCollectedStyle = true; + + if (collectedEntry) { + if (startTime != endTime && startTime >= collectedEntry.startTime && endTime <= collectedEntry.endTime) { + context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime)); + updateCollectedStyle = false; + } // we always choose the smaller start time value since we + // want to have a record of the entire animation window where + // the style property is being animated in between + + + startTime = collectedEntry.startTime; + } + + if (updateCollectedStyle) { + collectedStyles.set(prop, { + startTime, + endTime + }); + } + + if (context.options) { + validateStyleParams(value, context.options, context.errors); + } + }); + }); + } + + visitKeyframes(metadata, context) { + const ast = { + type: 5 + /* AnimationMetadataType.Keyframes */ + , + styles: [], + options: null + }; + + if (!context.currentAnimateTimings) { + context.errors.push(invalidKeyframes()); + return ast; + } + + const MAX_KEYFRAME_OFFSET = 1; + let totalKeyframesWithOffsets = 0; + const offsets = []; + let offsetsOutOfOrder = false; + let keyframesOutOfRange = false; + let previousOffset = 0; + const keyframes = metadata.steps.map(styles => { + const style = this._makeStyleAst(styles, context); + + let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles); + let offset = 0; + + if (offsetVal != null) { + totalKeyframesWithOffsets++; + offset = style.offset = offsetVal; + } + + keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1; + offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset; + previousOffset = offset; + offsets.push(offset); + return style; + }); + + if (keyframesOutOfRange) { + context.errors.push(invalidOffset()); + } + + if (offsetsOutOfOrder) { + context.errors.push(keyframeOffsetsOutOfOrder()); + } + + const length = metadata.steps.length; + let generatedOffset = 0; + + if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) { + context.errors.push(keyframesMissingOffsets()); + } else if (totalKeyframesWithOffsets == 0) { + generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1); + } + + const limit = length - 1; + const currentTime = context.currentTime; + const currentAnimateTimings = context.currentAnimateTimings; + const animateDuration = currentAnimateTimings.duration; + keyframes.forEach((kf, i) => { + const offset = generatedOffset > 0 ? i == limit ? 1 : generatedOffset * i : offsets[i]; + const durationUpToThisFrame = offset * animateDuration; + context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame; + currentAnimateTimings.duration = durationUpToThisFrame; + + this._validateStyleAst(kf, context); + + kf.offset = offset; + ast.styles.push(kf); + }); + return ast; + } + + visitReference(metadata, context) { + return { + type: 8 + /* AnimationMetadataType.Reference */ + , + animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitAnimateChild(metadata, context) { + context.depCount++; + return { + type: 9 + /* AnimationMetadataType.AnimateChild */ + , + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitAnimateRef(metadata, context) { + return { + type: 10 + /* AnimationMetadataType.AnimateRef */ + , + animation: this.visitReference(metadata.animation, context), + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitQuery(metadata, context) { + const parentSelector = context.currentQuerySelector; + const options = metadata.options || {}; + context.queryCount++; + context.currentQuery = metadata; + const [selector, includeSelf] = normalizeSelector(metadata.selector); + context.currentQuerySelector = parentSelector.length ? parentSelector + ' ' + selector : selector; + getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map()); + const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context); + context.currentQuery = null; + context.currentQuerySelector = parentSelector; + return { + type: 11 + /* AnimationMetadataType.Query */ + , + selector, + limit: options.limit || 0, + optional: !!options.optional, + includeSelf, + animation, + originalSelector: metadata.selector, + options: normalizeAnimationOptions(metadata.options) + }; + } + + visitStagger(metadata, context) { + if (!context.currentQuery) { + context.errors.push(invalidStagger()); + } + + const timings = metadata.timings === 'full' ? { + duration: 0, + delay: 0, + easing: 'full' + } : resolveTiming(metadata.timings, context.errors, true); + return { + type: 12 + /* AnimationMetadataType.Stagger */ + , + animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), + timings, + options: null + }; + } + +} + +function normalizeSelector(selector) { + const hasAmpersand = selector.split(/\s*,\s*/).find(token => token == SELF_TOKEN) ? true : false; + + if (hasAmpersand) { + selector = selector.replace(SELF_TOKEN_REGEX, ''); + } // Note: the :enter and :leave aren't normalized here since those + // selectors are filled in at runtime during timeline building + + + selector = selector.replace(/@\*/g, NG_TRIGGER_SELECTOR).replace(/@\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.slice(1)).replace(/:animating/g, NG_ANIMATING_SELECTOR); + return [selector, hasAmpersand]; +} + +function normalizeParams(obj) { + return obj ? copyObj(obj) : null; +} + +class AnimationAstBuilderContext { + constructor(errors) { + this.errors = errors; + this.queryCount = 0; + this.depCount = 0; + this.currentTransition = null; + this.currentQuery = null; + this.currentQuerySelector = null; + this.currentAnimateTimings = null; + this.currentTime = 0; + this.collectedStyles = new Map(); + this.options = null; + this.unsupportedCSSPropertiesFound = new Set(); + } + +} + +function consumeOffset(styles) { + if (typeof styles == 'string') return null; + let offset = null; + + if (Array.isArray(styles)) { + styles.forEach(styleTuple => { + if (styleTuple instanceof Map && styleTuple.has('offset')) { + const obj = styleTuple; + offset = parseFloat(obj.get('offset')); + obj.delete('offset'); + } + }); + } else if (styles instanceof Map && styles.has('offset')) { + const obj = styles; + offset = parseFloat(obj.get('offset')); + obj.delete('offset'); + } + + return offset; +} + +function constructTimingAst(value, errors) { + if (value.hasOwnProperty('duration')) { + return value; + } + + if (typeof value == 'number') { + const duration = resolveTiming(value, errors).duration; + return makeTimingAst(duration, 0, ''); + } + + const strValue = value; + const isDynamic = strValue.split(/\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{'); + + if (isDynamic) { + const ast = makeTimingAst(0, 0, ''); + ast.dynamic = true; + ast.strValue = strValue; + return ast; + } + + const timings = resolveTiming(strValue, errors); + return makeTimingAst(timings.duration, timings.delay, timings.easing); +} + +function normalizeAnimationOptions(options) { + if (options) { + options = copyObj(options); + + if (options['params']) { + options['params'] = normalizeParams(options['params']); + } + } else { + options = {}; + } + + return options; +} + +function makeTimingAst(duration, delay, easing) { + return { + duration, + delay, + easing + }; +} + +function createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) { + return { + type: 1 + /* AnimationTransitionInstructionType.TimelineAnimation */ + , + element, + keyframes, + preStyleProps, + postStyleProps, + duration, + delay, + totalTime: duration + delay, + easing, + subTimeline + }; +} + +class ElementInstructionMap { + constructor() { + this._map = new Map(); + } + + get(element) { + return this._map.get(element) || []; + } + + append(element, instructions) { + let existingInstructions = this._map.get(element); + + if (!existingInstructions) { + this._map.set(element, existingInstructions = []); + } + + existingInstructions.push(...instructions); + } + + has(element) { + return this._map.has(element); + } + + clear() { + this._map.clear(); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const ONE_FRAME_IN_MILLISECONDS = 1; +const ENTER_TOKEN = ':enter'; +const ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g'); +const LEAVE_TOKEN = ':leave'; +const LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g'); +/* + * The code within this file aims to generate web-animations-compatible keyframes from Angular's + * animation DSL code. + * + * The code below will be converted from: + * + * ``` + * sequence([ + * style({ opacity: 0 }), + * animate(1000, style({ opacity: 0 })) + * ]) + * ``` + * + * To: + * ``` + * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }] + * duration = 1000 + * delay = 0 + * easing = '' + * ``` + * + * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a + * combination of AST traversal and merge-sort-like algorithms are used. + * + * [AST Traversal] + * Each of the animation verbs, when executed, will return an string-map object representing what + * type of action it is (style, animate, group, etc...) and the data associated with it. This means + * that when functional composition mix of these functions is evaluated (like in the example above) + * then it will end up producing a tree of objects representing the animation itself. + * + * When this animation object tree is processed by the visitor code below it will visit each of the + * verb statements within the visitor. And during each visit it will build the context of the + * animation keyframes by interacting with the `TimelineBuilder`. + * + * [TimelineBuilder] + * This class is responsible for tracking the styles and building a series of keyframe objects for a + * timeline between a start and end time. The builder starts off with an initial timeline and each + * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a + * `sequence()` then it will generate a sub timeline for each step as well as a new one after + * they are complete. + * + * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub + * timeline was created (based on one of the cases above) then the parent timeline will attempt to + * merge the styles used within the sub timelines into itself (only with group() this will happen). + * This happens with a merge operation (much like how the merge works in mergeSort) and it will only + * copy the most recently used styles from the sub timelines into the parent timeline. This ensures + * that if the styles are used later on in another phase of the animation then they will be the most + * up-to-date values. + * + * [How Missing Styles Are Updated] + * Each timeline has a `backFill` property which is responsible for filling in new styles into + * already processed keyframes if a new style shows up later within the animation sequence. + * + * ``` + * sequence([ + * style({ width: 0 }), + * animate(1000, style({ width: 100 })), + * animate(1000, style({ width: 200 })), + * animate(1000, style({ width: 300 })) + * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere + * else + * ]) + * ``` + * + * What is happening here is that the `height` value is added later in the sequence, but is missing + * from all previous animation steps. Therefore when a keyframe is created it would also be missing + * from all previous keyframes up until where it is first used. For the timeline keyframe generation + * to properly fill in the style it will place the previous value (the value from the parent + * timeline) or a default value of `*` into the backFill map. The `copyStyles` method in util.ts + * handles propagating that backfill map to the styles object. + * + * When a sub-timeline is created it will have its own backFill property. This is done so that + * styles present within the sub-timeline do not accidentally seep into the previous/future timeline + * keyframes + * + * [Validation] + * The code in this file is not responsible for validation. That functionality happens with within + * the `AnimationValidatorVisitor` code. + */ + +function buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) { + return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors); +} + +class AnimationTimelineBuilderVisitor { + buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) { + subInstructions = subInstructions || new ElementInstructionMap(); + const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []); + context.options = options; + const delay = options.delay ? resolveTimingValue(options.delay) : 0; + context.currentTimeline.delayNextStep(delay); + context.currentTimeline.setStyles([startingStyles], null, context.errors, options); + visitDslNode(this, ast, context); // this checks to see if an actual animation happened + + const timelines = context.timelines.filter(timeline => timeline.containsAnimation()); // note: we just want to apply the final styles for the rootElement, so we do not + // just apply the styles to the last timeline but the last timeline which + // element is the root one (basically `*`-styles are replaced with the actual + // state style values only for the root element) + + if (timelines.length && finalStyles.size) { + let lastRootTimeline; + + for (let i = timelines.length - 1; i >= 0; i--) { + const timeline = timelines[i]; + + if (timeline.element === rootElement) { + lastRootTimeline = timeline; + break; + } + } + + if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) { + lastRootTimeline.setStyles([finalStyles], null, context.errors, options); + } + } + + return timelines.length ? timelines.map(timeline => timeline.buildKeyframes()) : [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)]; + } + + visitTrigger(ast, context) {// these values are not visited in this AST + } + + visitState(ast, context) {// these values are not visited in this AST + } + + visitTransition(ast, context) {// these values are not visited in this AST + } + + visitAnimateChild(ast, context) { + const elementInstructions = context.subInstructions.get(context.element); + + if (elementInstructions) { + const innerContext = context.createSubContext(ast.options); + const startTime = context.currentTimeline.currentTime; + + const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options); + + if (startTime != endTime) { + // we do this on the upper context because we created a sub context for + // the sub child animations + context.transformIntoNewTimeline(endTime); + } + } + + context.previousNode = ast; + } + + visitAnimateRef(ast, context) { + const innerContext = context.createSubContext(ast.options); + innerContext.transformIntoNewTimeline(); + + this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext); + + this.visitReference(ast.animation, innerContext); + context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime); + context.previousNode = ast; + } + + _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) { + for (const animationRefOptions of animationsRefsOptions) { + const animationDelay = animationRefOptions?.delay; + + if (animationDelay) { + const animationDelayValue = typeof animationDelay === 'number' ? animationDelay : resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors)); + innerContext.delayNextStep(animationDelayValue); + } + } + } + + _visitSubInstructions(instructions, context, options) { + const startTime = context.currentTimeline.currentTime; + let furthestTime = startTime; // this is a special-case for when a user wants to skip a sub + // animation from being fired entirely. + + const duration = options.duration != null ? resolveTimingValue(options.duration) : null; + const delay = options.delay != null ? resolveTimingValue(options.delay) : null; + + if (duration !== 0) { + instructions.forEach(instruction => { + const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay); + furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay); + }); + } + + return furthestTime; + } + + visitReference(ast, context) { + context.updateOptions(ast.options, true); + visitDslNode(this, ast.animation, context); + context.previousNode = ast; + } + + visitSequence(ast, context) { + const subContextCount = context.subContextCount; + let ctx = context; + const options = ast.options; + + if (options && (options.params || options.delay)) { + ctx = context.createSubContext(options); + ctx.transformIntoNewTimeline(); + + if (options.delay != null) { + if (ctx.previousNode.type == 6 + /* AnimationMetadataType.Style */ + ) { + ctx.currentTimeline.snapshotCurrentStyles(); + ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE; + } + + const delay = resolveTimingValue(options.delay); + ctx.delayNextStep(delay); + } + } + + if (ast.steps.length) { + ast.steps.forEach(s => visitDslNode(this, s, ctx)); // this is here just in case the inner steps only contain or end with a style() call + + ctx.currentTimeline.applyStylesToKeyframe(); // this means that some animation function within the sequence + // ended up creating a sub timeline (which means the current + // timeline cannot overlap with the contents of the sequence) + + if (ctx.subContextCount > subContextCount) { + ctx.transformIntoNewTimeline(); + } + } + + context.previousNode = ast; + } + + visitGroup(ast, context) { + const innerTimelines = []; + let furthestTime = context.currentTimeline.currentTime; + const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0; + ast.steps.forEach(s => { + const innerContext = context.createSubContext(ast.options); + + if (delay) { + innerContext.delayNextStep(delay); + } + + visitDslNode(this, s, innerContext); + furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime); + innerTimelines.push(innerContext.currentTimeline); + }); // this operation is run after the AST loop because otherwise + // if the parent timeline's collected styles were updated then + // it would pass in invalid data into the new-to-be forked items + + innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline)); + context.transformIntoNewTimeline(furthestTime); + context.previousNode = ast; + } + + _visitTiming(ast, context) { + if (ast.dynamic) { + const strValue = ast.strValue; + const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue; + return resolveTiming(timingValue, context.errors); + } else { + return { + duration: ast.duration, + delay: ast.delay, + easing: ast.easing + }; + } + } + + visitAnimate(ast, context) { + const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context); + + const timeline = context.currentTimeline; + + if (timings.delay) { + context.incrementTime(timings.delay); + timeline.snapshotCurrentStyles(); + } + + const style = ast.style; + + if (style.type == 5 + /* AnimationMetadataType.Keyframes */ + ) { + this.visitKeyframes(style, context); + } else { + context.incrementTime(timings.duration); + this.visitStyle(style, context); + timeline.applyStylesToKeyframe(); + } + + context.currentAnimateTimings = null; + context.previousNode = ast; + } + + visitStyle(ast, context) { + const timeline = context.currentTimeline; + const timings = context.currentAnimateTimings; // this is a special case for when a style() call + // directly follows an animate() call (but not inside of an animate() call) + + if (!timings && timeline.hasCurrentStyleProperties()) { + timeline.forwardFrame(); + } + + const easing = timings && timings.easing || ast.easing; + + if (ast.isEmptyStep) { + timeline.applyEmptyStep(easing); + } else { + timeline.setStyles(ast.styles, easing, context.errors, context.options); + } + + context.previousNode = ast; + } + + visitKeyframes(ast, context) { + const currentAnimateTimings = context.currentAnimateTimings; + const startTime = context.currentTimeline.duration; + const duration = currentAnimateTimings.duration; + const innerContext = context.createSubContext(); + const innerTimeline = innerContext.currentTimeline; + innerTimeline.easing = currentAnimateTimings.easing; + ast.styles.forEach(step => { + const offset = step.offset || 0; + innerTimeline.forwardTime(offset * duration); + innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options); + innerTimeline.applyStylesToKeyframe(); + }); // this will ensure that the parent timeline gets all the styles from + // the child even if the new timeline below is not used + + context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline); // we do this because the window between this timeline and the sub timeline + // should ensure that the styles within are exactly the same as they were before + + context.transformIntoNewTimeline(startTime + duration); + context.previousNode = ast; + } + + visitQuery(ast, context) { + // in the event that the first step before this is a style step we need + // to ensure the styles are applied before the children are animated + const startTime = context.currentTimeline.currentTime; + const options = ast.options || {}; + const delay = options.delay ? resolveTimingValue(options.delay) : 0; + + if (delay && (context.previousNode.type === 6 + /* AnimationMetadataType.Style */ + || startTime == 0 && context.currentTimeline.hasCurrentStyleProperties())) { + context.currentTimeline.snapshotCurrentStyles(); + context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE; + } + + let furthestTime = startTime; + const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors); + context.currentQueryTotal = elms.length; + let sameElementTimeline = null; + elms.forEach((element, i) => { + context.currentQueryIndex = i; + const innerContext = context.createSubContext(ast.options, element); + + if (delay) { + innerContext.delayNextStep(delay); + } + + if (element === context.element) { + sameElementTimeline = innerContext.currentTimeline; + } + + visitDslNode(this, ast.animation, innerContext); // this is here just incase the inner steps only contain or end + // with a style() call (which is here to signal that this is a preparatory + // call to style an element before it is animated again) + + innerContext.currentTimeline.applyStylesToKeyframe(); + const endTime = innerContext.currentTimeline.currentTime; + furthestTime = Math.max(furthestTime, endTime); + }); + context.currentQueryIndex = 0; + context.currentQueryTotal = 0; + context.transformIntoNewTimeline(furthestTime); + + if (sameElementTimeline) { + context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline); + context.currentTimeline.snapshotCurrentStyles(); + } + + context.previousNode = ast; + } + + visitStagger(ast, context) { + const parentContext = context.parentContext; + const tl = context.currentTimeline; + const timings = ast.timings; + const duration = Math.abs(timings.duration); + const maxTime = duration * (context.currentQueryTotal - 1); + let delay = duration * context.currentQueryIndex; + let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing; + + switch (staggerTransformer) { + case 'reverse': + delay = maxTime - delay; + break; + + case 'full': + delay = parentContext.currentStaggerTime; + break; + } + + const timeline = context.currentTimeline; + + if (delay) { + timeline.delayNextStep(delay); + } + + const startingTime = timeline.currentTime; + visitDslNode(this, ast.animation, context); + context.previousNode = ast; // time = duration + delay + // the reason why this computation is so complex is because + // the inner timeline may either have a delay value or a stretched + // keyframe depending on if a subtimeline is not used or is used. + + parentContext.currentStaggerTime = tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime); + } + +} + +const DEFAULT_NOOP_PREVIOUS_NODE = {}; + +class AnimationTimelineContext { + constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) { + this._driver = _driver; + this.element = element; + this.subInstructions = subInstructions; + this._enterClassName = _enterClassName; + this._leaveClassName = _leaveClassName; + this.errors = errors; + this.timelines = timelines; + this.parentContext = null; + this.currentAnimateTimings = null; + this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE; + this.subContextCount = 0; + this.options = {}; + this.currentQueryIndex = 0; + this.currentQueryTotal = 0; + this.currentStaggerTime = 0; + this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0); + timelines.push(this.currentTimeline); + } + + get params() { + return this.options.params; + } + + updateOptions(options, skipIfExists) { + if (!options) return; + const newOptions = options; + let optionsToUpdate = this.options; // NOTE: this will get patched up when other animation methods support duration overrides + + if (newOptions.duration != null) { + optionsToUpdate.duration = resolveTimingValue(newOptions.duration); + } + + if (newOptions.delay != null) { + optionsToUpdate.delay = resolveTimingValue(newOptions.delay); + } + + const newParams = newOptions.params; + + if (newParams) { + let paramsToUpdate = optionsToUpdate.params; + + if (!paramsToUpdate) { + paramsToUpdate = this.options.params = {}; + } + + Object.keys(newParams).forEach(name => { + if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) { + paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors); + } + }); + } + } + + _copyOptions() { + const options = {}; + + if (this.options) { + const oldParams = this.options.params; + + if (oldParams) { + const params = options['params'] = {}; + Object.keys(oldParams).forEach(name => { + params[name] = oldParams[name]; + }); + } + } + + return options; + } + + createSubContext(options = null, element, newTime) { + const target = element || this.element; + const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0)); + context.previousNode = this.previousNode; + context.currentAnimateTimings = this.currentAnimateTimings; + context.options = this._copyOptions(); + context.updateOptions(options); + context.currentQueryIndex = this.currentQueryIndex; + context.currentQueryTotal = this.currentQueryTotal; + context.parentContext = this; + this.subContextCount++; + return context; + } + + transformIntoNewTimeline(newTime) { + this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE; + this.currentTimeline = this.currentTimeline.fork(this.element, newTime); + this.timelines.push(this.currentTimeline); + return this.currentTimeline; + } + + appendInstructionToTimeline(instruction, duration, delay) { + const updatedTimings = { + duration: duration != null ? duration : instruction.duration, + delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay, + easing: '' + }; + const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe); + this.timelines.push(builder); + return updatedTimings; + } + + incrementTime(time) { + this.currentTimeline.forwardTime(this.currentTimeline.duration + time); + } + + delayNextStep(delay) { + // negative delays are not yet supported + if (delay > 0) { + this.currentTimeline.delayNextStep(delay); + } + } + + invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) { + let results = []; + + if (includeSelf) { + results.push(this.element); + } + + if (selector.length > 0) { + // only if :self is used then the selector can be empty + selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName); + selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName); + const multi = limit != 1; + + let elements = this._driver.query(this.element, selector, multi); + + if (limit !== 0) { + elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) : elements.slice(0, limit); + } + + results.push(...elements); + } + + if (!optional && results.length == 0) { + errors.push(invalidQuery(originalSelector)); + } + + return results; + } + +} + +class TimelineBuilder { + constructor(_driver, element, startTime, _elementTimelineStylesLookup) { + this._driver = _driver; + this.element = element; + this.startTime = startTime; + this._elementTimelineStylesLookup = _elementTimelineStylesLookup; + this.duration = 0; + this._previousKeyframe = new Map(); + this._currentKeyframe = new Map(); + this._keyframes = new Map(); + this._styleSummary = new Map(); + this._localTimelineStyles = new Map(); + this._pendingStyles = new Map(); + this._backFill = new Map(); + this._currentEmptyStepKeyframe = null; + + if (!this._elementTimelineStylesLookup) { + this._elementTimelineStylesLookup = new Map(); + } + + this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element); + + if (!this._globalTimelineStyles) { + this._globalTimelineStyles = this._localTimelineStyles; + + this._elementTimelineStylesLookup.set(element, this._localTimelineStyles); + } + + this._loadKeyframe(); + } + + containsAnimation() { + switch (this._keyframes.size) { + case 0: + return false; + + case 1: + return this.hasCurrentStyleProperties(); + + default: + return true; + } + } + + hasCurrentStyleProperties() { + return this._currentKeyframe.size > 0; + } + + get currentTime() { + return this.startTime + this.duration; + } + + delayNextStep(delay) { + // in the event that a style() step is placed right before a stagger() + // and that style() step is the very first style() value in the animation + // then we need to make a copy of the keyframe [0, copy, 1] so that the delay + // properly applies the style() values to work with the stagger... + const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size; + + if (this.duration || hasPreStyleStep) { + this.forwardTime(this.currentTime + delay); + + if (hasPreStyleStep) { + this.snapshotCurrentStyles(); + } + } else { + this.startTime += delay; + } + } + + fork(element, currentTime) { + this.applyStylesToKeyframe(); + return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup); + } + + _loadKeyframe() { + if (this._currentKeyframe) { + this._previousKeyframe = this._currentKeyframe; + } + + this._currentKeyframe = this._keyframes.get(this.duration); + + if (!this._currentKeyframe) { + this._currentKeyframe = new Map(); + + this._keyframes.set(this.duration, this._currentKeyframe); + } + } + + forwardFrame() { + this.duration += ONE_FRAME_IN_MILLISECONDS; + + this._loadKeyframe(); + } + + forwardTime(time) { + this.applyStylesToKeyframe(); + this.duration = time; + + this._loadKeyframe(); + } + + _updateStyle(prop, value) { + this._localTimelineStyles.set(prop, value); + + this._globalTimelineStyles.set(prop, value); + + this._styleSummary.set(prop, { + time: this.currentTime, + value + }); + } + + allowOnlyTimelineStyles() { + return this._currentEmptyStepKeyframe !== this._currentKeyframe; + } + + applyEmptyStep(easing) { + if (easing) { + this._previousKeyframe.set('easing', easing); + } // special case for animate(duration): + // all missing styles are filled with a `*` value then + // if any destination styles are filled in later on the same + // keyframe then they will override the overridden styles + // We use `_globalTimelineStyles` here because there may be + // styles in previous keyframes that are not present in this timeline + + + for (let [prop, value] of this._globalTimelineStyles) { + this._backFill.set(prop, value || _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE); + + this._currentKeyframe.set(prop, _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE); + } + + this._currentEmptyStepKeyframe = this._currentKeyframe; + } + + setStyles(input, easing, errors, options) { + if (easing) { + this._previousKeyframe.set('easing', easing); + } + + const params = options && options.params || {}; + const styles = flattenStyles(input, this._globalTimelineStyles); + + for (let [prop, value] of styles) { + const val = interpolateParams(value, params, errors); + + this._pendingStyles.set(prop, val); + + if (!this._localTimelineStyles.has(prop)) { + this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE); + } + + this._updateStyle(prop, val); + } + } + + applyStylesToKeyframe() { + if (this._pendingStyles.size == 0) return; + + this._pendingStyles.forEach((val, prop) => { + this._currentKeyframe.set(prop, val); + }); + + this._pendingStyles.clear(); + + this._localTimelineStyles.forEach((val, prop) => { + if (!this._currentKeyframe.has(prop)) { + this._currentKeyframe.set(prop, val); + } + }); + } + + snapshotCurrentStyles() { + for (let [prop, val] of this._localTimelineStyles) { + this._pendingStyles.set(prop, val); + + this._updateStyle(prop, val); + } + } + + getFinalKeyframe() { + return this._keyframes.get(this.duration); + } + + get properties() { + const properties = []; + + for (let prop in this._currentKeyframe) { + properties.push(prop); + } + + return properties; + } + + mergeTimelineCollectedStyles(timeline) { + timeline._styleSummary.forEach((details1, prop) => { + const details0 = this._styleSummary.get(prop); + + if (!details0 || details1.time > details0.time) { + this._updateStyle(prop, details1.value); + } + }); + } + + buildKeyframes() { + this.applyStylesToKeyframe(); + const preStyleProps = new Set(); + const postStyleProps = new Set(); + const isEmpty = this._keyframes.size === 1 && this.duration === 0; + let finalKeyframes = []; + + this._keyframes.forEach((keyframe, time) => { + const finalKeyframe = copyStyles(keyframe, new Map(), this._backFill); + finalKeyframe.forEach((value, prop) => { + if (value === _angular_animations__WEBPACK_IMPORTED_MODULE_1__["ɵPRE_STYLE"]) { + preStyleProps.add(prop); + } else if (value === _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE) { + postStyleProps.add(prop); + } + }); + + if (!isEmpty) { + finalKeyframe.set('offset', time / this.duration); + } + + finalKeyframes.push(finalKeyframe); + }); + + const preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : []; + const postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : []; // special case for a 0-second animation (which is designed just to place styles onscreen) + + if (isEmpty) { + const kf0 = finalKeyframes[0]; + const kf1 = new Map(kf0); + kf0.set('offset', 0); + kf1.set('offset', 1); + finalKeyframes = [kf0, kf1]; + } + + return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false); + } + +} + +class SubTimelineBuilder extends TimelineBuilder { + constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) { + super(driver, element, timings.delay); + this.keyframes = keyframes; + this.preStyleProps = preStyleProps; + this.postStyleProps = postStyleProps; + this._stretchStartingKeyframe = _stretchStartingKeyframe; + this.timings = { + duration: timings.duration, + delay: timings.delay, + easing: timings.easing + }; + } + + containsAnimation() { + return this.keyframes.length > 1; + } + + buildKeyframes() { + let keyframes = this.keyframes; + let { + delay, + duration, + easing + } = this.timings; + + if (this._stretchStartingKeyframe && delay) { + const newKeyframes = []; + const totalTime = duration + delay; + const startingGap = delay / totalTime; // the original starting keyframe now starts once the delay is done + + const newFirstKeyframe = copyStyles(keyframes[0]); + newFirstKeyframe.set('offset', 0); + newKeyframes.push(newFirstKeyframe); + const oldFirstKeyframe = copyStyles(keyframes[0]); + oldFirstKeyframe.set('offset', roundOffset(startingGap)); + newKeyframes.push(oldFirstKeyframe); + /* + When the keyframe is stretched then it means that the delay before the animation + starts is gone. Instead the first keyframe is placed at the start of the animation + and it is then copied to where it starts when the original delay is over. This basically + means nothing animates during that delay, but the styles are still rendered. For this + to work the original offset values that exist in the original keyframes must be "warped" + so that they can take the new keyframe + delay into account. + delay=1000, duration=1000, keyframes = 0 .5 1 + turns into + delay=0, duration=2000, keyframes = 0 .33 .66 1 + */ + // offsets between 1 ... n -1 are all warped by the keyframe stretch + + const limit = keyframes.length - 1; + + for (let i = 1; i <= limit; i++) { + let kf = copyStyles(keyframes[i]); + const oldOffset = kf.get('offset'); + const timeAtKeyframe = delay + oldOffset * duration; + kf.set('offset', roundOffset(timeAtKeyframe / totalTime)); + newKeyframes.push(kf); + } // the new starting keyframe should be added at the start + + + duration = totalTime; + delay = 0; + easing = ''; + keyframes = newKeyframes; + } + + return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true); + } + +} + +function roundOffset(offset, decimalPoints = 3) { + const mult = Math.pow(10, decimalPoints - 1); + return Math.round(offset * mult) / mult; +} + +function flattenStyles(input, allStyles) { + const styles = new Map(); + let allProperties; + input.forEach(token => { + if (token === '*') { + allProperties = allProperties || allStyles.keys(); + + for (let prop of allProperties) { + styles.set(prop, _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE); + } + } else { + copyStyles(token, styles); + } + }); + return styles; +} + +class Animation { + constructor(_driver, input) { + this._driver = _driver; + const errors = []; + const warnings = []; + const ast = buildAnimationAst(_driver, input, errors, warnings); + + if (errors.length) { + throw validationFailed(errors); + } + + if (warnings.length) { + warnValidation(warnings); + } + + this._animationAst = ast; + } + + buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) { + const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : startingStyles; + const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : destinationStyles; + const errors = []; + subInstructions = subInstructions || new ElementInstructionMap(); + const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors); + + if (errors.length) { + throw buildingFailed(errors); + } + + return result; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @publicApi + */ + + +class AnimationStyleNormalizer {} +/** + * @publicApi + */ + + +class NoopAnimationStyleNormalizer { + normalizePropertyName(propertyName, errors) { + return propertyName; + } + + normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) { + return value; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const DIMENSIONAL_PROP_SET = new Set(['width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'left', 'top', 'bottom', 'right', 'fontSize', 'outlineWidth', 'outlineOffset', 'paddingTop', 'paddingLeft', 'paddingBottom', 'paddingRight', 'marginTop', 'marginLeft', 'marginBottom', 'marginRight', 'borderRadius', 'borderWidth', 'borderTopWidth', 'borderLeftWidth', 'borderRightWidth', 'borderBottomWidth', 'textIndent', 'perspective']); + +class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer { + normalizePropertyName(propertyName, errors) { + return dashCaseToCamelCase(propertyName); + } + + normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) { + let unit = ''; + const strVal = value.toString().trim(); + + if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') { + if (typeof value === 'number') { + unit = 'px'; + } else { + const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/); + + if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) { + errors.push(invalidCssUnitValue(userProvidedProperty, value)); + } + } + } + + return strVal + unit; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) { + return { + type: 0 + /* AnimationTransitionInstructionType.TransitionAnimation */ + , + element, + triggerName, + isRemovalTransition, + fromState, + fromStyles, + toState, + toStyles, + timelines, + queriedElements, + preStyleProps, + postStyleProps, + totalTime, + errors + }; +} + +const EMPTY_OBJECT = {}; + +class AnimationTransitionFactory { + constructor(_triggerName, ast, _stateStyles) { + this._triggerName = _triggerName; + this.ast = ast; + this._stateStyles = _stateStyles; + } + + match(currentState, nextState, element, params) { + return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params); + } + + buildStyles(stateName, params, errors) { + let styler = this._stateStyles.get('*'); + + if (stateName !== undefined) { + styler = this._stateStyles.get(stateName?.toString()) || styler; + } + + return styler ? styler.buildStyles(params, errors) : new Map(); + } + + build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) { + const errors = []; + const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT; + const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT; + const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors); + const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT; + const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors); + const queriedElements = new Set(); + const preStyleMap = new Map(); + const postStyleMap = new Map(); + const isRemoval = nextState === 'void'; + const animationOptions = { + params: applyParamDefaults(nextAnimationParams, transitionAnimationParams), + delay: this.ast.options?.delay + }; + const timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors); + let totalTime = 0; + timelines.forEach(tl => { + totalTime = Math.max(tl.duration + tl.delay, totalTime); + }); + + if (errors.length) { + return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors); + } + + timelines.forEach(tl => { + const elm = tl.element; + const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set()); + tl.preStyleProps.forEach(prop => preProps.add(prop)); + const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set()); + tl.postStyleProps.forEach(prop => postProps.add(prop)); + + if (elm !== element) { + queriedElements.add(elm); + } + }); + + if (typeof ngDevMode === 'undefined' || ngDevMode) { + checkNonAnimatableInTimelines(timelines, this._triggerName, driver); + } + + const queriedElementsList = iteratorToArray(queriedElements.values()); + return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime); + } + +} +/** + * Checks inside a set of timelines if they try to animate a css property which is not considered + * animatable, in that case it prints a warning on the console. + * Besides that the function doesn't have any other effect. + * + * Note: this check is done here after the timelines are built instead of doing on a lower level so + * that we can make sure that the warning appears only once per instruction (we can aggregate here + * all the issues instead of finding them separately). + * + * @param timelines The built timelines for the current instruction. + * @param triggerName The name of the trigger for the current instruction. + * @param driver Animation driver used to perform the check. + * + */ + + +function checkNonAnimatableInTimelines(timelines, triggerName, driver) { + if (!driver.validateAnimatableStyleProperty) { + return; + } + + const invalidNonAnimatableProps = new Set(); + timelines.forEach(({ + keyframes + }) => { + const nonAnimatablePropsInitialValues = new Map(); + keyframes.forEach(keyframe => { + for (const [prop, value] of keyframe.entries()) { + if (!driver.validateAnimatableStyleProperty(prop)) { + if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) { + const propInitialValue = nonAnimatablePropsInitialValues.get(prop); + + if (propInitialValue !== value) { + invalidNonAnimatableProps.add(prop); + } + } else { + nonAnimatablePropsInitialValues.set(prop, value); + } + } + } + }); + }); + + if (invalidNonAnimatableProps.size > 0) { + console.warn(`Warning: The animation trigger "${triggerName}" is attempting to animate the following` + ' not animatable properties: ' + Array.from(invalidNonAnimatableProps).join(', ') + '\n' + '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)'); + } +} + +function oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) { + return matchFns.some(fn => fn(currentState, nextState, element, params)); +} + +function applyParamDefaults(userParams, defaults) { + const result = copyObj(defaults); + + for (const key in userParams) { + if (userParams.hasOwnProperty(key) && userParams[key] != null) { + result[key] = userParams[key]; + } + } + + return result; +} + +class AnimationStateStyles { + constructor(styles, defaultParams, normalizer) { + this.styles = styles; + this.defaultParams = defaultParams; + this.normalizer = normalizer; + } + + buildStyles(params, errors) { + const finalStyles = new Map(); + const combinedParams = copyObj(this.defaultParams); + Object.keys(params).forEach(key => { + const value = params[key]; + + if (value !== null) { + combinedParams[key] = value; + } + }); + this.styles.styles.forEach(value => { + if (typeof value !== 'string') { + value.forEach((val, prop) => { + if (val) { + val = interpolateParams(val, combinedParams, errors); + } + + const normalizedProp = this.normalizer.normalizePropertyName(prop, errors); + val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors); + finalStyles.set(normalizedProp, val); + }); + } + }); + return finalStyles; + } + +} + +function buildTrigger(name, ast, normalizer) { + return new AnimationTrigger(name, ast, normalizer); +} + +class AnimationTrigger { + constructor(name, ast, _normalizer) { + this.name = name; + this.ast = ast; + this._normalizer = _normalizer; + this.transitionFactories = []; + this.states = new Map(); + ast.states.forEach(ast => { + const defaultParams = ast.options && ast.options.params || {}; + this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer)); + }); + balanceProperties(this.states, 'true', '1'); + balanceProperties(this.states, 'false', '0'); + ast.transitions.forEach(ast => { + this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states)); + }); + this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer); + } + + get containsQueries() { + return this.ast.queryCount > 0; + } + + matchTransition(currentState, nextState, element, params) { + const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params)); + return entry || null; + } + + matchStyles(currentState, params, errors) { + return this.fallbackTransition.buildStyles(currentState, params, errors); + } + +} + +function createFallbackTransition(triggerName, states, normalizer) { + const matchers = [(fromState, toState) => true]; + const animation = { + type: 2 + /* AnimationMetadataType.Sequence */ + , + steps: [], + options: null + }; + const transition = { + type: 1 + /* AnimationMetadataType.Transition */ + , + animation, + matchers, + options: null, + queryCount: 0, + depCount: 0 + }; + return new AnimationTransitionFactory(triggerName, transition, states); +} + +function balanceProperties(stateMap, key1, key2) { + if (stateMap.has(key1)) { + if (!stateMap.has(key2)) { + stateMap.set(key2, stateMap.get(key1)); + } + } else if (stateMap.has(key2)) { + stateMap.set(key1, stateMap.get(key2)); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const EMPTY_INSTRUCTION_MAP = new ElementInstructionMap(); + +class TimelineAnimationEngine { + constructor(bodyNode, _driver, _normalizer) { + this.bodyNode = bodyNode; + this._driver = _driver; + this._normalizer = _normalizer; + this._animations = new Map(); + this._playersById = new Map(); + this.players = []; + } + + register(id, metadata) { + const errors = []; + const warnings = []; + const ast = buildAnimationAst(this._driver, metadata, errors, warnings); + + if (errors.length) { + throw registerFailed(errors); + } else { + if (warnings.length) { + warnRegister(warnings); + } + + this._animations.set(id, ast); + } + } + + _buildPlayer(i, preStyles, postStyles) { + const element = i.element; + const keyframes = normalizeKeyframes$1(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles); + return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true); + } + + create(id, element, options = {}) { + const errors = []; + + const ast = this._animations.get(id); + + let instructions; + const autoStylesMap = new Map(); + + if (ast) { + instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors); + instructions.forEach(inst => { + const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map()); + inst.postStyleProps.forEach(prop => styles.set(prop, null)); + }); + } else { + errors.push(missingOrDestroyedAnimation()); + instructions = []; + } + + if (errors.length) { + throw createAnimationFailed(errors); + } + + autoStylesMap.forEach((styles, element) => { + styles.forEach((_, prop) => { + styles.set(prop, this._driver.computeStyle(element, prop, _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE)); + }); + }); + const players = instructions.map(i => { + const styles = autoStylesMap.get(i.element); + return this._buildPlayer(i, new Map(), styles); + }); + const player = optimizeGroupPlayer(players); + + this._playersById.set(id, player); + + player.onDestroy(() => this.destroy(id)); + this.players.push(player); + return player; + } + + destroy(id) { + const player = this._getPlayer(id); + + player.destroy(); + + this._playersById.delete(id); + + const index = this.players.indexOf(player); + + if (index >= 0) { + this.players.splice(index, 1); + } + } + + _getPlayer(id) { + const player = this._playersById.get(id); + + if (!player) { + throw missingPlayer(id); + } + + return player; + } + + listen(id, element, eventName, callback) { + // triggerName, fromState, toState are all ignored for timeline animations + const baseEvent = makeAnimationEvent(element, '', '', ''); + listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback); + return () => {}; + } + + command(id, element, command, args) { + if (command == 'register') { + this.register(id, args[0]); + return; + } + + if (command == 'create') { + const options = args[0] || {}; + this.create(id, element, options); + return; + } + + const player = this._getPlayer(id); + + switch (command) { + case 'play': + player.play(); + break; + + case 'pause': + player.pause(); + break; + + case 'reset': + player.reset(); + break; + + case 'restart': + player.restart(); + break; + + case 'finish': + player.finish(); + break; + + case 'init': + player.init(); + break; + + case 'setPosition': + player.setPosition(parseFloat(args[0])); + break; + + case 'destroy': + this.destroy(id); + break; + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const QUEUED_CLASSNAME = 'ng-animate-queued'; +const QUEUED_SELECTOR = '.ng-animate-queued'; +const DISABLED_CLASSNAME = 'ng-animate-disabled'; +const DISABLED_SELECTOR = '.ng-animate-disabled'; +const STAR_CLASSNAME = 'ng-star-inserted'; +const STAR_SELECTOR = '.ng-star-inserted'; +const EMPTY_PLAYER_ARRAY = []; +const NULL_REMOVAL_STATE = { + namespaceId: '', + setForRemoval: false, + setForMove: false, + hasAnimation: false, + removedBeforeQueried: false +}; +const NULL_REMOVED_QUERIED_STATE = { + namespaceId: '', + setForMove: false, + setForRemoval: false, + hasAnimation: false, + removedBeforeQueried: true +}; +const REMOVAL_FLAG = '__ng_removed'; + +class StateValue { + constructor(input, namespaceId = '') { + this.namespaceId = namespaceId; + const isObj = input && input.hasOwnProperty('value'); + const value = isObj ? input['value'] : input; + this.value = normalizeTriggerValue(value); + + if (isObj) { + const options = copyObj(input); + delete options['value']; + this.options = options; + } else { + this.options = {}; + } + + if (!this.options.params) { + this.options.params = {}; + } + } + + get params() { + return this.options.params; + } + + absorbOptions(options) { + const newParams = options.params; + + if (newParams) { + const oldParams = this.options.params; + Object.keys(newParams).forEach(prop => { + if (oldParams[prop] == null) { + oldParams[prop] = newParams[prop]; + } + }); + } + } + +} + +const VOID_VALUE = 'void'; +const DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE); + +class AnimationTransitionNamespace { + constructor(id, hostElement, _engine) { + this.id = id; + this.hostElement = hostElement; + this._engine = _engine; + this.players = []; + this._triggers = new Map(); + this._queue = []; + this._elementListeners = new Map(); + this._hostClassName = 'ng-tns-' + id; + addClass(hostElement, this._hostClassName); + } + + listen(element, name, phase, callback) { + if (!this._triggers.has(name)) { + throw missingTrigger(phase, name); + } + + if (phase == null || phase.length == 0) { + throw missingEvent(name); + } + + if (!isTriggerEventValid(phase)) { + throw unsupportedTriggerEvent(phase, name); + } + + const listeners = getOrSetDefaultValue(this._elementListeners, element, []); + const data = { + name, + phase, + callback + }; + listeners.push(data); + const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map()); + + if (!triggersWithStates.has(name)) { + addClass(element, NG_TRIGGER_CLASSNAME); + addClass(element, NG_TRIGGER_CLASSNAME + '-' + name); + triggersWithStates.set(name, DEFAULT_STATE_VALUE); + } + + return () => { + // the event listener is removed AFTER the flush has occurred such + // that leave animations callbacks can fire (otherwise if the node + // is removed in between then the listeners would be deregistered) + this._engine.afterFlush(() => { + const index = listeners.indexOf(data); + + if (index >= 0) { + listeners.splice(index, 1); + } + + if (!this._triggers.has(name)) { + triggersWithStates.delete(name); + } + }); + }; + } + + register(name, ast) { + if (this._triggers.has(name)) { + // throw + return false; + } else { + this._triggers.set(name, ast); + + return true; + } + } + + _getTrigger(name) { + const trigger = this._triggers.get(name); + + if (!trigger) { + throw unregisteredTrigger(name); + } + + return trigger; + } + + trigger(element, triggerName, value, defaultToFallback = true) { + const trigger = this._getTrigger(triggerName); + + const player = new TransitionAnimationPlayer(this.id, triggerName, element); + + let triggersWithStates = this._engine.statesByElement.get(element); + + if (!triggersWithStates) { + addClass(element, NG_TRIGGER_CLASSNAME); + addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName); + + this._engine.statesByElement.set(element, triggersWithStates = new Map()); + } + + let fromState = triggersWithStates.get(triggerName); + const toState = new StateValue(value, this.id); + const isObj = value && value.hasOwnProperty('value'); + + if (!isObj && fromState) { + toState.absorbOptions(fromState.options); + } + + triggersWithStates.set(triggerName, toState); + + if (!fromState) { + fromState = DEFAULT_STATE_VALUE; + } + + const isRemoval = toState.value === VOID_VALUE; // normally this isn't reached by here, however, if an object expression + // is passed in then it may be a new object each time. Comparing the value + // is important since that will stay the same despite there being a new object. + // The removal arc here is special cased because the same element is triggered + // twice in the event that it contains animations on the outer/inner portions + // of the host container + + if (!isRemoval && fromState.value === toState.value) { + // this means that despite the value not changing, some inner params + // have changed which means that the animation final styles need to be applied + if (!objEquals(fromState.params, toState.params)) { + const errors = []; + const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors); + const toStyles = trigger.matchStyles(toState.value, toState.params, errors); + + if (errors.length) { + this._engine.reportError(errors); + } else { + this._engine.afterFlush(() => { + eraseStyles(element, fromStyles); + setStyles(element, toStyles); + }); + } + } + + return; + } + + const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []); + playersOnElement.forEach(player => { + // only remove the player if it is queued on the EXACT same trigger/namespace + // we only also deal with queued players here because if the animation has + // started then we want to keep the player alive until the flush happens + // (which is where the previousPlayers are passed into the new player) + if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) { + player.destroy(); + } + }); + let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params); + let isFallbackTransition = false; + + if (!transition) { + if (!defaultToFallback) return; + transition = trigger.fallbackTransition; + isFallbackTransition = true; + } + + this._engine.totalQueuedPlayers++; + + this._queue.push({ + element, + triggerName, + transition, + fromState, + toState, + player, + isFallbackTransition + }); + + if (!isFallbackTransition) { + addClass(element, QUEUED_CLASSNAME); + player.onStart(() => { + removeClass(element, QUEUED_CLASSNAME); + }); + } + + player.onDone(() => { + let index = this.players.indexOf(player); + + if (index >= 0) { + this.players.splice(index, 1); + } + + const players = this._engine.playersByElement.get(element); + + if (players) { + let index = players.indexOf(player); + + if (index >= 0) { + players.splice(index, 1); + } + } + }); + this.players.push(player); + playersOnElement.push(player); + return player; + } + + deregister(name) { + this._triggers.delete(name); + + this._engine.statesByElement.forEach(stateMap => stateMap.delete(name)); + + this._elementListeners.forEach((listeners, element) => { + this._elementListeners.set(element, listeners.filter(entry => { + return entry.name != name; + })); + }); + } + + clearElementCache(element) { + this._engine.statesByElement.delete(element); + + this._elementListeners.delete(element); + + const elementPlayers = this._engine.playersByElement.get(element); + + if (elementPlayers) { + elementPlayers.forEach(player => player.destroy()); + + this._engine.playersByElement.delete(element); + } + } + + _signalRemovalForInnerTriggers(rootElement, context) { + const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true); // emulate a leave animation for all inner nodes within this node. + // If there are no animations found for any of the nodes then clear the cache + // for the element. + + + elements.forEach(elm => { + // this means that an inner remove() operation has already kicked off + // the animation on this element... + if (elm[REMOVAL_FLAG]) return; + + const namespaces = this._engine.fetchNamespacesByElement(elm); + + if (namespaces.size) { + namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true)); + } else { + this.clearElementCache(elm); + } + }); // If the child elements were removed along with the parent, their animations might not + // have completed. Clear all the elements from the cache so we don't end up with a memory leak. + + this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm))); + } + + triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) { + const triggerStates = this._engine.statesByElement.get(element); + + const previousTriggersValues = new Map(); + + if (triggerStates) { + const players = []; + triggerStates.forEach((state, triggerName) => { + previousTriggersValues.set(triggerName, state.value); // this check is here in the event that an element is removed + // twice (both on the host level and the component level) + + if (this._triggers.has(triggerName)) { + const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback); + + if (player) { + players.push(player); + } + } + }); + + if (players.length) { + this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues); + + if (destroyAfterComplete) { + optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element)); + } + + return true; + } + } + + return false; + } + + prepareLeaveAnimationListeners(element) { + const listeners = this._elementListeners.get(element); + + const elementStates = this._engine.statesByElement.get(element); // if this statement fails then it means that the element was picked up + // by an earlier flush (or there are no listeners at all to track the leave). + + + if (listeners && elementStates) { + const visitedTriggers = new Set(); + listeners.forEach(listener => { + const triggerName = listener.name; + if (visitedTriggers.has(triggerName)) return; + visitedTriggers.add(triggerName); + + const trigger = this._triggers.get(triggerName); + + const transition = trigger.fallbackTransition; + const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE; + const toState = new StateValue(VOID_VALUE); + const player = new TransitionAnimationPlayer(this.id, triggerName, element); + this._engine.totalQueuedPlayers++; + + this._queue.push({ + element, + triggerName, + transition, + fromState, + toState, + player, + isFallbackTransition: true + }); + }); + } + } + + removeNode(element, context) { + const engine = this._engine; + + if (element.childElementCount) { + this._signalRemovalForInnerTriggers(element, context); + } // this means that a * => VOID animation was detected and kicked off + + + if (this.triggerLeaveAnimation(element, context, true)) return; // find the player that is animating and make sure that the + // removal is delayed until that player has completed + + let containsPotentialParentTransition = false; + + if (engine.totalAnimations) { + const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : []; // when this `if statement` does not continue forward it means that + // a previous animation query has selected the current element and + // is animating it. In this situation want to continue forwards and + // allow the element to be queued up for animation later. + + if (currentPlayers && currentPlayers.length) { + containsPotentialParentTransition = true; + } else { + let parent = element; + + while (parent = parent.parentNode) { + const triggers = engine.statesByElement.get(parent); + + if (triggers) { + containsPotentialParentTransition = true; + break; + } + } + } + } // at this stage we know that the element will either get removed + // during flush or will be picked up by a parent query. Either way + // we need to fire the listeners for this element when it DOES get + // removed (once the query parent animation is done or after flush) + + + this.prepareLeaveAnimationListeners(element); // whether or not a parent has an animation we need to delay the deferral of the leave + // operation until we have more information (which we do after flush() has been called) + + if (containsPotentialParentTransition) { + engine.markElementAsRemoved(this.id, element, false, context); + } else { + const removalFlag = element[REMOVAL_FLAG]; + + if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) { + // we do this after the flush has occurred such + // that the callbacks can be fired + engine.afterFlush(() => this.clearElementCache(element)); + engine.destroyInnerAnimations(element); + + engine._onRemovalComplete(element, context); + } + } + } + + insertNode(element, parent) { + addClass(element, this._hostClassName); + } + + drainQueuedTransitions(microtaskId) { + const instructions = []; + + this._queue.forEach(entry => { + const player = entry.player; + if (player.destroyed) return; + const element = entry.element; + + const listeners = this._elementListeners.get(element); + + if (listeners) { + listeners.forEach(listener => { + if (listener.name == entry.triggerName) { + const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value); + baseEvent['_data'] = microtaskId; + listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback); + } + }); + } + + if (player.markedForDestroy) { + this._engine.afterFlush(() => { + // now we can destroy the element properly since the event listeners have + // been bound to the player + player.destroy(); + }); + } else { + instructions.push(entry); + } + }); + + this._queue = []; + return instructions.sort((a, b) => { + // if depCount == 0 them move to front + // otherwise if a contains b then move back + const d0 = a.transition.ast.depCount; + const d1 = b.transition.ast.depCount; + + if (d0 == 0 || d1 == 0) { + return d0 - d1; + } + + return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1; + }); + } + + destroy(context) { + this.players.forEach(p => p.destroy()); + + this._signalRemovalForInnerTriggers(this.hostElement, context); + } + + elementContainsData(element) { + let containsData = false; + if (this._elementListeners.has(element)) containsData = true; + containsData = (this._queue.find(entry => entry.element === element) ? true : false) || containsData; + return containsData; + } + +} + +class TransitionAnimationEngine { + constructor(bodyNode, driver, _normalizer) { + this.bodyNode = bodyNode; + this.driver = driver; + this._normalizer = _normalizer; + this.players = []; + this.newHostElements = new Map(); + this.playersByElement = new Map(); + this.playersByQueriedElement = new Map(); + this.statesByElement = new Map(); + this.disabledNodes = new Set(); + this.totalAnimations = 0; + this.totalQueuedPlayers = 0; + this._namespaceLookup = {}; + this._namespaceList = []; + this._flushFns = []; + this._whenQuietFns = []; + this.namespacesByHostElement = new Map(); + this.collectedEnterElements = []; + this.collectedLeaveElements = []; // this method is designed to be overridden by the code that uses this engine + + this.onRemovalComplete = (element, context) => {}; + } + /** @internal */ + + + _onRemovalComplete(element, context) { + this.onRemovalComplete(element, context); + } + + get queuedPlayers() { + const players = []; + + this._namespaceList.forEach(ns => { + ns.players.forEach(player => { + if (player.queued) { + players.push(player); + } + }); + }); + + return players; + } + + createNamespace(namespaceId, hostElement) { + const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this); + + if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) { + this._balanceNamespaceList(ns, hostElement); + } else { + // defer this later until flush during when the host element has + // been inserted so that we know exactly where to place it in + // the namespace list + this.newHostElements.set(hostElement, ns); // given that this host element is a part of the animation code, it + // may or may not be inserted by a parent node that is of an + // animation renderer type. If this happens then we can still have + // access to this item when we query for :enter nodes. If the parent + // is a renderer then the set data-structure will normalize the entry + + this.collectEnterElement(hostElement); + } + + return this._namespaceLookup[namespaceId] = ns; + } + + _balanceNamespaceList(ns, hostElement) { + const namespaceList = this._namespaceList; + const namespacesByHostElement = this.namespacesByHostElement; + const limit = namespaceList.length - 1; + + if (limit >= 0) { + let found = false; // Find the closest ancestor with an existing namespace so we can then insert `ns` after it, + // establishing a top-down ordering of namespaces in `this._namespaceList`. + + let ancestor = this.driver.getParentElement(hostElement); + + while (ancestor) { + const ancestorNs = namespacesByHostElement.get(ancestor); + + if (ancestorNs) { + // An animation namespace has been registered for this ancestor, so we insert `ns` + // right after it to establish top-down ordering of animation namespaces. + const index = namespaceList.indexOf(ancestorNs); + namespaceList.splice(index + 1, 0, ns); + found = true; + break; + } + + ancestor = this.driver.getParentElement(ancestor); + } + + if (!found) { + // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to + // ensure that any existing descendants are ordered after `ns`, retaining the desired + // top-down ordering. + namespaceList.unshift(ns); + } + } else { + namespaceList.push(ns); + } + + namespacesByHostElement.set(hostElement, ns); + return ns; + } + + register(namespaceId, hostElement) { + let ns = this._namespaceLookup[namespaceId]; + + if (!ns) { + ns = this.createNamespace(namespaceId, hostElement); + } + + return ns; + } + + registerTrigger(namespaceId, name, trigger) { + let ns = this._namespaceLookup[namespaceId]; + + if (ns && ns.register(name, trigger)) { + this.totalAnimations++; + } + } + + destroy(namespaceId, context) { + if (!namespaceId) return; + + const ns = this._fetchNamespace(namespaceId); + + this.afterFlush(() => { + this.namespacesByHostElement.delete(ns.hostElement); + delete this._namespaceLookup[namespaceId]; + + const index = this._namespaceList.indexOf(ns); + + if (index >= 0) { + this._namespaceList.splice(index, 1); + } + }); + this.afterFlushAnimationsDone(() => ns.destroy(context)); + } + + _fetchNamespace(id) { + return this._namespaceLookup[id]; + } + + fetchNamespacesByElement(element) { + // normally there should only be one namespace per element, however + // if @triggers are placed on both the component element and then + // its host element (within the component code) then there will be + // two namespaces returned. We use a set here to simply deduplicate + // the namespaces in case (for the reason described above) there are multiple triggers + const namespaces = new Set(); + const elementStates = this.statesByElement.get(element); + + if (elementStates) { + for (let stateValue of elementStates.values()) { + if (stateValue.namespaceId) { + const ns = this._fetchNamespace(stateValue.namespaceId); + + if (ns) { + namespaces.add(ns); + } + } + } + } + + return namespaces; + } + + trigger(namespaceId, element, name, value) { + if (isElementNode(element)) { + const ns = this._fetchNamespace(namespaceId); + + if (ns) { + ns.trigger(element, name, value); + return true; + } + } + + return false; + } + + insertNode(namespaceId, element, parent, insertBefore) { + if (!isElementNode(element)) return; // special case for when an element is removed and reinserted (move operation) + // when this occurs we do not want to use the element for deletion later + + const details = element[REMOVAL_FLAG]; + + if (details && details.setForRemoval) { + details.setForRemoval = false; + details.setForMove = true; + const index = this.collectedLeaveElements.indexOf(element); + + if (index >= 0) { + this.collectedLeaveElements.splice(index, 1); + } + } // in the event that the namespaceId is blank then the caller + // code does not contain any animation code in it, but it is + // just being called so that the node is marked as being inserted + + + if (namespaceId) { + const ns = this._fetchNamespace(namespaceId); // This if-statement is a workaround for router issue #21947. + // The router sometimes hits a race condition where while a route + // is being instantiated a new navigation arrives, triggering leave + // animation of DOM that has not been fully initialized, until this + // is resolved, we need to handle the scenario when DOM is not in a + // consistent state during the animation. + + + if (ns) { + ns.insertNode(element, parent); + } + } // only *directives and host elements are inserted before + + + if (insertBefore) { + this.collectEnterElement(element); + } + } + + collectEnterElement(element) { + this.collectedEnterElements.push(element); + } + + markElementAsDisabled(element, value) { + if (value) { + if (!this.disabledNodes.has(element)) { + this.disabledNodes.add(element); + addClass(element, DISABLED_CLASSNAME); + } + } else if (this.disabledNodes.has(element)) { + this.disabledNodes.delete(element); + removeClass(element, DISABLED_CLASSNAME); + } + } + + removeNode(namespaceId, element, isHostElement, context) { + if (isElementNode(element)) { + const ns = namespaceId ? this._fetchNamespace(namespaceId) : null; + + if (ns) { + ns.removeNode(element, context); + } else { + this.markElementAsRemoved(namespaceId, element, false, context); + } + + if (isHostElement) { + const hostNS = this.namespacesByHostElement.get(element); + + if (hostNS && hostNS.id !== namespaceId) { + hostNS.removeNode(element, context); + } + } + } else { + this._onRemovalComplete(element, context); + } + } + + markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) { + this.collectedLeaveElements.push(element); + element[REMOVAL_FLAG] = { + namespaceId, + setForRemoval: context, + hasAnimation, + removedBeforeQueried: false, + previousTriggersValues + }; + } + + listen(namespaceId, element, name, phase, callback) { + if (isElementNode(element)) { + return this._fetchNamespace(namespaceId).listen(element, name, phase, callback); + } + + return () => {}; + } + + _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) { + return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst); + } + + destroyInnerAnimations(containerElement) { + let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true); + elements.forEach(element => this.destroyActiveAnimationsForElement(element)); + if (this.playersByQueriedElement.size == 0) return; + elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true); + elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element)); + } + + destroyActiveAnimationsForElement(element) { + const players = this.playersByElement.get(element); + + if (players) { + players.forEach(player => { + // special case for when an element is set for destruction, but hasn't started. + // in this situation we want to delay the destruction until the flush occurs + // so that any event listeners attached to the player are triggered. + if (player.queued) { + player.markedForDestroy = true; + } else { + player.destroy(); + } + }); + } + } + + finishActiveQueriedAnimationOnElement(element) { + const players = this.playersByQueriedElement.get(element); + + if (players) { + players.forEach(player => player.finish()); + } + } + + whenRenderingDone() { + return new Promise(resolve => { + if (this.players.length) { + return optimizeGroupPlayer(this.players).onDone(() => resolve()); + } else { + resolve(); + } + }); + } + + processLeaveNode(element) { + const details = element[REMOVAL_FLAG]; + + if (details && details.setForRemoval) { + // this will prevent it from removing it twice + element[REMOVAL_FLAG] = NULL_REMOVAL_STATE; + + if (details.namespaceId) { + this.destroyInnerAnimations(element); + + const ns = this._fetchNamespace(details.namespaceId); + + if (ns) { + ns.clearElementCache(element); + } + } + + this._onRemovalComplete(element, details.setForRemoval); + } + + if (element.classList?.contains(DISABLED_CLASSNAME)) { + this.markElementAsDisabled(element, false); + } + + this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => { + this.markElementAsDisabled(node, false); + }); + } + + flush(microtaskId = -1) { + let players = []; + + if (this.newHostElements.size) { + this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element)); + this.newHostElements.clear(); + } + + if (this.totalAnimations && this.collectedEnterElements.length) { + for (let i = 0; i < this.collectedEnterElements.length; i++) { + const elm = this.collectedEnterElements[i]; + addClass(elm, STAR_CLASSNAME); + } + } + + if (this._namespaceList.length && (this.totalQueuedPlayers || this.collectedLeaveElements.length)) { + const cleanupFns = []; + + try { + players = this._flushAnimations(cleanupFns, microtaskId); + } finally { + for (let i = 0; i < cleanupFns.length; i++) { + cleanupFns[i](); + } + } + } else { + for (let i = 0; i < this.collectedLeaveElements.length; i++) { + const element = this.collectedLeaveElements[i]; + this.processLeaveNode(element); + } + } + + this.totalQueuedPlayers = 0; + this.collectedEnterElements.length = 0; + this.collectedLeaveElements.length = 0; + + this._flushFns.forEach(fn => fn()); + + this._flushFns = []; + + if (this._whenQuietFns.length) { + // we move these over to a variable so that + // if any new callbacks are registered in another + // flush they do not populate the existing set + const quietFns = this._whenQuietFns; + this._whenQuietFns = []; + + if (players.length) { + optimizeGroupPlayer(players).onDone(() => { + quietFns.forEach(fn => fn()); + }); + } else { + quietFns.forEach(fn => fn()); + } + } + } + + reportError(errors) { + throw triggerTransitionsFailed(errors); + } + + _flushAnimations(cleanupFns, microtaskId) { + const subTimelines = new ElementInstructionMap(); + const skippedPlayers = []; + const skippedPlayersMap = new Map(); + const queuedInstructions = []; + const queriedElements = new Map(); + const allPreStyleElements = new Map(); + const allPostStyleElements = new Map(); + const disabledElementsSet = new Set(); + this.disabledNodes.forEach(node => { + disabledElementsSet.add(node); + const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true); + + for (let i = 0; i < nodesThatAreDisabled.length; i++) { + disabledElementsSet.add(nodesThatAreDisabled[i]); + } + }); + const bodyNode = this.bodyNode; + const allTriggerElements = Array.from(this.statesByElement.keys()); + const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements); // this must occur before the instructions are built below such that + // the :enter queries match the elements (since the timeline queries + // are fired during instruction building). + + const enterNodeMapIds = new Map(); + let i = 0; + enterNodeMap.forEach((nodes, root) => { + const className = ENTER_CLASSNAME + i++; + enterNodeMapIds.set(root, className); + nodes.forEach(node => addClass(node, className)); + }); + const allLeaveNodes = []; + const mergedLeaveNodes = new Set(); + const leaveNodesWithoutAnimations = new Set(); + + for (let i = 0; i < this.collectedLeaveElements.length; i++) { + const element = this.collectedLeaveElements[i]; + const details = element[REMOVAL_FLAG]; + + if (details && details.setForRemoval) { + allLeaveNodes.push(element); + mergedLeaveNodes.add(element); + + if (details.hasAnimation) { + this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm)); + } else { + leaveNodesWithoutAnimations.add(element); + } + } + } + + const leaveNodeMapIds = new Map(); + const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes)); + leaveNodeMap.forEach((nodes, root) => { + const className = LEAVE_CLASSNAME + i++; + leaveNodeMapIds.set(root, className); + nodes.forEach(node => addClass(node, className)); + }); + cleanupFns.push(() => { + enterNodeMap.forEach((nodes, root) => { + const className = enterNodeMapIds.get(root); + nodes.forEach(node => removeClass(node, className)); + }); + leaveNodeMap.forEach((nodes, root) => { + const className = leaveNodeMapIds.get(root); + nodes.forEach(node => removeClass(node, className)); + }); + allLeaveNodes.forEach(element => { + this.processLeaveNode(element); + }); + }); + const allPlayers = []; + const erroneousTransitions = []; + + for (let i = this._namespaceList.length - 1; i >= 0; i--) { + const ns = this._namespaceList[i]; + ns.drainQueuedTransitions(microtaskId).forEach(entry => { + const player = entry.player; + const element = entry.element; + allPlayers.push(player); + + if (this.collectedEnterElements.length) { + const details = element[REMOVAL_FLAG]; // animations for move operations (elements being removed and reinserted, + // e.g. when the order of an *ngFor list changes) are currently not supported + + if (details && details.setForMove) { + if (details.previousTriggersValues && details.previousTriggersValues.has(entry.triggerName)) { + const previousValue = details.previousTriggersValues.get(entry.triggerName); // we need to restore the previous trigger value since the element has + // only been moved and hasn't actually left the DOM + + const triggersWithStates = this.statesByElement.get(entry.element); + + if (triggersWithStates && triggersWithStates.has(entry.triggerName)) { + const state = triggersWithStates.get(entry.triggerName); + state.value = previousValue; + triggersWithStates.set(entry.triggerName, state); + } + } + + player.destroy(); + return; + } + } + + const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element); + const leaveClassName = leaveNodeMapIds.get(element); + const enterClassName = enterNodeMapIds.get(element); + + const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned); + + if (instruction.errors && instruction.errors.length) { + erroneousTransitions.push(instruction); + return; + } // even though the element may not be in the DOM, it may still + // be added at a later point (due to the mechanics of content + // projection and/or dynamic component insertion) therefore it's + // important to still style the element. + + + if (nodeIsOrphaned) { + player.onStart(() => eraseStyles(element, instruction.fromStyles)); + player.onDestroy(() => setStyles(element, instruction.toStyles)); + skippedPlayers.push(player); + return; + } // if an unmatched transition is queued and ready to go + // then it SHOULD NOT render an animation and cancel the + // previously running animations. + + + if (entry.isFallbackTransition) { + player.onStart(() => eraseStyles(element, instruction.fromStyles)); + player.onDestroy(() => setStyles(element, instruction.toStyles)); + skippedPlayers.push(player); + return; + } // this means that if a parent animation uses this animation as a sub-trigger + // then it will instruct the timeline builder not to add a player delay, but + // instead stretch the first keyframe gap until the animation starts. This is + // important in order to prevent extra initialization styles from being + // required by the user for the animation. + + + const timelines = []; + instruction.timelines.forEach(tl => { + tl.stretchStartingKeyframe = true; + + if (!this.disabledNodes.has(tl.element)) { + timelines.push(tl); + } + }); + instruction.timelines = timelines; + subTimelines.append(element, instruction.timelines); + const tuple = { + instruction, + player, + element + }; + queuedInstructions.push(tuple); + instruction.queriedElements.forEach(element => getOrSetDefaultValue(queriedElements, element, []).push(player)); + instruction.preStyleProps.forEach((stringMap, element) => { + if (stringMap.size) { + let setVal = allPreStyleElements.get(element); + + if (!setVal) { + allPreStyleElements.set(element, setVal = new Set()); + } + + stringMap.forEach((_, prop) => setVal.add(prop)); + } + }); + instruction.postStyleProps.forEach((stringMap, element) => { + let setVal = allPostStyleElements.get(element); + + if (!setVal) { + allPostStyleElements.set(element, setVal = new Set()); + } + + stringMap.forEach((_, prop) => setVal.add(prop)); + }); + }); + } + + if (erroneousTransitions.length) { + const errors = []; + erroneousTransitions.forEach(instruction => { + errors.push(transitionFailed(instruction.triggerName, instruction.errors)); + }); + allPlayers.forEach(player => player.destroy()); + this.reportError(errors); + } + + const allPreviousPlayersMap = new Map(); // this map tells us which element in the DOM tree is contained by + // which animation. Further down this map will get populated once + // the players are built and in doing so we can use it to efficiently + // figure out if a sub player is skipped due to a parent player having priority. + + const animationElementMap = new Map(); + queuedInstructions.forEach(entry => { + const element = entry.element; + + if (subTimelines.has(element)) { + animationElementMap.set(element, element); + + this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap); + } + }); + skippedPlayers.forEach(player => { + const element = player.element; + + const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null); + + previousPlayers.forEach(prevPlayer => { + getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer); + prevPlayer.destroy(); + }); + }); // this is a special case for nodes that will be removed either by + // having their own leave animations or by being queried in a container + // that will be removed once a parent animation is complete. The idea + // here is that * styles must be identical to ! styles because of + // backwards compatibility (* is also filled in by default in many places). + // Otherwise * styles will return an empty value or "auto" since the element + // passed to getComputedStyle will not be visible (since * === destination) + + const replaceNodes = allLeaveNodes.filter(node => { + return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements); + }); // POST STAGE: fill the * styles + + const postStylesMap = new Map(); + const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_1__.AUTO_STYLE); + allLeaveQueriedNodes.forEach(node => { + if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) { + replaceNodes.push(node); + } + }); // PRE STAGE: fill the ! styles + + const preStylesMap = new Map(); + enterNodeMap.forEach((nodes, root) => { + cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_1__["ɵPRE_STYLE"]); + }); + replaceNodes.forEach(node => { + const post = postStylesMap.get(node); + const pre = preStylesMap.get(node); + postStylesMap.set(node, new Map([...Array.from(post?.entries() ?? []), ...Array.from(pre?.entries() ?? [])])); + }); + const rootPlayers = []; + const subPlayers = []; + const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {}; + queuedInstructions.forEach(entry => { + const { + element, + player, + instruction + } = entry; // this means that it was never consumed by a parent animation which + // means that it is independent and therefore should be set for animation + + if (subTimelines.has(element)) { + if (disabledElementsSet.has(element)) { + player.onDestroy(() => setStyles(element, instruction.toStyles)); + player.disabled = true; + player.overrideTotalTime(instruction.totalTime); + skippedPlayers.push(player); + return; + } // this will flow up the DOM and query the map to figure out + // if a parent animation has priority over it. In the situation + // that a parent is detected then it will cancel the loop. If + // nothing is detected, or it takes a few hops to find a parent, + // then it will fill in the missing nodes and signal them as having + // a detected parent (or a NO_PARENT value via a special constant). + + + let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED; + + if (animationElementMap.size > 1) { + let elm = element; + const parentsToAdd = []; + + while (elm = elm.parentNode) { + const detectedParent = animationElementMap.get(elm); + + if (detectedParent) { + parentWithAnimation = detectedParent; + break; + } + + parentsToAdd.push(elm); + } + + parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation)); + } + + const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap); + + player.setRealPlayer(innerPlayer); + + if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) { + rootPlayers.push(player); + } else { + const parentPlayers = this.playersByElement.get(parentWithAnimation); + + if (parentPlayers && parentPlayers.length) { + player.parentPlayer = optimizeGroupPlayer(parentPlayers); + } + + skippedPlayers.push(player); + } + } else { + eraseStyles(element, instruction.fromStyles); + player.onDestroy(() => setStyles(element, instruction.toStyles)); // there still might be a ancestor player animating this + // element therefore we will still add it as a sub player + // even if its animation may be disabled + + subPlayers.push(player); + + if (disabledElementsSet.has(element)) { + skippedPlayers.push(player); + } + } + }); // find all of the sub players' corresponding inner animation players + + subPlayers.forEach(player => { + // even if no players are found for a sub animation it + // will still complete itself after the next tick since it's Noop + const playersForElement = skippedPlayersMap.get(player.element); + + if (playersForElement && playersForElement.length) { + const innerPlayer = optimizeGroupPlayer(playersForElement); + player.setRealPlayer(innerPlayer); + } + }); // the reason why we don't actually play the animation is + // because all that a skipped player is designed to do is to + // fire the start/done transition callback events + + skippedPlayers.forEach(player => { + if (player.parentPlayer) { + player.syncPlayerEvents(player.parentPlayer); + } else { + player.destroy(); + } + }); // run through all of the queued removals and see if they + // were picked up by a query. If not then perform the removal + // operation right away unless a parent animation is ongoing. + + for (let i = 0; i < allLeaveNodes.length; i++) { + const element = allLeaveNodes[i]; + const details = element[REMOVAL_FLAG]; + removeClass(element, LEAVE_CLASSNAME); // this means the element has a removal animation that is being + // taken care of and therefore the inner elements will hang around + // until that animation is over (or the parent queried animation) + + if (details && details.hasAnimation) continue; + let players = []; // if this element is queried or if it contains queried children + // then we want for the element not to be removed from the page + // until the queried animations have finished + + if (queriedElements.size) { + let queriedPlayerResults = queriedElements.get(element); + + if (queriedPlayerResults && queriedPlayerResults.length) { + players.push(...queriedPlayerResults); + } + + let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true); + + for (let j = 0; j < queriedInnerElements.length; j++) { + let queriedPlayers = queriedElements.get(queriedInnerElements[j]); + + if (queriedPlayers && queriedPlayers.length) { + players.push(...queriedPlayers); + } + } + } + + const activePlayers = players.filter(p => !p.destroyed); + + if (activePlayers.length) { + removeNodesAfterAnimationDone(this, element, activePlayers); + } else { + this.processLeaveNode(element); + } + } // this is required so the cleanup method doesn't remove them + + + allLeaveNodes.length = 0; + rootPlayers.forEach(player => { + this.players.push(player); + player.onDone(() => { + player.destroy(); + const index = this.players.indexOf(player); + this.players.splice(index, 1); + }); + player.play(); + }); + return rootPlayers; + } + + elementContainsData(namespaceId, element) { + let containsData = false; + const details = element[REMOVAL_FLAG]; + if (details && details.setForRemoval) containsData = true; + if (this.playersByElement.has(element)) containsData = true; + if (this.playersByQueriedElement.has(element)) containsData = true; + if (this.statesByElement.has(element)) containsData = true; + return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData; + } + + afterFlush(callback) { + this._flushFns.push(callback); + } + + afterFlushAnimationsDone(callback) { + this._whenQuietFns.push(callback); + } + + _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) { + let players = []; + + if (isQueriedElement) { + const queriedElementPlayers = this.playersByQueriedElement.get(element); + + if (queriedElementPlayers) { + players = queriedElementPlayers; + } + } else { + const elementPlayers = this.playersByElement.get(element); + + if (elementPlayers) { + const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE; + elementPlayers.forEach(player => { + if (player.queued) return; + if (!isRemovalAnimation && player.triggerName != triggerName) return; + players.push(player); + }); + } + } + + if (namespaceId || triggerName) { + players = players.filter(player => { + if (namespaceId && namespaceId != player.namespaceId) return false; + if (triggerName && triggerName != player.triggerName) return false; + return true; + }); + } + + return players; + } + + _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) { + const triggerName = instruction.triggerName; + const rootElement = instruction.element; // when a removal animation occurs, ALL previous players are collected + // and destroyed (even if they are outside of the current namespace) + + const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId; + const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName; + + for (const timelineInstruction of instruction.timelines) { + const element = timelineInstruction.element; + const isQueriedElement = element !== rootElement; + const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []); + + const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState); + + previousPlayers.forEach(player => { + const realPlayer = player.getRealPlayer(); + + if (realPlayer.beforeDestroy) { + realPlayer.beforeDestroy(); + } + + player.destroy(); + players.push(player); + }); + } // this needs to be done so that the PRE/POST styles can be + // computed properly without interfering with the previous animation + + + eraseStyles(rootElement, instruction.fromStyles); + } + + _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) { + const triggerName = instruction.triggerName; + const rootElement = instruction.element; // we first run this so that the previous animation player + // data can be passed into the successive animation players + + const allQueriedPlayers = []; + const allConsumedElements = new Set(); + const allSubElements = new Set(); + const allNewPlayers = instruction.timelines.map(timelineInstruction => { + const element = timelineInstruction.element; + allConsumedElements.add(element); // FIXME (matsko): make sure to-be-removed animations are removed properly + + const details = element[REMOVAL_FLAG]; + if (details && details.removedBeforeQueried) return new _angular_animations__WEBPACK_IMPORTED_MODULE_1__.NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay); + const isQueriedElement = element !== rootElement; + const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map(p => p.getRealPlayer())).filter(p => { + // the `element` is not apart of the AnimationPlayer definition, but + // Mock/WebAnimations + // use the element within their implementation. This will be added in Angular5 to + // AnimationPlayer + const pp = p; + return pp.element ? pp.element === element : false; + }); + const preStyles = preStylesMap.get(element); + const postStyles = postStylesMap.get(element); + const keyframes = normalizeKeyframes$1(this.driver, this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles); + + const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers); // this means that this particular player belongs to a sub trigger. It is + // important that we match this player up with the corresponding (@trigger.listener) + + + if (timelineInstruction.subTimeline && skippedPlayersMap) { + allSubElements.add(element); + } + + if (isQueriedElement) { + const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element); + wrappedPlayer.setRealPlayer(player); + allQueriedPlayers.push(wrappedPlayer); + } + + return player; + }); + allQueriedPlayers.forEach(player => { + getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player); + player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player)); + }); + allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME)); + const player = optimizeGroupPlayer(allNewPlayers); + player.onDestroy(() => { + allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME)); + setStyles(rootElement, instruction.toStyles); + }); // this basically makes all of the callbacks for sub element animations + // be dependent on the upper players for when they finish + + allSubElements.forEach(element => { + getOrSetDefaultValue(skippedPlayersMap, element, []).push(player); + }); + return player; + } + + _buildPlayer(instruction, keyframes, previousPlayers) { + if (keyframes.length > 0) { + return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers); + } // special case for when an empty transition|definition is provided + // ... there is no point in rendering an empty animation + + + return new _angular_animations__WEBPACK_IMPORTED_MODULE_1__.NoopAnimationPlayer(instruction.duration, instruction.delay); + } + +} + +class TransitionAnimationPlayer { + constructor(namespaceId, triggerName, element) { + this.namespaceId = namespaceId; + this.triggerName = triggerName; + this.element = element; + this._player = new _angular_animations__WEBPACK_IMPORTED_MODULE_1__.NoopAnimationPlayer(); + this._containsRealPlayer = false; + this._queuedCallbacks = new Map(); + this.destroyed = false; + this.markedForDestroy = false; + this.disabled = false; + this.queued = true; + this.totalTime = 0; + } + + setRealPlayer(player) { + if (this._containsRealPlayer) return; + this._player = player; + + this._queuedCallbacks.forEach((callbacks, phase) => { + callbacks.forEach(callback => listenOnPlayer(player, phase, undefined, callback)); + }); + + this._queuedCallbacks.clear(); + + this._containsRealPlayer = true; + this.overrideTotalTime(player.totalTime); + this.queued = false; + } + + getRealPlayer() { + return this._player; + } + + overrideTotalTime(totalTime) { + this.totalTime = totalTime; + } + + syncPlayerEvents(player) { + const p = this._player; + + if (p.triggerCallback) { + player.onStart(() => p.triggerCallback('start')); + } + + player.onDone(() => this.finish()); + player.onDestroy(() => this.destroy()); + } + + _queueEvent(name, callback) { + getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback); + } + + onDone(fn) { + if (this.queued) { + this._queueEvent('done', fn); + } + + this._player.onDone(fn); + } + + onStart(fn) { + if (this.queued) { + this._queueEvent('start', fn); + } + + this._player.onStart(fn); + } + + onDestroy(fn) { + if (this.queued) { + this._queueEvent('destroy', fn); + } + + this._player.onDestroy(fn); + } + + init() { + this._player.init(); + } + + hasStarted() { + return this.queued ? false : this._player.hasStarted(); + } + + play() { + !this.queued && this._player.play(); + } + + pause() { + !this.queued && this._player.pause(); + } + + restart() { + !this.queued && this._player.restart(); + } + + finish() { + this._player.finish(); + } + + destroy() { + this.destroyed = true; + + this._player.destroy(); + } + + reset() { + !this.queued && this._player.reset(); + } + + setPosition(p) { + if (!this.queued) { + this._player.setPosition(p); + } + } + + getPosition() { + return this.queued ? 0 : this._player.getPosition(); + } + /** @internal */ + + + triggerCallback(phaseName) { + const p = this._player; + + if (p.triggerCallback) { + p.triggerCallback(phaseName); + } + } + +} + +function deleteOrUnsetInMap(map, key, value) { + let currentValues = map.get(key); + + if (currentValues) { + if (currentValues.length) { + const index = currentValues.indexOf(value); + currentValues.splice(index, 1); + } + + if (currentValues.length == 0) { + map.delete(key); + } + } + + return currentValues; +} + +function normalizeTriggerValue(value) { + // we use `!= null` here because it's the most simple + // way to test against a "falsy" value without mixing + // in empty strings or a zero value. DO NOT OPTIMIZE. + return value != null ? value : null; +} + +function isElementNode(node) { + return node && node['nodeType'] === 1; +} + +function isTriggerEventValid(eventName) { + return eventName == 'start' || eventName == 'done'; +} + +function cloakElement(element, value) { + const oldValue = element.style.display; + element.style.display = value != null ? value : 'none'; + return oldValue; +} + +function cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) { + const cloakVals = []; + elements.forEach(element => cloakVals.push(cloakElement(element))); + const failedElements = []; + elementPropsMap.forEach((props, element) => { + const styles = new Map(); + props.forEach(prop => { + const value = driver.computeStyle(element, prop, defaultStyle); + styles.set(prop, value); // there is no easy way to detect this because a sub element could be removed + // by a parent animation element being detached. + + if (!value || value.length == 0) { + element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE; + failedElements.push(element); + } + }); + valuesMap.set(element, styles); + }); // we use a index variable here since Set.forEach(a, i) does not return + // an index value for the closure (but instead just the value) + + let i = 0; + elements.forEach(element => cloakElement(element, cloakVals[i++])); + return failedElements; +} +/* +Since the Angular renderer code will return a collection of inserted +nodes in all areas of a DOM tree, it's up to this algorithm to figure +out which nodes are roots for each animation @trigger. + +By placing each inserted node into a Set and traversing upwards, it +is possible to find the @trigger elements and well any direct *star +insertion nodes, if a @trigger root is found then the enter element +is placed into the Map[@trigger] spot. + */ + + +function buildRootMap(roots, nodes) { + const rootMap = new Map(); + roots.forEach(root => rootMap.set(root, [])); + if (nodes.length == 0) return rootMap; + const NULL_NODE = 1; + const nodeSet = new Set(nodes); + const localRootMap = new Map(); + + function getRoot(node) { + if (!node) return NULL_NODE; + let root = localRootMap.get(node); + if (root) return root; + const parent = node.parentNode; + + if (rootMap.has(parent)) { + // ngIf inside @trigger + root = parent; + } else if (nodeSet.has(parent)) { + // ngIf inside ngIf + root = NULL_NODE; + } else { + // recurse upwards + root = getRoot(parent); + } + + localRootMap.set(node, root); + return root; + } + + nodes.forEach(node => { + const root = getRoot(node); + + if (root !== NULL_NODE) { + rootMap.get(root).push(node); + } + }); + return rootMap; +} + +function addClass(element, className) { + element.classList?.add(className); +} + +function removeClass(element, className) { + element.classList?.remove(className); +} + +function removeNodesAfterAnimationDone(engine, element, players) { + optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element)); +} + +function flattenGroupPlayers(players) { + const finalPlayers = []; + + _flattenGroupPlayersRecur(players, finalPlayers); + + return finalPlayers; +} + +function _flattenGroupPlayersRecur(players, finalPlayers) { + for (let i = 0; i < players.length; i++) { + const player = players[i]; + + if (player instanceof _angular_animations__WEBPACK_IMPORTED_MODULE_1__["ɵAnimationGroupPlayer"]) { + _flattenGroupPlayersRecur(player.players, finalPlayers); + } else { + finalPlayers.push(player); + } + } +} + +function objEquals(a, b) { + const k1 = Object.keys(a); + const k2 = Object.keys(b); + if (k1.length != k2.length) return false; + + for (let i = 0; i < k1.length; i++) { + const prop = k1[i]; + if (!b.hasOwnProperty(prop) || a[prop] !== b[prop]) return false; + } + + return true; +} + +function replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) { + const postEntry = allPostStyleElements.get(element); + if (!postEntry) return false; + let preEntry = allPreStyleElements.get(element); + + if (preEntry) { + postEntry.forEach(data => preEntry.add(data)); + } else { + allPreStyleElements.set(element, postEntry); + } + + allPostStyleElements.delete(element); + return true; +} + +class AnimationEngine { + constructor(bodyNode, _driver, _normalizer) { + this.bodyNode = bodyNode; + this._driver = _driver; + this._normalizer = _normalizer; + this._triggerCache = {}; // this method is designed to be overridden by the code that uses this engine + + this.onRemovalComplete = (element, context) => {}; + + this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, _normalizer); + this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, _normalizer); + + this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context); + } + + registerTrigger(componentId, namespaceId, hostElement, name, metadata) { + const cacheKey = componentId + '-' + name; + let trigger = this._triggerCache[cacheKey]; + + if (!trigger) { + const errors = []; + const warnings = []; + const ast = buildAnimationAst(this._driver, metadata, errors, warnings); + + if (errors.length) { + throw triggerBuildFailed(name, errors); + } + + if (warnings.length) { + warnTriggerBuild(name, warnings); + } + + trigger = buildTrigger(name, ast, this._normalizer); + this._triggerCache[cacheKey] = trigger; + } + + this._transitionEngine.registerTrigger(namespaceId, name, trigger); + } + + register(namespaceId, hostElement) { + this._transitionEngine.register(namespaceId, hostElement); + } + + destroy(namespaceId, context) { + this._transitionEngine.destroy(namespaceId, context); + } + + onInsert(namespaceId, element, parent, insertBefore) { + this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore); + } + + onRemove(namespaceId, element, context, isHostElement) { + this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context); + } + + disableAnimations(element, disable) { + this._transitionEngine.markElementAsDisabled(element, disable); + } + + process(namespaceId, element, property, value) { + if (property.charAt(0) == '@') { + const [id, action] = parseTimelineCommand(property); + const args = value; + + this._timelineEngine.command(id, element, action, args); + } else { + this._transitionEngine.trigger(namespaceId, element, property, value); + } + } + + listen(namespaceId, element, eventName, eventPhase, callback) { + // @@listen + if (eventName.charAt(0) == '@') { + const [id, action] = parseTimelineCommand(eventName); + return this._timelineEngine.listen(id, element, action, callback); + } + + return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback); + } + + flush(microtaskId = -1) { + this._transitionEngine.flush(microtaskId); + } + + get players() { + return this._transitionEngine.players.concat(this._timelineEngine.players); + } + + whenRenderingDone() { + return this._transitionEngine.whenRenderingDone(); + } + +} +/** + * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are + * detected. + * + * In CSS there exist properties that cannot be animated within a keyframe animation + * (whether it be via CSS keyframes or web-animations) and the animation implementation + * will ignore them. This function is designed to detect those special cased styles and + * return a container that will be executed at the start and end of the animation. + * + * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null` + */ + + +function packageNonAnimatableStyles(element, styles) { + let startStyles = null; + let endStyles = null; + + if (Array.isArray(styles) && styles.length) { + startStyles = filterNonAnimatableStyles(styles[0]); + + if (styles.length > 1) { + endStyles = filterNonAnimatableStyles(styles[styles.length - 1]); + } + } else if (styles instanceof Map) { + startStyles = filterNonAnimatableStyles(styles); + } + + return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null; +} +/** + * Designed to be executed during a keyframe-based animation to apply any special-cased styles. + * + * When started (when the `start()` method is run) then the provided `startStyles` + * will be applied. When finished (when the `finish()` method is called) the + * `endStyles` will be applied as well any any starting styles. Finally when + * `destroy()` is called then all styles will be removed. + */ + + +class SpecialCasedStyles { + constructor(_element, _startStyles, _endStyles) { + this._element = _element; + this._startStyles = _startStyles; + this._endStyles = _endStyles; + this._state = 0 + /* SpecialCasedStylesState.Pending */ + ; + let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element); + + if (!initialStyles) { + SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = new Map()); + } + + this._initialStyles = initialStyles; + } + + start() { + if (this._state < 1 + /* SpecialCasedStylesState.Started */ + ) { + if (this._startStyles) { + setStyles(this._element, this._startStyles, this._initialStyles); + } + + this._state = 1 + /* SpecialCasedStylesState.Started */ + ; + } + } + + finish() { + this.start(); + + if (this._state < 2 + /* SpecialCasedStylesState.Finished */ + ) { + setStyles(this._element, this._initialStyles); + + if (this._endStyles) { + setStyles(this._element, this._endStyles); + this._endStyles = null; + } + + this._state = 1 + /* SpecialCasedStylesState.Started */ + ; + } + } + + destroy() { + this.finish(); + + if (this._state < 3 + /* SpecialCasedStylesState.Destroyed */ + ) { + SpecialCasedStyles.initialStylesByElement.delete(this._element); + + if (this._startStyles) { + eraseStyles(this._element, this._startStyles); + this._endStyles = null; + } + + if (this._endStyles) { + eraseStyles(this._element, this._endStyles); + this._endStyles = null; + } + + setStyles(this._element, this._initialStyles); + this._state = 3 + /* SpecialCasedStylesState.Destroyed */ + ; + } + } + +} + +SpecialCasedStyles.initialStylesByElement = /* @__PURE__ */new WeakMap(); + +function filterNonAnimatableStyles(styles) { + let result = null; + styles.forEach((val, prop) => { + if (isNonAnimatableStyle(prop)) { + result = result || new Map(); + result.set(prop, val); + } + }); + return result; +} + +function isNonAnimatableStyle(prop) { + return prop === 'display' || prop === 'position'; +} + +class WebAnimationsPlayer { + constructor(element, keyframes, options, _specialStyles) { + this.element = element; + this.keyframes = keyframes; + this.options = options; + this._specialStyles = _specialStyles; + this._onDoneFns = []; + this._onStartFns = []; + this._onDestroyFns = []; + this._initialized = false; + this._finished = false; + this._started = false; + this._destroyed = false; // the following original fns are persistent copies of the _onStartFns and _onDoneFns + // and are used to reset the fns to their original values upon reset() + // (since the _onStartFns and _onDoneFns get deleted after they are called) + + this._originalOnDoneFns = []; + this._originalOnStartFns = []; + this.time = 0; + this.parentPlayer = null; + this.currentSnapshot = new Map(); + this._duration = options['duration']; + this._delay = options['delay'] || 0; + this.time = this._duration + this._delay; + } + + _onFinish() { + if (!this._finished) { + this._finished = true; + + this._onDoneFns.forEach(fn => fn()); + + this._onDoneFns = []; + } + } + + init() { + this._buildPlayer(); + + this._preparePlayerBeforeStart(); + } + + _buildPlayer() { + if (this._initialized) return; + this._initialized = true; + const keyframes = this.keyframes; + this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options); + this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map(); + this.domPlayer.addEventListener('finish', () => this._onFinish()); + } + + _preparePlayerBeforeStart() { + // this is required so that the player doesn't start to animate right away + if (this._delay) { + this._resetDomPlayerState(); + } else { + this.domPlayer.pause(); + } + } + + _convertKeyframesToObject(keyframes) { + const kfs = []; + keyframes.forEach(frame => { + kfs.push(Object.fromEntries(frame)); + }); + return kfs; + } + /** @internal */ + + + _triggerWebAnimation(element, keyframes, options) { + // jscompiler doesn't seem to know animate is a native property because it's not fully + // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929] + return element['animate'](this._convertKeyframesToObject(keyframes), options); + } + + onStart(fn) { + this._originalOnStartFns.push(fn); + + this._onStartFns.push(fn); + } + + onDone(fn) { + this._originalOnDoneFns.push(fn); + + this._onDoneFns.push(fn); + } + + onDestroy(fn) { + this._onDestroyFns.push(fn); + } + + play() { + this._buildPlayer(); + + if (!this.hasStarted()) { + this._onStartFns.forEach(fn => fn()); + + this._onStartFns = []; + this._started = true; + + if (this._specialStyles) { + this._specialStyles.start(); + } + } + + this.domPlayer.play(); + } + + pause() { + this.init(); + this.domPlayer.pause(); + } + + finish() { + this.init(); + + if (this._specialStyles) { + this._specialStyles.finish(); + } + + this._onFinish(); + + this.domPlayer.finish(); + } + + reset() { + this._resetDomPlayerState(); + + this._destroyed = false; + this._finished = false; + this._started = false; + this._onStartFns = this._originalOnStartFns; + this._onDoneFns = this._originalOnDoneFns; + } + + _resetDomPlayerState() { + if (this.domPlayer) { + this.domPlayer.cancel(); + } + } + + restart() { + this.reset(); + this.play(); + } + + hasStarted() { + return this._started; + } + + destroy() { + if (!this._destroyed) { + this._destroyed = true; + + this._resetDomPlayerState(); + + this._onFinish(); + + if (this._specialStyles) { + this._specialStyles.destroy(); + } + + this._onDestroyFns.forEach(fn => fn()); + + this._onDestroyFns = []; + } + } + + setPosition(p) { + if (this.domPlayer === undefined) { + this.init(); + } + + this.domPlayer.currentTime = p * this.time; + } + + getPosition() { + return this.domPlayer.currentTime / this.time; + } + + get totalTime() { + return this._delay + this._duration; + } + + beforeDestroy() { + const styles = new Map(); + + if (this.hasStarted()) { + // note: this code is invoked only when the `play` function was called prior to this + // (thus `hasStarted` returns true), this implies that the code that initializes + // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here + const finalKeyframe = this._finalKeyframe; + finalKeyframe.forEach((val, prop) => { + if (prop !== 'offset') { + styles.set(prop, this._finished ? val : computeStyle(this.element, prop)); + } + }); + } + + this.currentSnapshot = styles; + } + /** @internal */ + + + triggerCallback(phaseName) { + const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns; + methods.forEach(fn => fn()); + methods.length = 0; + } + +} + +class WebAnimationsDriver { + validateStyleProperty(prop) { + // Perform actual validation in dev mode only, in prod mode this check is a noop. + if (typeof ngDevMode === 'undefined' || ngDevMode) { + return validateStyleProperty(prop); + } + + return true; + } + + validateAnimatableStyleProperty(prop) { + // Perform actual validation in dev mode only, in prod mode this check is a noop. + if (typeof ngDevMode === 'undefined' || ngDevMode) { + const cssProp = camelCaseToDashCase(prop); + return validateWebAnimatableStyleProperty(cssProp); + } + + return true; + } + + matchesElement(_element, _selector) { + // This method is deprecated and no longer in use so we return false. + return false; + } + + containsElement(elm1, elm2) { + return containsElement(elm1, elm2); + } + + getParentElement(element) { + return getParentElement(element); + } + + query(element, selector, multi) { + return invokeQuery(element, selector, multi); + } + + computeStyle(element, prop, defaultValue) { + return window.getComputedStyle(element)[prop]; + } + + animate(element, keyframes, duration, delay, easing, previousPlayers = []) { + const fill = delay == 0 ? 'both' : 'forwards'; + const playerOptions = { + duration, + delay, + fill + }; // we check for this to avoid having a null|undefined value be present + // for the easing (which results in an error for certain browsers #9752) + + if (easing) { + playerOptions['easing'] = easing; + } + + const previousStyles = new Map(); + const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer); + + if (allowPreviousPlayerStylesMerge(duration, delay)) { + previousWebAnimationPlayers.forEach(player => { + player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val)); + }); + } + + let _keyframes = normalizeKeyframes(keyframes).map(styles => copyStyles(styles)); + + _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles); + const specialStyles = packageNonAnimatableStyles(element, _keyframes); + return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 4218: +/*!*****************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/a11y.mjs ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "A11yModule": () => (/* binding */ A11yModule), +/* harmony export */ "ActiveDescendantKeyManager": () => (/* binding */ ActiveDescendantKeyManager), +/* harmony export */ "AriaDescriber": () => (/* binding */ AriaDescriber), +/* harmony export */ "CDK_DESCRIBEDBY_HOST_ATTRIBUTE": () => (/* binding */ CDK_DESCRIBEDBY_HOST_ATTRIBUTE), +/* harmony export */ "CDK_DESCRIBEDBY_ID_PREFIX": () => (/* binding */ CDK_DESCRIBEDBY_ID_PREFIX), +/* harmony export */ "CdkAriaLive": () => (/* binding */ CdkAriaLive), +/* harmony export */ "CdkMonitorFocus": () => (/* binding */ CdkMonitorFocus), +/* harmony export */ "CdkTrapFocus": () => (/* binding */ CdkTrapFocus), +/* harmony export */ "ConfigurableFocusTrap": () => (/* binding */ ConfigurableFocusTrap), +/* harmony export */ "ConfigurableFocusTrapFactory": () => (/* binding */ ConfigurableFocusTrapFactory), +/* harmony export */ "EventListenerFocusTrapInertStrategy": () => (/* binding */ EventListenerFocusTrapInertStrategy), +/* harmony export */ "FOCUS_MONITOR_DEFAULT_OPTIONS": () => (/* binding */ FOCUS_MONITOR_DEFAULT_OPTIONS), +/* harmony export */ "FOCUS_TRAP_INERT_STRATEGY": () => (/* binding */ FOCUS_TRAP_INERT_STRATEGY), +/* harmony export */ "FocusKeyManager": () => (/* binding */ FocusKeyManager), +/* harmony export */ "FocusMonitor": () => (/* binding */ FocusMonitor), +/* harmony export */ "FocusTrap": () => (/* binding */ FocusTrap), +/* harmony export */ "FocusTrapFactory": () => (/* binding */ FocusTrapFactory), +/* harmony export */ "HighContrastModeDetector": () => (/* binding */ HighContrastModeDetector), +/* harmony export */ "INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS": () => (/* binding */ INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS), +/* harmony export */ "INPUT_MODALITY_DETECTOR_OPTIONS": () => (/* binding */ INPUT_MODALITY_DETECTOR_OPTIONS), +/* harmony export */ "InputModalityDetector": () => (/* binding */ InputModalityDetector), +/* harmony export */ "InteractivityChecker": () => (/* binding */ InteractivityChecker), +/* harmony export */ "IsFocusableConfig": () => (/* binding */ IsFocusableConfig), +/* harmony export */ "LIVE_ANNOUNCER_DEFAULT_OPTIONS": () => (/* binding */ LIVE_ANNOUNCER_DEFAULT_OPTIONS), +/* harmony export */ "LIVE_ANNOUNCER_ELEMENT_TOKEN": () => (/* binding */ LIVE_ANNOUNCER_ELEMENT_TOKEN), +/* harmony export */ "LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY": () => (/* binding */ LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY), +/* harmony export */ "ListKeyManager": () => (/* binding */ ListKeyManager), +/* harmony export */ "LiveAnnouncer": () => (/* binding */ LiveAnnouncer), +/* harmony export */ "MESSAGES_CONTAINER_ID": () => (/* binding */ MESSAGES_CONTAINER_ID), +/* harmony export */ "isFakeMousedownFromScreenReader": () => (/* binding */ isFakeMousedownFromScreenReader), +/* harmony export */ "isFakeTouchstartFromScreenReader": () => (/* binding */ isFakeTouchstartFromScreenReader) +/* harmony export */ }); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 6078); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rxjs */ 6317); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! rxjs */ 745); +/* harmony import */ var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/cdk/keycodes */ 8456); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs/operators */ 9337); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ 1989); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ 116); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs/operators */ 635); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rxjs/operators */ 9295); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rxjs/operators */ 7260); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rxjs/operators */ 8977); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); +/* harmony import */ var _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @angular/cdk/observers */ 3773); + + + + + + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** IDs are delimited by an empty space, as per the spec. */ + +const ID_DELIMITER = ' '; +/** + * Adds the given ID to the specified ARIA attribute on an element. + * Used for attributes such as aria-labelledby, aria-owns, etc. + */ + +function addAriaReferencedId(el, attr, id) { + const ids = getAriaReferenceIds(el, attr); + + if (ids.some(existingId => existingId.trim() == id.trim())) { + return; + } + + ids.push(id.trim()); + el.setAttribute(attr, ids.join(ID_DELIMITER)); +} +/** + * Removes the given ID from the specified ARIA attribute on an element. + * Used for attributes such as aria-labelledby, aria-owns, etc. + */ + + +function removeAriaReferencedId(el, attr, id) { + const ids = getAriaReferenceIds(el, attr); + const filteredIds = ids.filter(val => val != id.trim()); + + if (filteredIds.length) { + el.setAttribute(attr, filteredIds.join(ID_DELIMITER)); + } else { + el.removeAttribute(attr); + } +} +/** + * Gets the list of IDs referenced by the given ARIA attribute on an element. + * Used for attributes such as aria-labelledby, aria-owns, etc. + */ + + +function getAriaReferenceIds(el, attr) { + // Get string array of all individual ids (whitespace delimited) in the attribute value + return (el.getAttribute(attr) || '').match(/\S+/g) || []; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** ID used for the body container where all messages are appended. */ + + +const MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container'; +/** ID prefix used for each created message element. */ + +const CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message'; +/** Attribute given to each host element that is described by a message element. */ + +const CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host'; +/** Global incremental identifier for each registered message element. */ + +let nextId = 0; +/** Global map of all registered message elements that have been placed into the document. */ + +const messageRegistry = new Map(); +/** Container for all registered messages. */ + +let messagesContainer = null; +/** + * Utility that creates visually hidden elements with a message content. Useful for elements that + * want to use aria-describedby to further describe themselves without adding additional visual + * content. + */ + +class AriaDescriber { + constructor(_document) { + this._document = _document; + } + + describe(hostElement, message, role) { + if (!this._canBeDescribed(hostElement, message)) { + return; + } + + const key = getKey(message, role); + + if (typeof message !== 'string') { + // We need to ensure that the element has an ID. + setMessageId(message); + messageRegistry.set(key, { + messageElement: message, + referenceCount: 0 + }); + } else if (!messageRegistry.has(key)) { + this._createMessageElement(message, role); + } + + if (!this._isElementDescribedByMessage(hostElement, key)) { + this._addMessageReference(hostElement, key); + } + } + + removeDescription(hostElement, message, role) { + if (!message || !this._isElementNode(hostElement)) { + return; + } + + const key = getKey(message, role); + + if (this._isElementDescribedByMessage(hostElement, key)) { + this._removeMessageReference(hostElement, key); + } // If the message is a string, it means that it's one that we created for the + // consumer so we can remove it safely, otherwise we should leave it in place. + + + if (typeof message === 'string') { + const registeredMessage = messageRegistry.get(key); + + if (registeredMessage && registeredMessage.referenceCount === 0) { + this._deleteMessageElement(key); + } + } + + if (messagesContainer && messagesContainer.childNodes.length === 0) { + this._deleteMessagesContainer(); + } + } + /** Unregisters all created message elements and removes the message container. */ + + + ngOnDestroy() { + const describedElements = this._document.querySelectorAll(`[${CDK_DESCRIBEDBY_HOST_ATTRIBUTE}]`); + + for (let i = 0; i < describedElements.length; i++) { + this._removeCdkDescribedByReferenceIds(describedElements[i]); + + describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE); + } + + if (messagesContainer) { + this._deleteMessagesContainer(); + } + + messageRegistry.clear(); + } + /** + * Creates a new element in the visually hidden message container element with the message + * as its content and adds it to the message registry. + */ + + + _createMessageElement(message, role) { + const messageElement = this._document.createElement('div'); + + setMessageId(messageElement); + messageElement.textContent = message; + + if (role) { + messageElement.setAttribute('role', role); + } + + this._createMessagesContainer(); + + messagesContainer.appendChild(messageElement); + messageRegistry.set(getKey(message, role), { + messageElement, + referenceCount: 0 + }); + } + /** Deletes the message element from the global messages container. */ + + + _deleteMessageElement(key) { + const registeredMessage = messageRegistry.get(key); + registeredMessage?.messageElement?.remove(); + messageRegistry.delete(key); + } + /** Creates the global container for all aria-describedby messages. */ + + + _createMessagesContainer() { + if (!messagesContainer) { + const preExistingContainer = this._document.getElementById(MESSAGES_CONTAINER_ID); // When going from the server to the client, we may end up in a situation where there's + // already a container on the page, but we don't have a reference to it. Clear the + // old container so we don't get duplicates. Doing this, instead of emptying the previous + // container, should be slightly faster. + + + preExistingContainer?.remove(); + messagesContainer = this._document.createElement('div'); + messagesContainer.id = MESSAGES_CONTAINER_ID; // We add `visibility: hidden` in order to prevent text in this container from + // being searchable by the browser's Ctrl + F functionality. + // Screen-readers will still read the description for elements with aria-describedby even + // when the description element is not visible. + + messagesContainer.style.visibility = 'hidden'; // Even though we use `visibility: hidden`, we still apply `cdk-visually-hidden` so that + // the description element doesn't impact page layout. + + messagesContainer.classList.add('cdk-visually-hidden'); + + this._document.body.appendChild(messagesContainer); + } + } + /** Deletes the global messages container. */ + + + _deleteMessagesContainer() { + if (messagesContainer) { + messagesContainer.remove(); + messagesContainer = null; + } + } + /** Removes all cdk-describedby messages that are hosted through the element. */ + + + _removeCdkDescribedByReferenceIds(element) { + // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX + const originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby').filter(id => id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0); + element.setAttribute('aria-describedby', originalReferenceIds.join(' ')); + } + /** + * Adds a message reference to the element using aria-describedby and increments the registered + * message's reference count. + */ + + + _addMessageReference(element, key) { + const registeredMessage = messageRegistry.get(key); // Add the aria-describedby reference and set the + // describedby_host attribute to mark the element. + + addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id); + element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, ''); + registeredMessage.referenceCount++; + } + /** + * Removes a message reference from the element using aria-describedby + * and decrements the registered message's reference count. + */ + + + _removeMessageReference(element, key) { + const registeredMessage = messageRegistry.get(key); + registeredMessage.referenceCount--; + removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id); + element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE); + } + /** Returns true if the element has been described by the provided message ID. */ + + + _isElementDescribedByMessage(element, key) { + const referenceIds = getAriaReferenceIds(element, 'aria-describedby'); + const registeredMessage = messageRegistry.get(key); + const messageId = registeredMessage && registeredMessage.messageElement.id; + return !!messageId && referenceIds.indexOf(messageId) != -1; + } + /** Determines whether a message can be described on a particular element. */ + + + _canBeDescribed(element, message) { + if (!this._isElementNode(element)) { + return false; + } + + if (message && typeof message === 'object') { + // We'd have to make some assumptions about the description element's text, if the consumer + // passed in an element. Assume that if an element is passed in, the consumer has verified + // that it can be used as a description. + return true; + } + + const trimmedMessage = message == null ? '' : `${message}`.trim(); + const ariaLabel = element.getAttribute('aria-label'); // We shouldn't set descriptions if they're exactly the same as the `aria-label` of the + // element, because screen readers will end up reading out the same text twice in a row. + + return trimmedMessage ? !ariaLabel || ariaLabel.trim() !== trimmedMessage : false; + } + /** Checks whether a node is an Element node. */ + + + _isElementNode(element) { + return element.nodeType === this._document.ELEMENT_NODE; + } + +} + +AriaDescriber.ɵfac = function AriaDescriber_Factory(t) { + return new (t || AriaDescriber)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT)); +}; + +AriaDescriber.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: AriaDescriber, + factory: AriaDescriber.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AriaDescriber, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }]; + }, null); +})(); +/** Gets a key that can be used to look messages up in the registry. */ + + +function getKey(message, role) { + return typeof message === 'string' ? `${role || ''}/${message}` : message; +} +/** Assigns a unique ID to an element, if it doesn't have one already. */ + + +function setMessageId(element) { + if (!element.id) { + element.id = `${CDK_DESCRIBEDBY_ID_PREFIX}-${nextId++}`; + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * This class manages keyboard events for selectable lists. If you pass it a query list + * of items, it will set the active item correctly when arrow events occur. + */ + + +class ListKeyManager { + constructor(_items) { + this._items = _items; + this._activeItemIndex = -1; + this._activeItem = null; + this._wrap = false; + this._letterKeyStream = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); + this._typeaheadSubscription = rxjs__WEBPACK_IMPORTED_MODULE_3__.Subscription.EMPTY; + this._vertical = true; + this._allowedModifierKeys = []; + this._homeAndEnd = false; + /** + * Predicate function that can be used to check whether an item should be skipped + * by the key manager. By default, disabled items are skipped. + */ + + this._skipPredicateFn = item => item.disabled; // Buffer for the letters that the user has pressed when the typeahead option is turned on. + + + this._pressedLetters = []; + /** + * Stream that emits any time the TAB key is pressed, so components can react + * when focus is shifted off of the list. + */ + + this.tabOut = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); + /** Stream that emits whenever the active item of the list manager changes. */ + + this.change = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); // We allow for the items to be an array because, in some cases, the consumer may + // not have access to a QueryList of the items they want to manage (e.g. when the + // items aren't being collected via `ViewChildren` or `ContentChildren`). + + if (_items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__.QueryList) { + _items.changes.subscribe(newItems => { + if (this._activeItem) { + const itemArray = newItems.toArray(); + const newIndex = itemArray.indexOf(this._activeItem); + + if (newIndex > -1 && newIndex !== this._activeItemIndex) { + this._activeItemIndex = newIndex; + } + } + }); + } + } + /** + * Sets the predicate function that determines which items should be skipped by the + * list key manager. + * @param predicate Function that determines whether the given item should be skipped. + */ + + + skipPredicate(predicate) { + this._skipPredicateFn = predicate; + return this; + } + /** + * Configures wrapping mode, which determines whether the active item will wrap to + * the other end of list when there are no more items in the given direction. + * @param shouldWrap Whether the list should wrap when reaching the end. + */ + + + withWrap(shouldWrap = true) { + this._wrap = shouldWrap; + return this; + } + /** + * Configures whether the key manager should be able to move the selection vertically. + * @param enabled Whether vertical selection should be enabled. + */ + + + withVerticalOrientation(enabled = true) { + this._vertical = enabled; + return this; + } + /** + * Configures the key manager to move the selection horizontally. + * Passing in `null` will disable horizontal movement. + * @param direction Direction in which the selection can be moved. + */ + + + withHorizontalOrientation(direction) { + this._horizontal = direction; + return this; + } + /** + * Modifier keys which are allowed to be held down and whose default actions will be prevented + * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys. + */ + + + withAllowedModifierKeys(keys) { + this._allowedModifierKeys = keys; + return this; + } + /** + * Turns on typeahead mode which allows users to set the active item by typing. + * @param debounceInterval Time to wait after the last keystroke before setting the active item. + */ + + + withTypeAhead(debounceInterval = 200) { + if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._items.length && this._items.some(item => typeof item.getLabel !== 'function')) { + throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.'); + } + + this._typeaheadSubscription.unsubscribe(); // Debounce the presses of non-navigational keys, collect the ones that correspond to letters + // and convert those letters back into a string. Afterwards find the first item that starts + // with that string and select it. + + + this._typeaheadSubscription = this._letterKeyStream.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.tap)(letter => this._pressedLetters.push(letter)), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__.debounceTime)(debounceInterval), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.filter)(() => this._pressedLetters.length > 0), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__.map)(() => this._pressedLetters.join(''))).subscribe(inputString => { + const items = this._getItemsArray(); // Start at 1 because we want to start searching at the item immediately + // following the current active item. + + + for (let i = 1; i < items.length + 1; i++) { + const index = (this._activeItemIndex + i) % items.length; + const item = items[index]; + + if (!this._skipPredicateFn(item) && item.getLabel().toUpperCase().trim().indexOf(inputString) === 0) { + this.setActiveItem(index); + break; + } + } + + this._pressedLetters = []; + }); + return this; + } + /** + * Configures the key manager to activate the first and last items + * respectively when the Home or End key is pressed. + * @param enabled Whether pressing the Home or End key activates the first/last item. + */ + + + withHomeAndEnd(enabled = true) { + this._homeAndEnd = enabled; + return this; + } + + setActiveItem(item) { + const previousActiveItem = this._activeItem; + this.updateActiveItem(item); + + if (this._activeItem !== previousActiveItem) { + this.change.next(this._activeItemIndex); + } + } + /** + * Sets the active item depending on the key event passed in. + * @param event Keyboard event to be used for determining which element should be active. + */ + + + onKeydown(event) { + const keyCode = event.keyCode; + const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey']; + const isModifierAllowed = modifiers.every(modifier => { + return !event[modifier] || this._allowedModifierKeys.indexOf(modifier) > -1; + }); + + switch (keyCode) { + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.TAB: + this.tabOut.next(); + return; + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.DOWN_ARROW: + if (this._vertical && isModifierAllowed) { + this.setNextItemActive(); + break; + } else { + return; + } + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.UP_ARROW: + if (this._vertical && isModifierAllowed) { + this.setPreviousItemActive(); + break; + } else { + return; + } + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.RIGHT_ARROW: + if (this._horizontal && isModifierAllowed) { + this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive(); + break; + } else { + return; + } + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.LEFT_ARROW: + if (this._horizontal && isModifierAllowed) { + this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive(); + break; + } else { + return; + } + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.HOME: + if (this._homeAndEnd && isModifierAllowed) { + this.setFirstItemActive(); + break; + } else { + return; + } + + case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.END: + if (this._homeAndEnd && isModifierAllowed) { + this.setLastItemActive(); + break; + } else { + return; + } + + default: + if (isModifierAllowed || (0,_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.hasModifierKey)(event, 'shiftKey')) { + // Attempt to use the `event.key` which also maps it to the user's keyboard language, + // otherwise fall back to resolving alphanumeric characters via the keyCode. + if (event.key && event.key.length === 1) { + this._letterKeyStream.next(event.key.toLocaleUpperCase()); + } else if (keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.A && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.Z || keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.ZERO && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.NINE) { + this._letterKeyStream.next(String.fromCharCode(keyCode)); + } + } // Note that we return here, in order to avoid preventing + // the default action of non-navigational keys. + + + return; + } + + this._pressedLetters = []; + event.preventDefault(); + } + /** Index of the currently active item. */ + + + get activeItemIndex() { + return this._activeItemIndex; + } + /** The active item. */ + + + get activeItem() { + return this._activeItem; + } + /** Gets whether the user is currently typing into the manager using the typeahead feature. */ + + + isTyping() { + return this._pressedLetters.length > 0; + } + /** Sets the active item to the first enabled item in the list. */ + + + setFirstItemActive() { + this._setActiveItemByIndex(0, 1); + } + /** Sets the active item to the last enabled item in the list. */ + + + setLastItemActive() { + this._setActiveItemByIndex(this._items.length - 1, -1); + } + /** Sets the active item to the next enabled item in the list. */ + + + setNextItemActive() { + this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1); + } + /** Sets the active item to a previous enabled item in the list. */ + + + setPreviousItemActive() { + this._activeItemIndex < 0 && this._wrap ? this.setLastItemActive() : this._setActiveItemByDelta(-1); + } + + updateActiveItem(item) { + const itemArray = this._getItemsArray(); + + const index = typeof item === 'number' ? item : itemArray.indexOf(item); + const activeItem = itemArray[index]; // Explicitly check for `null` and `undefined` because other falsy values are valid. + + this._activeItem = activeItem == null ? null : activeItem; + this._activeItemIndex = index; + } + /** + * This method sets the active item, given a list of items and the delta between the + * currently active item and the new active item. It will calculate differently + * depending on whether wrap mode is turned on. + */ + + + _setActiveItemByDelta(delta) { + this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta); + } + /** + * Sets the active item properly given "wrap" mode. In other words, it will continue to move + * down the list until it finds an item that is not disabled, and it will wrap if it + * encounters either end of the list. + */ + + + _setActiveInWrapMode(delta) { + const items = this._getItemsArray(); + + for (let i = 1; i <= items.length; i++) { + const index = (this._activeItemIndex + delta * i + items.length) % items.length; + const item = items[index]; + + if (!this._skipPredicateFn(item)) { + this.setActiveItem(index); + return; + } + } + } + /** + * Sets the active item properly given the default mode. In other words, it will + * continue to move down the list until it finds an item that is not disabled. If + * it encounters either end of the list, it will stop and not wrap. + */ + + + _setActiveInDefaultMode(delta) { + this._setActiveItemByIndex(this._activeItemIndex + delta, delta); + } + /** + * Sets the active item to the first enabled item starting at the index specified. If the + * item is disabled, it will move in the fallbackDelta direction until it either + * finds an enabled item or encounters the end of the list. + */ + + + _setActiveItemByIndex(index, fallbackDelta) { + const items = this._getItemsArray(); + + if (!items[index]) { + return; + } + + while (this._skipPredicateFn(items[index])) { + index += fallbackDelta; + + if (!items[index]) { + return; + } + } + + this.setActiveItem(index); + } + /** Returns the items as an array. */ + + + _getItemsArray() { + return this._items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__.QueryList ? this._items.toArray() : this._items; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class ActiveDescendantKeyManager extends ListKeyManager { + setActiveItem(index) { + if (this.activeItem) { + this.activeItem.setInactiveStyles(); + } + + super.setActiveItem(index); + + if (this.activeItem) { + this.activeItem.setActiveStyles(); + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class FocusKeyManager extends ListKeyManager { + constructor() { + super(...arguments); + this._origin = 'program'; + } + /** + * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls. + * @param origin Focus origin to be used when focusing items. + */ + + + setFocusOrigin(origin) { + this._origin = origin; + return this; + } + + setActiveItem(item) { + super.setActiveItem(item); + + if (this.activeItem) { + this.activeItem.focus(this._origin); + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Configuration for the isFocusable method. + */ + + +class IsFocusableConfig { + constructor() { + /** + * Whether to count an element as focusable even if it is not currently visible. + */ + this.ignoreVisibility = false; + } + +} // The InteractivityChecker leans heavily on the ally.js accessibility utilities. +// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are +// supported. + +/** + * Utility for checking the interactivity of an element, such as whether is is focusable or + * tabbable. + */ + + +class InteractivityChecker { + constructor(_platform) { + this._platform = _platform; + } + /** + * Gets whether an element is disabled. + * + * @param element Element to be checked. + * @returns Whether the element is disabled. + */ + + + isDisabled(element) { + // This does not capture some cases, such as a non-form control with a disabled attribute or + // a form control inside of a disabled form, but should capture the most common cases. + return element.hasAttribute('disabled'); + } + /** + * Gets whether an element is visible for the purposes of interactivity. + * + * This will capture states like `display: none` and `visibility: hidden`, but not things like + * being clipped by an `overflow: hidden` parent or being outside the viewport. + * + * @returns Whether the element is visible. + */ + + + isVisible(element) { + return hasGeometry(element) && getComputedStyle(element).visibility === 'visible'; + } + /** + * Gets whether an element can be reached via Tab key. + * Assumes that the element has already been checked with isFocusable. + * + * @param element Element to be checked. + * @returns Whether the element is tabbable. + */ + + + isTabbable(element) { + // Nothing is tabbable on the server 😎 + if (!this._platform.isBrowser) { + return false; + } + + const frameElement = getFrameElement(getWindow(element)); + + if (frameElement) { + // Frame elements inherit their tabindex onto all child elements. + if (getTabIndexValue(frameElement) === -1) { + return false; + } // Browsers disable tabbing to an element inside of an invisible frame. + + + if (!this.isVisible(frameElement)) { + return false; + } + } + + let nodeName = element.nodeName.toLowerCase(); + let tabIndexValue = getTabIndexValue(element); + + if (element.hasAttribute('contenteditable')) { + return tabIndexValue !== -1; + } + + if (nodeName === 'iframe' || nodeName === 'object') { + // The frame or object's content may be tabbable depending on the content, but it's + // not possibly to reliably detect the content of the frames. We always consider such + // elements as non-tabbable. + return false; + } // In iOS, the browser only considers some specific elements as tabbable. + + + if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) { + return false; + } + + if (nodeName === 'audio') { + // Audio elements without controls enabled are never tabbable, regardless + // of the tabindex attribute explicitly being set. + if (!element.hasAttribute('controls')) { + return false; + } // Audio elements with controls are by default tabbable unless the + // tabindex attribute is set to `-1` explicitly. + + + return tabIndexValue !== -1; + } + + if (nodeName === 'video') { + // For all video elements, if the tabindex attribute is set to `-1`, the video + // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex` + // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The + // tabindex attribute is the source of truth here. + if (tabIndexValue === -1) { + return false; + } // If the tabindex is explicitly set, and not `-1` (as per check before), the + // video element is always tabbable (regardless of whether it has controls or not). + + + if (tabIndexValue !== null) { + return true; + } // Otherwise (when no explicit tabindex is set), a video is only tabbable if it + // has controls enabled. Firefox is special as videos are always tabbable regardless + // of whether there are controls or not. + + + return this._platform.FIREFOX || element.hasAttribute('controls'); + } + + return element.tabIndex >= 0; + } + /** + * Gets whether an element can be focused by the user. + * + * @param element Element to be checked. + * @param config The config object with options to customize this method's behavior + * @returns Whether the element is focusable. + */ + + + isFocusable(element, config) { + // Perform checks in order of left to most expensive. + // Again, naive approach that does not capture many edge cases and browser quirks. + return isPotentiallyFocusable(element) && !this.isDisabled(element) && (config?.ignoreVisibility || this.isVisible(element)); + } + +} + +InteractivityChecker.ɵfac = function InteractivityChecker_Factory(t) { + return new (t || InteractivityChecker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform)); +}; + +InteractivityChecker.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: InteractivityChecker, + factory: InteractivityChecker.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](InteractivityChecker, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }]; + }, null); +})(); +/** + * Returns the frame element from a window object. Since browsers like MS Edge throw errors if + * the frameElement property is being accessed from a different host address, this property + * should be accessed carefully. + */ + + +function getFrameElement(window) { + try { + return window.frameElement; + } catch { + return null; + } +} +/** Checks whether the specified element has any geometry / rectangles. */ + + +function hasGeometry(element) { + // Use logic from jQuery to check for an invisible element. + // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12 + return !!(element.offsetWidth || element.offsetHeight || typeof element.getClientRects === 'function' && element.getClientRects().length); +} +/** Gets whether an element's */ + + +function isNativeFormElement(element) { + let nodeName = element.nodeName.toLowerCase(); + return nodeName === 'input' || nodeName === 'select' || nodeName === 'button' || nodeName === 'textarea'; +} +/** Gets whether an element is an ``. */ + + +function isHiddenInput(element) { + return isInputElement(element) && element.type == 'hidden'; +} +/** Gets whether an element is an anchor that has an href attribute. */ + + +function isAnchorWithHref(element) { + return isAnchorElement(element) && element.hasAttribute('href'); +} +/** Gets whether an element is an input element. */ + + +function isInputElement(element) { + return element.nodeName.toLowerCase() == 'input'; +} +/** Gets whether an element is an anchor element. */ + + +function isAnchorElement(element) { + return element.nodeName.toLowerCase() == 'a'; +} +/** Gets whether an element has a valid tabindex. */ + + +function hasValidTabIndex(element) { + if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) { + return false; + } + + let tabIndex = element.getAttribute('tabindex'); + return !!(tabIndex && !isNaN(parseInt(tabIndex, 10))); +} +/** + * Returns the parsed tabindex from the element attributes instead of returning the + * evaluated tabindex from the browsers defaults. + */ + + +function getTabIndexValue(element) { + if (!hasValidTabIndex(element)) { + return null; + } // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054 + + + const tabIndex = parseInt(element.getAttribute('tabindex') || '', 10); + return isNaN(tabIndex) ? -1 : tabIndex; +} +/** Checks whether the specified element is potentially tabbable on iOS */ + + +function isPotentiallyTabbableIOS(element) { + let nodeName = element.nodeName.toLowerCase(); + let inputType = nodeName === 'input' && element.type; + return inputType === 'text' || inputType === 'password' || nodeName === 'select' || nodeName === 'textarea'; +} +/** + * Gets whether an element is potentially focusable without taking current visible/disabled state + * into account. + */ + + +function isPotentiallyFocusable(element) { + // Inputs are potentially focusable *unless* they're type="hidden". + if (isHiddenInput(element)) { + return false; + } + + return isNativeFormElement(element) || isAnchorWithHref(element) || element.hasAttribute('contenteditable') || hasValidTabIndex(element); +} +/** Gets the parent window of a DOM node with regards of being inside of an iframe. */ + + +function getWindow(node) { + // ownerDocument is null if `node` itself *is* a document. + return node.ownerDocument && node.ownerDocument.defaultView || window; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Class that allows for trapping focus within a DOM element. + * + * This class currently uses a relatively simple approach to focus trapping. + * It assumes that the tab order is the same as DOM order, which is not necessarily true. + * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to be misaligned. + * + * @deprecated Use `ConfigurableFocusTrap` instead. + * @breaking-change 11.0.0 + */ + + +class FocusTrap { + constructor(_element, _checker, _ngZone, _document, deferAnchors = false) { + this._element = _element; + this._checker = _checker; + this._ngZone = _ngZone; + this._document = _document; + this._hasAttached = false; // Event listeners for the anchors. Need to be regular functions so that we can unbind them later. + + this.startAnchorListener = () => this.focusLastTabbableElement(); + + this.endAnchorListener = () => this.focusFirstTabbableElement(); + + this._enabled = true; + + if (!deferAnchors) { + this.attachAnchors(); + } + } + /** Whether the focus trap is active. */ + + + get enabled() { + return this._enabled; + } + + set enabled(value) { + this._enabled = value; + + if (this._startAnchor && this._endAnchor) { + this._toggleAnchorTabIndex(value, this._startAnchor); + + this._toggleAnchorTabIndex(value, this._endAnchor); + } + } + /** Destroys the focus trap by cleaning up the anchors. */ + + + destroy() { + const startAnchor = this._startAnchor; + const endAnchor = this._endAnchor; + + if (startAnchor) { + startAnchor.removeEventListener('focus', this.startAnchorListener); + startAnchor.remove(); + } + + if (endAnchor) { + endAnchor.removeEventListener('focus', this.endAnchorListener); + endAnchor.remove(); + } + + this._startAnchor = this._endAnchor = null; + this._hasAttached = false; + } + /** + * Inserts the anchors into the DOM. This is usually done automatically + * in the constructor, but can be deferred for cases like directives with `*ngIf`. + * @returns Whether the focus trap managed to attach successfully. This may not be the case + * if the target element isn't currently in the DOM. + */ + + + attachAnchors() { + // If we're not on the browser, there can be no focus to trap. + if (this._hasAttached) { + return true; + } + + this._ngZone.runOutsideAngular(() => { + if (!this._startAnchor) { + this._startAnchor = this._createAnchor(); + + this._startAnchor.addEventListener('focus', this.startAnchorListener); + } + + if (!this._endAnchor) { + this._endAnchor = this._createAnchor(); + + this._endAnchor.addEventListener('focus', this.endAnchorListener); + } + }); + + if (this._element.parentNode) { + this._element.parentNode.insertBefore(this._startAnchor, this._element); + + this._element.parentNode.insertBefore(this._endAnchor, this._element.nextSibling); + + this._hasAttached = true; + } + + return this._hasAttached; + } + /** + * Waits for the zone to stabilize, then focuses the first tabbable element. + * @returns Returns a promise that resolves with a boolean, depending + * on whether focus was moved successfully. + */ + + + focusInitialElementWhenReady(options) { + return new Promise(resolve => { + this._executeOnStable(() => resolve(this.focusInitialElement(options))); + }); + } + /** + * Waits for the zone to stabilize, then focuses + * the first tabbable element within the focus trap region. + * @returns Returns a promise that resolves with a boolean, depending + * on whether focus was moved successfully. + */ + + + focusFirstTabbableElementWhenReady(options) { + return new Promise(resolve => { + this._executeOnStable(() => resolve(this.focusFirstTabbableElement(options))); + }); + } + /** + * Waits for the zone to stabilize, then focuses + * the last tabbable element within the focus trap region. + * @returns Returns a promise that resolves with a boolean, depending + * on whether focus was moved successfully. + */ + + + focusLastTabbableElementWhenReady(options) { + return new Promise(resolve => { + this._executeOnStable(() => resolve(this.focusLastTabbableElement(options))); + }); + } + /** + * Get the specified boundary element of the trapped region. + * @param bound The boundary to get (start or end of trapped region). + * @returns The boundary element. + */ + + + _getRegionBoundary(bound) { + // Contains the deprecated version of selector, for temporary backwards comparability. + let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` + `[cdkFocusRegion${bound}], ` + `[cdk-focus-${bound}]`); + + for (let i = 0; i < markers.length; i++) { + // @breaking-change 8.0.0 + if (markers[i].hasAttribute(`cdk-focus-${bound}`)) { + console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}', ` + `use 'cdkFocusRegion${bound}' instead. The deprecated ` + `attribute will be removed in 8.0.0.`, markers[i]); + } else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) { + console.warn(`Found use of deprecated attribute 'cdk-focus-region-${bound}', ` + `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` + `will be removed in 8.0.0.`, markers[i]); + } + } + + if (bound == 'start') { + return markers.length ? markers[0] : this._getFirstTabbableElement(this._element); + } + + return markers.length ? markers[markers.length - 1] : this._getLastTabbableElement(this._element); + } + /** + * Focuses the element that should be focused when the focus trap is initialized. + * @returns Whether focus was moved successfully. + */ + + + focusInitialElement(options) { + // Contains the deprecated version of selector, for temporary backwards comparability. + const redirectToElement = this._element.querySelector(`[cdk-focus-initial], ` + `[cdkFocusInitial]`); + + if (redirectToElement) { + // @breaking-change 8.0.0 + if (redirectToElement.hasAttribute(`cdk-focus-initial`)) { + console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` + `use 'cdkFocusInitial' instead. The deprecated attribute ` + `will be removed in 8.0.0`, redirectToElement); + } // Warn the consumer if the element they've pointed to + // isn't focusable, when not in production mode. + + + if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._checker.isFocusable(redirectToElement)) { + console.warn(`Element matching '[cdkFocusInitial]' is not focusable.`, redirectToElement); + } + + if (!this._checker.isFocusable(redirectToElement)) { + const focusableChild = this._getFirstTabbableElement(redirectToElement); + + focusableChild?.focus(options); + return !!focusableChild; + } + + redirectToElement.focus(options); + return true; + } + + return this.focusFirstTabbableElement(options); + } + /** + * Focuses the first tabbable element within the focus trap region. + * @returns Whether focus was moved successfully. + */ + + + focusFirstTabbableElement(options) { + const redirectToElement = this._getRegionBoundary('start'); + + if (redirectToElement) { + redirectToElement.focus(options); + } + + return !!redirectToElement; + } + /** + * Focuses the last tabbable element within the focus trap region. + * @returns Whether focus was moved successfully. + */ + + + focusLastTabbableElement(options) { + const redirectToElement = this._getRegionBoundary('end'); + + if (redirectToElement) { + redirectToElement.focus(options); + } + + return !!redirectToElement; + } + /** + * Checks whether the focus trap has successfully been attached. + */ + + + hasAttached() { + return this._hasAttached; + } + /** Get the first tabbable element from a DOM subtree (inclusive). */ + + + _getFirstTabbableElement(root) { + if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) { + return root; + } + + const children = root.children; + + for (let i = 0; i < children.length; i++) { + const tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ? this._getFirstTabbableElement(children[i]) : null; + + if (tabbableChild) { + return tabbableChild; + } + } + + return null; + } + /** Get the last tabbable element from a DOM subtree (inclusive). */ + + + _getLastTabbableElement(root) { + if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) { + return root; + } // Iterate in reverse DOM order. + + + const children = root.children; + + for (let i = children.length - 1; i >= 0; i--) { + const tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ? this._getLastTabbableElement(children[i]) : null; + + if (tabbableChild) { + return tabbableChild; + } + } + + return null; + } + /** Creates an anchor element. */ + + + _createAnchor() { + const anchor = this._document.createElement('div'); + + this._toggleAnchorTabIndex(this._enabled, anchor); + + anchor.classList.add('cdk-visually-hidden'); + anchor.classList.add('cdk-focus-trap-anchor'); + anchor.setAttribute('aria-hidden', 'true'); + return anchor; + } + /** + * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap. + * @param isEnabled Whether the focus trap is enabled. + * @param anchor Anchor on which to toggle the tabindex. + */ + + + _toggleAnchorTabIndex(isEnabled, anchor) { + // Remove the tabindex completely, rather than setting it to -1, because if the + // element has a tabindex, the user might still hit it when navigating with the arrow keys. + isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex'); + } + /** + * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape. + * @param enabled: Whether the anchors should trap Tab. + */ + + + toggleAnchors(enabled) { + if (this._startAnchor && this._endAnchor) { + this._toggleAnchorTabIndex(enabled, this._startAnchor); + + this._toggleAnchorTabIndex(enabled, this._endAnchor); + } + } + /** Executes a function when the zone is stable. */ + + + _executeOnStable(fn) { + if (this._ngZone.isStable) { + fn(); + } else { + this._ngZone.onStable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__.take)(1)).subscribe(fn); + } + } + +} +/** + * Factory that allows easy instantiation of focus traps. + * @deprecated Use `ConfigurableFocusTrapFactory` instead. + * @breaking-change 11.0.0 + */ + + +class FocusTrapFactory { + constructor(_checker, _ngZone, _document) { + this._checker = _checker; + this._ngZone = _ngZone; + this._document = _document; + } + /** + * Creates a focus-trapped region around the given element. + * @param element The element around which focus will be trapped. + * @param deferCaptureElements Defers the creation of focus-capturing elements to be done + * manually by the user. + * @returns The created focus trap instance. + */ + + + create(element, deferCaptureElements = false) { + return new FocusTrap(element, this._checker, this._ngZone, this._document, deferCaptureElements); + } + +} + +FocusTrapFactory.ɵfac = function FocusTrapFactory_Factory(t) { + return new (t || FocusTrapFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](InteractivityChecker), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT)); +}; + +FocusTrapFactory.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: FocusTrapFactory, + factory: FocusTrapFactory.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FocusTrapFactory, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: InteractivityChecker + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }]; + }, null); +})(); +/** Directive for trapping focus within a region. */ + + +class CdkTrapFocus { + constructor(_elementRef, _focusTrapFactory, + /** + * @deprecated No longer being used. To be removed. + * @breaking-change 13.0.0 + */ + _document) { + this._elementRef = _elementRef; + this._focusTrapFactory = _focusTrapFactory; + /** Previously focused element to restore focus to upon destroy when using autoCapture. */ + + this._previouslyFocusedElement = null; + this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true); + } + /** Whether the focus trap is active. */ + + + get enabled() { + return this.focusTrap.enabled; + } + + set enabled(value) { + this.focusTrap.enabled = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__.coerceBooleanProperty)(value); + } + /** + * Whether the directive should automatically move focus into the trapped region upon + * initialization and return focus to the previous activeElement upon destruction. + */ + + + get autoCapture() { + return this._autoCapture; + } + + set autoCapture(value) { + this._autoCapture = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__.coerceBooleanProperty)(value); + } + + ngOnDestroy() { + this.focusTrap.destroy(); // If we stored a previously focused element when using autoCapture, return focus to that + // element now that the trapped region is being destroyed. + + if (this._previouslyFocusedElement) { + this._previouslyFocusedElement.focus(); + + this._previouslyFocusedElement = null; + } + } + + ngAfterContentInit() { + this.focusTrap.attachAnchors(); + + if (this.autoCapture) { + this._captureFocus(); + } + } + + ngDoCheck() { + if (!this.focusTrap.hasAttached()) { + this.focusTrap.attachAnchors(); + } + } + + ngOnChanges(changes) { + const autoCaptureChange = changes['autoCapture']; + + if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture && this.focusTrap.hasAttached()) { + this._captureFocus(); + } + } + + _captureFocus() { + this._previouslyFocusedElement = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getFocusedElementPierceShadowDom)(); + this.focusTrap.focusInitialElementWhenReady(); + } + +} + +CdkTrapFocus.ɵfac = function CdkTrapFocus_Factory(t) { + return new (t || CdkTrapFocus)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FocusTrapFactory), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT)); +}; + +CdkTrapFocus.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkTrapFocus, + selectors: [["", "cdkTrapFocus", ""]], + inputs: { + enabled: ["cdkTrapFocus", "enabled"], + autoCapture: ["cdkTrapFocusAutoCapture", "autoCapture"] + }, + exportAs: ["cdkTrapFocus"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkTrapFocus, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkTrapFocus]', + exportAs: 'cdkTrapFocus' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: FocusTrapFactory + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }]; + }, { + enabled: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['cdkTrapFocus'] + }], + autoCapture: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['cdkTrapFocusAutoCapture'] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Class that allows for trapping focus within a DOM element. + * + * This class uses a strategy pattern that determines how it traps focus. + * See FocusTrapInertStrategy. + */ + + +class ConfigurableFocusTrap extends FocusTrap { + constructor(_element, _checker, _ngZone, _document, _focusTrapManager, _inertStrategy, config) { + super(_element, _checker, _ngZone, _document, config.defer); + this._focusTrapManager = _focusTrapManager; + this._inertStrategy = _inertStrategy; + + this._focusTrapManager.register(this); + } + /** Whether the FocusTrap is enabled. */ + + + get enabled() { + return this._enabled; + } + + set enabled(value) { + this._enabled = value; + + if (this._enabled) { + this._focusTrapManager.register(this); + } else { + this._focusTrapManager.deregister(this); + } + } + /** Notifies the FocusTrapManager that this FocusTrap will be destroyed. */ + + + destroy() { + this._focusTrapManager.deregister(this); + + super.destroy(); + } + /** @docs-private Implemented as part of ManagedFocusTrap. */ + + + _enable() { + this._inertStrategy.preventFocus(this); + + this.toggleAnchors(true); + } + /** @docs-private Implemented as part of ManagedFocusTrap. */ + + + _disable() { + this._inertStrategy.allowFocus(this); + + this.toggleAnchors(false); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** The injection token used to specify the inert strategy. */ + + +const FOCUS_TRAP_INERT_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('FOCUS_TRAP_INERT_STRATEGY'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Lightweight FocusTrapInertStrategy that adds a document focus event + * listener to redirect focus back inside the FocusTrap. + */ + +class EventListenerFocusTrapInertStrategy { + constructor() { + /** Focus event handler. */ + this._listener = null; + } + /** Adds a document event listener that keeps focus inside the FocusTrap. */ + + + preventFocus(focusTrap) { + // Ensure there's only one listener per document + if (this._listener) { + focusTrap._document.removeEventListener('focus', this._listener, true); + } + + this._listener = e => this._trapFocus(focusTrap, e); + + focusTrap._ngZone.runOutsideAngular(() => { + focusTrap._document.addEventListener('focus', this._listener, true); + }); + } + /** Removes the event listener added in preventFocus. */ + + + allowFocus(focusTrap) { + if (!this._listener) { + return; + } + + focusTrap._document.removeEventListener('focus', this._listener, true); + + this._listener = null; + } + /** + * Refocuses the first element in the FocusTrap if the focus event target was outside + * the FocusTrap. + * + * This is an event listener callback. The event listener is added in runOutsideAngular, + * so all this code runs outside Angular as well. + */ + + + _trapFocus(focusTrap, event) { + const target = event.target; + const focusTrapRoot = focusTrap._element; // Don't refocus if target was in an overlay, because the overlay might be associated + // with an element inside the FocusTrap, ex. mat-select. + + if (target && !focusTrapRoot.contains(target) && !target.closest?.('div.cdk-overlay-pane')) { + // Some legacy FocusTrap usages have logic that focuses some element on the page + // just before FocusTrap is destroyed. For backwards compatibility, wait + // to be sure FocusTrap is still enabled before refocusing. + setTimeout(() => { + // Check whether focus wasn't put back into the focus trap while the timeout was pending. + if (focusTrap.enabled && !focusTrapRoot.contains(focusTrap._document.activeElement)) { + focusTrap.focusFirstTabbableElement(); + } + }); + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Injectable that ensures only the most recently enabled FocusTrap is active. */ + + +class FocusTrapManager { + constructor() { + // A stack of the FocusTraps on the page. Only the FocusTrap at the + // top of the stack is active. + this._focusTrapStack = []; + } + /** + * Disables the FocusTrap at the top of the stack, and then pushes + * the new FocusTrap onto the stack. + */ + + + register(focusTrap) { + // Dedupe focusTraps that register multiple times. + this._focusTrapStack = this._focusTrapStack.filter(ft => ft !== focusTrap); + let stack = this._focusTrapStack; + + if (stack.length) { + stack[stack.length - 1]._disable(); + } + + stack.push(focusTrap); + + focusTrap._enable(); + } + /** + * Removes the FocusTrap from the stack, and activates the + * FocusTrap that is the new top of the stack. + */ + + + deregister(focusTrap) { + focusTrap._disable(); + + const stack = this._focusTrapStack; + const i = stack.indexOf(focusTrap); + + if (i !== -1) { + stack.splice(i, 1); + + if (stack.length) { + stack[stack.length - 1]._enable(); + } + } + } + +} + +FocusTrapManager.ɵfac = function FocusTrapManager_Factory(t) { + return new (t || FocusTrapManager)(); +}; + +FocusTrapManager.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: FocusTrapManager, + factory: FocusTrapManager.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FocusTrapManager, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Factory that allows easy instantiation of configurable focus traps. */ + + +class ConfigurableFocusTrapFactory { + constructor(_checker, _ngZone, _focusTrapManager, _document, _inertStrategy) { + this._checker = _checker; + this._ngZone = _ngZone; + this._focusTrapManager = _focusTrapManager; + this._document = _document; // TODO split up the strategies into different modules, similar to DateAdapter. + + this._inertStrategy = _inertStrategy || new EventListenerFocusTrapInertStrategy(); + } + + create(element, config = { + defer: false + }) { + let configObject; + + if (typeof config === 'boolean') { + configObject = { + defer: config + }; + } else { + configObject = config; + } + + return new ConfigurableFocusTrap(element, this._checker, this._ngZone, this._document, this._focusTrapManager, this._inertStrategy, configObject); + } + +} + +ConfigurableFocusTrapFactory.ɵfac = function ConfigurableFocusTrapFactory_Factory(t) { + return new (t || ConfigurableFocusTrapFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](InteractivityChecker), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](FocusTrapManager), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](FOCUS_TRAP_INERT_STRATEGY, 8)); +}; + +ConfigurableFocusTrapFactory.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: ConfigurableFocusTrapFactory, + factory: ConfigurableFocusTrapFactory.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ConfigurableFocusTrapFactory, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: InteractivityChecker + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: FocusTrapManager + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [FOCUS_TRAP_INERT_STRATEGY] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Gets whether an event could be a faked `mousedown` event dispatched by a screen reader. */ + + +function isFakeMousedownFromScreenReader(event) { + // Some screen readers will dispatch a fake `mousedown` event when pressing enter or space on + // a clickable element. We can distinguish these events when both `offsetX` and `offsetY` are + // zero. Note that there's an edge case where the user could click the 0x0 spot of the screen + // themselves, but that is unlikely to contain interaction elements. Historically we used to + // check `event.buttons === 0`, however that no longer works on recent versions of NVDA. + return event.offsetX === 0 && event.offsetY === 0; +} +/** Gets whether an event could be a faked `touchstart` event dispatched by a screen reader. */ + + +function isFakeTouchstartFromScreenReader(event) { + const touch = event.touches && event.touches[0] || event.changedTouches && event.changedTouches[0]; // A fake `touchstart` can be distinguished from a real one by looking at the `identifier` + // which is typically >= 0 on a real device versus -1 from a screen reader. Just to be safe, + // we can also look at `radiusX` and `radiusY`. This behavior was observed against a Windows 10 + // device with a touch screen running NVDA v2020.4 and Firefox 85 or Chrome 88. + + return !!touch && touch.identifier === -1 && (touch.radiusX == null || touch.radiusX === 1) && (touch.radiusY == null || touch.radiusY === 1); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Injectable options for the InputModalityDetector. These are shallowly merged with the default + * options. + */ + + +const INPUT_MODALITY_DETECTOR_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('cdk-input-modality-detector-options'); +/** + * Default options for the InputModalityDetector. + * + * Modifier keys are ignored by default (i.e. when pressed won't cause the service to detect + * keyboard input modality) for two reasons: + * + * 1. Modifier keys are commonly used with mouse to perform actions such as 'right click' or 'open + * in new tab', and are thus less representative of actual keyboard interaction. + * 2. VoiceOver triggers some keyboard events when linearly navigating with Control + Option (but + * confusingly not with Caps Lock). Thus, to have parity with other screen readers, we ignore + * these keys so as to not update the input modality. + * + * Note that we do not by default ignore the right Meta key on Safari because it has the same key + * code as the ContextMenu key on other browsers. When we switch to using event.key, we can + * distinguish between the two. + */ + +const INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS = { + ignoreKeys: [_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.ALT, _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.CONTROL, _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.MAC_META, _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.META, _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__.SHIFT] +}; +/** + * The amount of time needed to pass after a touchstart event in order for a subsequent mousedown + * event to be attributed as mouse and not touch. + * + * This is the value used by AngularJS Material. Through trial and error (on iPhone 6S) they found + * that a value of around 650ms seems appropriate. + */ + +const TOUCH_BUFFER_MS = 650; +/** + * Event listener options that enable capturing and also mark the listener as passive if the browser + * supports it. + */ + +const modalityEventListenerOptions = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.normalizePassiveListenerOptions)({ + passive: true, + capture: true +}); +/** + * Service that detects the user's input modality. + * + * This service does not update the input modality when a user navigates with a screen reader + * (e.g. linear navigation with VoiceOver, object navigation / browse mode with NVDA, virtual PC + * cursor mode with JAWS). This is in part due to technical limitations (i.e. keyboard events do not + * fire as expected in these modes) but is also arguably the correct behavior. Navigating with a + * screen reader is akin to visually scanning a page, and should not be interpreted as actual user + * input interaction. + * + * When a user is not navigating but *interacting* with a screen reader, this service attempts to + * update the input modality to keyboard, but in general this service's behavior is largely + * undefined. + */ + +class InputModalityDetector { + constructor(_platform, ngZone, document, options) { + this._platform = _platform; + /** + * The most recently detected input modality event target. Is null if no input modality has been + * detected or if the associated event target is null for some unknown reason. + */ + + this._mostRecentTarget = null; + /** The underlying BehaviorSubject that emits whenever an input modality is detected. */ + + this._modality = new rxjs__WEBPACK_IMPORTED_MODULE_12__.BehaviorSubject(null); + /** + * The timestamp of the last touch input modality. Used to determine whether mousedown events + * should be attributed to mouse or touch. + */ + + this._lastTouchMs = 0; + /** + * Handles keydown events. Must be an arrow function in order to preserve the context when it gets + * bound. + */ + + this._onKeydown = event => { + // If this is one of the keys we should ignore, then ignore it and don't update the input + // modality to keyboard. + if (this._options?.ignoreKeys?.some(keyCode => keyCode === event.keyCode)) { + return; + } + + this._modality.next('keyboard'); + + this._mostRecentTarget = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getEventTarget)(event); + }; + /** + * Handles mousedown events. Must be an arrow function in order to preserve the context when it + * gets bound. + */ + + + this._onMousedown = event => { + // Touches trigger both touch and mouse events, so we need to distinguish between mouse events + // that were triggered via mouse vs touch. To do so, check if the mouse event occurs closely + // after the previous touch event. + if (Date.now() - this._lastTouchMs < TOUCH_BUFFER_MS) { + return; + } // Fake mousedown events are fired by some screen readers when controls are activated by the + // screen reader. Attribute them to keyboard input modality. + + + this._modality.next(isFakeMousedownFromScreenReader(event) ? 'keyboard' : 'mouse'); + + this._mostRecentTarget = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getEventTarget)(event); + }; + /** + * Handles touchstart events. Must be an arrow function in order to preserve the context when it + * gets bound. + */ + + + this._onTouchstart = event => { + // Same scenario as mentioned in _onMousedown, but on touch screen devices, fake touchstart + // events are fired. Again, attribute to keyboard input modality. + if (isFakeTouchstartFromScreenReader(event)) { + this._modality.next('keyboard'); + + return; + } // Store the timestamp of this touch event, as it's used to distinguish between mouse events + // triggered via mouse vs touch. + + + this._lastTouchMs = Date.now(); + + this._modality.next('touch'); + + this._mostRecentTarget = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getEventTarget)(event); + }; + + this._options = { ...INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS, + ...options + }; // Skip the first emission as it's null. + + this.modalityDetected = this._modality.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_13__.skip)(1)); + this.modalityChanged = this.modalityDetected.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__.distinctUntilChanged)()); // If we're not in a browser, this service should do nothing, as there's no relevant input + // modality to detect. + + if (_platform.isBrowser) { + ngZone.runOutsideAngular(() => { + document.addEventListener('keydown', this._onKeydown, modalityEventListenerOptions); + document.addEventListener('mousedown', this._onMousedown, modalityEventListenerOptions); + document.addEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions); + }); + } + } + /** The most recently detected input modality. */ + + + get mostRecentModality() { + return this._modality.value; + } + + ngOnDestroy() { + this._modality.complete(); + + if (this._platform.isBrowser) { + document.removeEventListener('keydown', this._onKeydown, modalityEventListenerOptions); + document.removeEventListener('mousedown', this._onMousedown, modalityEventListenerOptions); + document.removeEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions); + } + } + +} + +InputModalityDetector.ɵfac = function InputModalityDetector_Factory(t) { + return new (t || InputModalityDetector)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](INPUT_MODALITY_DETECTOR_OPTIONS, 8)); +}; + +InputModalityDetector.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: InputModalityDetector, + factory: InputModalityDetector.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](InputModalityDetector, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: Document, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [INPUT_MODALITY_DETECTOR_OPTIONS] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const LIVE_ANNOUNCER_ELEMENT_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('liveAnnouncerElement', { + providedIn: 'root', + factory: LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY +}); +/** @docs-private */ + +function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY() { + return null; +} +/** Injection token that can be used to configure the default options for the LiveAnnouncer. */ + + +const LIVE_ANNOUNCER_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('LIVE_ANNOUNCER_DEFAULT_OPTIONS'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +class LiveAnnouncer { + constructor(elementToken, _ngZone, _document, _defaultOptions) { + this._ngZone = _ngZone; + this._defaultOptions = _defaultOptions; // We inject the live element and document as `any` because the constructor signature cannot + // reference browser globals (HTMLElement, Document) on non-browser environments, since having + // a class decorator causes TypeScript to preserve the constructor signature types. + + this._document = _document; + this._liveElement = elementToken || this._createLiveElement(); + } + + announce(message, ...args) { + const defaultOptions = this._defaultOptions; + let politeness; + let duration; + + if (args.length === 1 && typeof args[0] === 'number') { + duration = args[0]; + } else { + [politeness, duration] = args; + } + + this.clear(); + clearTimeout(this._previousTimeout); + + if (!politeness) { + politeness = defaultOptions && defaultOptions.politeness ? defaultOptions.politeness : 'polite'; + } + + if (duration == null && defaultOptions) { + duration = defaultOptions.duration; + } // TODO: ensure changing the politeness works on all environments we support. + + + this._liveElement.setAttribute('aria-live', politeness); // This 100ms timeout is necessary for some browser + screen-reader combinations: + // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout. + // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a + // second time without clearing and then using a non-zero delay. + // (using JAWS 17 at time of this writing). + + + return this._ngZone.runOutsideAngular(() => { + return new Promise(resolve => { + clearTimeout(this._previousTimeout); + this._previousTimeout = setTimeout(() => { + this._liveElement.textContent = message; + resolve(); + + if (typeof duration === 'number') { + this._previousTimeout = setTimeout(() => this.clear(), duration); + } + }, 100); + }); + }); + } + /** + * Clears the current text from the announcer element. Can be used to prevent + * screen readers from reading the text out again while the user is going + * through the page landmarks. + */ + + + clear() { + if (this._liveElement) { + this._liveElement.textContent = ''; + } + } + + ngOnDestroy() { + clearTimeout(this._previousTimeout); + this._liveElement?.remove(); + this._liveElement = null; + } + + _createLiveElement() { + const elementClass = 'cdk-live-announcer-element'; + + const previousElements = this._document.getElementsByClassName(elementClass); + + const liveEl = this._document.createElement('div'); // Remove any old containers. This can happen when coming in from a server-side-rendered page. + + + for (let i = 0; i < previousElements.length; i++) { + previousElements[i].remove(); + } + + liveEl.classList.add(elementClass); + liveEl.classList.add('cdk-visually-hidden'); + liveEl.setAttribute('aria-atomic', 'true'); + liveEl.setAttribute('aria-live', 'polite'); + + this._document.body.appendChild(liveEl); + + return liveEl; + } + +} + +LiveAnnouncer.ɵfac = function LiveAnnouncer_Factory(t) { + return new (t || LiveAnnouncer)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LIVE_ANNOUNCER_ELEMENT_TOKEN, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LIVE_ANNOUNCER_DEFAULT_OPTIONS, 8)); +}; + +LiveAnnouncer.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: LiveAnnouncer, + factory: LiveAnnouncer.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LiveAnnouncer, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [LIVE_ANNOUNCER_ELEMENT_TOKEN] + }] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [LIVE_ANNOUNCER_DEFAULT_OPTIONS] + }] + }]; + }, null); +})(); +/** + * A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility + * with a wider range of browsers and screen readers. + */ + + +class CdkAriaLive { + constructor(_elementRef, _liveAnnouncer, _contentObserver, _ngZone) { + this._elementRef = _elementRef; + this._liveAnnouncer = _liveAnnouncer; + this._contentObserver = _contentObserver; + this._ngZone = _ngZone; + this._politeness = 'polite'; + } + /** The aria-live politeness level to use when announcing messages. */ + + + get politeness() { + return this._politeness; + } + + set politeness(value) { + this._politeness = value === 'off' || value === 'assertive' ? value : 'polite'; + + if (this._politeness === 'off') { + if (this._subscription) { + this._subscription.unsubscribe(); + + this._subscription = null; + } + } else if (!this._subscription) { + this._subscription = this._ngZone.runOutsideAngular(() => { + return this._contentObserver.observe(this._elementRef).subscribe(() => { + // Note that we use textContent here, rather than innerText, in order to avoid a reflow. + const elementText = this._elementRef.nativeElement.textContent; // The `MutationObserver` fires also for attribute + // changes which we don't want to announce. + + if (elementText !== this._previousAnnouncedText) { + this._liveAnnouncer.announce(elementText, this._politeness); + + this._previousAnnouncedText = elementText; + } + }); + }); + } + } + + ngOnDestroy() { + if (this._subscription) { + this._subscription.unsubscribe(); + } + } + +} + +CdkAriaLive.ɵfac = function CdkAriaLive_Factory(t) { + return new (t || CdkAriaLive)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](LiveAnnouncer), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_observers__WEBPACK_IMPORTED_MODULE_15__.ContentObserver), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone)); +}; + +CdkAriaLive.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkAriaLive, + selectors: [["", "cdkAriaLive", ""]], + inputs: { + politeness: ["cdkAriaLive", "politeness"] + }, + exportAs: ["cdkAriaLive"] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkAriaLive, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkAriaLive]', + exportAs: 'cdkAriaLive' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: LiveAnnouncer + }, { + type: _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_15__.ContentObserver + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }]; + }, { + politeness: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['cdkAriaLive'] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** InjectionToken for FocusMonitorOptions. */ + + +const FOCUS_MONITOR_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('cdk-focus-monitor-default-options'); +/** + * Event listener options that enable capturing and also + * mark the listener as passive if the browser supports it. + */ + +const captureEventListenerOptions = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.normalizePassiveListenerOptions)({ + passive: true, + capture: true +}); +/** Monitors mouse and keyboard events to determine the cause of focus events. */ + +class FocusMonitor { + constructor(_ngZone, _platform, _inputModalityDetector, + /** @breaking-change 11.0.0 make document required */ + document, options) { + this._ngZone = _ngZone; + this._platform = _platform; + this._inputModalityDetector = _inputModalityDetector; + /** The focus origin that the next focus event is a result of. */ + + this._origin = null; + /** Whether the window has just been focused. */ + + this._windowFocused = false; + /** + * Whether the origin was determined via a touch interaction. Necessary as properly attributing + * focus events to touch interactions requires special logic. + */ + + this._originFromTouchInteraction = false; + /** Map of elements being monitored to their info. */ + + this._elementInfo = new Map(); + /** The number of elements currently being monitored. */ + + this._monitoredElementCount = 0; + /** + * Keeps track of the root nodes to which we've currently bound a focus/blur handler, + * as well as the number of monitored elements that they contain. We have to treat focus/blur + * handlers differently from the rest of the events, because the browser won't emit events + * to the document when focus moves inside of a shadow root. + */ + + this._rootNodeFocusListenerCount = new Map(); + /** + * Event listener for `focus` events on the window. + * Needs to be an arrow function in order to preserve the context when it gets bound. + */ + + this._windowFocusListener = () => { + // Make a note of when the window regains focus, so we can + // restore the origin info for the focused element. + this._windowFocused = true; + this._windowFocusTimeoutId = setTimeout(() => this._windowFocused = false); + }; + /** Subject for stopping our InputModalityDetector subscription. */ + + + this._stopInputModalityDetector = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); + /** + * Event listener for `focus` and 'blur' events on the document. + * Needs to be an arrow function in order to preserve the context when it gets bound. + */ + + this._rootNodeFocusAndBlurListener = event => { + const target = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getEventTarget)(event); + + const handler = event.type === 'focus' ? this._onFocus : this._onBlur; // We need to walk up the ancestor chain in order to support `checkChildren`. + + for (let element = target; element; element = element.parentElement) { + handler.call(this, event, element); + } + }; + + this._document = document; + this._detectionMode = options?.detectionMode || 0 + /* IMMEDIATE */ + ; + } + + monitor(element, checkChildren = false) { + const nativeElement = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__.coerceElement)(element); // Do nothing if we're not on the browser platform or the passed in node isn't an element. + + if (!this._platform.isBrowser || nativeElement.nodeType !== 1) { + return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(null); + } // If the element is inside the shadow DOM, we need to bind our focus/blur listeners to + // the shadow root, rather than the `document`, because the browser won't emit focus events + // to the `document`, if focus is moving within the same shadow root. + + + const rootNode = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getShadowRoot)(nativeElement) || this._getDocument(); + + const cachedInfo = this._elementInfo.get(nativeElement); // Check if we're already monitoring this element. + + + if (cachedInfo) { + if (checkChildren) { + // TODO(COMP-318): this can be problematic, because it'll turn all non-checkChildren + // observers into ones that behave as if `checkChildren` was turned on. We need a more + // robust solution. + cachedInfo.checkChildren = true; + } + + return cachedInfo.subject; + } // Create monitored element info. + + + const info = { + checkChildren: checkChildren, + subject: new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(), + rootNode + }; + + this._elementInfo.set(nativeElement, info); + + this._registerGlobalListeners(info); + + return info.subject; + } + + stopMonitoring(element) { + const nativeElement = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__.coerceElement)(element); + + const elementInfo = this._elementInfo.get(nativeElement); + + if (elementInfo) { + elementInfo.subject.complete(); + + this._setClasses(nativeElement); + + this._elementInfo.delete(nativeElement); + + this._removeGlobalListeners(elementInfo); + } + } + + focusVia(element, origin, options) { + const nativeElement = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_11__.coerceElement)(element); + + const focusedElement = this._getDocument().activeElement; // If the element is focused already, calling `focus` again won't trigger the event listener + // which means that the focus classes won't be updated. If that's the case, update the classes + // directly without waiting for an event. + + + if (nativeElement === focusedElement) { + this._getClosestElementsInfo(nativeElement).forEach(([currentElement, info]) => this._originChanged(currentElement, origin, info)); + } else { + this._setOrigin(origin); // `focus` isn't available on the server + + + if (typeof nativeElement.focus === 'function') { + nativeElement.focus(options); + } + } + } + + ngOnDestroy() { + this._elementInfo.forEach((_info, element) => this.stopMonitoring(element)); + } + /** Access injected document if available or fallback to global document reference */ + + + _getDocument() { + return this._document || document; + } + /** Use defaultView of injected document if available or fallback to global window reference */ + + + _getWindow() { + const doc = this._getDocument(); + + return doc.defaultView || window; + } + + _getFocusOrigin(focusEventTarget) { + if (this._origin) { + // If the origin was realized via a touch interaction, we need to perform additional checks + // to determine whether the focus origin should be attributed to touch or program. + if (this._originFromTouchInteraction) { + return this._shouldBeAttributedToTouch(focusEventTarget) ? 'touch' : 'program'; + } else { + return this._origin; + } + } // If the window has just regained focus, we can restore the most recent origin from before the + // window blurred. Otherwise, we've reached the point where we can't identify the source of the + // focus. This typically means one of two things happened: + // + // 1) The element was programmatically focused, or + // 2) The element was focused via screen reader navigation (which generally doesn't fire + // events). + // + // Because we can't distinguish between these two cases, we default to setting `program`. + + + return this._windowFocused && this._lastFocusOrigin ? this._lastFocusOrigin : 'program'; + } + /** + * Returns whether the focus event should be attributed to touch. Recall that in IMMEDIATE mode, a + * touch origin isn't immediately reset at the next tick (see _setOrigin). This means that when we + * handle a focus event following a touch interaction, we need to determine whether (1) the focus + * event was directly caused by the touch interaction or (2) the focus event was caused by a + * subsequent programmatic focus call triggered by the touch interaction. + * @param focusEventTarget The target of the focus event under examination. + */ + + + _shouldBeAttributedToTouch(focusEventTarget) { + // Please note that this check is not perfect. Consider the following edge case: + // + //
+ //
+ //
+ // + // Suppose there is a FocusMonitor in IMMEDIATE mode attached to #parent. When the user touches + // #child, #parent is programmatically focused. This code will attribute the focus to touch + // instead of program. This is a relatively minor edge-case that can be worked around by using + // focusVia(parent, 'program') to focus #parent. + return this._detectionMode === 1 + /* EVENTUAL */ + || !!focusEventTarget?.contains(this._inputModalityDetector._mostRecentTarget); + } + /** + * Sets the focus classes on the element based on the given focus origin. + * @param element The element to update the classes on. + * @param origin The focus origin. + */ + + + _setClasses(element, origin) { + element.classList.toggle('cdk-focused', !!origin); + element.classList.toggle('cdk-touch-focused', origin === 'touch'); + element.classList.toggle('cdk-keyboard-focused', origin === 'keyboard'); + element.classList.toggle('cdk-mouse-focused', origin === 'mouse'); + element.classList.toggle('cdk-program-focused', origin === 'program'); + } + /** + * Updates the focus origin. If we're using immediate detection mode, we schedule an async + * function to clear the origin at the end of a timeout. The duration of the timeout depends on + * the origin being set. + * @param origin The origin to set. + * @param isFromInteraction Whether we are setting the origin from an interaction event. + */ + + + _setOrigin(origin, isFromInteraction = false) { + this._ngZone.runOutsideAngular(() => { + this._origin = origin; + this._originFromTouchInteraction = origin === 'touch' && isFromInteraction; // If we're in IMMEDIATE mode, reset the origin at the next tick (or in `TOUCH_BUFFER_MS` ms + // for a touch event). We reset the origin at the next tick because Firefox focuses one tick + // after the interaction event. We wait `TOUCH_BUFFER_MS` ms before resetting the origin for + // a touch event because when a touch event is fired, the associated focus event isn't yet in + // the event queue. Before doing so, clear any pending timeouts. + + if (this._detectionMode === 0 + /* IMMEDIATE */ + ) { + clearTimeout(this._originTimeoutId); + const ms = this._originFromTouchInteraction ? TOUCH_BUFFER_MS : 1; + this._originTimeoutId = setTimeout(() => this._origin = null, ms); + } + }); + } + /** + * Handles focus events on a registered element. + * @param event The focus event. + * @param element The monitored element. + */ + + + _onFocus(event, element) { + // NOTE(mmalerba): We currently set the classes based on the focus origin of the most recent + // focus event affecting the monitored element. If we want to use the origin of the first event + // instead we should check for the cdk-focused class here and return if the element already has + // it. (This only matters for elements that have includesChildren = true). + // If we are not counting child-element-focus as focused, make sure that the event target is the + // monitored element itself. + const elementInfo = this._elementInfo.get(element); + + const focusEventTarget = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__._getEventTarget)(event); + + if (!elementInfo || !elementInfo.checkChildren && element !== focusEventTarget) { + return; + } + + this._originChanged(element, this._getFocusOrigin(focusEventTarget), elementInfo); + } + /** + * Handles blur events on a registered element. + * @param event The blur event. + * @param element The monitored element. + */ + + + _onBlur(event, element) { + // If we are counting child-element-focus as focused, make sure that we aren't just blurring in + // order to focus another child of the monitored element. + const elementInfo = this._elementInfo.get(element); + + if (!elementInfo || elementInfo.checkChildren && event.relatedTarget instanceof Node && element.contains(event.relatedTarget)) { + return; + } + + this._setClasses(element); + + this._emitOrigin(elementInfo.subject, null); + } + + _emitOrigin(subject, origin) { + this._ngZone.run(() => subject.next(origin)); + } + + _registerGlobalListeners(elementInfo) { + if (!this._platform.isBrowser) { + return; + } + + const rootNode = elementInfo.rootNode; + const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode) || 0; + + if (!rootNodeFocusListeners) { + this._ngZone.runOutsideAngular(() => { + rootNode.addEventListener('focus', this._rootNodeFocusAndBlurListener, captureEventListenerOptions); + rootNode.addEventListener('blur', this._rootNodeFocusAndBlurListener, captureEventListenerOptions); + }); + } + + this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners + 1); // Register global listeners when first element is monitored. + + + if (++this._monitoredElementCount === 1) { + // Note: we listen to events in the capture phase so we + // can detect them even if the user stops propagation. + this._ngZone.runOutsideAngular(() => { + const window = this._getWindow(); + + window.addEventListener('focus', this._windowFocusListener); + }); // The InputModalityDetector is also just a collection of global listeners. + + + this._inputModalityDetector.modalityDetected.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__.takeUntil)(this._stopInputModalityDetector)).subscribe(modality => { + this._setOrigin(modality, true + /* isFromInteraction */ + ); + }); + } + } + + _removeGlobalListeners(elementInfo) { + const rootNode = elementInfo.rootNode; + + if (this._rootNodeFocusListenerCount.has(rootNode)) { + const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode); + + if (rootNodeFocusListeners > 1) { + this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners - 1); + } else { + rootNode.removeEventListener('focus', this._rootNodeFocusAndBlurListener, captureEventListenerOptions); + rootNode.removeEventListener('blur', this._rootNodeFocusAndBlurListener, captureEventListenerOptions); + + this._rootNodeFocusListenerCount.delete(rootNode); + } + } // Unregister global listeners when last element is unmonitored. + + + if (! --this._monitoredElementCount) { + const window = this._getWindow(); + + window.removeEventListener('focus', this._windowFocusListener); // Equivalently, stop our InputModalityDetector subscription. + + this._stopInputModalityDetector.next(); // Clear timeouts for all potentially pending timeouts to prevent the leaks. + + + clearTimeout(this._windowFocusTimeoutId); + clearTimeout(this._originTimeoutId); + } + } + /** Updates all the state on an element once its focus origin has changed. */ + + + _originChanged(element, origin, elementInfo) { + this._setClasses(element, origin); + + this._emitOrigin(elementInfo.subject, origin); + + this._lastFocusOrigin = origin; + } + /** + * Collects the `MonitoredElementInfo` of a particular element and + * all of its ancestors that have enabled `checkChildren`. + * @param element Element from which to start the search. + */ + + + _getClosestElementsInfo(element) { + const results = []; + + this._elementInfo.forEach((info, currentElement) => { + if (currentElement === element || info.checkChildren && currentElement.contains(element)) { + results.push([currentElement, info]); + } + }); + + return results; + } + +} + +FocusMonitor.ɵfac = function FocusMonitor_Factory(t) { + return new (t || FocusMonitor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](InputModalityDetector), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](FOCUS_MONITOR_DEFAULT_OPTIONS, 8)); +}; + +FocusMonitor.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: FocusMonitor, + factory: FocusMonitor.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FocusMonitor, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }, { + type: InputModalityDetector + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [FOCUS_MONITOR_DEFAULT_OPTIONS] + }] + }]; + }, null); +})(); +/** + * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or + * programmatically) and adds corresponding classes to the element. + * + * There are two variants of this directive: + * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is + * focused. + * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused. + */ + + +class CdkMonitorFocus { + constructor(_elementRef, _focusMonitor) { + this._elementRef = _elementRef; + this._focusMonitor = _focusMonitor; + this.cdkFocusChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + } + + ngAfterViewInit() { + const element = this._elementRef.nativeElement; + this._monitorSubscription = this._focusMonitor.monitor(element, element.nodeType === 1 && element.hasAttribute('cdkMonitorSubtreeFocus')).subscribe(origin => this.cdkFocusChange.emit(origin)); + } + + ngOnDestroy() { + this._focusMonitor.stopMonitoring(this._elementRef); + + if (this._monitorSubscription) { + this._monitorSubscription.unsubscribe(); + } + } + +} + +CdkMonitorFocus.ɵfac = function CdkMonitorFocus_Factory(t) { + return new (t || CdkMonitorFocus)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FocusMonitor)); +}; + +CdkMonitorFocus.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkMonitorFocus, + selectors: [["", "cdkMonitorElementFocus", ""], ["", "cdkMonitorSubtreeFocus", ""]], + outputs: { + cdkFocusChange: "cdkFocusChange" + } +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkMonitorFocus, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: FocusMonitor + }]; + }, { + cdkFocusChange: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Output + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** CSS class applied to the document body when in black-on-white high-contrast mode. */ + + +const BLACK_ON_WHITE_CSS_CLASS = 'cdk-high-contrast-black-on-white'; +/** CSS class applied to the document body when in white-on-black high-contrast mode. */ + +const WHITE_ON_BLACK_CSS_CLASS = 'cdk-high-contrast-white-on-black'; +/** CSS class applied to the document body when in high-contrast mode. */ + +const HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS = 'cdk-high-contrast-active'; +/** + * Service to determine whether the browser is currently in a high-contrast-mode environment. + * + * Microsoft Windows supports an accessibility feature called "High Contrast Mode". This mode + * changes the appearance of all applications, including web applications, to dramatically increase + * contrast. + * + * IE, Edge, and Firefox currently support this mode. Chrome does not support Windows High Contrast + * Mode. This service does not detect high-contrast mode as added by the Chrome "High Contrast" + * browser extension. + */ + +class HighContrastModeDetector { + constructor(_platform, document) { + this._platform = _platform; + this._document = document; + } + /** Gets the current high-contrast-mode for the page. */ + + + getHighContrastMode() { + if (!this._platform.isBrowser) { + return 0 + /* NONE */ + ; + } // Create a test element with an arbitrary background-color that is neither black nor + // white; high-contrast mode will coerce the color to either black or white. Also ensure that + // appending the test element to the DOM does not affect layout by absolutely positioning it + + + const testElement = this._document.createElement('div'); + + testElement.style.backgroundColor = 'rgb(1,2,3)'; + testElement.style.position = 'absolute'; + + this._document.body.appendChild(testElement); // Get the computed style for the background color, collapsing spaces to normalize between + // browsers. Once we get this color, we no longer need the test element. Access the `window` + // via the document so we can fake it in tests. Note that we have extra null checks, because + // this logic will likely run during app bootstrap and throwing can break the entire app. + + + const documentWindow = this._document.defaultView || window; + const computedStyle = documentWindow && documentWindow.getComputedStyle ? documentWindow.getComputedStyle(testElement) : null; + const computedColor = (computedStyle && computedStyle.backgroundColor || '').replace(/ /g, ''); + testElement.remove(); + + switch (computedColor) { + case 'rgb(0,0,0)': + return 2 + /* WHITE_ON_BLACK */ + ; + + case 'rgb(255,255,255)': + return 1 + /* BLACK_ON_WHITE */ + ; + } + + return 0 + /* NONE */ + ; + } + /** Applies CSS classes indicating high-contrast mode to document body (browser-only). */ + + + _applyBodyHighContrastModeCssClasses() { + if (!this._hasCheckedHighContrastMode && this._platform.isBrowser && this._document.body) { + const bodyClasses = this._document.body.classList; // IE11 doesn't support `classList` operations with multiple arguments + + bodyClasses.remove(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS); + bodyClasses.remove(BLACK_ON_WHITE_CSS_CLASS); + bodyClasses.remove(WHITE_ON_BLACK_CSS_CLASS); + this._hasCheckedHighContrastMode = true; + const mode = this.getHighContrastMode(); + + if (mode === 1 + /* BLACK_ON_WHITE */ + ) { + bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS); + bodyClasses.add(BLACK_ON_WHITE_CSS_CLASS); + } else if (mode === 2 + /* WHITE_ON_BLACK */ + ) { + bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS); + bodyClasses.add(WHITE_ON_BLACK_CSS_CLASS); + } + } + } + +} + +HighContrastModeDetector.ɵfac = function HighContrastModeDetector_Factory(t) { + return new (t || HighContrastModeDetector)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT)); +}; + +HighContrastModeDetector.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: HighContrastModeDetector, + factory: HighContrastModeDetector.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HighContrastModeDetector, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class A11yModule { + constructor(highContrastModeDetector) { + highContrastModeDetector._applyBodyHighContrastModeCssClasses(); + } + +} + +A11yModule.ɵfac = function A11yModule_Factory(t) { + return new (t || A11yModule)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HighContrastModeDetector)); +}; + +A11yModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: A11yModule +}); +A11yModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ + imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.PlatformModule, _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_15__.ObserversModule]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](A11yModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.PlatformModule, _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_15__.ObserversModule], + declarations: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus], + exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus] + }] + }], function () { + return [{ + type: HighContrastModeDetector + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 2867: +/*!*****************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/bidi.mjs ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BidiModule": () => (/* binding */ BidiModule), +/* harmony export */ "DIR_DOCUMENT": () => (/* binding */ DIR_DOCUMENT), +/* harmony export */ "Dir": () => (/* binding */ Dir), +/* harmony export */ "Directionality": () => (/* binding */ Directionality) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ 4666); + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Injection token used to inject the document into Directionality. + * This is used so that the value can be faked in tests. + * + * We can't use the real document in tests because changing the real `dir` causes geometry-based + * tests in Safari to fail. + * + * We also can't re-provide the DOCUMENT token from platform-brower because the unit tests + * themselves use things like `querySelector` in test code. + * + * This token is defined in a separate file from Directionality as a workaround for + * https://github.com/angular/angular/issues/22559 + * + * @docs-private + */ + +const DIR_DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('cdk-dir-doc', { + providedIn: 'root', + factory: DIR_DOCUMENT_FACTORY +}); +/** @docs-private */ + +function DIR_DOCUMENT_FACTORY() { + return (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * The directionality (LTR / RTL) context for the application (or a subtree of it). + * Exposes the current direction and a stream of direction changes. + */ + + +class Directionality { + constructor(_document) { + /** The current 'ltr' or 'rtl' value. */ + this.value = 'ltr'; + /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */ + + this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + + if (_document) { + // TODO: handle 'auto' value - + // We still need to account for dir="auto". + // It looks like HTMLElemenet.dir is also "auto" when that's set to the attribute, + // but getComputedStyle return either "ltr" or "rtl". avoiding getComputedStyle for now + const bodyDir = _document.body ? _document.body.dir : null; + const htmlDir = _document.documentElement ? _document.documentElement.dir : null; + const value = bodyDir || htmlDir; + this.value = value === 'ltr' || value === 'rtl' ? value : 'ltr'; + } + } + + ngOnDestroy() { + this.change.complete(); + } + +} + +Directionality.ɵfac = function Directionality_Factory(t) { + return new (t || Directionality)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DIR_DOCUMENT, 8)); +}; + +Directionality.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: Directionality, + factory: Directionality.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Directionality, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [DIR_DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Directive to listen for changes of direction of part of the DOM. + * + * Provides itself as Directionality such that descendant directives only need to ever inject + * Directionality to get the closest direction. + */ + + +class Dir { + constructor() { + /** Normalized direction that accounts for invalid/unsupported values. */ + this._dir = 'ltr'; + /** Whether the `value` has been set to its initial value. */ + + this._isInitialized = false; + /** Event emitted when the direction changes. */ + + this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + } + /** @docs-private */ + + + get dir() { + return this._dir; + } + + set dir(value) { + const old = this._dir; + const normalizedValue = value ? value.toLowerCase() : value; + this._rawDir = value; + this._dir = normalizedValue === 'ltr' || normalizedValue === 'rtl' ? normalizedValue : 'ltr'; + + if (old !== this._dir && this._isInitialized) { + this.change.emit(this._dir); + } + } + /** Current layout direction of the element. */ + + + get value() { + return this.dir; + } + /** Initialize once default value has been set. */ + + + ngAfterContentInit() { + this._isInitialized = true; + } + + ngOnDestroy() { + this.change.complete(); + } + +} + +Dir.ɵfac = function Dir_Factory(t) { + return new (t || Dir)(); +}; + +Dir.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: Dir, + selectors: [["", "dir", ""]], + hostVars: 1, + hostBindings: function Dir_HostBindings(rf, ctx) { + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("dir", ctx._rawDir); + } + }, + inputs: { + dir: "dir" + }, + outputs: { + change: "dirChange" + }, + exportAs: ["dir"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: Directionality, + useExisting: Dir + }])] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Dir, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[dir]', + providers: [{ + provide: Directionality, + useExisting: Dir + }], + host: { + '[attr.dir]': '_rawDir' + }, + exportAs: 'dir' + }] + }], null, { + change: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Output, + args: ['dirChange'] + }], + dir: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class BidiModule {} + +BidiModule.ɵfac = function BidiModule_Factory(t) { + return new (t || BidiModule)(); +}; + +BidiModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: BidiModule +}); +BidiModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BidiModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + exports: [Dir], + declarations: [Dir] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 6507: +/*!****************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/cdk.mjs ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VERSION": () => (/* binding */ VERSION) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Current version of the Angular Component Development Kit. */ + +const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.Version('13.0.0'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + +/***/ }), + +/***/ 8971: +/*!*********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/coercion.mjs ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "_isNumberValue": () => (/* binding */ _isNumberValue), +/* harmony export */ "coerceArray": () => (/* binding */ coerceArray), +/* harmony export */ "coerceBooleanProperty": () => (/* binding */ coerceBooleanProperty), +/* harmony export */ "coerceCssPixelValue": () => (/* binding */ coerceCssPixelValue), +/* harmony export */ "coerceElement": () => (/* binding */ coerceElement), +/* harmony export */ "coerceNumberProperty": () => (/* binding */ coerceNumberProperty), +/* harmony export */ "coerceStringArray": () => (/* binding */ coerceStringArray) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Coerces a data-bound value (typically a string) to a boolean. */ + +function coerceBooleanProperty(value) { + return value != null && `${value}` !== 'false'; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function coerceNumberProperty(value, fallbackValue = 0) { + return _isNumberValue(value) ? Number(value) : fallbackValue; +} +/** + * Whether the provided value is considered a number. + * @docs-private + */ + + +function _isNumberValue(value) { + // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string, + // and other non-number values as NaN, where Number just uses 0) but it considers the string + // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN. + return !isNaN(parseFloat(value)) && !isNaN(Number(value)); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function coerceArray(value) { + return Array.isArray(value) ? value : [value]; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Coerces a value to a CSS pixel value. */ + + +function coerceCssPixelValue(value) { + if (value == null) { + return ''; + } + + return typeof value === 'string' ? value : `${value}px`; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Coerces an ElementRef or an Element into an element. + * Useful for APIs that can accept either a ref or the native element itself. + */ + + +function coerceElement(elementOrRef) { + return elementOrRef instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef ? elementOrRef.nativeElement : elementOrRef; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Coerces a value to an array of trimmed non-empty strings. + * Any input that is not an array, `null` or `undefined` will be turned into a string + * via `toString()` and subsequently split with the given separator. + * `null` and `undefined` will result in an empty array. + * This results in the following outcomes: + * - `null` -> `[]` + * - `[null]` -> `["null"]` + * - `["a", "b ", " "]` -> `["a", "b"]` + * - `[1, [2, 3]]` -> `["1", "2,3"]` + * - `[{ a: 0 }]` -> `["[object Object]"]` + * - `{ a: 0 }` -> `["[object", "Object]"]` + * + * Useful for defining CSS classes or table columns. + * @param value the value to coerce into an array of strings + * @param separator split-separator if value isn't an array + */ + + +function coerceStringArray(value, separator = /\s+/) { + const result = []; + + if (value != null) { + const sourceValues = Array.isArray(value) ? value : `${value}`.split(separator); + + for (const sourceValue of sourceValues) { + const trimmedString = `${sourceValue}`.trim(); + + if (trimmedString) { + result.push(trimmedString); + } + } + } + + return result; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + + +/***/ }), + +/***/ 1755: +/*!************************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/collections.mjs ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ArrayDataSource": () => (/* binding */ ArrayDataSource), +/* harmony export */ "DataSource": () => (/* binding */ DataSource), +/* harmony export */ "SelectionModel": () => (/* binding */ SelectionModel), +/* harmony export */ "UniqueSelectionDispatcher": () => (/* binding */ UniqueSelectionDispatcher), +/* harmony export */ "_DisposeViewRepeaterStrategy": () => (/* binding */ _DisposeViewRepeaterStrategy), +/* harmony export */ "_RecycleViewRepeaterStrategy": () => (/* binding */ _RecycleViewRepeaterStrategy), +/* harmony export */ "_VIEW_REPEATER_STRATEGY": () => (/* binding */ _VIEW_REPEATER_STRATEGY), +/* harmony export */ "getMultipleValuesInSingleSelectionError": () => (/* binding */ getMultipleValuesInSingleSelectionError), +/* harmony export */ "isDataSource": () => (/* binding */ isDataSource) +/* harmony export */ }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ 4437); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 745); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 2560); + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +class DataSource {} +/** Checks whether an object is a data source. */ + + +function isDataSource(value) { + // Check if the value is a DataSource by observing if it has a connect function. Cannot + // be checked as an `instanceof DataSource` since people could create their own sources + // that match the interface, but don't extend DataSource. + return value && typeof value.connect === 'function'; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** DataSource wrapper for a native array. */ + + +class ArrayDataSource extends DataSource { + constructor(_data) { + super(); + this._data = _data; + } + + connect() { + return (0,rxjs__WEBPACK_IMPORTED_MODULE_0__.isObservable)(this._data) ? this._data : (0,rxjs__WEBPACK_IMPORTED_MODULE_1__.of)(this._data); + } + + disconnect() {} + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A repeater that destroys views when they are removed from a + * {@link ViewContainerRef}. When new items are inserted into the container, + * the repeater will always construct a new embedded view for each item. + * + * @template T The type for the embedded view's $implicit property. + * @template R The type for the item in each IterableDiffer change record. + * @template C The type for the context passed to each embedded view. + */ + + +class _DisposeViewRepeaterStrategy { + applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) { + changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => { + let view; + let operation; + + if (record.previousIndex == null) { + const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex); + view = viewContainerRef.createEmbeddedView(insertContext.templateRef, insertContext.context, insertContext.index); + operation = 1 + /* INSERTED */ + ; + } else if (currentIndex == null) { + viewContainerRef.remove(adjustedPreviousIndex); + operation = 3 + /* REMOVED */ + ; + } else { + view = viewContainerRef.get(adjustedPreviousIndex); + viewContainerRef.move(view, currentIndex); + operation = 2 + /* MOVED */ + ; + } + + if (itemViewChanged) { + itemViewChanged({ + context: view?.context, + operation, + record + }); + } + }); + } + + detach() {} + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A repeater that caches views when they are removed from a + * {@link ViewContainerRef}. When new items are inserted into the container, + * the repeater will reuse one of the cached views instead of creating a new + * embedded view. Recycling cached views reduces the quantity of expensive DOM + * inserts. + * + * @template T The type for the embedded view's $implicit property. + * @template R The type for the item in each IterableDiffer change record. + * @template C The type for the context passed to each embedded view. + */ + + +class _RecycleViewRepeaterStrategy { + constructor() { + /** + * The size of the cache used to store unused views. + * Setting the cache size to `0` will disable caching. Defaults to 20 views. + */ + this.viewCacheSize = 20; + /** + * View cache that stores embedded view instances that have been previously stamped out, + * but don't are not currently rendered. The view repeater will reuse these views rather than + * creating brand new ones. + * + * TODO(michaeljamesparsons) Investigate whether using a linked list would improve performance. + */ + + this._viewCache = []; + } + /** Apply changes to the DOM. */ + + + applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) { + // Rearrange the views to put them in the right location. + changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => { + let view; + let operation; + + if (record.previousIndex == null) { + // Item added. + const viewArgsFactory = () => itemContextFactory(record, adjustedPreviousIndex, currentIndex); + + view = this._insertView(viewArgsFactory, currentIndex, viewContainerRef, itemValueResolver(record)); + operation = view ? 1 + /* INSERTED */ + : 0 + /* REPLACED */ + ; + } else if (currentIndex == null) { + // Item removed. + this._detachAndCacheView(adjustedPreviousIndex, viewContainerRef); + + operation = 3 + /* REMOVED */ + ; + } else { + // Item moved. + view = this._moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, itemValueResolver(record)); + operation = 2 + /* MOVED */ + ; + } + + if (itemViewChanged) { + itemViewChanged({ + context: view?.context, + operation, + record + }); + } + }); + } + + detach() { + for (const view of this._viewCache) { + view.destroy(); + } + + this._viewCache = []; + } + /** + * Inserts a view for a new item, either from the cache or by creating a new + * one. Returns `undefined` if the item was inserted into a cached view. + */ + + + _insertView(viewArgsFactory, currentIndex, viewContainerRef, value) { + const cachedView = this._insertViewFromCache(currentIndex, viewContainerRef); + + if (cachedView) { + cachedView.context.$implicit = value; + return undefined; + } + + const viewArgs = viewArgsFactory(); + return viewContainerRef.createEmbeddedView(viewArgs.templateRef, viewArgs.context, viewArgs.index); + } + /** Detaches the view at the given index and inserts into the view cache. */ + + + _detachAndCacheView(index, viewContainerRef) { + const detachedView = viewContainerRef.detach(index); + + this._maybeCacheView(detachedView, viewContainerRef); + } + /** Moves view at the previous index to the current index. */ + + + _moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, value) { + const view = viewContainerRef.get(adjustedPreviousIndex); + viewContainerRef.move(view, currentIndex); + view.context.$implicit = value; + return view; + } + /** + * Cache the given detached view. If the cache is full, the view will be + * destroyed. + */ + + + _maybeCacheView(view, viewContainerRef) { + if (this._viewCache.length < this.viewCacheSize) { + this._viewCache.push(view); + } else { + const index = viewContainerRef.indexOf(view); // The host component could remove views from the container outside of + // the view repeater. It's unlikely this will occur, but just in case, + // destroy the view on its own, otherwise destroy it through the + // container to ensure that all the references are removed. + + if (index === -1) { + view.destroy(); + } else { + viewContainerRef.remove(index); + } + } + } + /** Inserts a recycled view from the cache at the given index. */ + + + _insertViewFromCache(index, viewContainerRef) { + const cachedView = this._viewCache.pop(); + + if (cachedView) { + viewContainerRef.insert(cachedView, index); + } + + return cachedView || null; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Class to be used to power selecting one or more options from a list. + */ + + +class SelectionModel { + constructor(_multiple = false, initiallySelectedValues, _emitChanges = true) { + this._multiple = _multiple; + this._emitChanges = _emitChanges; + /** Currently-selected values. */ + + this._selection = new Set(); + /** Keeps track of the deselected options that haven't been emitted by the change event. */ + + this._deselectedToEmit = []; + /** Keeps track of the selected options that haven't been emitted by the change event. */ + + this._selectedToEmit = []; + /** Event emitted when the value has changed. */ + + this.changed = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); + + if (initiallySelectedValues && initiallySelectedValues.length) { + if (_multiple) { + initiallySelectedValues.forEach(value => this._markSelected(value)); + } else { + this._markSelected(initiallySelectedValues[0]); + } // Clear the array in order to avoid firing the change event for preselected values. + + + this._selectedToEmit.length = 0; + } + } + /** Selected values. */ + + + get selected() { + if (!this._selected) { + this._selected = Array.from(this._selection.values()); + } + + return this._selected; + } + /** + * Selects a value or an array of values. + */ + + + select(...values) { + this._verifyValueAssignment(values); + + values.forEach(value => this._markSelected(value)); + + this._emitChangeEvent(); + } + /** + * Deselects a value or an array of values. + */ + + + deselect(...values) { + this._verifyValueAssignment(values); + + values.forEach(value => this._unmarkSelected(value)); + + this._emitChangeEvent(); + } + /** + * Toggles a value between selected and deselected. + */ + + + toggle(value) { + this.isSelected(value) ? this.deselect(value) : this.select(value); + } + /** + * Clears all of the selected values. + */ + + + clear() { + this._unmarkAll(); + + this._emitChangeEvent(); + } + /** + * Determines whether a value is selected. + */ + + + isSelected(value) { + return this._selection.has(value); + } + /** + * Determines whether the model does not have a value. + */ + + + isEmpty() { + return this._selection.size === 0; + } + /** + * Determines whether the model has a value. + */ + + + hasValue() { + return !this.isEmpty(); + } + /** + * Sorts the selected values based on a predicate function. + */ + + + sort(predicate) { + if (this._multiple && this.selected) { + this._selected.sort(predicate); + } + } + /** + * Gets whether multiple values can be selected. + */ + + + isMultipleSelection() { + return this._multiple; + } + /** Emits a change event and clears the records of selected and deselected values. */ + + + _emitChangeEvent() { + // Clear the selected values so they can be re-cached. + this._selected = null; + + if (this._selectedToEmit.length || this._deselectedToEmit.length) { + this.changed.next({ + source: this, + added: this._selectedToEmit, + removed: this._deselectedToEmit + }); + this._deselectedToEmit = []; + this._selectedToEmit = []; + } + } + /** Selects a value. */ + + + _markSelected(value) { + if (!this.isSelected(value)) { + if (!this._multiple) { + this._unmarkAll(); + } + + this._selection.add(value); + + if (this._emitChanges) { + this._selectedToEmit.push(value); + } + } + } + /** Deselects a value. */ + + + _unmarkSelected(value) { + if (this.isSelected(value)) { + this._selection.delete(value); + + if (this._emitChanges) { + this._deselectedToEmit.push(value); + } + } + } + /** Clears out the selected values. */ + + + _unmarkAll() { + if (!this.isEmpty()) { + this._selection.forEach(value => this._unmarkSelected(value)); + } + } + /** + * Verifies the value assignment and throws an error if the specified value array is + * including multiple values while the selection model is not supporting multiple values. + */ + + + _verifyValueAssignment(values) { + if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getMultipleValuesInSingleSelectionError(); + } + } + +} +/** + * Returns an error that reports that multiple values are passed into a selection model + * with a single value. + * @docs-private + */ + + +function getMultipleValuesInSingleSelectionError() { + return Error('Cannot pass multiple values into SelectionModel with single-value mode.'); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Class to coordinate unique selection based on name. + * Intended to be consumed as an Angular service. + * This service is needed because native radio change events are only fired on the item currently + * being selected, and we still need to uncheck the previous selection. + * + * This service does not *store* any IDs and names because they may change at any time, so it is + * less error-prone if they are simply passed through when the events occur. + */ + + +class UniqueSelectionDispatcher { + constructor() { + this._listeners = []; + } + /** + * Notify other items that selection for the given name has been set. + * @param id ID of the item. + * @param name Name of the item. + */ + + + notify(id, name) { + for (let listener of this._listeners) { + listener(id, name); + } + } + /** + * Listen for future changes to item selection. + * @return Function used to deregister listener + */ + + + listen(listener) { + this._listeners.push(listener); + + return () => { + this._listeners = this._listeners.filter(registered => { + return listener !== registered; + }); + }; + } + + ngOnDestroy() { + this._listeners = []; + } + +} + +UniqueSelectionDispatcher.ɵfac = function UniqueSelectionDispatcher_Factory(t) { + return new (t || UniqueSelectionDispatcher)(); +}; + +UniqueSelectionDispatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: UniqueSelectionDispatcher, + factory: UniqueSelectionDispatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](UniqueSelectionDispatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Injection token for {@link _ViewRepeater}. This token is for use by Angular Material only. + * @docs-private + */ + + +const _VIEW_REPEATER_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.InjectionToken('_ViewRepeater'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 8456: +/*!*********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/keycodes.mjs ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "A": () => (/* binding */ A), +/* harmony export */ "ALT": () => (/* binding */ ALT), +/* harmony export */ "APOSTROPHE": () => (/* binding */ APOSTROPHE), +/* harmony export */ "AT_SIGN": () => (/* binding */ AT_SIGN), +/* harmony export */ "B": () => (/* binding */ B), +/* harmony export */ "BACKSLASH": () => (/* binding */ BACKSLASH), +/* harmony export */ "BACKSPACE": () => (/* binding */ BACKSPACE), +/* harmony export */ "C": () => (/* binding */ C), +/* harmony export */ "CAPS_LOCK": () => (/* binding */ CAPS_LOCK), +/* harmony export */ "CLOSE_SQUARE_BRACKET": () => (/* binding */ CLOSE_SQUARE_BRACKET), +/* harmony export */ "COMMA": () => (/* binding */ COMMA), +/* harmony export */ "CONTEXT_MENU": () => (/* binding */ CONTEXT_MENU), +/* harmony export */ "CONTROL": () => (/* binding */ CONTROL), +/* harmony export */ "D": () => (/* binding */ D), +/* harmony export */ "DASH": () => (/* binding */ DASH), +/* harmony export */ "DELETE": () => (/* binding */ DELETE), +/* harmony export */ "DOWN_ARROW": () => (/* binding */ DOWN_ARROW), +/* harmony export */ "E": () => (/* binding */ E), +/* harmony export */ "EIGHT": () => (/* binding */ EIGHT), +/* harmony export */ "END": () => (/* binding */ END), +/* harmony export */ "ENTER": () => (/* binding */ ENTER), +/* harmony export */ "EQUALS": () => (/* binding */ EQUALS), +/* harmony export */ "ESCAPE": () => (/* binding */ ESCAPE), +/* harmony export */ "F": () => (/* binding */ F), +/* harmony export */ "F1": () => (/* binding */ F1), +/* harmony export */ "F10": () => (/* binding */ F10), +/* harmony export */ "F11": () => (/* binding */ F11), +/* harmony export */ "F12": () => (/* binding */ F12), +/* harmony export */ "F2": () => (/* binding */ F2), +/* harmony export */ "F3": () => (/* binding */ F3), +/* harmony export */ "F4": () => (/* binding */ F4), +/* harmony export */ "F5": () => (/* binding */ F5), +/* harmony export */ "F6": () => (/* binding */ F6), +/* harmony export */ "F7": () => (/* binding */ F7), +/* harmony export */ "F8": () => (/* binding */ F8), +/* harmony export */ "F9": () => (/* binding */ F9), +/* harmony export */ "FF_EQUALS": () => (/* binding */ FF_EQUALS), +/* harmony export */ "FF_MINUS": () => (/* binding */ FF_MINUS), +/* harmony export */ "FF_MUTE": () => (/* binding */ FF_MUTE), +/* harmony export */ "FF_SEMICOLON": () => (/* binding */ FF_SEMICOLON), +/* harmony export */ "FF_VOLUME_DOWN": () => (/* binding */ FF_VOLUME_DOWN), +/* harmony export */ "FF_VOLUME_UP": () => (/* binding */ FF_VOLUME_UP), +/* harmony export */ "FIRST_MEDIA": () => (/* binding */ FIRST_MEDIA), +/* harmony export */ "FIVE": () => (/* binding */ FIVE), +/* harmony export */ "FOUR": () => (/* binding */ FOUR), +/* harmony export */ "G": () => (/* binding */ G), +/* harmony export */ "H": () => (/* binding */ H), +/* harmony export */ "HOME": () => (/* binding */ HOME), +/* harmony export */ "I": () => (/* binding */ I), +/* harmony export */ "INSERT": () => (/* binding */ INSERT), +/* harmony export */ "J": () => (/* binding */ J), +/* harmony export */ "K": () => (/* binding */ K), +/* harmony export */ "L": () => (/* binding */ L), +/* harmony export */ "LAST_MEDIA": () => (/* binding */ LAST_MEDIA), +/* harmony export */ "LEFT_ARROW": () => (/* binding */ LEFT_ARROW), +/* harmony export */ "M": () => (/* binding */ M), +/* harmony export */ "MAC_ENTER": () => (/* binding */ MAC_ENTER), +/* harmony export */ "MAC_META": () => (/* binding */ MAC_META), +/* harmony export */ "MAC_WK_CMD_LEFT": () => (/* binding */ MAC_WK_CMD_LEFT), +/* harmony export */ "MAC_WK_CMD_RIGHT": () => (/* binding */ MAC_WK_CMD_RIGHT), +/* harmony export */ "META": () => (/* binding */ META), +/* harmony export */ "MUTE": () => (/* binding */ MUTE), +/* harmony export */ "N": () => (/* binding */ N), +/* harmony export */ "NINE": () => (/* binding */ NINE), +/* harmony export */ "NUMPAD_DIVIDE": () => (/* binding */ NUMPAD_DIVIDE), +/* harmony export */ "NUMPAD_EIGHT": () => (/* binding */ NUMPAD_EIGHT), +/* harmony export */ "NUMPAD_FIVE": () => (/* binding */ NUMPAD_FIVE), +/* harmony export */ "NUMPAD_FOUR": () => (/* binding */ NUMPAD_FOUR), +/* harmony export */ "NUMPAD_MINUS": () => (/* binding */ NUMPAD_MINUS), +/* harmony export */ "NUMPAD_MULTIPLY": () => (/* binding */ NUMPAD_MULTIPLY), +/* harmony export */ "NUMPAD_NINE": () => (/* binding */ NUMPAD_NINE), +/* harmony export */ "NUMPAD_ONE": () => (/* binding */ NUMPAD_ONE), +/* harmony export */ "NUMPAD_PERIOD": () => (/* binding */ NUMPAD_PERIOD), +/* harmony export */ "NUMPAD_PLUS": () => (/* binding */ NUMPAD_PLUS), +/* harmony export */ "NUMPAD_SEVEN": () => (/* binding */ NUMPAD_SEVEN), +/* harmony export */ "NUMPAD_SIX": () => (/* binding */ NUMPAD_SIX), +/* harmony export */ "NUMPAD_THREE": () => (/* binding */ NUMPAD_THREE), +/* harmony export */ "NUMPAD_TWO": () => (/* binding */ NUMPAD_TWO), +/* harmony export */ "NUMPAD_ZERO": () => (/* binding */ NUMPAD_ZERO), +/* harmony export */ "NUM_CENTER": () => (/* binding */ NUM_CENTER), +/* harmony export */ "NUM_LOCK": () => (/* binding */ NUM_LOCK), +/* harmony export */ "O": () => (/* binding */ O), +/* harmony export */ "ONE": () => (/* binding */ ONE), +/* harmony export */ "OPEN_SQUARE_BRACKET": () => (/* binding */ OPEN_SQUARE_BRACKET), +/* harmony export */ "P": () => (/* binding */ P), +/* harmony export */ "PAGE_DOWN": () => (/* binding */ PAGE_DOWN), +/* harmony export */ "PAGE_UP": () => (/* binding */ PAGE_UP), +/* harmony export */ "PAUSE": () => (/* binding */ PAUSE), +/* harmony export */ "PERIOD": () => (/* binding */ PERIOD), +/* harmony export */ "PLUS_SIGN": () => (/* binding */ PLUS_SIGN), +/* harmony export */ "PRINT_SCREEN": () => (/* binding */ PRINT_SCREEN), +/* harmony export */ "Q": () => (/* binding */ Q), +/* harmony export */ "QUESTION_MARK": () => (/* binding */ QUESTION_MARK), +/* harmony export */ "R": () => (/* binding */ R), +/* harmony export */ "RIGHT_ARROW": () => (/* binding */ RIGHT_ARROW), +/* harmony export */ "S": () => (/* binding */ S), +/* harmony export */ "SCROLL_LOCK": () => (/* binding */ SCROLL_LOCK), +/* harmony export */ "SEMICOLON": () => (/* binding */ SEMICOLON), +/* harmony export */ "SEVEN": () => (/* binding */ SEVEN), +/* harmony export */ "SHIFT": () => (/* binding */ SHIFT), +/* harmony export */ "SINGLE_QUOTE": () => (/* binding */ SINGLE_QUOTE), +/* harmony export */ "SIX": () => (/* binding */ SIX), +/* harmony export */ "SLASH": () => (/* binding */ SLASH), +/* harmony export */ "SPACE": () => (/* binding */ SPACE), +/* harmony export */ "T": () => (/* binding */ T), +/* harmony export */ "TAB": () => (/* binding */ TAB), +/* harmony export */ "THREE": () => (/* binding */ THREE), +/* harmony export */ "TILDE": () => (/* binding */ TILDE), +/* harmony export */ "TWO": () => (/* binding */ TWO), +/* harmony export */ "U": () => (/* binding */ U), +/* harmony export */ "UP_ARROW": () => (/* binding */ UP_ARROW), +/* harmony export */ "V": () => (/* binding */ V), +/* harmony export */ "VOLUME_DOWN": () => (/* binding */ VOLUME_DOWN), +/* harmony export */ "VOLUME_UP": () => (/* binding */ VOLUME_UP), +/* harmony export */ "W": () => (/* binding */ W), +/* harmony export */ "X": () => (/* binding */ X), +/* harmony export */ "Y": () => (/* binding */ Y), +/* harmony export */ "Z": () => (/* binding */ Z), +/* harmony export */ "ZERO": () => (/* binding */ ZERO), +/* harmony export */ "hasModifierKey": () => (/* binding */ hasModifierKey) +/* harmony export */ }); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const MAC_ENTER = 3; +const BACKSPACE = 8; +const TAB = 9; +const NUM_CENTER = 12; +const ENTER = 13; +const SHIFT = 16; +const CONTROL = 17; +const ALT = 18; +const PAUSE = 19; +const CAPS_LOCK = 20; +const ESCAPE = 27; +const SPACE = 32; +const PAGE_UP = 33; +const PAGE_DOWN = 34; +const END = 35; +const HOME = 36; +const LEFT_ARROW = 37; +const UP_ARROW = 38; +const RIGHT_ARROW = 39; +const DOWN_ARROW = 40; +const PLUS_SIGN = 43; +const PRINT_SCREEN = 44; +const INSERT = 45; +const DELETE = 46; +const ZERO = 48; +const ONE = 49; +const TWO = 50; +const THREE = 51; +const FOUR = 52; +const FIVE = 53; +const SIX = 54; +const SEVEN = 55; +const EIGHT = 56; +const NINE = 57; +const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186 + +const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187 + +const QUESTION_MARK = 63; +const AT_SIGN = 64; +const A = 65; +const B = 66; +const C = 67; +const D = 68; +const E = 69; +const F = 70; +const G = 71; +const H = 72; +const I = 73; +const J = 74; +const K = 75; +const L = 76; +const M = 77; +const N = 78; +const O = 79; +const P = 80; +const Q = 81; +const R = 82; +const S = 83; +const T = 84; +const U = 85; +const V = 86; +const W = 87; +const X = 88; +const Y = 89; +const Z = 90; +const META = 91; // WIN_KEY_LEFT + +const MAC_WK_CMD_LEFT = 91; +const MAC_WK_CMD_RIGHT = 93; +const CONTEXT_MENU = 93; +const NUMPAD_ZERO = 96; +const NUMPAD_ONE = 97; +const NUMPAD_TWO = 98; +const NUMPAD_THREE = 99; +const NUMPAD_FOUR = 100; +const NUMPAD_FIVE = 101; +const NUMPAD_SIX = 102; +const NUMPAD_SEVEN = 103; +const NUMPAD_EIGHT = 104; +const NUMPAD_NINE = 105; +const NUMPAD_MULTIPLY = 106; +const NUMPAD_PLUS = 107; +const NUMPAD_MINUS = 109; +const NUMPAD_PERIOD = 110; +const NUMPAD_DIVIDE = 111; +const F1 = 112; +const F2 = 113; +const F3 = 114; +const F4 = 115; +const F5 = 116; +const F6 = 117; +const F7 = 118; +const F8 = 119; +const F9 = 120; +const F10 = 121; +const F11 = 122; +const F12 = 123; +const NUM_LOCK = 144; +const SCROLL_LOCK = 145; +const FIRST_MEDIA = 166; +const FF_MINUS = 173; +const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE + +const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN + +const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP + +const FF_MUTE = 181; +const FF_VOLUME_DOWN = 182; +const LAST_MEDIA = 183; +const FF_VOLUME_UP = 183; +const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON + +const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS + +const COMMA = 188; +const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS + +const PERIOD = 190; +const SLASH = 191; +const APOSTROPHE = 192; +const TILDE = 192; +const OPEN_SQUARE_BRACKET = 219; +const BACKSLASH = 220; +const CLOSE_SQUARE_BRACKET = 221; +const SINGLE_QUOTE = 222; +const MAC_META = 224; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Checks whether a modifier key is pressed. + * @param event Event to be checked. + */ + +function hasModifierKey(event, ...modifiers) { + if (modifiers.length) { + return modifiers.some(modifier => event[modifier]); + } + + return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 3278: +/*!*******************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/layout.mjs ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BreakpointObserver": () => (/* binding */ BreakpointObserver), +/* harmony export */ "Breakpoints": () => (/* binding */ Breakpoints), +/* harmony export */ "LayoutModule": () => (/* binding */ LayoutModule), +/* harmony export */ "MediaMatcher": () => (/* binding */ MediaMatcher) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ 6562); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 4240); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rxjs */ 833); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ 9295); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs/operators */ 7260); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs/operators */ 1989); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs/operators */ 635); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rxjs/operators */ 4874); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +class LayoutModule {} + +LayoutModule.ɵfac = function LayoutModule_Factory(t) { + return new (t || LayoutModule)(); +}; + +LayoutModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: LayoutModule +}); +LayoutModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LayoutModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{}] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Global registry for all dynamically-created, injected media queries. */ + + +const mediaQueriesForWebkitCompatibility = new Set(); +/** Style tag that holds all of the dynamically-created media queries. */ + +let mediaQueryStyleNode; +/** A utility for calling matchMedia queries. */ + +class MediaMatcher { + constructor(_platform) { + this._platform = _platform; + this._matchMedia = this._platform.isBrowser && window.matchMedia ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to + // call it from a different scope. + window.matchMedia.bind(window) : noopMatchMedia; + } + /** + * Evaluates the given media query and returns the native MediaQueryList from which results + * can be retrieved. + * Confirms the layout engine will trigger for the selector query provided and returns the + * MediaQueryList for the query provided. + */ + + + matchMedia(query) { + if (this._platform.WEBKIT || this._platform.BLINK) { + createEmptyStyleRule(query); + } + + return this._matchMedia(query); + } + +} + +MediaMatcher.ɵfac = function MediaMatcher_Factory(t) { + return new (t || MediaMatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform)); +}; + +MediaMatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: MediaMatcher, + factory: MediaMatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MediaMatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform + }]; + }, null); +})(); +/** + * Creates an empty stylesheet that is used to work around browser inconsistencies related to + * `matchMedia`. At the time of writing, it handles the following cases: + * 1. On WebKit browsers, a media query has to have at least one rule in order for `matchMedia` + * to fire. We work around it by declaring a dummy stylesheet with a `@media` declaration. + * 2. In some cases Blink browsers will stop firing the `matchMedia` listener if none of the rules + * inside the `@media` match existing elements on the page. We work around it by having one rule + * targeting the `body`. See https://github.com/angular/components/issues/23546. + */ + + +function createEmptyStyleRule(query) { + if (mediaQueriesForWebkitCompatibility.has(query)) { + return; + } + + try { + if (!mediaQueryStyleNode) { + mediaQueryStyleNode = document.createElement('style'); + mediaQueryStyleNode.setAttribute('type', 'text/css'); + document.head.appendChild(mediaQueryStyleNode); + } + + if (mediaQueryStyleNode.sheet) { + mediaQueryStyleNode.sheet.insertRule(`@media ${query} {body{ }}`, 0); + mediaQueriesForWebkitCompatibility.add(query); + } + } catch (e) { + console.error(e); + } +} +/** No-op matchMedia replacement for non-browser platforms. */ + + +function noopMatchMedia(query) { + // Use `as any` here to avoid adding additional necessary properties for + // the noop matcher. + return { + matches: query === 'all' || query === '', + media: query, + addListener: () => {}, + removeListener: () => {} + }; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Utility for checking the matching state of @media queries. */ + + +class BreakpointObserver { + constructor(_mediaMatcher, _zone) { + this._mediaMatcher = _mediaMatcher; + this._zone = _zone; + /** A map of all media queries currently being listened for. */ + + this._queries = new Map(); + /** A subject for all other observables to takeUntil based on. */ + + this._destroySubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__.Subject(); + } + /** Completes the active subject, signalling to all other observables to complete. */ + + + ngOnDestroy() { + this._destroySubject.next(); + + this._destroySubject.complete(); + } + /** + * Whether one or more media queries match the current viewport size. + * @param value One or more media queries to check. + * @returns Whether any of the media queries match. + */ + + + isMatched(value) { + const queries = splitQueries((0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceArray)(value)); + return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches); + } + /** + * Gets an observable of results for the given queries that will emit new results for any changes + * in matching of the given queries. + * @param value One or more media queries to check. + * @returns A stream of matches for the given queries. + */ + + + observe(value) { + const queries = splitQueries((0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceArray)(value)); + const observables = queries.map(query => this._registerQuery(query).observable); + let stateObservable = (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.combineLatest)(observables); // Emit the first state immediately, and then debounce the subsequent emissions. + + stateObservable = (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.concat)(stateObservable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.take)(1)), stateObservable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__.skip)(1), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__.debounceTime)(0))); + return stateObservable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_9__.map)(breakpointStates => { + const response = { + matches: false, + breakpoints: {} + }; + breakpointStates.forEach(({ + matches, + query + }) => { + response.matches = response.matches || matches; + response.breakpoints[query] = matches; + }); + return response; + })); + } + /** Registers a specific query to be listened for. */ + + + _registerQuery(query) { + // Only set up a new MediaQueryList if it is not already being listened for. + if (this._queries.has(query)) { + return this._queries.get(query); + } + + const mql = this._mediaMatcher.matchMedia(query); // Create callback for match changes and add it is as a listener. + + + const queryObservable = new rxjs__WEBPACK_IMPORTED_MODULE_10__.Observable(observer => { + // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed + // back into the zone because matchMedia is only included in Zone.js by loading the + // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not + // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js + // patches it. + const handler = e => this._zone.run(() => observer.next(e)); + + mql.addListener(handler); + return () => { + mql.removeListener(handler); + }; + }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_11__.startWith)(mql), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_9__.map)(({ + matches + }) => ({ + query, + matches + })), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_12__.takeUntil)(this._destroySubject)); // Add the MediaQueryList to the set of queries. + + const output = { + observable: queryObservable, + mql + }; + + this._queries.set(query, output); + + return output; + } + +} + +BreakpointObserver.ɵfac = function BreakpointObserver_Factory(t) { + return new (t || BreakpointObserver)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MediaMatcher), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone)); +}; + +BreakpointObserver.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: BreakpointObserver, + factory: BreakpointObserver.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BreakpointObserver, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: MediaMatcher + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }]; + }, null); +})(); +/** + * Split each query string into separate query strings if two queries are provided as comma + * separated. + */ + + +function splitQueries(queries) { + return queries.map(query => query.split(',')).reduce((a1, a2) => a1.concat(a2)).map(query => query.trim()); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// PascalCase is being used as Breakpoints is used like an enum. +// tslint:disable-next-line:variable-name + + +const Breakpoints = { + XSmall: '(max-width: 599.98px)', + Small: '(min-width: 600px) and (max-width: 959.98px)', + Medium: '(min-width: 960px) and (max-width: 1279.98px)', + Large: '(min-width: 1280px) and (max-width: 1919.98px)', + XLarge: '(min-width: 1920px)', + Handset: '(max-width: 599.98px) and (orientation: portrait), ' + '(max-width: 959.98px) and (orientation: landscape)', + Tablet: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), ' + '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)', + Web: '(min-width: 840px) and (orientation: portrait), ' + '(min-width: 1280px) and (orientation: landscape)', + HandsetPortrait: '(max-width: 599.98px) and (orientation: portrait)', + TabletPortrait: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)', + WebPortrait: '(min-width: 840px) and (orientation: portrait)', + HandsetLandscape: '(max-width: 959.98px) and (orientation: landscape)', + TabletLandscape: '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)', + WebLandscape: '(min-width: 1280px) and (orientation: landscape)' +}; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + +/***/ }), + +/***/ 3773: +/*!**********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/observers.mjs ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CdkObserveContent": () => (/* binding */ CdkObserveContent), +/* harmony export */ "ContentObserver": () => (/* binding */ ContentObserver), +/* harmony export */ "MutationObserverFactory": () => (/* binding */ MutationObserverFactory), +/* harmony export */ "ObserversModule": () => (/* binding */ ObserversModule) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ 833); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs/operators */ 1989); + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Factory that creates a new MutationObserver and allows us to stub it out in unit tests. + * @docs-private + */ + +class MutationObserverFactory { + create(callback) { + return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback); + } + +} + +MutationObserverFactory.ɵfac = function MutationObserverFactory_Factory(t) { + return new (t || MutationObserverFactory)(); +}; + +MutationObserverFactory.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: MutationObserverFactory, + factory: MutationObserverFactory.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MutationObserverFactory, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); +})(); +/** An injectable service that allows watching elements for changes to their content. */ + + +class ContentObserver { + constructor(_mutationObserverFactory) { + this._mutationObserverFactory = _mutationObserverFactory; + /** Keeps track of the existing MutationObservers so they can be reused. */ + + this._observedElements = new Map(); + } + + ngOnDestroy() { + this._observedElements.forEach((_, element) => this._cleanupObserver(element)); + } + + observe(elementOrRef) { + const element = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__.coerceElement)(elementOrRef); + return new rxjs__WEBPACK_IMPORTED_MODULE_2__.Observable(observer => { + const stream = this._observeElement(element); + + const subscription = stream.subscribe(observer); + return () => { + subscription.unsubscribe(); + + this._unobserveElement(element); + }; + }); + } + /** + * Observes the given element by using the existing MutationObserver if available, or creating a + * new one if not. + */ + + + _observeElement(element) { + if (!this._observedElements.has(element)) { + const stream = new rxjs__WEBPACK_IMPORTED_MODULE_3__.Subject(); + + const observer = this._mutationObserverFactory.create(mutations => stream.next(mutations)); + + if (observer) { + observer.observe(element, { + characterData: true, + childList: true, + subtree: true + }); + } + + this._observedElements.set(element, { + observer, + stream, + count: 1 + }); + } else { + this._observedElements.get(element).count++; + } + + return this._observedElements.get(element).stream; + } + /** + * Un-observes the given element and cleans up the underlying MutationObserver if nobody else is + * observing this element. + */ + + + _unobserveElement(element) { + if (this._observedElements.has(element)) { + this._observedElements.get(element).count--; + + if (!this._observedElements.get(element).count) { + this._cleanupObserver(element); + } + } + } + /** Clean up the underlying MutationObserver for the specified element. */ + + + _cleanupObserver(element) { + if (this._observedElements.has(element)) { + const { + observer, + stream + } = this._observedElements.get(element); + + if (observer) { + observer.disconnect(); + } + + stream.complete(); + + this._observedElements.delete(element); + } + } + +} + +ContentObserver.ɵfac = function ContentObserver_Factory(t) { + return new (t || ContentObserver)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MutationObserverFactory)); +}; + +ContentObserver.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: ContentObserver, + factory: ContentObserver.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ContentObserver, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: MutationObserverFactory + }]; + }, null); +})(); +/** + * Directive that triggers a callback whenever the content of + * its associated element has changed. + */ + + +class CdkObserveContent { + constructor(_contentObserver, _elementRef, _ngZone) { + this._contentObserver = _contentObserver; + this._elementRef = _elementRef; + this._ngZone = _ngZone; + /** Event emitted for each change in the element's content. */ + + this.event = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + this._disabled = false; + this._currentSubscription = null; + } + /** + * Whether observing content is disabled. This option can be used + * to disconnect the underlying MutationObserver until it is needed. + */ + + + get disabled() { + return this._disabled; + } + + set disabled(value) { + this._disabled = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__.coerceBooleanProperty)(value); + this._disabled ? this._unsubscribe() : this._subscribe(); + } + /** Debounce interval for emitting the changes. */ + + + get debounce() { + return this._debounce; + } + + set debounce(value) { + this._debounce = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__.coerceNumberProperty)(value); + + this._subscribe(); + } + + ngAfterContentInit() { + if (!this._currentSubscription && !this.disabled) { + this._subscribe(); + } + } + + ngOnDestroy() { + this._unsubscribe(); + } + + _subscribe() { + this._unsubscribe(); + + const stream = this._contentObserver.observe(this._elementRef); // TODO(mmalerba): We shouldn't be emitting on this @Output() outside the zone. + // Consider brining it back inside the zone next time we're making breaking changes. + // Bringing it back inside can cause things like infinite change detection loops and changed + // after checked errors if people's code isn't handling it properly. + + + this._ngZone.runOutsideAngular(() => { + this._currentSubscription = (this.debounce ? stream.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.debounceTime)(this.debounce)) : stream).subscribe(this.event); + }); + } + + _unsubscribe() { + this._currentSubscription?.unsubscribe(); + } + +} + +CdkObserveContent.ɵfac = function CdkObserveContent_Factory(t) { + return new (t || CdkObserveContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ContentObserver), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone)); +}; + +CdkObserveContent.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkObserveContent, + selectors: [["", "cdkObserveContent", ""]], + inputs: { + disabled: ["cdkObserveContentDisabled", "disabled"], + debounce: "debounce" + }, + outputs: { + event: "cdkObserveContent" + }, + exportAs: ["cdkObserveContent"] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkObserveContent, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkObserveContent]', + exportAs: 'cdkObserveContent' + }] + }], function () { + return [{ + type: ContentObserver + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }]; + }, { + event: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Output, + args: ['cdkObserveContent'] + }], + disabled: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['cdkObserveContentDisabled'] + }], + debounce: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); + +class ObserversModule {} + +ObserversModule.ɵfac = function ObserversModule_Factory(t) { + return new (t || ObserversModule)(); +}; + +ObserversModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: ObserversModule +}); +ObserversModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ + providers: [MutationObserverFactory] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ObserversModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + exports: [CdkObserveContent], + declarations: [CdkObserveContent], + providers: [MutationObserverFactory] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 5895: +/*!********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/overlay.mjs ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BlockScrollStrategy": () => (/* binding */ BlockScrollStrategy), +/* harmony export */ "CdkConnectedOverlay": () => (/* binding */ CdkConnectedOverlay), +/* harmony export */ "CdkOverlayOrigin": () => (/* binding */ CdkOverlayOrigin), +/* harmony export */ "CdkScrollable": () => (/* reexport safe */ _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.CdkScrollable), +/* harmony export */ "CloseScrollStrategy": () => (/* binding */ CloseScrollStrategy), +/* harmony export */ "ConnectedOverlayPositionChange": () => (/* binding */ ConnectedOverlayPositionChange), +/* harmony export */ "ConnectionPositionPair": () => (/* binding */ ConnectionPositionPair), +/* harmony export */ "FlexibleConnectedPositionStrategy": () => (/* binding */ FlexibleConnectedPositionStrategy), +/* harmony export */ "FullscreenOverlayContainer": () => (/* binding */ FullscreenOverlayContainer), +/* harmony export */ "GlobalPositionStrategy": () => (/* binding */ GlobalPositionStrategy), +/* harmony export */ "NoopScrollStrategy": () => (/* binding */ NoopScrollStrategy), +/* harmony export */ "Overlay": () => (/* binding */ Overlay), +/* harmony export */ "OverlayConfig": () => (/* binding */ OverlayConfig), +/* harmony export */ "OverlayContainer": () => (/* binding */ OverlayContainer), +/* harmony export */ "OverlayKeyboardDispatcher": () => (/* binding */ OverlayKeyboardDispatcher), +/* harmony export */ "OverlayModule": () => (/* binding */ OverlayModule), +/* harmony export */ "OverlayOutsideClickDispatcher": () => (/* binding */ OverlayOutsideClickDispatcher), +/* harmony export */ "OverlayPositionBuilder": () => (/* binding */ OverlayPositionBuilder), +/* harmony export */ "OverlayRef": () => (/* binding */ OverlayRef), +/* harmony export */ "RepositionScrollStrategy": () => (/* binding */ RepositionScrollStrategy), +/* harmony export */ "ScrollDispatcher": () => (/* reexport safe */ _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollDispatcher), +/* harmony export */ "ScrollStrategyOptions": () => (/* binding */ ScrollStrategyOptions), +/* harmony export */ "ScrollingVisibility": () => (/* binding */ ScrollingVisibility), +/* harmony export */ "ViewportRuler": () => (/* reexport safe */ _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ViewportRuler), +/* harmony export */ "validateHorizontalPosition": () => (/* binding */ validateHorizontalPosition), +/* harmony export */ "validateVerticalPosition": () => (/* binding */ validateVerticalPosition) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/scrolling */ 6328); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tslib */ 2321); +/* harmony import */ var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/cdk/bidi */ 2867); +/* harmony import */ var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/cdk/portal */ 7520); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ 6078); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rxjs */ 6646); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs/operators */ 9295); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rxjs/operators */ 2566); +/* harmony import */ var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/cdk/keycodes */ 8456); + + + + + + + + + + + + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +const scrollBehaviorSupported = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.supportsScrollBehavior)(); +/** + * Strategy that will prevent the user from scrolling while the overlay is visible. + */ + +class BlockScrollStrategy { + constructor(_viewportRuler, document) { + this._viewportRuler = _viewportRuler; + this._previousHTMLStyles = { + top: '', + left: '' + }; + this._isEnabled = false; + this._document = document; + } + /** Attaches this scroll strategy to an overlay. */ + + + attach() {} + /** Blocks page-level scroll while the attached overlay is open. */ + + + enable() { + if (this._canBeEnabled()) { + const root = this._document.documentElement; + this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition(); // Cache the previous inline styles in case the user had set them. + + this._previousHTMLStyles.left = root.style.left || ''; + this._previousHTMLStyles.top = root.style.top || ''; // Note: we're using the `html` node, instead of the `body`, because the `body` may + // have the user agent margin, whereas the `html` is guaranteed not to have one. + + root.style.left = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(-this._previousScrollPosition.left); + root.style.top = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(-this._previousScrollPosition.top); + root.classList.add('cdk-global-scrollblock'); + this._isEnabled = true; + } + } + /** Unblocks page-level scroll while the attached overlay is open. */ + + + disable() { + if (this._isEnabled) { + const html = this._document.documentElement; + const body = this._document.body; + const htmlStyle = html.style; + const bodyStyle = body.style; + const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || ''; + const previousBodyScrollBehavior = bodyStyle.scrollBehavior || ''; + this._isEnabled = false; + htmlStyle.left = this._previousHTMLStyles.left; + htmlStyle.top = this._previousHTMLStyles.top; + html.classList.remove('cdk-global-scrollblock'); // Disable user-defined smooth scrolling temporarily while we restore the scroll position. + // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior + // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`, + // because it can throw off feature detections in `supportsScrollBehavior` which + // checks for `'scrollBehavior' in documentElement.style`. + + if (scrollBehaviorSupported) { + htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto'; + } + + window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top); + + if (scrollBehaviorSupported) { + htmlStyle.scrollBehavior = previousHtmlScrollBehavior; + bodyStyle.scrollBehavior = previousBodyScrollBehavior; + } + } + } + + _canBeEnabled() { + // Since the scroll strategies can't be singletons, we have to use a global CSS class + // (`cdk-global-scrollblock`) to make sure that we don't try to disable global + // scrolling multiple times. + const html = this._document.documentElement; + + if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) { + return false; + } + + const body = this._document.body; + + const viewport = this._viewportRuler.getViewportSize(); + + return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Returns an error to be thrown when attempting to attach an already-attached scroll strategy. + */ + + +function getMatScrollStrategyAlreadyAttachedError() { + return Error(`Scroll strategy has already been attached.`); +} +/** + * Strategy that will close the overlay as soon as the user starts scrolling. + */ + + +class CloseScrollStrategy { + constructor(_scrollDispatcher, _ngZone, _viewportRuler, _config) { + this._scrollDispatcher = _scrollDispatcher; + this._ngZone = _ngZone; + this._viewportRuler = _viewportRuler; + this._config = _config; + this._scrollSubscription = null; + /** Detaches the overlay ref and disables the scroll strategy. */ + + this._detach = () => { + this.disable(); + + if (this._overlayRef.hasAttached()) { + this._ngZone.run(() => this._overlayRef.detach()); + } + }; + } + /** Attaches this scroll strategy to an overlay. */ + + + attach(overlayRef) { + if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getMatScrollStrategyAlreadyAttachedError(); + } + + this._overlayRef = overlayRef; + } + /** Enables the closing of the attached overlay on scroll. */ + + + enable() { + if (this._scrollSubscription) { + return; + } + + const stream = this._scrollDispatcher.scrolled(0); + + if (this._config && this._config.threshold && this._config.threshold > 1) { + this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top; + this._scrollSubscription = stream.subscribe(() => { + const scrollPosition = this._viewportRuler.getViewportScrollPosition().top; + + if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config.threshold) { + this._detach(); + } else { + this._overlayRef.updatePosition(); + } + }); + } else { + this._scrollSubscription = stream.subscribe(this._detach); + } + } + /** Disables the closing the attached overlay on scroll. */ + + + disable() { + if (this._scrollSubscription) { + this._scrollSubscription.unsubscribe(); + + this._scrollSubscription = null; + } + } + + detach() { + this.disable(); + this._overlayRef = null; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Scroll strategy that doesn't do anything. */ + + +class NoopScrollStrategy { + /** Does nothing, as this scroll strategy is a no-op. */ + enable() {} + /** Does nothing, as this scroll strategy is a no-op. */ + + + disable() {} + /** Does nothing, as this scroll strategy is a no-op. */ + + + attach() {} + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Gets whether an element is scrolled outside of view by any of its parent scrolling containers. + * @param element Dimensions of the element (from getBoundingClientRect) + * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect) + * @returns Whether the element is scrolled out of view + * @docs-private + */ + + +function isElementScrolledOutsideView(element, scrollContainers) { + return scrollContainers.some(containerBounds => { + const outsideAbove = element.bottom < containerBounds.top; + const outsideBelow = element.top > containerBounds.bottom; + const outsideLeft = element.right < containerBounds.left; + const outsideRight = element.left > containerBounds.right; + return outsideAbove || outsideBelow || outsideLeft || outsideRight; + }); +} +/** + * Gets whether an element is clipped by any of its scrolling containers. + * @param element Dimensions of the element (from getBoundingClientRect) + * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect) + * @returns Whether the element is clipped + * @docs-private + */ + + +function isElementClippedByScrolling(element, scrollContainers) { + return scrollContainers.some(scrollContainerRect => { + const clippedAbove = element.top < scrollContainerRect.top; + const clippedBelow = element.bottom > scrollContainerRect.bottom; + const clippedLeft = element.left < scrollContainerRect.left; + const clippedRight = element.right > scrollContainerRect.right; + return clippedAbove || clippedBelow || clippedLeft || clippedRight; + }); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Strategy that will update the element position as the user is scrolling. + */ + + +class RepositionScrollStrategy { + constructor(_scrollDispatcher, _viewportRuler, _ngZone, _config) { + this._scrollDispatcher = _scrollDispatcher; + this._viewportRuler = _viewportRuler; + this._ngZone = _ngZone; + this._config = _config; + this._scrollSubscription = null; + } + /** Attaches this scroll strategy to an overlay. */ + + + attach(overlayRef) { + if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getMatScrollStrategyAlreadyAttachedError(); + } + + this._overlayRef = overlayRef; + } + /** Enables repositioning of the attached overlay on scroll. */ + + + enable() { + if (!this._scrollSubscription) { + const throttle = this._config ? this._config.scrollThrottle : 0; + this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => { + this._overlayRef.updatePosition(); // TODO(crisbeto): make `close` on by default once all components can handle it. + + + if (this._config && this._config.autoClose) { + const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect(); + + const { + width, + height + } = this._viewportRuler.getViewportSize(); // TODO(crisbeto): include all ancestor scroll containers here once + // we have a way of exposing the trigger element to the scroll strategy. + + + const parentRects = [{ + width, + height, + bottom: height, + right: width, + top: 0, + left: 0 + }]; + + if (isElementScrolledOutsideView(overlayRect, parentRects)) { + this.disable(); + + this._ngZone.run(() => this._overlayRef.detach()); + } + } + }); + } + } + /** Disables repositioning of the attached overlay on scroll. */ + + + disable() { + if (this._scrollSubscription) { + this._scrollSubscription.unsubscribe(); + + this._scrollSubscription = null; + } + } + + detach() { + this.disable(); + this._overlayRef = null; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Options for how an overlay will handle scrolling. + * + * Users can provide a custom value for `ScrollStrategyOptions` to replace the default + * behaviors. This class primarily acts as a factory for ScrollStrategy instances. + */ + + +class ScrollStrategyOptions { + constructor(_scrollDispatcher, _viewportRuler, _ngZone, document) { + this._scrollDispatcher = _scrollDispatcher; + this._viewportRuler = _viewportRuler; + this._ngZone = _ngZone; + /** Do nothing on scroll. */ + + this.noop = () => new NoopScrollStrategy(); + /** + * Close the overlay as soon as the user scrolls. + * @param config Configuration to be used inside the scroll strategy. + */ + + + this.close = config => new CloseScrollStrategy(this._scrollDispatcher, this._ngZone, this._viewportRuler, config); + /** Block scrolling. */ + + + this.block = () => new BlockScrollStrategy(this._viewportRuler, this._document); + /** + * Update the overlay's position on scroll. + * @param config Configuration to be used inside the scroll strategy. + * Allows debouncing the reposition calls. + */ + + + this.reposition = config => new RepositionScrollStrategy(this._scrollDispatcher, this._viewportRuler, this._ngZone, config); + + this._document = document; + } + +} + +ScrollStrategyOptions.ɵfac = function ScrollStrategyOptions_Factory(t) { + return new (t || ScrollStrategyOptions)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ViewportRuler), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT)); +}; + +ScrollStrategyOptions.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: ScrollStrategyOptions, + factory: ScrollStrategyOptions.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](ScrollStrategyOptions, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollDispatcher + }, { + type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ViewportRuler + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Initial configuration used when creating an overlay. */ + + +class OverlayConfig { + constructor(config) { + /** Strategy to be used when handling scroll events while the overlay is open. */ + this.scrollStrategy = new NoopScrollStrategy(); + /** Custom class to add to the overlay pane. */ + + this.panelClass = ''; + /** Whether the overlay has a backdrop. */ + + this.hasBackdrop = false; + /** Custom class to add to the backdrop */ + + this.backdropClass = 'cdk-overlay-dark-backdrop'; + /** + * Whether the overlay should be disposed of when the user goes backwards/forwards in history. + * Note that this usually doesn't include clicking on links (unless the user is using + * the `HashLocationStrategy`). + */ + + this.disposeOnNavigation = false; + + if (config) { + // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3, + // loses the array generic type in the `for of`. But we *also* have to use `Array` because + // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration` + const configKeys = Object.keys(config); + + for (const key of configKeys) { + if (config[key] !== undefined) { + // TypeScript, as of version 3.5, sees the left-hand-side of this expression + // as "I don't know *which* key this is, so the only valid value is the intersection + // of all the posible values." In this case, that happens to be `undefined`. TypeScript + // is not smart enough to see that the right-hand-side is actually an access of the same + // exact type with the same exact key, meaning that the value type must be identical. + // So we use `any` to work around this. + this[key] = config[key]; + } + } + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** The points of the origin element and the overlay element to connect. */ + + +class ConnectionPositionPair { + constructor(origin, overlay, + /** Offset along the X axis. */ + offsetX, + /** Offset along the Y axis. */ + offsetY, + /** Class(es) to be applied to the panel while this position is active. */ + panelClass) { + this.offsetX = offsetX; + this.offsetY = offsetY; + this.panelClass = panelClass; + this.originX = origin.originX; + this.originY = origin.originY; + this.overlayX = overlay.overlayX; + this.overlayY = overlay.overlayY; + } + +} +/** + * Set of properties regarding the position of the origin and overlay relative to the viewport + * with respect to the containing Scrollable elements. + * + * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the + * bounds of any one of the strategy's Scrollable's bounding client rectangle. + * + * The overlay and origin are outside view if there is no overlap between their bounding client + * rectangle and any one of the strategy's Scrollable's bounding client rectangle. + * + * ----------- ----------- + * | outside | | clipped | + * | view | -------------------------- + * | | | | | | + * ---------- | ----------- | + * -------------------------- | | + * | | | Scrollable | + * | | | | + * | | -------------------------- + * | Scrollable | + * | | + * -------------------------- + * + * @docs-private + */ + + +class ScrollingVisibility {} +/** The change event emitted by the strategy when a fallback position is used. */ + + +let ConnectedOverlayPositionChange = class ConnectedOverlayPositionChange { + constructor( + /** The position used as a result of this change. */ + connectionPair, + /** @docs-private */ + scrollableViewProperties) { + this.connectionPair = connectionPair; + this.scrollableViewProperties = scrollableViewProperties; + } + +}; +ConnectedOverlayPositionChange = (0,tslib__WEBPACK_IMPORTED_MODULE_5__.__decorate)([(0,tslib__WEBPACK_IMPORTED_MODULE_5__.__param)(1, (0,_angular_core__WEBPACK_IMPORTED_MODULE_3__.Optional)()), (0,tslib__WEBPACK_IMPORTED_MODULE_5__.__metadata)("design:paramtypes", [ConnectionPositionPair, ScrollingVisibility])], ConnectedOverlayPositionChange); +/** + * Validates whether a vertical position property matches the expected values. + * @param property Name of the property being validated. + * @param value Value of the property being validated. + * @docs-private + */ + +function validateVerticalPosition(property, value) { + if (value !== 'top' && value !== 'bottom' && value !== 'center') { + throw Error(`ConnectedPosition: Invalid ${property} "${value}". ` + `Expected "top", "bottom" or "center".`); + } +} +/** + * Validates whether a horizontal position property matches the expected values. + * @param property Name of the property being validated. + * @param value Value of the property being validated. + * @docs-private + */ + + +function validateHorizontalPosition(property, value) { + if (value !== 'start' && value !== 'end' && value !== 'center') { + throw Error(`ConnectedPosition: Invalid ${property} "${value}". ` + `Expected "start", "end" or "center".`); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Service for dispatching events that land on the body to appropriate overlay ref, + * if any. It maintains a list of attached overlays to determine best suited overlay based + * on event target and order of overlay opens. + */ + + +class BaseOverlayDispatcher { + constructor(document) { + /** Currently attached overlays in the order they were attached. */ + this._attachedOverlays = []; + this._document = document; + } + + ngOnDestroy() { + this.detach(); + } + /** Add a new overlay to the list of attached overlay refs. */ + + + add(overlayRef) { + // Ensure that we don't get the same overlay multiple times. + this.remove(overlayRef); + + this._attachedOverlays.push(overlayRef); + } + /** Remove an overlay from the list of attached overlay refs. */ + + + remove(overlayRef) { + const index = this._attachedOverlays.indexOf(overlayRef); + + if (index > -1) { + this._attachedOverlays.splice(index, 1); + } // Remove the global listener once there are no more overlays. + + + if (this._attachedOverlays.length === 0) { + this.detach(); + } + } + +} + +BaseOverlayDispatcher.ɵfac = function BaseOverlayDispatcher_Factory(t) { + return new (t || BaseOverlayDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT)); +}; + +BaseOverlayDispatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: BaseOverlayDispatcher, + factory: BaseOverlayDispatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](BaseOverlayDispatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Service for dispatching keyboard events that land on the body to appropriate overlay ref, + * if any. It maintains a list of attached overlays to determine best suited overlay based + * on event target and order of overlay opens. + */ + + +class OverlayKeyboardDispatcher extends BaseOverlayDispatcher { + constructor(document) { + super(document); + /** Keyboard event listener that will be attached to the body. */ + + this._keydownListener = event => { + const overlays = this._attachedOverlays; + + for (let i = overlays.length - 1; i > -1; i--) { + // Dispatch the keydown event to the top overlay which has subscribers to its keydown events. + // We want to target the most recent overlay, rather than trying to match where the event came + // from, because some components might open an overlay, but keep focus on a trigger element + // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions, + // because we don't want overlays that don't handle keyboard events to block the ones below + // them that do. + if (overlays[i]._keydownEvents.observers.length > 0) { + overlays[i]._keydownEvents.next(event); + + break; + } + } + }; + } + /** Add a new overlay to the list of attached overlay refs. */ + + + add(overlayRef) { + super.add(overlayRef); // Lazily start dispatcher once first overlay is added + + if (!this._isAttached) { + this._document.body.addEventListener('keydown', this._keydownListener); + + this._isAttached = true; + } + } + /** Detaches the global keyboard event listener. */ + + + detach() { + if (this._isAttached) { + this._document.body.removeEventListener('keydown', this._keydownListener); + + this._isAttached = false; + } + } + +} + +OverlayKeyboardDispatcher.ɵfac = function OverlayKeyboardDispatcher_Factory(t) { + return new (t || OverlayKeyboardDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT)); +}; + +OverlayKeyboardDispatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: OverlayKeyboardDispatcher, + factory: OverlayKeyboardDispatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](OverlayKeyboardDispatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Service for dispatching mouse click events that land on the body to appropriate overlay ref, + * if any. It maintains a list of attached overlays to determine best suited overlay based + * on event target and order of overlay opens. + */ + + +class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher { + constructor(document, _platform) { + super(document); + this._platform = _platform; + this._cursorStyleIsSet = false; + /** Store pointerdown event target to track origin of click. */ + + this._pointerDownListener = event => { + this._pointerDownEventTarget = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__._getEventTarget)(event); + }; + /** Click event listener that will be attached to the body propagate phase. */ + + + this._clickListener = event => { + const target = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__._getEventTarget)(event); // In case of a click event, we want to check the origin of the click + // (e.g. in case where a user starts a click inside the overlay and + // releases the click outside of it). + // This is done by using the event target of the preceding pointerdown event. + // Every click event caused by a pointer device has a preceding pointerdown + // event, unless the click was programmatically triggered (e.g. in a unit test). + + + const origin = event.type === 'click' && this._pointerDownEventTarget ? this._pointerDownEventTarget : target; // Reset the stored pointerdown event target, to avoid having it interfere + // in subsequent events. + + this._pointerDownEventTarget = null; // We copy the array because the original may be modified asynchronously if the + // outsidePointerEvents listener decides to detach overlays resulting in index errors inside + // the for loop. + + const overlays = this._attachedOverlays.slice(); // Dispatch the mouse event to the top overlay which has subscribers to its mouse events. + // We want to target all overlays for which the click could be considered as outside click. + // As soon as we reach an overlay for which the click is not outside click we break off + // the loop. + + + for (let i = overlays.length - 1; i > -1; i--) { + const overlayRef = overlays[i]; + + if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) { + continue; + } // If it's a click inside the overlay, just break - we should do nothing + // If it's an outside click (both origin and target of the click) dispatch the mouse event, + // and proceed with the next overlay + + + if (overlayRef.overlayElement.contains(target) || overlayRef.overlayElement.contains(origin)) { + break; + } + + overlayRef._outsidePointerEvents.next(event); + } + }; + } + /** Add a new overlay to the list of attached overlay refs. */ + + + add(overlayRef) { + super.add(overlayRef); // Safari on iOS does not generate click events for non-interactive + // elements. However, we want to receive a click for any element outside + // the overlay. We can force a "clickable" state by setting + // `cursor: pointer` on the document body. See: + // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile + // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html + + if (!this._isAttached) { + const body = this._document.body; + body.addEventListener('pointerdown', this._pointerDownListener, true); + body.addEventListener('click', this._clickListener, true); + body.addEventListener('auxclick', this._clickListener, true); + body.addEventListener('contextmenu', this._clickListener, true); // click event is not fired on iOS. To make element "clickable" we are + // setting the cursor to pointer + + if (this._platform.IOS && !this._cursorStyleIsSet) { + this._cursorOriginalValue = body.style.cursor; + body.style.cursor = 'pointer'; + this._cursorStyleIsSet = true; + } + + this._isAttached = true; + } + } + /** Detaches the global keyboard event listener. */ + + + detach() { + if (this._isAttached) { + const body = this._document.body; + body.removeEventListener('pointerdown', this._pointerDownListener, true); + body.removeEventListener('click', this._clickListener, true); + body.removeEventListener('auxclick', this._clickListener, true); + body.removeEventListener('contextmenu', this._clickListener, true); + + if (this._platform.IOS && this._cursorStyleIsSet) { + body.style.cursor = this._cursorOriginalValue; + this._cursorStyleIsSet = false; + } + + this._isAttached = false; + } + } + +} + +OverlayOutsideClickDispatcher.ɵfac = function OverlayOutsideClickDispatcher_Factory(t) { + return new (t || OverlayOutsideClickDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform)); +}; + +OverlayOutsideClickDispatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: OverlayOutsideClickDispatcher, + factory: OverlayOutsideClickDispatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](OverlayOutsideClickDispatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Container inside which all overlays will render. */ + + +class OverlayContainer { + constructor(document, _platform) { + this._platform = _platform; + this._document = document; + } + + ngOnDestroy() { + this._containerElement?.remove(); + } + /** + * This method returns the overlay container element. It will lazily + * create the element the first time it is called to facilitate using + * the container in non-browser environments. + * @returns the container element + */ + + + getContainerElement() { + if (!this._containerElement) { + this._createContainer(); + } + + return this._containerElement; + } + /** + * Create the overlay container element, which is simply a div + * with the 'cdk-overlay-container' class on the document body. + */ + + + _createContainer() { + const containerClass = 'cdk-overlay-container'; // TODO(crisbeto): remove the testing check once we have an overlay testing + // module or Angular starts tearing down the testing `NgModule`. See: + // https://github.com/angular/angular/issues/18831 + + if (this._platform.isBrowser || (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__._isTestEnvironment)()) { + const oppositePlatformContainers = this._document.querySelectorAll(`.${containerClass}[platform="server"], ` + `.${containerClass}[platform="test"]`); // Remove any old containers from the opposite platform. + // This can happen when transitioning from the server to the client. + + + for (let i = 0; i < oppositePlatformContainers.length; i++) { + oppositePlatformContainers[i].remove(); + } + } + + const container = this._document.createElement('div'); + + container.classList.add(containerClass); // A long time ago we kept adding new overlay containers whenever a new app was instantiated, + // but at some point we added logic which clears the duplicate ones in order to avoid leaks. + // The new logic was a little too aggressive since it was breaking some legitimate use cases. + // To mitigate the problem we made it so that only containers from a different platform are + // cleared, but the side-effect was that people started depending on the overly-aggressive + // logic to clean up their tests for them. Until we can introduce an overlay-specific testing + // module which does the cleanup, we try to detect that we're in a test environment and we + // always clear the container. See #17006. + // TODO(crisbeto): remove the test environment check once we have an overlay testing module. + + if ((0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__._isTestEnvironment)()) { + container.setAttribute('platform', 'test'); + } else if (!this._platform.isBrowser) { + container.setAttribute('platform', 'server'); + } + + this._document.body.appendChild(container); + + this._containerElement = container; + } + +} + +OverlayContainer.ɵfac = function OverlayContainer_Factory(t) { + return new (t || OverlayContainer)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform)); +}; + +OverlayContainer.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: OverlayContainer, + factory: OverlayContainer.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](OverlayContainer, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Reference to an overlay that has been created with the Overlay service. + * Used to manipulate or dispose of said overlay. + */ + + +class OverlayRef { + constructor(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher) { + this._portalOutlet = _portalOutlet; + this._host = _host; + this._pane = _pane; + this._config = _config; + this._ngZone = _ngZone; + this._keyboardDispatcher = _keyboardDispatcher; + this._document = _document; + this._location = _location; + this._outsideClickDispatcher = _outsideClickDispatcher; + this._backdropElement = null; + this._backdropClick = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + this._attachments = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + this._detachments = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + this._locationChanges = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + + this._backdropClickHandler = event => this._backdropClick.next(event); + /** Stream of keydown events dispatched to this overlay. */ + + + this._keydownEvents = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + /** Stream of mouse outside events dispatched to this overlay. */ + + this._outsidePointerEvents = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + + if (_config.scrollStrategy) { + this._scrollStrategy = _config.scrollStrategy; + + this._scrollStrategy.attach(this); + } + + this._positionStrategy = _config.positionStrategy; + } + /** The overlay's HTML element */ + + + get overlayElement() { + return this._pane; + } + /** The overlay's backdrop HTML element. */ + + + get backdropElement() { + return this._backdropElement; + } + /** + * Wrapper around the panel element. Can be used for advanced + * positioning where a wrapper with specific styling is + * required around the overlay pane. + */ + + + get hostElement() { + return this._host; + } + /** + * Attaches content, given via a Portal, to the overlay. + * If the overlay is configured to have a backdrop, it will be created. + * + * @param portal Portal instance to which to attach the overlay. + * @returns The portal attachment result. + */ + + + attach(portal) { + let attachResult = this._portalOutlet.attach(portal); // Update the pane element with the given configuration. + + + if (!this._host.parentElement && this._previousHostParent) { + this._previousHostParent.appendChild(this._host); + } + + if (this._positionStrategy) { + this._positionStrategy.attach(this); + } + + this._updateStackingOrder(); + + this._updateElementSize(); + + this._updateElementDirection(); + + if (this._scrollStrategy) { + this._scrollStrategy.enable(); + } // Update the position once the zone is stable so that the overlay will be fully rendered + // before attempting to position it, as the position may depend on the size of the rendered + // content. + + + this._ngZone.onStable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__.take)(1)).subscribe(() => { + // The overlay could've been detached before the zone has stabilized. + if (this.hasAttached()) { + this.updatePosition(); + } + }); // Enable pointer events for the overlay pane element. + + + this._togglePointerEvents(true); + + if (this._config.hasBackdrop) { + this._attachBackdrop(); + } + + if (this._config.panelClass) { + this._toggleClasses(this._pane, this._config.panelClass, true); + } // Only emit the `attachments` event once all other setup is done. + + + this._attachments.next(); // Track this overlay by the keyboard dispatcher + + + this._keyboardDispatcher.add(this); + + if (this._config.disposeOnNavigation) { + this._locationChanges = this._location.subscribe(() => this.dispose()); + } + + this._outsideClickDispatcher.add(this); + + return attachResult; + } + /** + * Detaches an overlay from a portal. + * @returns The portal detachment result. + */ + + + detach() { + if (!this.hasAttached()) { + return; + } + + this.detachBackdrop(); // When the overlay is detached, the pane element should disable pointer events. + // This is necessary because otherwise the pane element will cover the page and disable + // pointer events therefore. Depends on the position strategy and the applied pane boundaries. + + this._togglePointerEvents(false); + + if (this._positionStrategy && this._positionStrategy.detach) { + this._positionStrategy.detach(); + } + + if (this._scrollStrategy) { + this._scrollStrategy.disable(); + } + + const detachmentResult = this._portalOutlet.detach(); // Only emit after everything is detached. + + + this._detachments.next(); // Remove this overlay from keyboard dispatcher tracking. + + + this._keyboardDispatcher.remove(this); // Keeping the host element in the DOM can cause scroll jank, because it still gets + // rendered, even though it's transparent and unclickable which is why we remove it. + + + this._detachContentWhenStable(); + + this._locationChanges.unsubscribe(); + + this._outsideClickDispatcher.remove(this); + + return detachmentResult; + } + /** Cleans up the overlay from the DOM. */ + + + dispose() { + const isAttached = this.hasAttached(); + + if (this._positionStrategy) { + this._positionStrategy.dispose(); + } + + this._disposeScrollStrategy(); + + this._disposeBackdrop(this._backdropElement); + + this._locationChanges.unsubscribe(); + + this._keyboardDispatcher.remove(this); + + this._portalOutlet.dispose(); + + this._attachments.complete(); + + this._backdropClick.complete(); + + this._keydownEvents.complete(); + + this._outsidePointerEvents.complete(); + + this._outsideClickDispatcher.remove(this); + + this._host?.remove(); + this._previousHostParent = this._pane = this._host = null; + + if (isAttached) { + this._detachments.next(); + } + + this._detachments.complete(); + } + /** Whether the overlay has attached content. */ + + + hasAttached() { + return this._portalOutlet.hasAttached(); + } + /** Gets an observable that emits when the backdrop has been clicked. */ + + + backdropClick() { + return this._backdropClick; + } + /** Gets an observable that emits when the overlay has been attached. */ + + + attachments() { + return this._attachments; + } + /** Gets an observable that emits when the overlay has been detached. */ + + + detachments() { + return this._detachments; + } + /** Gets an observable of keydown events targeted to this overlay. */ + + + keydownEvents() { + return this._keydownEvents; + } + /** Gets an observable of pointer events targeted outside this overlay. */ + + + outsidePointerEvents() { + return this._outsidePointerEvents; + } + /** Gets the current overlay configuration, which is immutable. */ + + + getConfig() { + return this._config; + } + /** Updates the position of the overlay based on the position strategy. */ + + + updatePosition() { + if (this._positionStrategy) { + this._positionStrategy.apply(); + } + } + /** Switches to a new position strategy and updates the overlay position. */ + + + updatePositionStrategy(strategy) { + if (strategy === this._positionStrategy) { + return; + } + + if (this._positionStrategy) { + this._positionStrategy.dispose(); + } + + this._positionStrategy = strategy; + + if (this.hasAttached()) { + strategy.attach(this); + this.updatePosition(); + } + } + /** Update the size properties of the overlay. */ + + + updateSize(sizeConfig) { + this._config = { ...this._config, + ...sizeConfig + }; + + this._updateElementSize(); + } + /** Sets the LTR/RTL direction for the overlay. */ + + + setDirection(dir) { + this._config = { ...this._config, + direction: dir + }; + + this._updateElementDirection(); + } + /** Add a CSS class or an array of classes to the overlay pane. */ + + + addPanelClass(classes) { + if (this._pane) { + this._toggleClasses(this._pane, classes, true); + } + } + /** Remove a CSS class or an array of classes from the overlay pane. */ + + + removePanelClass(classes) { + if (this._pane) { + this._toggleClasses(this._pane, classes, false); + } + } + /** + * Returns the layout direction of the overlay panel. + */ + + + getDirection() { + const direction = this._config.direction; + + if (!direction) { + return 'ltr'; + } + + return typeof direction === 'string' ? direction : direction.value; + } + /** Switches to a new scroll strategy. */ + + + updateScrollStrategy(strategy) { + if (strategy === this._scrollStrategy) { + return; + } + + this._disposeScrollStrategy(); + + this._scrollStrategy = strategy; + + if (this.hasAttached()) { + strategy.attach(this); + strategy.enable(); + } + } + /** Updates the text direction of the overlay panel. */ + + + _updateElementDirection() { + this._host.setAttribute('dir', this.getDirection()); + } + /** Updates the size of the overlay element based on the overlay config. */ + + + _updateElementSize() { + if (!this._pane) { + return; + } + + const style = this._pane.style; + style.width = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.width); + style.height = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.height); + style.minWidth = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.minWidth); + style.minHeight = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.minHeight); + style.maxWidth = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.maxWidth); + style.maxHeight = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(this._config.maxHeight); + } + /** Toggles the pointer events for the overlay pane element. */ + + + _togglePointerEvents(enablePointer) { + this._pane.style.pointerEvents = enablePointer ? '' : 'none'; + } + /** Attaches a backdrop for this overlay. */ + + + _attachBackdrop() { + const showingClass = 'cdk-overlay-backdrop-showing'; + this._backdropElement = this._document.createElement('div'); + + this._backdropElement.classList.add('cdk-overlay-backdrop'); + + if (this._config.backdropClass) { + this._toggleClasses(this._backdropElement, this._config.backdropClass, true); + } // Insert the backdrop before the pane in the DOM order, + // in order to handle stacked overlays properly. + + + this._host.parentElement.insertBefore(this._backdropElement, this._host); // Forward backdrop clicks such that the consumer of the overlay can perform whatever + // action desired when such a click occurs (usually closing the overlay). + + + this._backdropElement.addEventListener('click', this._backdropClickHandler); // Add class to fade-in the backdrop after one frame. + + + if (typeof requestAnimationFrame !== 'undefined') { + this._ngZone.runOutsideAngular(() => { + requestAnimationFrame(() => { + if (this._backdropElement) { + this._backdropElement.classList.add(showingClass); + } + }); + }); + } else { + this._backdropElement.classList.add(showingClass); + } + } + /** + * Updates the stacking order of the element, moving it to the top if necessary. + * This is required in cases where one overlay was detached, while another one, + * that should be behind it, was destroyed. The next time both of them are opened, + * the stacking will be wrong, because the detached element's pane will still be + * in its original DOM position. + */ + + + _updateStackingOrder() { + if (this._host.nextSibling) { + this._host.parentNode.appendChild(this._host); + } + } + /** Detaches the backdrop (if any) associated with the overlay. */ + + + detachBackdrop() { + const backdropToDetach = this._backdropElement; + + if (!backdropToDetach) { + return; + } + + let timeoutId; + + const finishDetach = () => { + // It may not be attached to anything in certain cases (e.g. unit tests). + if (backdropToDetach) { + backdropToDetach.removeEventListener('click', this._backdropClickHandler); + backdropToDetach.removeEventListener('transitionend', finishDetach); + + this._disposeBackdrop(backdropToDetach); + } + + if (this._config.backdropClass) { + this._toggleClasses(backdropToDetach, this._config.backdropClass, false); + } + + clearTimeout(timeoutId); + }; + + backdropToDetach.classList.remove('cdk-overlay-backdrop-showing'); + + this._ngZone.runOutsideAngular(() => { + backdropToDetach.addEventListener('transitionend', finishDetach); + }); // If the backdrop doesn't have a transition, the `transitionend` event won't fire. + // In this case we make it unclickable and we try to remove it after a delay. + + + backdropToDetach.style.pointerEvents = 'none'; // Run this outside the Angular zone because there's nothing that Angular cares about. + // If it were to run inside the Angular zone, every test that used Overlay would have to be + // either async or fakeAsync. + + timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500)); + } + /** Toggles a single CSS class or an array of classes on an element. */ + + + _toggleClasses(element, cssClasses, isAdd) { + const classes = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceArray)(cssClasses || []).filter(c => !!c); + + if (classes.length) { + isAdd ? element.classList.add(...classes) : element.classList.remove(...classes); + } + } + /** Detaches the overlay content next time the zone stabilizes. */ + + + _detachContentWhenStable() { + // Normally we wouldn't have to explicitly run this outside the `NgZone`, however + // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will + // be patched to run inside the zone, which will throw us into an infinite loop. + this._ngZone.runOutsideAngular(() => { + // We can't remove the host here immediately, because the overlay pane's content + // might still be animating. This stream helps us avoid interrupting the animation + // by waiting for the pane to become empty. + const subscription = this._ngZone.onStable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_9__.takeUntil)((0,rxjs__WEBPACK_IMPORTED_MODULE_10__.merge)(this._attachments, this._detachments))).subscribe(() => { + // Needs a couple of checks for the pane and host, because + // they may have been removed by the time the zone stabilizes. + if (!this._pane || !this._host || this._pane.children.length === 0) { + if (this._pane && this._config.panelClass) { + this._toggleClasses(this._pane, this._config.panelClass, false); + } + + if (this._host && this._host.parentElement) { + this._previousHostParent = this._host.parentElement; + + this._host.remove(); + } + + subscription.unsubscribe(); + } + }); + }); + } + /** Disposes of a scroll strategy. */ + + + _disposeScrollStrategy() { + const scrollStrategy = this._scrollStrategy; + + if (scrollStrategy) { + scrollStrategy.disable(); + + if (scrollStrategy.detach) { + scrollStrategy.detach(); + } + } + } + /** Removes a backdrop element from the DOM. */ + + + _disposeBackdrop(backdrop) { + if (backdrop) { + backdrop.remove(); // It is possible that a new portal has been attached to this overlay since we started + // removing the backdrop. If that is the case, only clear the backdrop reference if it + // is still the same instance that we started to remove. + + if (this._backdropElement === backdrop) { + this._backdropElement = null; + } + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// TODO: refactor clipping detection into a separate thing (part of scrolling module) +// TODO: doesn't handle both flexible width and height when it has to scroll along both axis. + +/** Class to be added to the overlay bounding box. */ + + +const boundingBoxClass = 'cdk-overlay-connected-position-bounding-box'; +/** Regex used to split a string on its CSS units. */ + +const cssUnitPattern = /([A-Za-z%]+)$/; +/** + * A strategy for positioning overlays. Using this strategy, an overlay is given an + * implicit position relative some origin element. The relative position is defined in terms of + * a point on the origin element that is connected to a point on the overlay element. For example, + * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner + * of the overlay. + */ + +class FlexibleConnectedPositionStrategy { + constructor(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) { + this._viewportRuler = _viewportRuler; + this._document = _document; + this._platform = _platform; + this._overlayContainer = _overlayContainer; + /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */ + + this._lastBoundingBoxSize = { + width: 0, + height: 0 + }; + /** Whether the overlay was pushed in a previous positioning. */ + + this._isPushed = false; + /** Whether the overlay can be pushed on-screen on the initial open. */ + + this._canPush = true; + /** Whether the overlay can grow via flexible width/height after the initial open. */ + + this._growAfterOpen = false; + /** Whether the overlay's width and height can be constrained to fit within the viewport. */ + + this._hasFlexibleDimensions = true; + /** Whether the overlay position is locked. */ + + this._positionLocked = false; + /** Amount of space that must be maintained between the overlay and the edge of the viewport. */ + + this._viewportMargin = 0; + /** The Scrollable containers used to check scrollable view properties on position change. */ + + this._scrollables = []; + /** Ordered list of preferred positions, from most to least desirable. */ + + this._preferredPositions = []; + /** Subject that emits whenever the position changes. */ + + this._positionChanges = new rxjs__WEBPACK_IMPORTED_MODULE_6__.Subject(); + /** Subscription to viewport size changes. */ + + this._resizeSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + /** Default offset for the overlay along the x axis. */ + + this._offsetX = 0; + /** Default offset for the overlay along the y axis. */ + + this._offsetY = 0; + /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */ + + this._appliedPanelClasses = []; + /** Observable sequence of position changes. */ + + this.positionChanges = this._positionChanges; + this.setOrigin(connectedTo); + } + /** Ordered list of preferred positions, from most to least desirable. */ + + + get positions() { + return this._preferredPositions; + } + /** Attaches this position strategy to an overlay. */ + + + attach(overlayRef) { + if (this._overlayRef && overlayRef !== this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('This position strategy is already attached to an overlay'); + } + + this._validatePositions(); + + overlayRef.hostElement.classList.add(boundingBoxClass); + this._overlayRef = overlayRef; + this._boundingBox = overlayRef.hostElement; + this._pane = overlayRef.overlayElement; + this._isDisposed = false; + this._isInitialRender = true; + this._lastPosition = null; + + this._resizeSubscription.unsubscribe(); + + this._resizeSubscription = this._viewportRuler.change().subscribe(() => { + // When the window is resized, we want to trigger the next reposition as if it + // was an initial render, in order for the strategy to pick a new optimal position, + // otherwise position locking will cause it to stay at the old one. + this._isInitialRender = true; + this.apply(); + }); + } + /** + * Updates the position of the overlay element, using whichever preferred position relative + * to the origin best fits on-screen. + * + * The selection of a position goes as follows: + * - If any positions fit completely within the viewport as-is, + * choose the first position that does so. + * - If flexible dimensions are enabled and at least one satifies the given minimum width/height, + * choose the position with the greatest available size modified by the positions' weight. + * - If pushing is enabled, take the position that went off-screen the least and push it + * on-screen. + * - If none of the previous criteria were met, use the position that goes off-screen the least. + * @docs-private + */ + + + apply() { + // We shouldn't do anything if the strategy was disposed or we're on the server. + if (this._isDisposed || !this._platform.isBrowser) { + return; + } // If the position has been applied already (e.g. when the overlay was opened) and the + // consumer opted into locking in the position, re-use the old position, in order to + // prevent the overlay from jumping around. + + + if (!this._isInitialRender && this._positionLocked && this._lastPosition) { + this.reapplyLastPosition(); + return; + } + + this._clearPanelClasses(); + + this._resetOverlayElementStyles(); + + this._resetBoundingBoxStyles(); // We need the bounding rects for the origin and the overlay to determine how to position + // the overlay relative to the origin. + // We use the viewport rect to determine whether a position would go off-screen. + + + this._viewportRect = this._getNarrowedViewportRect(); + this._originRect = this._getOriginRect(); + this._overlayRect = this._pane.getBoundingClientRect(); + const originRect = this._originRect; + const overlayRect = this._overlayRect; + const viewportRect = this._viewportRect; // Positions where the overlay will fit with flexible dimensions. + + const flexibleFits = []; // Fallback if none of the preferred positions fit within the viewport. + + let fallback; // Go through each of the preferred positions looking for a good fit. + // If a good fit is found, it will be applied immediately. + + for (let pos of this._preferredPositions) { + // Get the exact (x, y) coordinate for the point-of-origin on the origin element. + let originPoint = this._getOriginPoint(originRect, pos); // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the + // overlay in this position. We use the top-left corner for calculations and later translate + // this into an appropriate (top, left, bottom, right) style. + + + let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos); // Calculate how well the overlay would fit into the viewport with this point. + + + let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos); // If the overlay, without any further work, fits into the viewport, use this position. + + + if (overlayFit.isCompletelyWithinViewport) { + this._isPushed = false; + + this._applyPosition(pos, originPoint); + + return; + } // If the overlay has flexible dimensions, we can use this position + // so long as there's enough space for the minimum dimensions. + + + if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) { + // Save positions where the overlay will fit with flexible dimensions. We will use these + // if none of the positions fit *without* flexible dimensions. + flexibleFits.push({ + position: pos, + origin: originPoint, + overlayRect, + boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos) + }); + continue; + } // If the current preferred position does not fit on the screen, remember the position + // if it has more visible area on-screen than we've seen and move onto the next preferred + // position. + + + if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) { + fallback = { + overlayFit, + overlayPoint, + originPoint, + position: pos, + overlayRect + }; + } + } // If there are any positions where the overlay would fit with flexible dimensions, choose the + // one that has the greatest area available modified by the position's weight + + + if (flexibleFits.length) { + let bestFit = null; + let bestScore = -1; + + for (const fit of flexibleFits) { + const score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1); + + if (score > bestScore) { + bestScore = score; + bestFit = fit; + } + } + + this._isPushed = false; + + this._applyPosition(bestFit.position, bestFit.origin); + + return; + } // When none of the preferred positions fit within the viewport, take the position + // that went off-screen the least and attempt to push it on-screen. + + + if (this._canPush) { + // TODO(jelbourn): after pushing, the opening "direction" of the overlay might not make sense. + this._isPushed = true; + + this._applyPosition(fallback.position, fallback.originPoint); + + return; + } // All options for getting the overlay within the viewport have been exhausted, so go with the + // position that went off-screen the least. + + + this._applyPosition(fallback.position, fallback.originPoint); + } + + detach() { + this._clearPanelClasses(); + + this._lastPosition = null; + this._previousPushAmount = null; + + this._resizeSubscription.unsubscribe(); + } + /** Cleanup after the element gets destroyed. */ + + + dispose() { + if (this._isDisposed) { + return; + } // We can't use `_resetBoundingBoxStyles` here, because it resets + // some properties to zero, rather than removing them. + + + if (this._boundingBox) { + extendStyles(this._boundingBox.style, { + top: '', + left: '', + right: '', + bottom: '', + height: '', + width: '', + alignItems: '', + justifyContent: '' + }); + } + + if (this._pane) { + this._resetOverlayElementStyles(); + } + + if (this._overlayRef) { + this._overlayRef.hostElement.classList.remove(boundingBoxClass); + } + + this.detach(); + + this._positionChanges.complete(); + + this._overlayRef = this._boundingBox = null; + this._isDisposed = true; + } + /** + * This re-aligns the overlay element with the trigger in its last calculated position, + * even if a position higher in the "preferred positions" list would now fit. This + * allows one to re-align the panel without changing the orientation of the panel. + */ + + + reapplyLastPosition() { + if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) { + this._originRect = this._getOriginRect(); + this._overlayRect = this._pane.getBoundingClientRect(); + this._viewportRect = this._getNarrowedViewportRect(); + const lastPosition = this._lastPosition || this._preferredPositions[0]; + + const originPoint = this._getOriginPoint(this._originRect, lastPosition); + + this._applyPosition(lastPosition, originPoint); + } + } + /** + * Sets the list of Scrollable containers that host the origin element so that + * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every + * Scrollable must be an ancestor element of the strategy's origin element. + */ + + + withScrollableContainers(scrollables) { + this._scrollables = scrollables; + return this; + } + /** + * Adds new preferred positions. + * @param positions List of positions options for this overlay. + */ + + + withPositions(positions) { + this._preferredPositions = positions; // If the last calculated position object isn't part of the positions anymore, clear + // it in order to avoid it being picked up if the consumer tries to re-apply. + + if (positions.indexOf(this._lastPosition) === -1) { + this._lastPosition = null; + } + + this._validatePositions(); + + return this; + } + /** + * Sets a minimum distance the overlay may be positioned to the edge of the viewport. + * @param margin Required margin between the overlay and the viewport edge in pixels. + */ + + + withViewportMargin(margin) { + this._viewportMargin = margin; + return this; + } + /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */ + + + withFlexibleDimensions(flexibleDimensions = true) { + this._hasFlexibleDimensions = flexibleDimensions; + return this; + } + /** Sets whether the overlay can grow after the initial open via flexible width/height. */ + + + withGrowAfterOpen(growAfterOpen = true) { + this._growAfterOpen = growAfterOpen; + return this; + } + /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */ + + + withPush(canPush = true) { + this._canPush = canPush; + return this; + } + /** + * Sets whether the overlay's position should be locked in after it is positioned + * initially. When an overlay is locked in, it won't attempt to reposition itself + * when the position is re-applied (e.g. when the user scrolls away). + * @param isLocked Whether the overlay should locked in. + */ + + + withLockedPosition(isLocked = true) { + this._positionLocked = isLocked; + return this; + } + /** + * Sets the origin, relative to which to position the overlay. + * Using an element origin is useful for building components that need to be positioned + * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be + * used for cases like contextual menus which open relative to the user's pointer. + * @param origin Reference to the new origin. + */ + + + setOrigin(origin) { + this._origin = origin; + return this; + } + /** + * Sets the default offset for the overlay's connection point on the x-axis. + * @param offset New offset in the X axis. + */ + + + withDefaultOffsetX(offset) { + this._offsetX = offset; + return this; + } + /** + * Sets the default offset for the overlay's connection point on the y-axis. + * @param offset New offset in the Y axis. + */ + + + withDefaultOffsetY(offset) { + this._offsetY = offset; + return this; + } + /** + * Configures that the position strategy should set a `transform-origin` on some elements + * inside the overlay, depending on the current position that is being applied. This is + * useful for the cases where the origin of an animation can change depending on the + * alignment of the overlay. + * @param selector CSS selector that will be used to find the target + * elements onto which to set the transform origin. + */ + + + withTransformOriginOn(selector) { + this._transformOriginSelector = selector; + return this; + } + /** + * Gets the (x, y) coordinate of a connection point on the origin based on a relative position. + */ + + + _getOriginPoint(originRect, pos) { + let x; + + if (pos.originX == 'center') { + // Note: when centering we should always use the `left` + // offset, otherwise the position will be wrong in RTL. + x = originRect.left + originRect.width / 2; + } else { + const startX = this._isRtl() ? originRect.right : originRect.left; + const endX = this._isRtl() ? originRect.left : originRect.right; + x = pos.originX == 'start' ? startX : endX; + } + + let y; + + if (pos.originY == 'center') { + y = originRect.top + originRect.height / 2; + } else { + y = pos.originY == 'top' ? originRect.top : originRect.bottom; + } + + return { + x, + y + }; + } + /** + * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and + * origin point to which the overlay should be connected. + */ + + + _getOverlayPoint(originPoint, overlayRect, pos) { + // Calculate the (overlayStartX, overlayStartY), the start of the + // potential overlay position relative to the origin point. + let overlayStartX; + + if (pos.overlayX == 'center') { + overlayStartX = -overlayRect.width / 2; + } else if (pos.overlayX === 'start') { + overlayStartX = this._isRtl() ? -overlayRect.width : 0; + } else { + overlayStartX = this._isRtl() ? 0 : -overlayRect.width; + } + + let overlayStartY; + + if (pos.overlayY == 'center') { + overlayStartY = -overlayRect.height / 2; + } else { + overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height; + } // The (x, y) coordinates of the overlay. + + + return { + x: originPoint.x + overlayStartX, + y: originPoint.y + overlayStartY + }; + } + /** Gets how well an overlay at the given point will fit within the viewport. */ + + + _getOverlayFit(point, rawOverlayRect, viewport, position) { + // Round the overlay rect when comparing against the + // viewport, because the viewport is always rounded. + const overlay = getRoundedBoundingClientRect(rawOverlayRect); + let { + x, + y + } = point; + + let offsetX = this._getOffset(position, 'x'); + + let offsetY = this._getOffset(position, 'y'); // Account for the offsets since they could push the overlay out of the viewport. + + + if (offsetX) { + x += offsetX; + } + + if (offsetY) { + y += offsetY; + } // How much the overlay would overflow at this position, on each side. + + + let leftOverflow = 0 - x; + let rightOverflow = x + overlay.width - viewport.width; + let topOverflow = 0 - y; + let bottomOverflow = y + overlay.height - viewport.height; // Visible parts of the element on each axis. + + let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow); + + let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow); + + let visibleArea = visibleWidth * visibleHeight; + return { + visibleArea, + isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea, + fitsInViewportVertically: visibleHeight === overlay.height, + fitsInViewportHorizontally: visibleWidth == overlay.width + }; + } + /** + * Whether the overlay can fit within the viewport when it may resize either its width or height. + * @param fit How well the overlay fits in the viewport at some position. + * @param point The (x, y) coordinates of the overlat at some position. + * @param viewport The geometry of the viewport. + */ + + + _canFitWithFlexibleDimensions(fit, point, viewport) { + if (this._hasFlexibleDimensions) { + const availableHeight = viewport.bottom - point.y; + const availableWidth = viewport.right - point.x; + const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight); + const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth); + const verticalFit = fit.fitsInViewportVertically || minHeight != null && minHeight <= availableHeight; + const horizontalFit = fit.fitsInViewportHorizontally || minWidth != null && minWidth <= availableWidth; + return verticalFit && horizontalFit; + } + + return false; + } + /** + * Gets the point at which the overlay can be "pushed" on-screen. If the overlay is larger than + * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the + * right and bottom). + * + * @param start Starting point from which the overlay is pushed. + * @param overlay Dimensions of the overlay. + * @param scrollPosition Current viewport scroll position. + * @returns The point at which to position the overlay after pushing. This is effectively a new + * originPoint. + */ + + + _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) { + // If the position is locked and we've pushed the overlay already, reuse the previous push + // amount, rather than pushing it again. If we were to continue pushing, the element would + // remain in the viewport, which goes against the expectations when position locking is enabled. + if (this._previousPushAmount && this._positionLocked) { + return { + x: start.x + this._previousPushAmount.x, + y: start.y + this._previousPushAmount.y + }; + } // Round the overlay rect when comparing against the + // viewport, because the viewport is always rounded. + + + const overlay = getRoundedBoundingClientRect(rawOverlayRect); + const viewport = this._viewportRect; // Determine how much the overlay goes outside the viewport on each + // side, which we'll use to decide which direction to push it. + + const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0); + const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0); + const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0); + const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0); // Amount by which to push the overlay in each axis such that it remains on-screen. + + let pushX = 0; + let pushY = 0; // If the overlay fits completely within the bounds of the viewport, push it from whichever + // direction is goes off-screen. Otherwise, push the top-left corner such that its in the + // viewport and allow for the trailing end of the overlay to go out of bounds. + + if (overlay.width <= viewport.width) { + pushX = overflowLeft || -overflowRight; + } else { + pushX = start.x < this._viewportMargin ? viewport.left - scrollPosition.left - start.x : 0; + } + + if (overlay.height <= viewport.height) { + pushY = overflowTop || -overflowBottom; + } else { + pushY = start.y < this._viewportMargin ? viewport.top - scrollPosition.top - start.y : 0; + } + + this._previousPushAmount = { + x: pushX, + y: pushY + }; + return { + x: start.x + pushX, + y: start.y + pushY + }; + } + /** + * Applies a computed position to the overlay and emits a position change. + * @param position The position preference + * @param originPoint The point on the origin element where the overlay is connected. + */ + + + _applyPosition(position, originPoint) { + this._setTransformOrigin(position); + + this._setOverlayElementStyles(originPoint, position); + + this._setBoundingBoxStyles(originPoint, position); + + if (position.panelClass) { + this._addPanelClasses(position.panelClass); + } // Save the last connected position in case the position needs to be re-calculated. + + + this._lastPosition = position; // Notify that the position has been changed along with its change properties. + // We only emit if we've got any subscriptions, because the scroll visibility + // calculcations can be somewhat expensive. + + if (this._positionChanges.observers.length) { + const scrollableViewProperties = this._getScrollVisibility(); + + const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties); + + this._positionChanges.next(changeEvent); + } + + this._isInitialRender = false; + } + /** Sets the transform origin based on the configured selector and the passed-in position. */ + + + _setTransformOrigin(position) { + if (!this._transformOriginSelector) { + return; + } + + const elements = this._boundingBox.querySelectorAll(this._transformOriginSelector); + + let xOrigin; + let yOrigin = position.overlayY; + + if (position.overlayX === 'center') { + xOrigin = 'center'; + } else if (this._isRtl()) { + xOrigin = position.overlayX === 'start' ? 'right' : 'left'; + } else { + xOrigin = position.overlayX === 'start' ? 'left' : 'right'; + } + + for (let i = 0; i < elements.length; i++) { + elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`; + } + } + /** + * Gets the position and size of the overlay's sizing container. + * + * This method does no measuring and applies no styles so that we can cheaply compute the + * bounds for all positions and choose the best fit based on these results. + */ + + + _calculateBoundingBoxRect(origin, position) { + const viewport = this._viewportRect; + + const isRtl = this._isRtl(); + + let height, top, bottom; + + if (position.overlayY === 'top') { + // Overlay is opening "downward" and thus is bound by the bottom viewport edge. + top = origin.y; + height = viewport.height - top + this._viewportMargin; + } else if (position.overlayY === 'bottom') { + // Overlay is opening "upward" and thus is bound by the top viewport edge. We need to add + // the viewport margin back in, because the viewport rect is narrowed down to remove the + // margin, whereas the `origin` position is calculated based on its `ClientRect`. + bottom = viewport.height - origin.y + this._viewportMargin * 2; + height = viewport.height - bottom + this._viewportMargin; + } else { + // If neither top nor bottom, it means that the overlay is vertically centered on the + // origin point. Note that we want the position relative to the viewport, rather than + // the page, which is why we don't use something like `viewport.bottom - origin.y` and + // `origin.y - viewport.top`. + const smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y); + const previousHeight = this._lastBoundingBoxSize.height; + height = smallestDistanceToViewportEdge * 2; + top = origin.y - smallestDistanceToViewportEdge; + + if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) { + top = origin.y - previousHeight / 2; + } + } // The overlay is opening 'right-ward' (the content flows to the right). + + + const isBoundedByRightViewportEdge = position.overlayX === 'start' && !isRtl || position.overlayX === 'end' && isRtl; // The overlay is opening 'left-ward' (the content flows to the left). + + const isBoundedByLeftViewportEdge = position.overlayX === 'end' && !isRtl || position.overlayX === 'start' && isRtl; + let width, left, right; + + if (isBoundedByLeftViewportEdge) { + right = viewport.width - origin.x + this._viewportMargin; + width = origin.x - this._viewportMargin; + } else if (isBoundedByRightViewportEdge) { + left = origin.x; + width = viewport.right - origin.x; + } else { + // If neither start nor end, it means that the overlay is horizontally centered on the + // origin point. Note that we want the position relative to the viewport, rather than + // the page, which is why we don't use something like `viewport.right - origin.x` and + // `origin.x - viewport.left`. + const smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x); + const previousWidth = this._lastBoundingBoxSize.width; + width = smallestDistanceToViewportEdge * 2; + left = origin.x - smallestDistanceToViewportEdge; + + if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) { + left = origin.x - previousWidth / 2; + } + } + + return { + top: top, + left: left, + bottom: bottom, + right: right, + width, + height + }; + } + /** + * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the + * origin's connection point and stetches to the bounds of the viewport. + * + * @param origin The point on the origin element where the overlay is connected. + * @param position The position preference + */ + + + _setBoundingBoxStyles(origin, position) { + const boundingBoxRect = this._calculateBoundingBoxRect(origin, position); // It's weird if the overlay *grows* while scrolling, so we take the last size into account + // when applying a new size. + + + if (!this._isInitialRender && !this._growAfterOpen) { + boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height); + boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width); + } + + const styles = {}; + + if (this._hasExactPosition()) { + styles.top = styles.left = '0'; + styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = ''; + styles.width = styles.height = '100%'; + } else { + const maxHeight = this._overlayRef.getConfig().maxHeight; + + const maxWidth = this._overlayRef.getConfig().maxWidth; + + styles.height = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.height); + styles.top = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.top); + styles.bottom = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.bottom); + styles.width = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.width); + styles.left = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.left); + styles.right = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(boundingBoxRect.right); // Push the pane content towards the proper direction. + + if (position.overlayX === 'center') { + styles.alignItems = 'center'; + } else { + styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start'; + } + + if (position.overlayY === 'center') { + styles.justifyContent = 'center'; + } else { + styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start'; + } + + if (maxHeight) { + styles.maxHeight = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(maxHeight); + } + + if (maxWidth) { + styles.maxWidth = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(maxWidth); + } + } + + this._lastBoundingBoxSize = boundingBoxRect; + extendStyles(this._boundingBox.style, styles); + } + /** Resets the styles for the bounding box so that a new positioning can be computed. */ + + + _resetBoundingBoxStyles() { + extendStyles(this._boundingBox.style, { + top: '0', + left: '0', + right: '0', + bottom: '0', + height: '', + width: '', + alignItems: '', + justifyContent: '' + }); + } + /** Resets the styles for the overlay pane so that a new positioning can be computed. */ + + + _resetOverlayElementStyles() { + extendStyles(this._pane.style, { + top: '', + left: '', + bottom: '', + right: '', + position: '', + transform: '' + }); + } + /** Sets positioning styles to the overlay element. */ + + + _setOverlayElementStyles(originPoint, position) { + const styles = {}; + + const hasExactPosition = this._hasExactPosition(); + + const hasFlexibleDimensions = this._hasFlexibleDimensions; + + const config = this._overlayRef.getConfig(); + + if (hasExactPosition) { + const scrollPosition = this._viewportRuler.getViewportScrollPosition(); + + extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition)); + extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition)); + } else { + styles.position = 'static'; + } // Use a transform to apply the offsets. We do this because the `center` positions rely on + // being in the normal flex flow and setting a `top` / `left` at all will completely throw + // off the position. We also can't use margins, because they won't have an effect in some + // cases where the element doesn't have anything to "push off of". Finally, this works + // better both with flexible and non-flexible positioning. + + + let transformString = ''; + + let offsetX = this._getOffset(position, 'x'); + + let offsetY = this._getOffset(position, 'y'); + + if (offsetX) { + transformString += `translateX(${offsetX}px) `; + } + + if (offsetY) { + transformString += `translateY(${offsetY}px)`; + } + + styles.transform = transformString.trim(); // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because + // we need these values to both be set to "100%" for the automatic flexible sizing to work. + // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint. + // Note that this doesn't apply when we have an exact position, in which case we do want to + // apply them because they'll be cleared from the bounding box. + + if (config.maxHeight) { + if (hasExactPosition) { + styles.maxHeight = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(config.maxHeight); + } else if (hasFlexibleDimensions) { + styles.maxHeight = ''; + } + } + + if (config.maxWidth) { + if (hasExactPosition) { + styles.maxWidth = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(config.maxWidth); + } else if (hasFlexibleDimensions) { + styles.maxWidth = ''; + } + } + + extendStyles(this._pane.style, styles); + } + /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */ + + + _getExactOverlayY(position, originPoint, scrollPosition) { + // Reset any existing styles. This is necessary in case the + // preferred position has changed since the last `apply`. + let styles = { + top: '', + bottom: '' + }; + + let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position); + + if (this._isPushed) { + overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition); + } + + let virtualKeyboardOffset = this._overlayContainer.getContainerElement().getBoundingClientRect().top; // Normally this would be zero, however when the overlay is attached to an input (e.g. in an + // autocomplete), mobile browsers will shift everything in order to put the input in the middle + // of the screen and to make space for the virtual keyboard. We need to account for this offset, + // otherwise our positioning will be thrown off. + + + overlayPoint.y -= virtualKeyboardOffset; // We want to set either `top` or `bottom` based on whether the overlay wants to appear + // above or below the origin and the direction in which the element will expand. + + if (position.overlayY === 'bottom') { + // When using `bottom`, we adjust the y position such that it is the distance + // from the bottom of the viewport rather than the top. + const documentHeight = this._document.documentElement.clientHeight; + styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`; + } else { + styles.top = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(overlayPoint.y); + } + + return styles; + } + /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */ + + + _getExactOverlayX(position, originPoint, scrollPosition) { + // Reset any existing styles. This is necessary in case the preferred position has + // changed since the last `apply`. + let styles = { + left: '', + right: '' + }; + + let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position); + + if (this._isPushed) { + overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition); + } // We want to set either `left` or `right` based on whether the overlay wants to appear "before" + // or "after" the origin, which determines the direction in which the element will expand. + // For the horizontal axis, the meaning of "before" and "after" change based on whether the + // page is in RTL or LTR. + + + let horizontalStyleProperty; + + if (this._isRtl()) { + horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right'; + } else { + horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left'; + } // When we're setting `right`, we adjust the x position such that it is the distance + // from the right edge of the viewport rather than the left edge. + + + if (horizontalStyleProperty === 'right') { + const documentWidth = this._document.documentElement.clientWidth; + styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`; + } else { + styles.left = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceCssPixelValue)(overlayPoint.x); + } + + return styles; + } + /** + * Gets the view properties of the trigger and overlay, including whether they are clipped + * or completely outside the view of any of the strategy's scrollables. + */ + + + _getScrollVisibility() { + // Note: needs fresh rects since the position could've changed. + const originBounds = this._getOriginRect(); + + const overlayBounds = this._pane.getBoundingClientRect(); // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers + // every time, we should be able to use the scrollTop of the containers if the size of those + // containers hasn't changed. + + + const scrollContainerBounds = this._scrollables.map(scrollable => { + return scrollable.getElementRef().nativeElement.getBoundingClientRect(); + }); + + return { + isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds), + isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds), + isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds), + isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds) + }; + } + /** Subtracts the amount that an element is overflowing on an axis from its length. */ + + + _subtractOverflows(length, ...overflows) { + return overflows.reduce((currentValue, currentOverflow) => { + return currentValue - Math.max(currentOverflow, 0); + }, length); + } + /** Narrows the given viewport rect by the current _viewportMargin. */ + + + _getNarrowedViewportRect() { + // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler, + // because we want to use the `clientWidth` and `clientHeight` as the base. The difference + // being that the client properties don't include the scrollbar, as opposed to `innerWidth` + // and `innerHeight` that do. This is necessary, because the overlay container uses + // 100% `width` and `height` which don't include the scrollbar either. + const width = this._document.documentElement.clientWidth; + const height = this._document.documentElement.clientHeight; + + const scrollPosition = this._viewportRuler.getViewportScrollPosition(); + + return { + top: scrollPosition.top + this._viewportMargin, + left: scrollPosition.left + this._viewportMargin, + right: scrollPosition.left + width - this._viewportMargin, + bottom: scrollPosition.top + height - this._viewportMargin, + width: width - 2 * this._viewportMargin, + height: height - 2 * this._viewportMargin + }; + } + /** Whether the we're dealing with an RTL context */ + + + _isRtl() { + return this._overlayRef.getDirection() === 'rtl'; + } + /** Determines whether the overlay uses exact or flexible positioning. */ + + + _hasExactPosition() { + return !this._hasFlexibleDimensions || this._isPushed; + } + /** Retrieves the offset of a position along the x or y axis. */ + + + _getOffset(position, axis) { + if (axis === 'x') { + // We don't do something like `position['offset' + axis]` in + // order to avoid breking minifiers that rename properties. + return position.offsetX == null ? this._offsetX : position.offsetX; + } + + return position.offsetY == null ? this._offsetY : position.offsetY; + } + /** Validates that the current position match the expected values. */ + + + _validatePositions() { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + if (!this._preferredPositions.length) { + throw Error('FlexibleConnectedPositionStrategy: At least one position is required.'); + } // TODO(crisbeto): remove these once Angular's template type + // checking is advanced enough to catch these cases. + + + this._preferredPositions.forEach(pair => { + validateHorizontalPosition('originX', pair.originX); + validateVerticalPosition('originY', pair.originY); + validateHorizontalPosition('overlayX', pair.overlayX); + validateVerticalPosition('overlayY', pair.overlayY); + }); + } + } + /** Adds a single CSS class or an array of classes on the overlay panel. */ + + + _addPanelClasses(cssClasses) { + if (this._pane) { + (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceArray)(cssClasses).forEach(cssClass => { + if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) { + this._appliedPanelClasses.push(cssClass); + + this._pane.classList.add(cssClass); + } + }); + } + } + /** Clears the classes that the position strategy has applied from the overlay panel. */ + + + _clearPanelClasses() { + if (this._pane) { + this._appliedPanelClasses.forEach(cssClass => { + this._pane.classList.remove(cssClass); + }); + + this._appliedPanelClasses = []; + } + } + /** Returns the ClientRect of the current origin. */ + + + _getOriginRect() { + const origin = this._origin; + + if (origin instanceof _angular_core__WEBPACK_IMPORTED_MODULE_3__.ElementRef) { + return origin.nativeElement.getBoundingClientRect(); + } // Check for Element so SVG elements are also supported. + + + if (origin instanceof Element) { + return origin.getBoundingClientRect(); + } + + const width = origin.width || 0; + const height = origin.height || 0; // If the origin is a point, return a client rect as if it was a 0x0 element at the point. + + return { + top: origin.y, + bottom: origin.y + height, + left: origin.x, + right: origin.x + width, + height, + width + }; + } + +} +/** Shallow-extends a stylesheet object with another stylesheet object. */ + + +function extendStyles(destination, source) { + for (let key in source) { + if (source.hasOwnProperty(key)) { + destination[key] = source[key]; + } + } + + return destination; +} +/** + * Extracts the pixel value as a number from a value, if it's a number + * or a CSS pixel string (e.g. `1337px`). Otherwise returns null. + */ + + +function getPixelValue(input) { + if (typeof input !== 'number' && input != null) { + const [value, units] = input.split(cssUnitPattern); + return !units || units === 'px' ? parseFloat(value) : null; + } + + return input || null; +} +/** + * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to + * the nearest pixel. This allows us to account for the cases where there may be sub-pixel + * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage + * size, see #21350). + */ + + +function getRoundedBoundingClientRect(clientRect) { + return { + top: Math.floor(clientRect.top), + right: Math.floor(clientRect.right), + bottom: Math.floor(clientRect.bottom), + left: Math.floor(clientRect.left), + width: Math.floor(clientRect.width), + height: Math.floor(clientRect.height) + }; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Class to be added to the overlay pane wrapper. */ + + +const wrapperClass = 'cdk-global-overlay-wrapper'; +/** + * A strategy for positioning overlays. Using this strategy, an overlay is given an + * explicit position relative to the browser's viewport. We use flexbox, instead of + * transforms, in order to avoid issues with subpixel rendering which can cause the + * element to become blurry. + */ + +class GlobalPositionStrategy { + constructor() { + this._cssPosition = 'static'; + this._topOffset = ''; + this._bottomOffset = ''; + this._leftOffset = ''; + this._rightOffset = ''; + this._alignItems = ''; + this._justifyContent = ''; + this._width = ''; + this._height = ''; + } + + attach(overlayRef) { + const config = overlayRef.getConfig(); + this._overlayRef = overlayRef; + + if (this._width && !config.width) { + overlayRef.updateSize({ + width: this._width + }); + } + + if (this._height && !config.height) { + overlayRef.updateSize({ + height: this._height + }); + } + + overlayRef.hostElement.classList.add(wrapperClass); + this._isDisposed = false; + } + /** + * Sets the top position of the overlay. Clears any previously set vertical position. + * @param value New top offset. + */ + + + top(value = '') { + this._bottomOffset = ''; + this._topOffset = value; + this._alignItems = 'flex-start'; + return this; + } + /** + * Sets the left position of the overlay. Clears any previously set horizontal position. + * @param value New left offset. + */ + + + left(value = '') { + this._rightOffset = ''; + this._leftOffset = value; + this._justifyContent = 'flex-start'; + return this; + } + /** + * Sets the bottom position of the overlay. Clears any previously set vertical position. + * @param value New bottom offset. + */ + + + bottom(value = '') { + this._topOffset = ''; + this._bottomOffset = value; + this._alignItems = 'flex-end'; + return this; + } + /** + * Sets the right position of the overlay. Clears any previously set horizontal position. + * @param value New right offset. + */ + + + right(value = '') { + this._leftOffset = ''; + this._rightOffset = value; + this._justifyContent = 'flex-end'; + return this; + } + /** + * Sets the overlay width and clears any previously set width. + * @param value New width for the overlay + * @deprecated Pass the `width` through the `OverlayConfig`. + * @breaking-change 8.0.0 + */ + + + width(value = '') { + if (this._overlayRef) { + this._overlayRef.updateSize({ + width: value + }); + } else { + this._width = value; + } + + return this; + } + /** + * Sets the overlay height and clears any previously set height. + * @param value New height for the overlay + * @deprecated Pass the `height` through the `OverlayConfig`. + * @breaking-change 8.0.0 + */ + + + height(value = '') { + if (this._overlayRef) { + this._overlayRef.updateSize({ + height: value + }); + } else { + this._height = value; + } + + return this; + } + /** + * Centers the overlay horizontally with an optional offset. + * Clears any previously set horizontal position. + * + * @param offset Overlay offset from the horizontal center. + */ + + + centerHorizontally(offset = '') { + this.left(offset); + this._justifyContent = 'center'; + return this; + } + /** + * Centers the overlay vertically with an optional offset. + * Clears any previously set vertical position. + * + * @param offset Overlay offset from the vertical center. + */ + + + centerVertically(offset = '') { + this.top(offset); + this._alignItems = 'center'; + return this; + } + /** + * Apply the position to the element. + * @docs-private + */ + + + apply() { + // Since the overlay ref applies the strategy asynchronously, it could + // have been disposed before it ends up being applied. If that is the + // case, we shouldn't do anything. + if (!this._overlayRef || !this._overlayRef.hasAttached()) { + return; + } + + const styles = this._overlayRef.overlayElement.style; + const parentStyles = this._overlayRef.hostElement.style; + + const config = this._overlayRef.getConfig(); + + const { + width, + height, + maxWidth, + maxHeight + } = config; + const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') && (!maxWidth || maxWidth === '100%' || maxWidth === '100vw'); + const shouldBeFlushVertically = (height === '100%' || height === '100vh') && (!maxHeight || maxHeight === '100%' || maxHeight === '100vh'); + styles.position = this._cssPosition; + styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset; + styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset; + styles.marginBottom = this._bottomOffset; + styles.marginRight = this._rightOffset; + + if (shouldBeFlushHorizontally) { + parentStyles.justifyContent = 'flex-start'; + } else if (this._justifyContent === 'center') { + parentStyles.justifyContent = 'center'; + } else if (this._overlayRef.getConfig().direction === 'rtl') { + // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we + // don't want that because our positioning is explicitly `left` and `right`, hence + // why we do another inversion to ensure that the overlay stays in the same position. + // TODO: reconsider this if we add `start` and `end` methods. + if (this._justifyContent === 'flex-start') { + parentStyles.justifyContent = 'flex-end'; + } else if (this._justifyContent === 'flex-end') { + parentStyles.justifyContent = 'flex-start'; + } + } else { + parentStyles.justifyContent = this._justifyContent; + } + + parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems; + } + /** + * Cleans up the DOM changes from the position strategy. + * @docs-private + */ + + + dispose() { + if (this._isDisposed || !this._overlayRef) { + return; + } + + const styles = this._overlayRef.overlayElement.style; + const parent = this._overlayRef.hostElement; + const parentStyles = parent.style; + parent.classList.remove(wrapperClass); + parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop = styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = ''; + this._overlayRef = null; + this._isDisposed = true; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Builder for overlay position strategy. */ + + +class OverlayPositionBuilder { + constructor(_viewportRuler, _document, _platform, _overlayContainer) { + this._viewportRuler = _viewportRuler; + this._document = _document; + this._platform = _platform; + this._overlayContainer = _overlayContainer; + } + /** + * Creates a global position strategy. + */ + + + global() { + return new GlobalPositionStrategy(); + } + /** + * Creates a flexible position strategy. + * @param origin Origin relative to which to position the overlay. + */ + + + flexibleConnectedTo(origin) { + return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer); + } + +} + +OverlayPositionBuilder.ɵfac = function OverlayPositionBuilder_Factory(t) { + return new (t || OverlayPositionBuilder)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ViewportRuler), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](OverlayContainer)); +}; + +OverlayPositionBuilder.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: OverlayPositionBuilder, + factory: OverlayPositionBuilder.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](OverlayPositionBuilder, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ViewportRuler + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform + }, { + type: OverlayContainer + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Next overlay unique ID. */ + + +let nextUniqueId = 0; // Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver +// which needs to be different depending on where OverlayModule is imported. + +/** + * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be + * used as a low-level building block for other components. Dialogs, tooltips, menus, + * selects, etc. can all be built using overlays. The service should primarily be used by authors + * of re-usable components rather than developers building end-user applications. + * + * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one. + */ + +class Overlay { + constructor( + /** Scrolling strategies that can be used when creating an overlay. */ + scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher) { + this.scrollStrategies = scrollStrategies; + this._overlayContainer = _overlayContainer; + this._componentFactoryResolver = _componentFactoryResolver; + this._positionBuilder = _positionBuilder; + this._keyboardDispatcher = _keyboardDispatcher; + this._injector = _injector; + this._ngZone = _ngZone; + this._document = _document; + this._directionality = _directionality; + this._location = _location; + this._outsideClickDispatcher = _outsideClickDispatcher; + } + /** + * Creates an overlay. + * @param config Configuration applied to the overlay. + * @returns Reference to the created overlay. + */ + + + create(config) { + const host = this._createHostElement(); + + const pane = this._createPaneElement(host); + + const portalOutlet = this._createPortalOutlet(pane); + + const overlayConfig = new OverlayConfig(config); + overlayConfig.direction = overlayConfig.direction || this._directionality.value; + return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher); + } + /** + * Gets a position builder that can be used, via fluent API, + * to construct and configure a position strategy. + * @returns An overlay position builder. + */ + + + position() { + return this._positionBuilder; + } + /** + * Creates the DOM element for an overlay and appends it to the overlay container. + * @returns Newly-created pane element + */ + + + _createPaneElement(host) { + const pane = this._document.createElement('div'); + + pane.id = `cdk-overlay-${nextUniqueId++}`; + pane.classList.add('cdk-overlay-pane'); + host.appendChild(pane); + return pane; + } + /** + * Creates the host element that wraps around an overlay + * and can be used for advanced positioning. + * @returns Newly-create host element. + */ + + + _createHostElement() { + const host = this._document.createElement('div'); + + this._overlayContainer.getContainerElement().appendChild(host); + + return host; + } + /** + * Create a DomPortalOutlet into which the overlay content can be loaded. + * @param pane The DOM element to turn into a portal outlet. + * @returns A portal outlet for the given DOM element. + */ + + + _createPortalOutlet(pane) { + // We have to resolve the ApplicationRef later in order to allow people + // to use overlay-based providers during app initialization. + if (!this._appRef) { + this._appRef = this._injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_3__.ApplicationRef); + } + + return new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__.DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector, this._document); + } + +} + +Overlay.ɵfac = function Overlay_Factory(t) { + return new (t || Overlay)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](ScrollStrategyOptions), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](OverlayContainer), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.ComponentFactoryResolver), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](OverlayPositionBuilder), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](OverlayKeyboardDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.Injector), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.Location), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](OverlayOutsideClickDispatcher)); +}; + +Overlay.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: Overlay, + factory: Overlay.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](Overlay, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable + }], function () { + return [{ + type: ScrollStrategyOptions + }, { + type: OverlayContainer + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.ComponentFactoryResolver + }, { + type: OverlayPositionBuilder + }, { + type: OverlayKeyboardDispatcher + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injector + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }, { + type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality + }, { + type: _angular_common__WEBPACK_IMPORTED_MODULE_4__.Location + }, { + type: OverlayOutsideClickDispatcher + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Default set of positions for the overlay. Follows the behavior of a dropdown. */ + + +const defaultPositionList = [{ + originX: 'start', + originY: 'bottom', + overlayX: 'start', + overlayY: 'top' +}, { + originX: 'start', + originY: 'top', + overlayX: 'start', + overlayY: 'bottom' +}, { + originX: 'end', + originY: 'top', + overlayX: 'end', + overlayY: 'bottom' +}, { + originX: 'end', + originY: 'bottom', + overlayX: 'end', + overlayY: 'top' +}]; +/** Injection token that determines the scroll handling while the connected overlay is open. */ + +const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.InjectionToken('cdk-connected-overlay-scroll-strategy'); +/** + * Directive applied to an element to make it usable as an origin for an Overlay using a + * ConnectedPositionStrategy. + */ + +class CdkOverlayOrigin { + constructor( + /** Reference to the element on which the directive is applied. */ + elementRef) { + this.elementRef = elementRef; + } + +} + +CdkOverlayOrigin.ɵfac = function CdkOverlayOrigin_Factory(t) { + return new (t || CdkOverlayOrigin)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.ElementRef)); +}; + +CdkOverlayOrigin.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ + type: CdkOverlayOrigin, + selectors: [["", "cdk-overlay-origin", ""], ["", "overlay-origin", ""], ["", "cdkOverlayOrigin", ""]], + exportAs: ["cdkOverlayOrigin"] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkOverlayOrigin, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Directive, + args: [{ + selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]', + exportAs: 'cdkOverlayOrigin' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.ElementRef + }]; + }, null); +})(); +/** + * Directive to facilitate declarative creation of an + * Overlay using a FlexibleConnectedPositionStrategy. + */ + + +class CdkConnectedOverlay { + // TODO(jelbourn): inputs for size, scroll behavior, animation, etc. + constructor(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) { + this._overlay = _overlay; + this._dir = _dir; + this._hasBackdrop = false; + this._lockPosition = false; + this._growAfterOpen = false; + this._flexibleDimensions = false; + this._push = false; + this._backdropSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + this._attachSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + this._detachSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + this._positionSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__.Subscription.EMPTY; + /** Margin between the overlay and the viewport edges. */ + + this.viewportMargin = 0; + /** Whether the overlay is open. */ + + this.open = false; + /** Whether the overlay can be closed by user interaction. */ + + this.disableClose = false; + /** Event emitted when the backdrop is clicked. */ + + this.backdropClick = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + /** Event emitted when the position has changed. */ + + this.positionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + /** Event emitted when the overlay has been attached. */ + + this.attach = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + /** Event emitted when the overlay has been detached. */ + + this.detach = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + /** Emits when there are keyboard events that are targeted at the overlay. */ + + this.overlayKeydown = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + /** Emits when there are mouse outside click events that are targeted at the overlay. */ + + this.overlayOutsideClick = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + this._templatePortal = new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__.TemplatePortal(templateRef, viewContainerRef); + this._scrollStrategyFactory = scrollStrategyFactory; + this.scrollStrategy = this._scrollStrategyFactory(); + } + /** The offset in pixels for the overlay connection point on the x-axis */ + + + get offsetX() { + return this._offsetX; + } + + set offsetX(offsetX) { + this._offsetX = offsetX; + + if (this._position) { + this._updatePositionStrategy(this._position); + } + } + /** The offset in pixels for the overlay connection point on the y-axis */ + + + get offsetY() { + return this._offsetY; + } + + set offsetY(offsetY) { + this._offsetY = offsetY; + + if (this._position) { + this._updatePositionStrategy(this._position); + } + } + /** Whether or not the overlay should attach a backdrop. */ + + + get hasBackdrop() { + return this._hasBackdrop; + } + + set hasBackdrop(value) { + this._hasBackdrop = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); + } + /** Whether or not the overlay should be locked when scrolling. */ + + + get lockPosition() { + return this._lockPosition; + } + + set lockPosition(value) { + this._lockPosition = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); + } + /** Whether the overlay's width and height can be constrained to fit within the viewport. */ + + + get flexibleDimensions() { + return this._flexibleDimensions; + } + + set flexibleDimensions(value) { + this._flexibleDimensions = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); + } + /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */ + + + get growAfterOpen() { + return this._growAfterOpen; + } + + set growAfterOpen(value) { + this._growAfterOpen = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); + } + /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */ + + + get push() { + return this._push; + } + + set push(value) { + this._push = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); + } + /** The associated overlay reference. */ + + + get overlayRef() { + return this._overlayRef; + } + /** The element's layout direction. */ + + + get dir() { + return this._dir ? this._dir.value : 'ltr'; + } + + ngOnDestroy() { + this._attachSubscription.unsubscribe(); + + this._detachSubscription.unsubscribe(); + + this._backdropSubscription.unsubscribe(); + + this._positionSubscription.unsubscribe(); + + if (this._overlayRef) { + this._overlayRef.dispose(); + } + } + + ngOnChanges(changes) { + if (this._position) { + this._updatePositionStrategy(this._position); + + this._overlayRef.updateSize({ + width: this.width, + minWidth: this.minWidth, + height: this.height, + minHeight: this.minHeight + }); + + if (changes['origin'] && this.open) { + this._position.apply(); + } + } + + if (changes['open']) { + this.open ? this._attachOverlay() : this._detachOverlay(); + } + } + /** Creates an overlay */ + + + _createOverlay() { + if (!this.positions || !this.positions.length) { + this.positions = defaultPositionList; + } + + const overlayRef = this._overlayRef = this._overlay.create(this._buildConfig()); + + this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit()); + this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit()); + overlayRef.keydownEvents().subscribe(event => { + this.overlayKeydown.next(event); + + if (event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_13__.ESCAPE && !this.disableClose && !(0,_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_13__.hasModifierKey)(event)) { + event.preventDefault(); + + this._detachOverlay(); + } + }); + + this._overlayRef.outsidePointerEvents().subscribe(event => { + this.overlayOutsideClick.next(event); + }); + } + /** Builds the overlay config based on the directive's inputs */ + + + _buildConfig() { + const positionStrategy = this._position = this.positionStrategy || this._createPositionStrategy(); + + const overlayConfig = new OverlayConfig({ + direction: this._dir, + positionStrategy, + scrollStrategy: this.scrollStrategy, + hasBackdrop: this.hasBackdrop + }); + + if (this.width || this.width === 0) { + overlayConfig.width = this.width; + } + + if (this.height || this.height === 0) { + overlayConfig.height = this.height; + } + + if (this.minWidth || this.minWidth === 0) { + overlayConfig.minWidth = this.minWidth; + } + + if (this.minHeight || this.minHeight === 0) { + overlayConfig.minHeight = this.minHeight; + } + + if (this.backdropClass) { + overlayConfig.backdropClass = this.backdropClass; + } + + if (this.panelClass) { + overlayConfig.panelClass = this.panelClass; + } + + return overlayConfig; + } + /** Updates the state of a position strategy, based on the values of the directive inputs. */ + + + _updatePositionStrategy(positionStrategy) { + const positions = this.positions.map(currentPosition => ({ + originX: currentPosition.originX, + originY: currentPosition.originY, + overlayX: currentPosition.overlayX, + overlayY: currentPosition.overlayY, + offsetX: currentPosition.offsetX || this.offsetX, + offsetY: currentPosition.offsetY || this.offsetY, + panelClass: currentPosition.panelClass || undefined + })); + return positionStrategy.setOrigin(this._getFlexibleConnectedPositionStrategyOrigin()).withPositions(positions).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector); + } + /** Returns the position strategy of the overlay to be set on the overlay config */ + + + _createPositionStrategy() { + const strategy = this._overlay.position().flexibleConnectedTo(this._getFlexibleConnectedPositionStrategyOrigin()); + + this._updatePositionStrategy(strategy); + + return strategy; + } + + _getFlexibleConnectedPositionStrategyOrigin() { + if (this.origin instanceof CdkOverlayOrigin) { + return this.origin.elementRef; + } else { + return this.origin; + } + } + /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */ + + + _attachOverlay() { + if (!this._overlayRef) { + this._createOverlay(); + } else { + // Update the overlay size, in case the directive's inputs have changed + this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop; + } + + if (!this._overlayRef.hasAttached()) { + this._overlayRef.attach(this._templatePortal); + } + + if (this.hasBackdrop) { + this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => { + this.backdropClick.emit(event); + }); + } else { + this._backdropSubscription.unsubscribe(); + } + + this._positionSubscription.unsubscribe(); // Only subscribe to `positionChanges` if requested, because putting + // together all the information for it can be expensive. + + + if (this.positionChange.observers.length > 0) { + this._positionSubscription = this._position.positionChanges.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__.takeWhile)(() => this.positionChange.observers.length > 0)).subscribe(position => { + this.positionChange.emit(position); + + if (this.positionChange.observers.length === 0) { + this._positionSubscription.unsubscribe(); + } + }); + } + } + /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */ + + + _detachOverlay() { + if (this._overlayRef) { + this._overlayRef.detach(); + } + + this._backdropSubscription.unsubscribe(); + + this._positionSubscription.unsubscribe(); + } + +} + +CdkConnectedOverlay.ɵfac = function CdkConnectedOverlay_Factory(t) { + return new (t || CdkConnectedOverlay)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](Overlay), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, 8)); +}; + +CdkConnectedOverlay.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ + type: CdkConnectedOverlay, + selectors: [["", "cdk-connected-overlay", ""], ["", "connected-overlay", ""], ["", "cdkConnectedOverlay", ""]], + inputs: { + origin: ["cdkConnectedOverlayOrigin", "origin"], + positions: ["cdkConnectedOverlayPositions", "positions"], + positionStrategy: ["cdkConnectedOverlayPositionStrategy", "positionStrategy"], + offsetX: ["cdkConnectedOverlayOffsetX", "offsetX"], + offsetY: ["cdkConnectedOverlayOffsetY", "offsetY"], + width: ["cdkConnectedOverlayWidth", "width"], + height: ["cdkConnectedOverlayHeight", "height"], + minWidth: ["cdkConnectedOverlayMinWidth", "minWidth"], + minHeight: ["cdkConnectedOverlayMinHeight", "minHeight"], + backdropClass: ["cdkConnectedOverlayBackdropClass", "backdropClass"], + panelClass: ["cdkConnectedOverlayPanelClass", "panelClass"], + viewportMargin: ["cdkConnectedOverlayViewportMargin", "viewportMargin"], + scrollStrategy: ["cdkConnectedOverlayScrollStrategy", "scrollStrategy"], + open: ["cdkConnectedOverlayOpen", "open"], + disableClose: ["cdkConnectedOverlayDisableClose", "disableClose"], + transformOriginSelector: ["cdkConnectedOverlayTransformOriginOn", "transformOriginSelector"], + hasBackdrop: ["cdkConnectedOverlayHasBackdrop", "hasBackdrop"], + lockPosition: ["cdkConnectedOverlayLockPosition", "lockPosition"], + flexibleDimensions: ["cdkConnectedOverlayFlexibleDimensions", "flexibleDimensions"], + growAfterOpen: ["cdkConnectedOverlayGrowAfterOpen", "growAfterOpen"], + push: ["cdkConnectedOverlayPush", "push"] + }, + outputs: { + backdropClick: "backdropClick", + positionChange: "positionChange", + attach: "attach", + detach: "detach", + overlayKeydown: "overlayKeydown", + overlayOutsideClick: "overlayOutsideClick" + }, + exportAs: ["cdkConnectedOverlay"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkConnectedOverlay, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Directive, + args: [{ + selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]', + exportAs: 'cdkConnectedOverlay' + }] + }], function () { + return [{ + type: Overlay + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.ViewContainerRef + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY] + }] + }, { + type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Optional + }] + }]; + }, { + origin: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayOrigin'] + }], + positions: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayPositions'] + }], + positionStrategy: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayPositionStrategy'] + }], + offsetX: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayOffsetX'] + }], + offsetY: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayOffsetY'] + }], + width: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayWidth'] + }], + height: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayHeight'] + }], + minWidth: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayMinWidth'] + }], + minHeight: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayMinHeight'] + }], + backdropClass: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayBackdropClass'] + }], + panelClass: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayPanelClass'] + }], + viewportMargin: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayViewportMargin'] + }], + scrollStrategy: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayScrollStrategy'] + }], + open: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayOpen'] + }], + disableClose: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayDisableClose'] + }], + transformOriginSelector: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayTransformOriginOn'] + }], + hasBackdrop: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayHasBackdrop'] + }], + lockPosition: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayLockPosition'] + }], + flexibleDimensions: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayFlexibleDimensions'] + }], + growAfterOpen: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayGrowAfterOpen'] + }], + push: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Input, + args: ['cdkConnectedOverlayPush'] + }], + backdropClick: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }], + positionChange: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }], + attach: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }], + detach: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }], + overlayKeydown: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }], + overlayOutsideClick: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Output + }] + }); +})(); +/** @docs-private */ + + +function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) { + return () => overlay.scrollStrategies.reposition(); +} +/** @docs-private */ + + +const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = { + provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY, + deps: [Overlay], + useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY +}; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +class OverlayModule {} + +OverlayModule.ɵfac = function OverlayModule_Factory(t) { + return new (t || OverlayModule)(); +}; + +OverlayModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({ + type: OverlayModule +}); +OverlayModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({ + providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER], + imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__.PortalModule, _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollingModule], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollingModule] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](OverlayModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.NgModule, + args: [{ + imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__.PortalModule, _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollingModule], + exports: [CdkConnectedOverlay, CdkOverlayOrigin, _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__.ScrollingModule], + declarations: [CdkConnectedOverlay, CdkOverlayOrigin], + providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Alternative to OverlayContainer that supports correct displaying of overlay elements in + * Fullscreen mode + * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen + * + * Should be provided in the root component. + */ + + +class FullscreenOverlayContainer extends OverlayContainer { + constructor(_document, platform) { + super(_document, platform); + } + + ngOnDestroy() { + super.ngOnDestroy(); + + if (this._fullScreenEventName && this._fullScreenListener) { + this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener); + } + } + + _createContainer() { + super._createContainer(); + + this._adjustParentForFullscreenChange(); + + this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange()); + } + + _adjustParentForFullscreenChange() { + if (!this._containerElement) { + return; + } + + const fullscreenElement = this.getFullscreenElement(); + const parent = fullscreenElement || this._document.body; + parent.appendChild(this._containerElement); + } + + _addFullscreenChangeListener(fn) { + const eventName = this._getEventName(); + + if (eventName) { + if (this._fullScreenListener) { + this._document.removeEventListener(eventName, this._fullScreenListener); + } + + this._document.addEventListener(eventName, fn); + + this._fullScreenListener = fn; + } + } + + _getEventName() { + if (!this._fullScreenEventName) { + const _document = this._document; + + if (_document.fullscreenEnabled) { + this._fullScreenEventName = 'fullscreenchange'; + } else if (_document.webkitFullscreenEnabled) { + this._fullScreenEventName = 'webkitfullscreenchange'; + } else if (_document.mozFullScreenEnabled) { + this._fullScreenEventName = 'mozfullscreenchange'; + } else if (_document.msFullscreenEnabled) { + this._fullScreenEventName = 'MSFullscreenChange'; + } + } + + return this._fullScreenEventName; + } + /** + * When the page is put into fullscreen mode, a specific element is specified. + * Only that element and its children are visible when in fullscreen mode. + */ + + + getFullscreenElement() { + const _document = this._document; + return _document.fullscreenElement || _document.webkitFullscreenElement || _document.mozFullScreenElement || _document.msFullscreenElement || null; + } + +} + +FullscreenOverlayContainer.ɵfac = function FullscreenOverlayContainer_Factory(t) { + return new (t || FullscreenOverlayContainer)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform)); +}; + +FullscreenOverlayContainer.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: FullscreenOverlayContainer, + factory: FullscreenOverlayContainer.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](FullscreenOverlayContainer, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_3__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.DOCUMENT] + }] + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__.Platform + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 9107: +/*!*********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/platform.mjs ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Platform": () => (/* binding */ Platform), +/* harmony export */ "PlatformModule": () => (/* binding */ PlatformModule), +/* harmony export */ "_getEventTarget": () => (/* binding */ _getEventTarget), +/* harmony export */ "_getFocusedElementPierceShadowDom": () => (/* binding */ _getFocusedElementPierceShadowDom), +/* harmony export */ "_getShadowRoot": () => (/* binding */ _getShadowRoot), +/* harmony export */ "_isTestEnvironment": () => (/* binding */ _isTestEnvironment), +/* harmony export */ "_supportsShadowDom": () => (/* binding */ _supportsShadowDom), +/* harmony export */ "getRtlScrollAxisType": () => (/* binding */ getRtlScrollAxisType), +/* harmony export */ "getSupportedInputTypes": () => (/* binding */ getSupportedInputTypes), +/* harmony export */ "normalizePassiveListenerOptions": () => (/* binding */ normalizePassiveListenerOptions), +/* harmony export */ "supportsPassiveEventListeners": () => (/* binding */ supportsPassiveEventListeners), +/* harmony export */ "supportsScrollBehavior": () => (/* binding */ supportsScrollBehavior) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/common */ 4666); + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Whether the current platform supports the V8 Break Iterator. The V8 check +// is necessary to detect all Blink based browsers. + +let hasV8BreakIterator; // We need a try/catch around the reference to `Intl`, because accessing it in some cases can +// cause IE to throw. These cases are tied to particular versions of Windows and can happen if +// the consumer is providing a polyfilled `Map`. See: +// https://github.com/Microsoft/ChakraCore/issues/3189 +// https://github.com/angular/components/issues/15687 + +try { + hasV8BreakIterator = typeof Intl !== 'undefined' && Intl.v8BreakIterator; +} catch { + hasV8BreakIterator = false; +} +/** + * Service to detect the current platform by comparing the userAgent strings and + * checking browser-specific global properties. + */ + + +class Platform { + constructor(_platformId) { + this._platformId = _platformId; // We want to use the Angular platform check because if the Document is shimmed + // without the navigator, the following checks will fail. This is preferred because + // sometimes the Document may be shimmed without the user's knowledge or intention + + /** Whether the Angular application is being rendered in the browser. */ + + this.isBrowser = this._platformId ? (0,_angular_common__WEBPACK_IMPORTED_MODULE_0__.isPlatformBrowser)(this._platformId) : typeof document === 'object' && !!document; + /** Whether the current browser is Microsoft Edge. */ + + this.EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent); + /** Whether the current rendering engine is Microsoft Trident. */ + + this.TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent); // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check. + + /** Whether the current rendering engine is Blink. */ + + this.BLINK = this.isBrowser && !!(window.chrome || hasV8BreakIterator) && typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT; // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to + // ensure that Webkit runs standalone and is not used as another engine's base. + + /** Whether the current rendering engine is WebKit. */ + + this.WEBKIT = this.isBrowser && /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT; + /** Whether the current platform is Apple iOS. */ + + this.IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window); // It's difficult to detect the plain Gecko engine, because most of the browsers identify + // them self as Gecko-like browsers and modify the userAgent's according to that. + // Since we only cover one explicit Firefox case, we can simply check for Firefox + // instead of having an unstable check for Gecko. + + /** Whether the current browser is Firefox. */ + + this.FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent); + /** Whether the current platform is Android. */ + // Trident on mobile adds the android platform to the userAgent to trick detections. + + this.ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT; // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake + // this and just place the Safari keyword in the userAgent. To be more safe about Safari every + // Safari browser should also use Webkit as its layout engine. + + /** Whether the current browser is Safari. */ + + this.SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT; + } + +} + +Platform.ɵfac = function Platform_Factory(t) { + return new (t || Platform)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.PLATFORM_ID)); +}; + +Platform.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ + token: Platform, + factory: Platform.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Platform, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: Object, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__.PLATFORM_ID] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class PlatformModule {} + +PlatformModule.ɵfac = function PlatformModule_Factory(t) { + return new (t || PlatformModule)(); +}; + +PlatformModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ + type: PlatformModule +}); +PlatformModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](PlatformModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.NgModule, + args: [{}] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Cached result Set of input types support by the current browser. */ + + +let supportedInputTypes; +/** Types of `` that *might* be supported. */ + +const candidateInputTypes = [// `color` must come first. Chrome 56 shows a warning if we change the type to `color` after +// first changing it to something else: +// The specified value "" does not conform to the required format. +// The format is "#rrggbb" where rr, gg, bb are two-digit hexadecimal numbers. +'color', 'button', 'checkbox', 'date', 'datetime-local', 'email', 'file', 'hidden', 'image', 'month', 'number', 'password', 'radio', 'range', 'reset', 'search', 'submit', 'tel', 'text', 'time', 'url', 'week']; +/** @returns The input types supported by this browser. */ + +function getSupportedInputTypes() { + // Result is cached. + if (supportedInputTypes) { + return supportedInputTypes; + } // We can't check if an input type is not supported until we're on the browser, so say that + // everything is supported when not on the browser. We don't use `Platform` here since it's + // just a helper function and can't inject it. + + + if (typeof document !== 'object' || !document) { + supportedInputTypes = new Set(candidateInputTypes); + return supportedInputTypes; + } + + let featureTestInput = document.createElement('input'); + supportedInputTypes = new Set(candidateInputTypes.filter(value => { + featureTestInput.setAttribute('type', value); + return featureTestInput.type === value; + })); + return supportedInputTypes; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Cached result of whether the user's browser supports passive event listeners. */ + + +let supportsPassiveEvents; +/** + * Checks whether the user's browser supports passive event listeners. + * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md + */ + +function supportsPassiveEventListeners() { + if (supportsPassiveEvents == null && typeof window !== 'undefined') { + try { + window.addEventListener('test', null, Object.defineProperty({}, 'passive', { + get: () => supportsPassiveEvents = true + })); + } finally { + supportsPassiveEvents = supportsPassiveEvents || false; + } + } + + return supportsPassiveEvents; +} +/** + * Normalizes an `AddEventListener` object to something that can be passed + * to `addEventListener` on any browser, no matter whether it supports the + * `options` parameter. + * @param options Object to be normalized. + */ + + +function normalizePassiveListenerOptions(options) { + return supportsPassiveEventListeners() ? options : !!options.capture; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */ + + +let rtlScrollAxisType; +/** Cached result of the check that indicates whether the browser supports scroll behaviors. */ + +let scrollBehaviorSupported; +/** Check whether the browser supports scroll behaviors. */ + +function supportsScrollBehavior() { + if (scrollBehaviorSupported == null) { + // If we're not in the browser, it can't be supported. Also check for `Element`, because + // some projects stub out the global `document` during SSR which can throw us off. + if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) { + scrollBehaviorSupported = false; + return scrollBehaviorSupported; + } // If the element can have a `scrollBehavior` style, we can be sure that it's supported. + + + if ('scrollBehavior' in document.documentElement.style) { + scrollBehaviorSupported = true; + } else { + // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's + // supported but it doesn't handle scroll behavior, or it has been polyfilled. + const scrollToFunction = Element.prototype.scrollTo; + + if (scrollToFunction) { + // We can detect if the function has been polyfilled by calling `toString` on it. Native + // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get + // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider + // polyfilled functions as supporting scroll behavior. + scrollBehaviorSupported = !/\{\s*\[native code\]\s*\}/.test(scrollToFunction.toString()); + } else { + scrollBehaviorSupported = false; + } + } + } + + return scrollBehaviorSupported; +} +/** + * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL, + * Firefox & Safari are NEGATED, and IE & Edge are INVERTED. + */ + + +function getRtlScrollAxisType() { + // We can't check unless we're on the browser. Just assume 'normal' if we're not. + if (typeof document !== 'object' || !document) { + return 0 + /* NORMAL */ + ; + } + + if (rtlScrollAxisType == null) { + // Create a 1px wide scrolling container and a 2px wide content element. + const scrollContainer = document.createElement('div'); + const containerStyle = scrollContainer.style; + scrollContainer.dir = 'rtl'; + containerStyle.width = '1px'; + containerStyle.overflow = 'auto'; + containerStyle.visibility = 'hidden'; + containerStyle.pointerEvents = 'none'; + containerStyle.position = 'absolute'; + const content = document.createElement('div'); + const contentStyle = content.style; + contentStyle.width = '2px'; + contentStyle.height = '1px'; + scrollContainer.appendChild(content); + document.body.appendChild(scrollContainer); + rtlScrollAxisType = 0 + /* NORMAL */ + ; // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL + // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're + // dealing with one of the other two types of browsers. + + if (scrollContainer.scrollLeft === 0) { + // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an + // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by + // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will + // return 0 when we read it again. + scrollContainer.scrollLeft = 1; + rtlScrollAxisType = scrollContainer.scrollLeft === 0 ? 1 + /* NEGATED */ + : 2 + /* INVERTED */ + ; + } + + scrollContainer.remove(); + } + + return rtlScrollAxisType; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +let shadowDomIsSupported; +/** Checks whether the user's browser support Shadow DOM. */ + +function _supportsShadowDom() { + if (shadowDomIsSupported == null) { + const head = typeof document !== 'undefined' ? document.head : null; + shadowDomIsSupported = !!(head && (head.createShadowRoot || head.attachShadow)); + } + + return shadowDomIsSupported; +} +/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */ + + +function _getShadowRoot(element) { + if (_supportsShadowDom()) { + const rootNode = element.getRootNode ? element.getRootNode() : null; // Note that this should be caught by `_supportsShadowDom`, but some + // teams have been able to hit this code path on unsupported browsers. + + if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) { + return rootNode; + } + } + + return null; +} +/** + * Gets the currently-focused element on the page while + * also piercing through Shadow DOM boundaries. + */ + + +function _getFocusedElementPierceShadowDom() { + let activeElement = typeof document !== 'undefined' && document ? document.activeElement : null; + + while (activeElement && activeElement.shadowRoot) { + const newActiveElement = activeElement.shadowRoot.activeElement; + + if (newActiveElement === activeElement) { + break; + } else { + activeElement = newActiveElement; + } + } + + return activeElement; +} +/** Gets the target of an event while accounting for Shadow DOM. */ + + +function _getEventTarget(event) { + // If an event is bound outside the Shadow DOM, the `event.target` will + // point to the shadow root so we have to use `composedPath` instead. + return event.composedPath ? event.composedPath()[0] : event.target; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +let testGlobals; // We check the Node-specific `global` first, because tools tend to add a fake +// `window` in Node environments which won't actually receive global variables. + +if (typeof global !== 'undefined') { + testGlobals = global; +} else if (typeof window !== 'undefined') { + testGlobals = window; +} else { + testGlobals = {}; +} +/** Gets whether the code is currently running in a test environment. */ + + +function _isTestEnvironment() { + return typeof testGlobals.__karma__ !== 'undefined' && !!testGlobals.__karma__ || typeof testGlobals.jasmine !== 'undefined' && !!testGlobals.jasmine || typeof testGlobals.jest !== 'undefined' && !!testGlobals.jest || typeof testGlobals.Mocha !== 'undefined' && !!testGlobals.Mocha; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 7520: +/*!*******************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/portal.mjs ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BasePortalHost": () => (/* binding */ BasePortalHost), +/* harmony export */ "BasePortalOutlet": () => (/* binding */ BasePortalOutlet), +/* harmony export */ "CdkPortal": () => (/* binding */ CdkPortal), +/* harmony export */ "CdkPortalOutlet": () => (/* binding */ CdkPortalOutlet), +/* harmony export */ "ComponentPortal": () => (/* binding */ ComponentPortal), +/* harmony export */ "DomPortal": () => (/* binding */ DomPortal), +/* harmony export */ "DomPortalHost": () => (/* binding */ DomPortalHost), +/* harmony export */ "DomPortalOutlet": () => (/* binding */ DomPortalOutlet), +/* harmony export */ "Portal": () => (/* binding */ Portal), +/* harmony export */ "PortalHostDirective": () => (/* binding */ PortalHostDirective), +/* harmony export */ "PortalInjector": () => (/* binding */ PortalInjector), +/* harmony export */ "PortalModule": () => (/* binding */ PortalModule), +/* harmony export */ "TemplatePortal": () => (/* binding */ TemplatePortal), +/* harmony export */ "TemplatePortalDirective": () => (/* binding */ TemplatePortalDirective) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ 4666); + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Throws an exception when attempting to attach a null portal to a host. + * @docs-private + */ + +function throwNullPortalError() { + throw Error('Must provide a portal to attach'); +} +/** + * Throws an exception when attempting to attach a portal to a host that is already attached. + * @docs-private + */ + + +function throwPortalAlreadyAttachedError() { + throw Error('Host already has a portal attached'); +} +/** + * Throws an exception when attempting to attach a portal to an already-disposed host. + * @docs-private + */ + + +function throwPortalOutletAlreadyDisposedError() { + throw Error('This PortalOutlet has already been disposed'); +} +/** + * Throws an exception when attempting to attach an unknown portal type. + * @docs-private + */ + + +function throwUnknownPortalTypeError() { + throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' + 'a ComponentPortal or a TemplatePortal.'); +} +/** + * Throws an exception when attempting to attach a portal to a null host. + * @docs-private + */ + + +function throwNullPortalOutletError() { + throw Error('Attempting to attach a portal to a null PortalOutlet'); +} +/** + * Throws an exception when attempting to detach a portal that is not attached. + * @docs-private + */ + + +function throwNoPortalAttachedError() { + throw Error('Attempting to detach a portal that is not attached to a host'); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A `Portal` is something that you want to render somewhere else. + * It can be attach to / detached from a `PortalOutlet`. + */ + + +class Portal { + /** Attach this portal to a host. */ + attach(host) { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + if (host == null) { + throwNullPortalOutletError(); + } + + if (host.hasAttached()) { + throwPortalAlreadyAttachedError(); + } + } + + this._attachedHost = host; + return host.attach(this); + } + /** Detach this portal from its host */ + + + detach() { + let host = this._attachedHost; + + if (host != null) { + this._attachedHost = null; + host.detach(); + } else if (typeof ngDevMode === 'undefined' || ngDevMode) { + throwNoPortalAttachedError(); + } + } + /** Whether this portal is attached to a host. */ + + + get isAttached() { + return this._attachedHost != null; + } + /** + * Sets the PortalOutlet reference without performing `attach()`. This is used directly by + * the PortalOutlet when it is performing an `attach()` or `detach()`. + */ + + + setAttachedHost(host) { + this._attachedHost = host; + } + +} +/** + * A `ComponentPortal` is a portal that instantiates some Component upon attachment. + */ + + +class ComponentPortal extends Portal { + constructor(component, viewContainerRef, injector, componentFactoryResolver) { + super(); + this.component = component; + this.viewContainerRef = viewContainerRef; + this.injector = injector; + this.componentFactoryResolver = componentFactoryResolver; + } + +} +/** + * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef). + */ + + +class TemplatePortal extends Portal { + constructor(template, viewContainerRef, context) { + super(); + this.templateRef = template; + this.viewContainerRef = viewContainerRef; + this.context = context; + } + + get origin() { + return this.templateRef.elementRef; + } + /** + * Attach the portal to the provided `PortalOutlet`. + * When a context is provided it will override the `context` property of the `TemplatePortal` + * instance. + */ + + + attach(host, context = this.context) { + this.context = context; + return super.attach(host); + } + + detach() { + this.context = undefined; + return super.detach(); + } + +} +/** + * A `DomPortal` is a portal whose DOM element will be taken from its current position + * in the DOM and moved into a portal outlet, when it is attached. On detach, the content + * will be restored to its original position. + */ + + +class DomPortal extends Portal { + constructor(element) { + super(); + this.element = element instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef ? element.nativeElement : element; + } + +} +/** + * Partial implementation of PortalOutlet that handles attaching + * ComponentPortal and TemplatePortal. + */ + + +class BasePortalOutlet { + constructor() { + /** Whether this host has already been permanently disposed. */ + this._isDisposed = false; // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method. + + this.attachDomPortal = null; + } + /** Whether this host has an attached portal. */ + + + hasAttached() { + return !!this._attachedPortal; + } + /** Attaches a portal. */ + + + attach(portal) { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + if (!portal) { + throwNullPortalError(); + } + + if (this.hasAttached()) { + throwPortalAlreadyAttachedError(); + } + + if (this._isDisposed) { + throwPortalOutletAlreadyDisposedError(); + } + } + + if (portal instanceof ComponentPortal) { + this._attachedPortal = portal; + return this.attachComponentPortal(portal); + } else if (portal instanceof TemplatePortal) { + this._attachedPortal = portal; + return this.attachTemplatePortal(portal); // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`. + } else if (this.attachDomPortal && portal instanceof DomPortal) { + this._attachedPortal = portal; + return this.attachDomPortal(portal); + } + + if (typeof ngDevMode === 'undefined' || ngDevMode) { + throwUnknownPortalTypeError(); + } + } + /** Detaches a previously attached portal. */ + + + detach() { + if (this._attachedPortal) { + this._attachedPortal.setAttachedHost(null); + + this._attachedPortal = null; + } + + this._invokeDisposeFn(); + } + /** Permanently dispose of this portal host. */ + + + dispose() { + if (this.hasAttached()) { + this.detach(); + } + + this._invokeDisposeFn(); + + this._isDisposed = true; + } + /** @docs-private */ + + + setDisposeFn(fn) { + this._disposeFn = fn; + } + + _invokeDisposeFn() { + if (this._disposeFn) { + this._disposeFn(); + + this._disposeFn = null; + } + } + +} +/** + * @deprecated Use `BasePortalOutlet` instead. + * @breaking-change 9.0.0 + */ + + +class BasePortalHost extends BasePortalOutlet {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular + * application context. + */ + + +class DomPortalOutlet extends BasePortalOutlet { + constructor( + /** Element into which the content is projected. */ + outletElement, _componentFactoryResolver, _appRef, _defaultInjector, + /** + * @deprecated `_document` Parameter to be made required. + * @breaking-change 10.0.0 + */ + _document) { + super(); + this.outletElement = outletElement; + this._componentFactoryResolver = _componentFactoryResolver; + this._appRef = _appRef; + this._defaultInjector = _defaultInjector; + /** + * Attaches a DOM portal by transferring its content into the outlet. + * @param portal Portal to be attached. + * @deprecated To be turned into a method. + * @breaking-change 10.0.0 + */ + + this.attachDomPortal = portal => { + // @breaking-change 10.0.0 Remove check and error once the + // `_document` constructor parameter is required. + if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('Cannot attach DOM portal without _document constructor parameter'); + } + + const element = portal.element; + + if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('DOM portal content must be attached to a parent node.'); + } // Anchor used to save the element's previous position so + // that we can restore it when the portal is detached. + + + const anchorNode = this._document.createComment('dom-portal'); + + element.parentNode.insertBefore(anchorNode, element); + this.outletElement.appendChild(element); + this._attachedPortal = portal; + super.setDisposeFn(() => { + // We can't use `replaceWith` here because IE doesn't support it. + if (anchorNode.parentNode) { + anchorNode.parentNode.replaceChild(element, anchorNode); + } + }); + }; + + this._document = _document; + } + /** + * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver. + * @param portal Portal to be attached + * @returns Reference to the created component. + */ + + + attachComponentPortal(portal) { + const resolver = portal.componentFactoryResolver || this._componentFactoryResolver; + const componentFactory = resolver.resolveComponentFactory(portal.component); + let componentRef; // If the portal specifies a ViewContainerRef, we will use that as the attachment point + // for the component (in terms of Angular's component tree, not rendering). + // When the ViewContainerRef is missing, we use the factory to create the component directly + // and then manually attach the view to the application. + + if (portal.viewContainerRef) { + componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector); + this.setDisposeFn(() => componentRef.destroy()); + } else { + componentRef = componentFactory.create(portal.injector || this._defaultInjector); + + this._appRef.attachView(componentRef.hostView); + + this.setDisposeFn(() => { + this._appRef.detachView(componentRef.hostView); + + componentRef.destroy(); + }); + } // At this point the component has been instantiated, so we move it to the location in the DOM + // where we want it to be rendered. + + + this.outletElement.appendChild(this._getComponentRootNode(componentRef)); + this._attachedPortal = portal; + return componentRef; + } + /** + * Attaches a template portal to the DOM as an embedded view. + * @param portal Portal to be attached. + * @returns Reference to the created embedded view. + */ + + + attachTemplatePortal(portal) { + let viewContainer = portal.viewContainerRef; + let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context); // The method `createEmbeddedView` will add the view as a child of the viewContainer. + // But for the DomPortalOutlet the view can be added everywhere in the DOM + // (e.g Overlay Container) To move the view to the specified host element. We just + // re-append the existing root nodes. + + viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode)); // Note that we want to detect changes after the nodes have been moved so that + // any directives inside the portal that are looking at the DOM inside a lifecycle + // hook won't be invoked too early. + + viewRef.detectChanges(); + this.setDisposeFn(() => { + let index = viewContainer.indexOf(viewRef); + + if (index !== -1) { + viewContainer.remove(index); + } + }); + this._attachedPortal = portal; // TODO(jelbourn): Return locals from view. + + return viewRef; + } + /** + * Clears out a portal from the DOM. + */ + + + dispose() { + super.dispose(); + this.outletElement.remove(); + } + /** Gets the root HTMLElement for an instantiated component. */ + + + _getComponentRootNode(componentRef) { + return componentRef.hostView.rootNodes[0]; + } + +} +/** + * @deprecated Use `DomPortalOutlet` instead. + * @breaking-change 9.0.0 + */ + + +class DomPortalHost extends DomPortalOutlet {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal, + * the directive instance itself can be attached to a host, enabling declarative use of portals. + */ + + +class CdkPortal extends TemplatePortal { + constructor(templateRef, viewContainerRef) { + super(templateRef, viewContainerRef); + } + +} + +CdkPortal.ɵfac = function CdkPortal_Factory(t) { + return new (t || CdkPortal)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef)); +}; + +CdkPortal.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkPortal, + selectors: [["", "cdkPortal", ""]], + exportAs: ["cdkPortal"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkPortal, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkPortal]', + exportAs: 'cdkPortal' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }]; + }, null); +})(); +/** + * @deprecated Use `CdkPortal` instead. + * @breaking-change 9.0.0 + */ + + +class TemplatePortalDirective extends CdkPortal {} + +TemplatePortalDirective.ɵfac = /* @__PURE__ */function () { + let ɵTemplatePortalDirective_BaseFactory; + return function TemplatePortalDirective_Factory(t) { + return (ɵTemplatePortalDirective_BaseFactory || (ɵTemplatePortalDirective_BaseFactory = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](TemplatePortalDirective)))(t || TemplatePortalDirective); + }; +}(); + +TemplatePortalDirective.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: TemplatePortalDirective, + selectors: [["", "cdk-portal", ""], ["", "portal", ""]], + exportAs: ["cdkPortal"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: CdkPortal, + useExisting: TemplatePortalDirective + }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TemplatePortalDirective, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdk-portal], [portal]', + exportAs: 'cdkPortal', + providers: [{ + provide: CdkPortal, + useExisting: TemplatePortalDirective + }] + }] + }], null, null); +})(); +/** + * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be + * directly attached to it, enabling declarative use. + * + * Usage: + * `` + */ + + +class CdkPortalOutlet extends BasePortalOutlet { + constructor(_componentFactoryResolver, _viewContainerRef, + /** + * @deprecated `_document` parameter to be made required. + * @breaking-change 9.0.0 + */ + _document) { + super(); + this._componentFactoryResolver = _componentFactoryResolver; + this._viewContainerRef = _viewContainerRef; + /** Whether the portal component is initialized. */ + + this._isInitialized = false; + /** Emits when a portal is attached to the outlet. */ + + this.attached = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + /** + * Attaches the given DomPortal to this PortalHost by moving all of the portal content into it. + * @param portal Portal to be attached. + * @deprecated To be turned into a method. + * @breaking-change 10.0.0 + */ + + this.attachDomPortal = portal => { + // @breaking-change 9.0.0 Remove check and error once the + // `_document` constructor parameter is required. + if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('Cannot attach DOM portal without _document constructor parameter'); + } + + const element = portal.element; + + if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('DOM portal content must be attached to a parent node.'); + } // Anchor used to save the element's previous position so + // that we can restore it when the portal is detached. + + + const anchorNode = this._document.createComment('dom-portal'); + + portal.setAttachedHost(this); + element.parentNode.insertBefore(anchorNode, element); + + this._getRootNode().appendChild(element); + + this._attachedPortal = portal; + super.setDisposeFn(() => { + if (anchorNode.parentNode) { + anchorNode.parentNode.replaceChild(element, anchorNode); + } + }); + }; + + this._document = _document; + } + /** Portal associated with the Portal outlet. */ + + + get portal() { + return this._attachedPortal; + } + + set portal(portal) { + // Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have + // run. This handles the cases where the user might do something like `
` + // and attach a portal programmatically in the parent component. When Angular does the first CD + // round, it will fire the setter with empty string, causing the user's content to be cleared. + if (this.hasAttached() && !portal && !this._isInitialized) { + return; + } + + if (this.hasAttached()) { + super.detach(); + } + + if (portal) { + super.attach(portal); + } + + this._attachedPortal = portal; + } + /** Component or view reference that is attached to the portal. */ + + + get attachedRef() { + return this._attachedRef; + } + + ngOnInit() { + this._isInitialized = true; + } + + ngOnDestroy() { + super.dispose(); + this._attachedPortal = null; + this._attachedRef = null; + } + /** + * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver. + * + * @param portal Portal to be attached to the portal outlet. + * @returns Reference to the created component. + */ + + + attachComponentPortal(portal) { + portal.setAttachedHost(this); // If the portal specifies an origin, use that as the logical location of the component + // in the application tree. Otherwise use the location of this PortalOutlet. + + const viewContainerRef = portal.viewContainerRef != null ? portal.viewContainerRef : this._viewContainerRef; + const resolver = portal.componentFactoryResolver || this._componentFactoryResolver; + const componentFactory = resolver.resolveComponentFactory(portal.component); + const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector); // If we're using a view container that's different from the injected one (e.g. when the portal + // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered + // inside of the alternate view container. + + if (viewContainerRef !== this._viewContainerRef) { + this._getRootNode().appendChild(ref.hostView.rootNodes[0]); + } + + super.setDisposeFn(() => ref.destroy()); + this._attachedPortal = portal; + this._attachedRef = ref; + this.attached.emit(ref); + return ref; + } + /** + * Attach the given TemplatePortal to this PortalHost as an embedded View. + * @param portal Portal to be attached. + * @returns Reference to the created embedded view. + */ + + + attachTemplatePortal(portal) { + portal.setAttachedHost(this); + + const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context); + + super.setDisposeFn(() => this._viewContainerRef.clear()); + this._attachedPortal = portal; + this._attachedRef = viewRef; + this.attached.emit(viewRef); + return viewRef; + } + /** Gets the root node of the portal outlet. */ + + + _getRootNode() { + const nativeElement = this._viewContainerRef.element.nativeElement; // The directive could be set on a template which will result in a comment + // node being the root. Use the comment's parent node if that is the case. + + return nativeElement.nodeType === nativeElement.ELEMENT_NODE ? nativeElement : nativeElement.parentNode; + } + +} + +CdkPortalOutlet.ɵfac = function CdkPortalOutlet_Factory(t) { + return new (t || CdkPortalOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ComponentFactoryResolver), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT)); +}; + +CdkPortalOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkPortalOutlet, + selectors: [["", "cdkPortalOutlet", ""]], + inputs: { + portal: ["cdkPortalOutlet", "portal"] + }, + outputs: { + attached: "attached" + }, + exportAs: ["cdkPortalOutlet"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkPortalOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkPortalOutlet]', + exportAs: 'cdkPortalOutlet', + inputs: ['portal: cdkPortalOutlet'] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ComponentFactoryResolver + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.DOCUMENT] + }] + }]; + }, { + attached: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Output + }] + }); +})(); +/** + * @deprecated Use `CdkPortalOutlet` instead. + * @breaking-change 9.0.0 + */ + + +class PortalHostDirective extends CdkPortalOutlet {} + +PortalHostDirective.ɵfac = /* @__PURE__ */function () { + let ɵPortalHostDirective_BaseFactory; + return function PortalHostDirective_Factory(t) { + return (ɵPortalHostDirective_BaseFactory || (ɵPortalHostDirective_BaseFactory = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](PortalHostDirective)))(t || PortalHostDirective); + }; +}(); + +PortalHostDirective.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: PortalHostDirective, + selectors: [["", "cdkPortalHost", ""], ["", "portalHost", ""]], + inputs: { + portal: ["cdkPortalHost", "portal"] + }, + exportAs: ["cdkPortalHost"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: CdkPortalOutlet, + useExisting: PortalHostDirective + }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PortalHostDirective, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkPortalHost], [portalHost]', + exportAs: 'cdkPortalHost', + inputs: ['portal: cdkPortalHost'], + providers: [{ + provide: CdkPortalOutlet, + useExisting: PortalHostDirective + }] + }] + }], null, null); +})(); + +class PortalModule {} + +PortalModule.ɵfac = function PortalModule_Factory(t) { + return new (t || PortalModule)(); +}; + +PortalModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: PortalModule +}); +PortalModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PortalModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective], + declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Custom injector to be used when providing custom + * injection tokens to components inside a portal. + * @docs-private + * @deprecated Use `Injector.create` instead. + * @breaking-change 11.0.0 + */ + + +class PortalInjector { + constructor(_parentInjector, _customTokens) { + this._parentInjector = _parentInjector; + this._customTokens = _customTokens; + } + + get(token, notFoundValue) { + const value = this._customTokens.get(token); + + if (typeof value !== 'undefined') { + return value; + } + + return this._parentInjector.get(token, notFoundValue); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 6328: +/*!**********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/scrolling.mjs ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CdkFixedSizeVirtualScroll": () => (/* binding */ CdkFixedSizeVirtualScroll), +/* harmony export */ "CdkScrollable": () => (/* binding */ CdkScrollable), +/* harmony export */ "CdkScrollableModule": () => (/* binding */ CdkScrollableModule), +/* harmony export */ "CdkVirtualForOf": () => (/* binding */ CdkVirtualForOf), +/* harmony export */ "CdkVirtualScrollViewport": () => (/* binding */ CdkVirtualScrollViewport), +/* harmony export */ "DEFAULT_RESIZE_TIME": () => (/* binding */ DEFAULT_RESIZE_TIME), +/* harmony export */ "DEFAULT_SCROLL_TIME": () => (/* binding */ DEFAULT_SCROLL_TIME), +/* harmony export */ "FixedSizeVirtualScrollStrategy": () => (/* binding */ FixedSizeVirtualScrollStrategy), +/* harmony export */ "ScrollDispatcher": () => (/* binding */ ScrollDispatcher), +/* harmony export */ "ScrollingModule": () => (/* binding */ ScrollingModule), +/* harmony export */ "VIRTUAL_SCROLL_STRATEGY": () => (/* binding */ VIRTUAL_SCROLL_STRATEGY), +/* harmony export */ "ViewportRuler": () => (/* binding */ ViewportRuler), +/* harmony export */ "_fixedSizeVirtualScrollStrategyFactory": () => (/* binding */ _fixedSizeVirtualScrollStrategyFactory) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ 745); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 833); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs */ 3280); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rxjs */ 8184); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rxjs */ 9672); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! rxjs */ 6078); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! rxjs */ 4437); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ 8977); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ 998); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs/operators */ 116); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! rxjs/operators */ 4874); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! rxjs/operators */ 679); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! rxjs/operators */ 2673); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! rxjs/operators */ 9196); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/cdk/bidi */ 2867); +/* harmony import */ var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/cdk/collections */ 1755); + + + + + + + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** The injection token used to specify the virtual scrolling strategy. */ + +const _c0 = ["contentWrapper"]; +const _c1 = ["*"]; +const VIRTUAL_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('VIRTUAL_SCROLL_STRATEGY'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Virtual scrolling strategy for lists with items of known fixed size. */ + +class FixedSizeVirtualScrollStrategy { + /** + * @param itemSize The size of the items in the virtually scrolling list. + * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more + * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more. + */ + constructor(itemSize, minBufferPx, maxBufferPx) { + this._scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** @docs-private Implemented as part of VirtualScrollStrategy. */ + + this.scrolledIndexChange = this._scrolledIndexChange.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_2__.distinctUntilChanged)()); + /** The attached viewport. */ + + this._viewport = null; + this._itemSize = itemSize; + this._minBufferPx = minBufferPx; + this._maxBufferPx = maxBufferPx; + } + /** + * Attaches this scroll strategy to a viewport. + * @param viewport The viewport to attach this strategy to. + */ + + + attach(viewport) { + this._viewport = viewport; + + this._updateTotalContentSize(); + + this._updateRenderedRange(); + } + /** Detaches this scroll strategy from the currently attached viewport. */ + + + detach() { + this._scrolledIndexChange.complete(); + + this._viewport = null; + } + /** + * Update the item size and buffer size. + * @param itemSize The size of the items in the virtually scrolling list. + * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more + * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more. + */ + + + updateItemAndBufferSize(itemSize, minBufferPx, maxBufferPx) { + if (maxBufferPx < minBufferPx && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx'); + } + + this._itemSize = itemSize; + this._minBufferPx = minBufferPx; + this._maxBufferPx = maxBufferPx; + + this._updateTotalContentSize(); + + this._updateRenderedRange(); + } + /** @docs-private Implemented as part of VirtualScrollStrategy. */ + + + onContentScrolled() { + this._updateRenderedRange(); + } + /** @docs-private Implemented as part of VirtualScrollStrategy. */ + + + onDataLengthChanged() { + this._updateTotalContentSize(); + + this._updateRenderedRange(); + } + /** @docs-private Implemented as part of VirtualScrollStrategy. */ + + + onContentRendered() { + /* no-op */ + } + /** @docs-private Implemented as part of VirtualScrollStrategy. */ + + + onRenderedOffsetChanged() { + /* no-op */ + } + /** + * Scroll to the offset for the given index. + * @param index The index of the element to scroll to. + * @param behavior The ScrollBehavior to use when scrolling. + */ + + + scrollToIndex(index, behavior) { + if (this._viewport) { + this._viewport.scrollToOffset(index * this._itemSize, behavior); + } + } + /** Update the viewport's total content size. */ + + + _updateTotalContentSize() { + if (!this._viewport) { + return; + } + + this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize); + } + /** Update the viewport's rendered range. */ + + + _updateRenderedRange() { + if (!this._viewport) { + return; + } + + const renderedRange = this._viewport.getRenderedRange(); + + const newRange = { + start: renderedRange.start, + end: renderedRange.end + }; + + const viewportSize = this._viewport.getViewportSize(); + + const dataLength = this._viewport.getDataLength(); + + let scrollOffset = this._viewport.measureScrollOffset(); // Prevent NaN as result when dividing by zero. + + + let firstVisibleIndex = this._itemSize > 0 ? scrollOffset / this._itemSize : 0; // If user scrolls to the bottom of the list and data changes to a smaller list + + if (newRange.end > dataLength) { + // We have to recalculate the first visible index based on new data length and viewport size. + const maxVisibleItems = Math.ceil(viewportSize / this._itemSize); + const newVisibleIndex = Math.max(0, Math.min(firstVisibleIndex, dataLength - maxVisibleItems)); // If first visible index changed we must update scroll offset to handle start/end buffers + // Current range must also be adjusted to cover the new position (bottom of new list). + + if (firstVisibleIndex != newVisibleIndex) { + firstVisibleIndex = newVisibleIndex; + scrollOffset = newVisibleIndex * this._itemSize; + newRange.start = Math.floor(firstVisibleIndex); + } + + newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems)); + } + + const startBuffer = scrollOffset - newRange.start * this._itemSize; + + if (startBuffer < this._minBufferPx && newRange.start != 0) { + const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize); + newRange.start = Math.max(0, newRange.start - expandStart); + newRange.end = Math.min(dataLength, Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize)); + } else { + const endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize); + + if (endBuffer < this._minBufferPx && newRange.end != dataLength) { + const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize); + + if (expandEnd > 0) { + newRange.end = Math.min(dataLength, newRange.end + expandEnd); + newRange.start = Math.max(0, Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize)); + } + } + } + + this._viewport.setRenderedRange(newRange); + + this._viewport.setRenderedContentOffset(this._itemSize * newRange.start); + + this._scrolledIndexChange.next(Math.floor(firstVisibleIndex)); + } + +} +/** + * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created + * `FixedSizeVirtualScrollStrategy` from the given directive. + * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the + * `FixedSizeVirtualScrollStrategy` from. + */ + + +function _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir) { + return fixedSizeDir._scrollStrategy; +} +/** A virtual scroll strategy that supports fixed-size items. */ + + +class CdkFixedSizeVirtualScroll { + constructor() { + this._itemSize = 20; + this._minBufferPx = 100; + this._maxBufferPx = 200; + /** The scroll strategy used by this directive. */ + + this._scrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx); + } + /** The size of the items in the list (in pixels). */ + + + get itemSize() { + return this._itemSize; + } + + set itemSize(value) { + this._itemSize = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceNumberProperty)(value); + } + /** + * The minimum amount of buffer rendered beyond the viewport (in pixels). + * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px. + */ + + + get minBufferPx() { + return this._minBufferPx; + } + + set minBufferPx(value) { + this._minBufferPx = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceNumberProperty)(value); + } + /** + * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px. + */ + + + get maxBufferPx() { + return this._maxBufferPx; + } + + set maxBufferPx(value) { + this._maxBufferPx = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceNumberProperty)(value); + } + + ngOnChanges() { + this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx); + } + +} + +CdkFixedSizeVirtualScroll.ɵfac = function CdkFixedSizeVirtualScroll_Factory(t) { + return new (t || CdkFixedSizeVirtualScroll)(); +}; + +CdkFixedSizeVirtualScroll.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkFixedSizeVirtualScroll, + selectors: [["cdk-virtual-scroll-viewport", "itemSize", ""]], + inputs: { + itemSize: "itemSize", + minBufferPx: "minBufferPx", + maxBufferPx: "maxBufferPx" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: VIRTUAL_SCROLL_STRATEGY, + useFactory: _fixedSizeVirtualScrollStrategyFactory, + deps: [(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(() => CdkFixedSizeVirtualScroll)] + }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkFixedSizeVirtualScroll, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: 'cdk-virtual-scroll-viewport[itemSize]', + providers: [{ + provide: VIRTUAL_SCROLL_STRATEGY, + useFactory: _fixedSizeVirtualScrollStrategyFactory, + deps: [(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(() => CdkFixedSizeVirtualScroll)] + }] + }] + }], null, { + itemSize: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + minBufferPx: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + maxBufferPx: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Time in ms to throttle the scrolling events by default. */ + + +const DEFAULT_SCROLL_TIME = 20; +/** + * Service contained all registered Scrollable references and emits an event when any one of the + * Scrollable references emit a scrolled event. + */ + +class ScrollDispatcher { + constructor(_ngZone, _platform, document) { + this._ngZone = _ngZone; + this._platform = _platform; + /** Subject for notifying that a registered scrollable reference element has been scrolled. */ + + this._scrolled = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** Keeps track of the global `scroll` and `resize` subscriptions. */ + + this._globalSubscription = null; + /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */ + + this._scrolledCount = 0; + /** + * Map of all the scrollable references that are registered with the service and their + * scroll event subscriptions. + */ + + this.scrollContainers = new Map(); + this._document = document; + } + /** + * Registers a scrollable instance with the service and listens for its scrolled events. When the + * scrollable is scrolled, the service emits the event to its scrolled observable. + * @param scrollable Scrollable instance to be registered. + */ + + + register(scrollable) { + if (!this.scrollContainers.has(scrollable)) { + this.scrollContainers.set(scrollable, scrollable.elementScrolled().subscribe(() => this._scrolled.next(scrollable))); + } + } + /** + * Deregisters a Scrollable reference and unsubscribes from its scroll event observable. + * @param scrollable Scrollable instance to be deregistered. + */ + + + deregister(scrollable) { + const scrollableReference = this.scrollContainers.get(scrollable); + + if (scrollableReference) { + scrollableReference.unsubscribe(); + this.scrollContainers.delete(scrollable); + } + } + /** + * Returns an observable that emits an event whenever any of the registered Scrollable + * references (or window, document, or body) fire a scrolled event. Can provide a time in ms + * to override the default "throttle" time. + * + * **Note:** in order to avoid hitting change detection for every scroll event, + * all of the events emitted from this stream will be run outside the Angular zone. + * If you need to update any data bindings as a result of a scroll event, you have + * to run the callback using `NgZone.run`. + */ + + + scrolled(auditTimeInMs = DEFAULT_SCROLL_TIME) { + if (!this._platform.isBrowser) { + return (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.of)(); + } + + return new rxjs__WEBPACK_IMPORTED_MODULE_5__.Observable(observer => { + if (!this._globalSubscription) { + this._addGlobalListener(); + } // In the case of a 0ms delay, use an observable without auditTime + // since it does add a perceptible delay in processing overhead. + + + const subscription = auditTimeInMs > 0 ? this._scrolled.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.auditTime)(auditTimeInMs)).subscribe(observer) : this._scrolled.subscribe(observer); + this._scrolledCount++; + return () => { + subscription.unsubscribe(); + this._scrolledCount--; + + if (!this._scrolledCount) { + this._removeGlobalListener(); + } + }; + }); + } + + ngOnDestroy() { + this._removeGlobalListener(); + + this.scrollContainers.forEach((_, container) => this.deregister(container)); + + this._scrolled.complete(); + } + /** + * Returns an observable that emits whenever any of the + * scrollable ancestors of an element are scrolled. + * @param elementOrElementRef Element whose ancestors to listen for. + * @param auditTimeInMs Time to throttle the scroll events. + */ + + + ancestorScrolled(elementOrElementRef, auditTimeInMs) { + const ancestors = this.getAncestorScrollContainers(elementOrElementRef); + return this.scrolled(auditTimeInMs).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__.filter)(target => { + return !target || ancestors.indexOf(target) > -1; + })); + } + /** Returns all registered Scrollables that contain the provided element. */ + + + getAncestorScrollContainers(elementOrElementRef) { + const scrollingContainers = []; + this.scrollContainers.forEach((_subscription, scrollable) => { + if (this._scrollableContainsElement(scrollable, elementOrElementRef)) { + scrollingContainers.push(scrollable); + } + }); + return scrollingContainers; + } + /** Use defaultView of injected document if available or fallback to global window reference */ + + + _getWindow() { + return this._document.defaultView || window; + } + /** Returns true if the element is contained within the provided Scrollable. */ + + + _scrollableContainsElement(scrollable, elementOrElementRef) { + let element = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceElement)(elementOrElementRef); + let scrollableElement = scrollable.getElementRef().nativeElement; // Traverse through the element parents until we reach null, checking if any of the elements + // are the scrollable's element. + + do { + if (element == scrollableElement) { + return true; + } + } while (element = element.parentElement); + + return false; + } + /** Sets up the global scroll listeners. */ + + + _addGlobalListener() { + this._globalSubscription = this._ngZone.runOutsideAngular(() => { + const window = this._getWindow(); + + return (0,rxjs__WEBPACK_IMPORTED_MODULE_8__.fromEvent)(window.document, 'scroll').subscribe(() => this._scrolled.next()); + }); + } + /** Cleans up the global scroll listener. */ + + + _removeGlobalListener() { + if (this._globalSubscription) { + this._globalSubscription.unsubscribe(); + + this._globalSubscription = null; + } + } + +} + +ScrollDispatcher.ɵfac = function ScrollDispatcher_Factory(t) { + return new (t || ScrollDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_10__.DOCUMENT, 8)); +}; + +ScrollDispatcher.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: ScrollDispatcher, + factory: ScrollDispatcher.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollDispatcher, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_10__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Sends an event when the directive's element is scrolled. Registers itself with the + * ScrollDispatcher service to include itself as part of its collection of scrolling events that it + * can be listened to through the service. + */ + + +class CdkScrollable { + constructor(elementRef, scrollDispatcher, ngZone, dir) { + this.elementRef = elementRef; + this.scrollDispatcher = scrollDispatcher; + this.ngZone = ngZone; + this.dir = dir; + this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + this._elementScrolled = new rxjs__WEBPACK_IMPORTED_MODULE_5__.Observable(observer => this.ngZone.runOutsideAngular(() => (0,rxjs__WEBPACK_IMPORTED_MODULE_8__.fromEvent)(this.elementRef.nativeElement, 'scroll').pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_11__.takeUntil)(this._destroyed)).subscribe(observer))); + } + + ngOnInit() { + this.scrollDispatcher.register(this); + } + + ngOnDestroy() { + this.scrollDispatcher.deregister(this); + + this._destroyed.next(); + + this._destroyed.complete(); + } + /** Returns observable that emits when a scroll event is fired on the host element. */ + + + elementScrolled() { + return this._elementScrolled; + } + /** Gets the ElementRef for the viewport. */ + + + getElementRef() { + return this.elementRef; + } + /** + * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo + * method, since browsers are not consistent about what scrollLeft means in RTL. For this method + * left and right always refer to the left and right side of the scrolling container irrespective + * of the layout direction. start and end refer to left and right in an LTR context and vice-versa + * in an RTL context. + * @param options specified the offsets to scroll to. + */ + + + scrollTo(options) { + const el = this.elementRef.nativeElement; + const isRtl = this.dir && this.dir.value == 'rtl'; // Rewrite start & end offsets as right or left offsets. + + if (options.left == null) { + options.left = isRtl ? options.end : options.start; + } + + if (options.right == null) { + options.right = isRtl ? options.start : options.end; + } // Rewrite the bottom offset as a top offset. + + + if (options.bottom != null) { + options.top = el.scrollHeight - el.clientHeight - options.bottom; + } // Rewrite the right offset as a left offset. + + + if (isRtl && (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.getRtlScrollAxisType)() != 0 + /* NORMAL */ + ) { + if (options.left != null) { + options.right = el.scrollWidth - el.clientWidth - options.left; + } + + if ((0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.getRtlScrollAxisType)() == 2 + /* INVERTED */ + ) { + options.left = options.right; + } else if ((0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.getRtlScrollAxisType)() == 1 + /* NEGATED */ + ) { + options.left = options.right ? -options.right : options.right; + } + } else { + if (options.right != null) { + options.left = el.scrollWidth - el.clientWidth - options.right; + } + } + + this._applyScrollToOptions(options); + } + + _applyScrollToOptions(options) { + const el = this.elementRef.nativeElement; + + if ((0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.supportsScrollBehavior)()) { + el.scrollTo(options); + } else { + if (options.top != null) { + el.scrollTop = options.top; + } + + if (options.left != null) { + el.scrollLeft = options.left; + } + } + } + /** + * Measures the scroll offset relative to the specified edge of the viewport. This method can be + * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent + * about what scrollLeft means in RTL. The values returned by this method are normalized such that + * left and right always refer to the left and right side of the scrolling container irrespective + * of the layout direction. start and end refer to left and right in an LTR context and vice-versa + * in an RTL context. + * @param from The edge to measure from. + */ + + + measureScrollOffset(from) { + const LEFT = 'left'; + const RIGHT = 'right'; + const el = this.elementRef.nativeElement; + + if (from == 'top') { + return el.scrollTop; + } + + if (from == 'bottom') { + return el.scrollHeight - el.clientHeight - el.scrollTop; + } // Rewrite start & end as left or right offsets. + + + const isRtl = this.dir && this.dir.value == 'rtl'; + + if (from == 'start') { + from = isRtl ? RIGHT : LEFT; + } else if (from == 'end') { + from = isRtl ? LEFT : RIGHT; + } + + if (isRtl && (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.getRtlScrollAxisType)() == 2 + /* INVERTED */ + ) { + // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and + // 0 when scrolled all the way right. + if (from == LEFT) { + return el.scrollWidth - el.clientWidth - el.scrollLeft; + } else { + return el.scrollLeft; + } + } else if (isRtl && (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.getRtlScrollAxisType)() == 1 + /* NEGATED */ + ) { + // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and + // 0 when scrolled all the way right. + if (from == LEFT) { + return el.scrollLeft + el.scrollWidth - el.clientWidth; + } else { + return -el.scrollLeft; + } + } else { + // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and + // (scrollWidth - clientWidth) when scrolled all the way right. + if (from == LEFT) { + return el.scrollLeft; + } else { + return el.scrollWidth - el.clientWidth - el.scrollLeft; + } + } + } + +} + +CdkScrollable.ɵfac = function CdkScrollable_Factory(t) { + return new (t || CdkScrollable)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, 8)); +}; + +CdkScrollable.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkScrollable, + selectors: [["", "cdk-scrollable", ""], ["", "cdkScrollable", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkScrollable, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdk-scrollable], [cdkScrollable]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: ScrollDispatcher + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Time in ms to throttle the resize events by default. */ + + +const DEFAULT_RESIZE_TIME = 20; +/** + * Simple utility for getting the bounds of the browser viewport. + * @docs-private + */ + +class ViewportRuler { + constructor(_platform, ngZone, document) { + this._platform = _platform; + /** Stream of viewport change events. */ + + this._change = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** Event listener that will be used to handle the viewport change events. */ + + this._changeListener = event => { + this._change.next(event); + }; + + this._document = document; + ngZone.runOutsideAngular(() => { + if (_platform.isBrowser) { + const window = this._getWindow(); // Note that bind the events ourselves, rather than going through something like RxJS's + // `fromEvent` so that we can ensure that they're bound outside of the NgZone. + + + window.addEventListener('resize', this._changeListener); + window.addEventListener('orientationchange', this._changeListener); + } // Clear the cached position so that the viewport is re-measured next time it is required. + // We don't need to keep track of the subscription, because it is completed on destroy. + + + this.change().subscribe(() => this._viewportSize = null); + }); + } + + ngOnDestroy() { + if (this._platform.isBrowser) { + const window = this._getWindow(); + + window.removeEventListener('resize', this._changeListener); + window.removeEventListener('orientationchange', this._changeListener); + } + + this._change.complete(); + } + /** Returns the viewport's width and height. */ + + + getViewportSize() { + if (!this._viewportSize) { + this._updateViewportSize(); + } + + const output = { + width: this._viewportSize.width, + height: this._viewportSize.height + }; // If we're not on a browser, don't cache the size since it'll be mocked out anyway. + + if (!this._platform.isBrowser) { + this._viewportSize = null; + } + + return output; + } + /** Gets a ClientRect for the viewport's bounds. */ + + + getViewportRect() { + // Use the document element's bounding rect rather than the window scroll properties + // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll + // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different + // conceptual viewports. Under most circumstances these viewports are equivalent, but they + // can disagree when the page is pinch-zoomed (on devices that support touch). + // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4 + // We use the documentElement instead of the body because, by default (without a css reset) + // browsers typically give the document body an 8px margin, which is not included in + // getBoundingClientRect(). + const scrollPosition = this.getViewportScrollPosition(); + const { + width, + height + } = this.getViewportSize(); + return { + top: scrollPosition.top, + left: scrollPosition.left, + bottom: scrollPosition.top + height, + right: scrollPosition.left + width, + height, + width + }; + } + /** Gets the (top, left) scroll position of the viewport. */ + + + getViewportScrollPosition() { + // While we can get a reference to the fake document + // during SSR, it doesn't have getBoundingClientRect. + if (!this._platform.isBrowser) { + return { + top: 0, + left: 0 + }; + } // The top-left-corner of the viewport is determined by the scroll position of the document + // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about + // whether `document.body` or `document.documentElement` is the scrolled element, so reading + // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of + // `document.documentElement` works consistently, where the `top` and `left` values will + // equal negative the scroll position. + + + const document = this._document; + + const window = this._getWindow(); + + const documentElement = document.documentElement; + const documentRect = documentElement.getBoundingClientRect(); + const top = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0; + const left = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0; + return { + top, + left + }; + } + /** + * Returns a stream that emits whenever the size of the viewport changes. + * This stream emits outside of the Angular zone. + * @param throttleTime Time in milliseconds to throttle the stream. + */ + + + change(throttleTime = DEFAULT_RESIZE_TIME) { + return throttleTime > 0 ? this._change.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.auditTime)(throttleTime)) : this._change; + } + /** Use defaultView of injected document if available or fallback to global window reference */ + + + _getWindow() { + return this._document.defaultView || window; + } + /** Updates the cached viewport size. */ + + + _updateViewportSize() { + const window = this._getWindow(); + + this._viewportSize = this._platform.isBrowser ? { + width: window.innerWidth, + height: window.innerHeight + } : { + width: 0, + height: 0 + }; + } + +} + +ViewportRuler.ɵfac = function ViewportRuler_Factory(t) { + return new (t || ViewportRuler)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_10__.DOCUMENT, 8)); +}; + +ViewportRuler.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: ViewportRuler, + factory: ViewportRuler.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ViewportRuler, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.Platform + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_10__.DOCUMENT] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Checks if the given ranges are equal. */ + + +function rangesEqual(r1, r2) { + return r1.start == r2.start && r1.end == r2.end; +} +/** + * Scheduler to be used for scroll events. Needs to fall back to + * something that doesn't rely on requestAnimationFrame on environments + * that don't support it (e.g. server-side rendering). + */ + + +const SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? rxjs__WEBPACK_IMPORTED_MODULE_13__.animationFrameScheduler : rxjs__WEBPACK_IMPORTED_MODULE_14__.asapScheduler; +/** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */ + +class CdkVirtualScrollViewport extends CdkScrollable { + constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler) { + super(elementRef, scrollDispatcher, ngZone, dir); + this.elementRef = elementRef; + this._changeDetectorRef = _changeDetectorRef; + this._scrollStrategy = _scrollStrategy; + /** Emits when the viewport is detached from a CdkVirtualForOf. */ + + this._detachedSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** Emits when the rendered range changes. */ + + this._renderedRangeSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + this._orientation = 'vertical'; + this._appendOnly = false; // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll + // strategy lazily (i.e. only if the user is actually listening to the events). We do this because + // depending on how the strategy calculates the scrolled index, it may come at a cost to + // performance. + + /** Emits when the index of the first element visible in the viewport changes. */ + + this.scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_5__.Observable(observer => this._scrollStrategy.scrolledIndexChange.subscribe(index => Promise.resolve().then(() => this.ngZone.run(() => observer.next(index))))); + /** A stream that emits whenever the rendered range changes. */ + + this.renderedRangeStream = this._renderedRangeSubject; + /** + * The total size of all content (in pixels), including content that is not currently rendered. + */ + + this._totalContentSize = 0; + /** A string representing the `style.width` property value to be used for the spacer element. */ + + this._totalContentWidth = ''; + /** A string representing the `style.height` property value to be used for the spacer element. */ + + this._totalContentHeight = ''; + /** The currently rendered range of indices. */ + + this._renderedRange = { + start: 0, + end: 0 + }; + /** The length of the data bound to this viewport (in number of items). */ + + this._dataLength = 0; + /** The size of the viewport (in pixels). */ + + this._viewportSize = 0; + /** The last rendered content offset that was set. */ + + this._renderedContentOffset = 0; + /** + * Whether the last rendered content offset was to the end of the content (and therefore needs to + * be rewritten as an offset to the start of the content). + */ + + this._renderedContentOffsetNeedsRewrite = false; + /** Whether there is a pending change detection cycle. */ + + this._isChangeDetectionPending = false; + /** A list of functions to run after the next change detection cycle. */ + + this._runAfterChangeDetection = []; + /** Subscription to changes in the viewport size. */ + + this._viewportChanges = rxjs__WEBPACK_IMPORTED_MODULE_15__.Subscription.EMPTY; + + if (!_scrollStrategy && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('Error: cdk-virtual-scroll-viewport requires the "itemSize" property to be set.'); + } + + this._viewportChanges = viewportRuler.change().subscribe(() => { + this.checkViewportSize(); + }); + } + /** The direction the viewport scrolls. */ + + + get orientation() { + return this._orientation; + } + + set orientation(orientation) { + if (this._orientation !== orientation) { + this._orientation = orientation; + + this._calculateSpacerSize(); + } + } + /** + * Whether rendered items should persist in the DOM after scrolling out of view. By default, items + * will be removed. + */ + + + get appendOnly() { + return this._appendOnly; + } + + set appendOnly(value) { + this._appendOnly = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceBooleanProperty)(value); + } + + ngOnInit() { + super.ngOnInit(); // It's still too early to measure the viewport at this point. Deferring with a promise allows + // the Viewport to be rendered with the correct size before we measure. We run this outside the + // zone to avoid causing more change detection cycles. We handle the change detection loop + // ourselves instead. + + this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => { + this._measureViewportSize(); + + this._scrollStrategy.attach(this); + + this.elementScrolled().pipe( // Start off with a fake scroll event so we properly detect our initial position. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_16__.startWith)(null), // Collect multiple events into one until the next animation frame. This way if + // there are multiple scroll events in the same frame we only need to recheck + // our layout once. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.auditTime)(0, SCROLL_SCHEDULER)).subscribe(() => this._scrollStrategy.onContentScrolled()); + + this._markChangeDetectionNeeded(); + })); + } + + ngOnDestroy() { + this.detach(); + + this._scrollStrategy.detach(); // Complete all subjects + + + this._renderedRangeSubject.complete(); + + this._detachedSubject.complete(); + + this._viewportChanges.unsubscribe(); + + super.ngOnDestroy(); + } + /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */ + + + attach(forOf) { + if (this._forOf && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error('CdkVirtualScrollViewport is already attached.'); + } // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length + // changes. Run outside the zone to avoid triggering change detection, since we're managing the + // change detection loop ourselves. + + + this.ngZone.runOutsideAngular(() => { + this._forOf = forOf; + + this._forOf.dataStream.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_11__.takeUntil)(this._detachedSubject)).subscribe(data => { + const newLength = data.length; + + if (newLength !== this._dataLength) { + this._dataLength = newLength; + + this._scrollStrategy.onDataLengthChanged(); + } + + this._doChangeDetection(); + }); + }); + } + /** Detaches the current `CdkVirtualForOf`. */ + + + detach() { + this._forOf = null; + + this._detachedSubject.next(); + } + /** Gets the length of the data bound to this viewport (in number of items). */ + + + getDataLength() { + return this._dataLength; + } + /** Gets the size of the viewport (in pixels). */ + + + getViewportSize() { + return this._viewportSize; + } // TODO(mmalerba): This is technically out of sync with what's really rendered until a render + // cycle happens. I'm being careful to only call it after the render cycle is complete and before + // setting it to something else, but its error prone and should probably be split into + // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM. + + /** Get the current rendered range of items. */ + + + getRenderedRange() { + return this._renderedRange; + } + /** + * Sets the total size of all content (in pixels), including content that is not currently + * rendered. + */ + + + setTotalContentSize(size) { + if (this._totalContentSize !== size) { + this._totalContentSize = size; + + this._calculateSpacerSize(); + + this._markChangeDetectionNeeded(); + } + } + /** Sets the currently rendered range of indices. */ + + + setRenderedRange(range) { + if (!rangesEqual(this._renderedRange, range)) { + if (this.appendOnly) { + range = { + start: 0, + end: Math.max(this._renderedRange.end, range.end) + }; + } + + this._renderedRangeSubject.next(this._renderedRange = range); + + this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered()); + } + } + /** + * Gets the offset from the start of the viewport to the start of the rendered data (in pixels). + */ + + + getOffsetToRenderedContentStart() { + return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset; + } + /** + * Sets the offset from the start of the viewport to either the start or end of the rendered data + * (in pixels). + */ + + + setRenderedContentOffset(offset, to = 'to-start') { + // For a horizontal viewport in a right-to-left language we need to translate along the x-axis + // in the negative direction. + const isRtl = this.dir && this.dir.value == 'rtl'; + const isHorizontal = this.orientation == 'horizontal'; + const axis = isHorizontal ? 'X' : 'Y'; + const axisDirection = isHorizontal && isRtl ? -1 : 1; + let transform = `translate${axis}(${Number(axisDirection * offset)}px)`; + this._renderedContentOffset = offset; + + if (to === 'to-end') { + transform += ` translate${axis}(-100%)`; // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise + // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would + // expand upward). + + this._renderedContentOffsetNeedsRewrite = true; + } + + if (this._renderedContentTransform != transform) { + // We know this value is safe because we parse `offset` with `Number()` before passing it + // into the string. + this._renderedContentTransform = transform; + + this._markChangeDetectionNeeded(() => { + if (this._renderedContentOffsetNeedsRewrite) { + this._renderedContentOffset -= this.measureRenderedContentSize(); + this._renderedContentOffsetNeedsRewrite = false; + this.setRenderedContentOffset(this._renderedContentOffset); + } else { + this._scrollStrategy.onRenderedOffsetChanged(); + } + }); + } + } + /** + * Scrolls to the given offset from the start of the viewport. Please note that this is not always + * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left + * direction, this would be the equivalent of setting a fictional `scrollRight` property. + * @param offset The offset to scroll to. + * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`. + */ + + + scrollToOffset(offset, behavior = 'auto') { + const options = { + behavior + }; + + if (this.orientation === 'horizontal') { + options.start = offset; + } else { + options.top = offset; + } + + this.scrollTo(options); + } + /** + * Scrolls to the offset for the given index. + * @param index The index of the element to scroll to. + * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`. + */ + + + scrollToIndex(index, behavior = 'auto') { + this._scrollStrategy.scrollToIndex(index, behavior); + } + /** + * Gets the current scroll offset from the start of the viewport (in pixels). + * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start' + * in horizontal mode. + */ + + + measureScrollOffset(from) { + return from ? super.measureScrollOffset(from) : super.measureScrollOffset(this.orientation === 'horizontal' ? 'start' : 'top'); + } + /** Measure the combined size of all of the rendered items. */ + + + measureRenderedContentSize() { + const contentEl = this._contentWrapper.nativeElement; + return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight; + } + /** + * Measure the total combined size of the given range. Throws if the range includes items that are + * not rendered. + */ + + + measureRangeSize(range) { + if (!this._forOf) { + return 0; + } + + return this._forOf.measureRangeSize(range, this.orientation); + } + /** Update the viewport dimensions and re-render. */ + + + checkViewportSize() { + // TODO: Cleanup later when add logic for handling content resize + this._measureViewportSize(); + + this._scrollStrategy.onDataLengthChanged(); + } + /** Measure the viewport size. */ + + + _measureViewportSize() { + const viewportEl = this.elementRef.nativeElement; + this._viewportSize = this.orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight; + } + /** Queue up change detection to run. */ + + + _markChangeDetectionNeeded(runAfter) { + if (runAfter) { + this._runAfterChangeDetection.push(runAfter); + } // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of + // properties sequentially we only have to run `_doChangeDetection` once at the end. + + + if (!this._isChangeDetectionPending) { + this._isChangeDetectionPending = true; + this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => { + this._doChangeDetection(); + })); + } + } + /** Run change detection. */ + + + _doChangeDetection() { + this._isChangeDetectionPending = false; // Apply the content transform. The transform can't be set via an Angular binding because + // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of + // string literals, a variable that can only be 'X' or 'Y', and user input that is run through + // the `Number` function first to coerce it to a numeric value. + + this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform; // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection + // from the root, since the repeated items are content projected in. Calling `detectChanges` + // instead does not properly check the projected content. + + this.ngZone.run(() => this._changeDetectorRef.markForCheck()); + const runAfterChangeDetection = this._runAfterChangeDetection; + this._runAfterChangeDetection = []; + + for (const fn of runAfterChangeDetection) { + fn(); + } + } + /** Calculates the `style.width` and `style.height` for the spacer element. */ + + + _calculateSpacerSize() { + this._totalContentHeight = this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`; + this._totalContentWidth = this.orientation === 'horizontal' ? `${this._totalContentSize}px` : ''; + } + +} + +CdkVirtualScrollViewport.ɵfac = function CdkVirtualScrollViewport_Factory(t) { + return new (t || CdkVirtualScrollViewport)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ChangeDetectorRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](VIRTUAL_SCROLL_STRATEGY, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ViewportRuler)); +}; + +CdkVirtualScrollViewport.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ + type: CdkVirtualScrollViewport, + selectors: [["cdk-virtual-scroll-viewport"]], + viewQuery: function CdkVirtualScrollViewport_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c0, 7); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._contentWrapper = _t.first); + } + }, + hostAttrs: [1, "cdk-virtual-scroll-viewport"], + hostVars: 4, + hostBindings: function CdkVirtualScrollViewport_HostBindings(rf, ctx) { + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("cdk-virtual-scroll-orientation-horizontal", ctx.orientation === "horizontal")("cdk-virtual-scroll-orientation-vertical", ctx.orientation !== "horizontal"); + } + }, + inputs: { + orientation: "orientation", + appendOnly: "appendOnly" + }, + outputs: { + scrolledIndexChange: "scrolledIndexChange" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: CdkScrollable, + useExisting: CdkVirtualScrollViewport + }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]], + ngContentSelectors: _c1, + decls: 4, + vars: 4, + consts: [[1, "cdk-virtual-scroll-content-wrapper"], ["contentWrapper", ""], [1, "cdk-virtual-scroll-spacer"]], + template: function CdkVirtualScrollViewport_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0, 1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "div", 2); + } + + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx._totalContentWidth)("height", ctx._totalContentHeight); + } + }, + styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"], + encapsulation: 2, + changeDetection: 0 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkVirtualScrollViewport, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Component, + args: [{ + selector: 'cdk-virtual-scroll-viewport', + host: { + 'class': 'cdk-virtual-scroll-viewport', + '[class.cdk-virtual-scroll-orientation-horizontal]': 'orientation === "horizontal"', + '[class.cdk-virtual-scroll-orientation-vertical]': 'orientation !== "horizontal"' + }, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewEncapsulation.None, + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ChangeDetectionStrategy.OnPush, + providers: [{ + provide: CdkScrollable, + useExisting: CdkVirtualScrollViewport + }], + template: "\n
\n \n
\n\n
\n", + styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ChangeDetectorRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [VIRTUAL_SCROLL_STRATEGY] + }] + }, { + type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.Directionality, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }] + }, { + type: ScrollDispatcher + }, { + type: ViewportRuler + }]; + }, { + orientation: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + appendOnly: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + scrolledIndexChange: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Output + }], + _contentWrapper: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewChild, + args: ['contentWrapper', { + static: true + }] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Helper to extract the offset of a DOM Node in a certain direction. */ + + +function getOffset(orientation, direction, node) { + const el = node; + + if (!el.getBoundingClientRect) { + return 0; + } + + const rect = el.getBoundingClientRect(); + + if (orientation === 'horizontal') { + return direction === 'start' ? rect.left : rect.right; + } + + return direction === 'start' ? rect.top : rect.bottom; +} +/** + * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling + * container. + */ + + +class CdkVirtualForOf { + constructor( + /** The view container to add items to. */ + _viewContainerRef, + /** The template to use when stamping out new items. */ + _template, + /** The set of available differs. */ + _differs, + /** The strategy used to render items in the virtual scroll viewport. */ + _viewRepeater, + /** The virtual scrolling viewport that these items are being rendered in. */ + _viewport, ngZone) { + this._viewContainerRef = _viewContainerRef; + this._template = _template; + this._differs = _differs; + this._viewRepeater = _viewRepeater; + this._viewport = _viewport; + /** Emits when the rendered view of the data changes. */ + + this.viewChange = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** Subject that emits when a new DataSource instance is given. */ + + this._dataSourceChanges = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + /** Emits whenever the data in the current DataSource changes. */ + + this.dataStream = this._dataSourceChanges.pipe( // Start off with null `DataSource`. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_16__.startWith)(null), // Bundle up the previous and current data sources so we can work with both. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__.pairwise)(), // Use `_changeDataSource` to disconnect from the previous data source and connect to the + // new one, passing back a stream of data changes which we run through `switchMap` to give + // us a data stream that emits the latest data from whatever the current `DataSource` is. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_18__.switchMap)(([prev, cur]) => this._changeDataSource(prev, cur)), // Replay the last emitted data when someone subscribes. + (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_19__.shareReplay)(1)); + /** The differ used to calculate changes to the data. */ + + this._differ = null; + /** Whether the rendered data should be updated during the next ngDoCheck cycle. */ + + this._needsUpdate = false; + this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_1__.Subject(); + this.dataStream.subscribe(data => { + this._data = data; + + this._onRenderedDataChange(); + }); + + this._viewport.renderedRangeStream.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_11__.takeUntil)(this._destroyed)).subscribe(range => { + this._renderedRange = range; + ngZone.run(() => this.viewChange.next(this._renderedRange)); + + this._onRenderedDataChange(); + }); + + this._viewport.attach(this); + } + /** The DataSource to display. */ + + + get cdkVirtualForOf() { + return this._cdkVirtualForOf; + } + + set cdkVirtualForOf(value) { + this._cdkVirtualForOf = value; + + if ((0,_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__.isDataSource)(value)) { + this._dataSourceChanges.next(value); + } else { + // If value is an an NgIterable, convert it to an array. + this._dataSourceChanges.next(new _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__.ArrayDataSource((0,rxjs__WEBPACK_IMPORTED_MODULE_21__.isObservable)(value) ? value : Array.from(value || []))); + } + } + /** + * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and + * the item and produces a value to be used as the item's identity when tracking changes. + */ + + + get cdkVirtualForTrackBy() { + return this._cdkVirtualForTrackBy; + } + + set cdkVirtualForTrackBy(fn) { + this._needsUpdate = true; + this._cdkVirtualForTrackBy = fn ? (index, item) => fn(index + (this._renderedRange ? this._renderedRange.start : 0), item) : undefined; + } + /** The template used to stamp out new elements. */ + + + set cdkVirtualForTemplate(value) { + if (value) { + this._needsUpdate = true; + this._template = value; + } + } + /** + * The size of the cache used to store templates that are not being used for re-use later. + * Setting the cache size to `0` will disable caching. Defaults to 20 templates. + */ + + + get cdkVirtualForTemplateCacheSize() { + return this._viewRepeater.viewCacheSize; + } + + set cdkVirtualForTemplateCacheSize(size) { + this._viewRepeater.viewCacheSize = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__.coerceNumberProperty)(size); + } + /** + * Measures the combined size (width for horizontal orientation, height for vertical) of all items + * in the specified range. Throws an error if the range includes items that are not currently + * rendered. + */ + + + measureRangeSize(range, orientation) { + if (range.start >= range.end) { + return 0; + } + + if ((range.start < this._renderedRange.start || range.end > this._renderedRange.end) && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw Error(`Error: attempted to measure an item that isn't rendered.`); + } // The index into the list of rendered views for the first item in the range. + + + const renderedStartIndex = range.start - this._renderedRange.start; // The length of the range we're measuring. + + const rangeLen = range.end - range.start; // Loop over all the views, find the first and land node and compute the size by subtracting + // the top of the first node from the bottom of the last one. + + let firstNode; + let lastNode; // Find the first node by starting from the beginning and going forwards. + + for (let i = 0; i < rangeLen; i++) { + const view = this._viewContainerRef.get(i + renderedStartIndex); + + if (view && view.rootNodes.length) { + firstNode = lastNode = view.rootNodes[0]; + break; + } + } // Find the last node by starting from the end and going backwards. + + + for (let i = rangeLen - 1; i > -1; i--) { + const view = this._viewContainerRef.get(i + renderedStartIndex); + + if (view && view.rootNodes.length) { + lastNode = view.rootNodes[view.rootNodes.length - 1]; + break; + } + } + + return firstNode && lastNode ? getOffset(orientation, 'end', lastNode) - getOffset(orientation, 'start', firstNode) : 0; + } + + ngDoCheck() { + if (this._differ && this._needsUpdate) { + // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of + // this list being rendered (can use simpler algorithm) vs needs update due to data actually + // changing (need to do this diff). + const changes = this._differ.diff(this._renderedItems); + + if (!changes) { + this._updateContext(); + } else { + this._applyChanges(changes); + } + + this._needsUpdate = false; + } + } + + ngOnDestroy() { + this._viewport.detach(); + + this._dataSourceChanges.next(undefined); + + this._dataSourceChanges.complete(); + + this.viewChange.complete(); + + this._destroyed.next(); + + this._destroyed.complete(); + + this._viewRepeater.detach(); + } + /** React to scroll state changes in the viewport. */ + + + _onRenderedDataChange() { + if (!this._renderedRange) { + return; + } + + this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end); + + if (!this._differ) { + // Use a wrapper function for the `trackBy` so any new values are + // picked up automatically without having to recreate the differ. + this._differ = this._differs.find(this._renderedItems).create((index, item) => { + return this.cdkVirtualForTrackBy ? this.cdkVirtualForTrackBy(index, item) : item; + }); + } + + this._needsUpdate = true; + } + /** Swap out one `DataSource` for another. */ + + + _changeDataSource(oldDs, newDs) { + if (oldDs) { + oldDs.disconnect(this); + } + + this._needsUpdate = true; + return newDs ? newDs.connect(this) : (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.of)(); + } + /** Update the `CdkVirtualForOfContext` for all views. */ + + + _updateContext() { + const count = this._data.length; + let i = this._viewContainerRef.length; + + while (i--) { + const view = this._viewContainerRef.get(i); + + view.context.index = this._renderedRange.start + i; + view.context.count = count; + + this._updateComputedContextProperties(view.context); + + view.detectChanges(); + } + } + /** Apply changes to the DOM. */ + + + _applyChanges(changes) { + this._viewRepeater.applyChanges(changes, this._viewContainerRef, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record, currentIndex), record => record.item); // Update $implicit for any items that had an identity change. + + + changes.forEachIdentityChange(record => { + const view = this._viewContainerRef.get(record.currentIndex); + + view.context.$implicit = record.item; + }); // Update the context variables on all items. + + const count = this._data.length; + let i = this._viewContainerRef.length; + + while (i--) { + const view = this._viewContainerRef.get(i); + + view.context.index = this._renderedRange.start + i; + view.context.count = count; + + this._updateComputedContextProperties(view.context); + } + } + /** Update the computed properties on the `CdkVirtualForOfContext`. */ + + + _updateComputedContextProperties(context) { + context.first = context.index === 0; + context.last = context.index === context.count - 1; + context.even = context.index % 2 === 0; + context.odd = !context.even; + } + + _getEmbeddedViewArgs(record, index) { + // Note that it's important that we insert the item directly at the proper index, + // rather than inserting it and the moving it in place, because if there's a directive + // on the same node that injects the `ViewContainerRef`, Angular will insert another + // comment node which can throw off the move when it's being repeated for all items. + return { + templateRef: this._template, + context: { + $implicit: record.item, + // It's guaranteed that the iterable is not "undefined" or "null" because we only + // generate views for elements if the "cdkVirtualForOf" iterable has elements. + cdkVirtualForOf: this._cdkVirtualForOf, + index: -1, + count: -1, + first: false, + last: false, + odd: false, + even: false + }, + index + }; + } + +} + +CdkVirtualForOf.ɵfac = function CdkVirtualForOf_Factory(t) { + return new (t || CdkVirtualForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._VIEW_REPEATER_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](CdkVirtualScrollViewport, 4), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone)); +}; + +CdkVirtualForOf.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: CdkVirtualForOf, + selectors: [["", "cdkVirtualFor", "", "cdkVirtualForOf", ""]], + inputs: { + cdkVirtualForOf: "cdkVirtualForOf", + cdkVirtualForTrackBy: "cdkVirtualForTrackBy", + cdkVirtualForTemplate: "cdkVirtualForTemplate", + cdkVirtualForTemplateCacheSize: "cdkVirtualForTemplateCacheSize" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._RecycleViewRepeaterStrategy + }])] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkVirtualForOf, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[cdkVirtualFor][cdkVirtualForOf]', + providers: [{ + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._RecycleViewRepeaterStrategy + }] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers + }, { + type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._RecycleViewRepeaterStrategy, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_20__._VIEW_REPEATER_STRATEGY] + }] + }, { + type: CdkVirtualScrollViewport, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.SkipSelf + }] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone + }]; + }, { + cdkVirtualForOf: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + cdkVirtualForTrackBy: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + cdkVirtualForTemplate: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + cdkVirtualForTemplateCacheSize: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class CdkScrollableModule {} + +CdkScrollableModule.ɵfac = function CdkScrollableModule_Factory(t) { + return new (t || CdkScrollableModule)(); +}; + +CdkScrollableModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: CdkScrollableModule +}); +CdkScrollableModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkScrollableModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + exports: [CdkScrollable], + declarations: [CdkScrollable] + }] + }], null, null); +})(); +/** + * @docs-primary-export + */ + + +class ScrollingModule {} + +ScrollingModule.ɵfac = function ScrollingModule_Factory(t) { + return new (t || ScrollingModule)(); +}; + +ScrollingModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: ScrollingModule +}); +ScrollingModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ + imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.PlatformModule, CdkScrollableModule], _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, CdkScrollableModule] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollingModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__.PlatformModule, CdkScrollableModule], + exports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_12__.BidiModule, CdkScrollableModule, CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport], + declarations: [CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 9673: +/*!******************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/table.mjs ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BaseCdkCell": () => (/* binding */ BaseCdkCell), +/* harmony export */ "BaseRowDef": () => (/* binding */ BaseRowDef), +/* harmony export */ "CDK_ROW_TEMPLATE": () => (/* binding */ CDK_ROW_TEMPLATE), +/* harmony export */ "CDK_TABLE": () => (/* binding */ CDK_TABLE), +/* harmony export */ "CDK_TABLE_TEMPLATE": () => (/* binding */ CDK_TABLE_TEMPLATE), +/* harmony export */ "CdkCell": () => (/* binding */ CdkCell), +/* harmony export */ "CdkCellDef": () => (/* binding */ CdkCellDef), +/* harmony export */ "CdkCellOutlet": () => (/* binding */ CdkCellOutlet), +/* harmony export */ "CdkColumnDef": () => (/* binding */ CdkColumnDef), +/* harmony export */ "CdkFooterCell": () => (/* binding */ CdkFooterCell), +/* harmony export */ "CdkFooterCellDef": () => (/* binding */ CdkFooterCellDef), +/* harmony export */ "CdkFooterRow": () => (/* binding */ CdkFooterRow), +/* harmony export */ "CdkFooterRowDef": () => (/* binding */ CdkFooterRowDef), +/* harmony export */ "CdkHeaderCell": () => (/* binding */ CdkHeaderCell), +/* harmony export */ "CdkHeaderCellDef": () => (/* binding */ CdkHeaderCellDef), +/* harmony export */ "CdkHeaderRow": () => (/* binding */ CdkHeaderRow), +/* harmony export */ "CdkHeaderRowDef": () => (/* binding */ CdkHeaderRowDef), +/* harmony export */ "CdkNoDataRow": () => (/* binding */ CdkNoDataRow), +/* harmony export */ "CdkRecycleRows": () => (/* binding */ CdkRecycleRows), +/* harmony export */ "CdkRow": () => (/* binding */ CdkRow), +/* harmony export */ "CdkRowDef": () => (/* binding */ CdkRowDef), +/* harmony export */ "CdkTable": () => (/* binding */ CdkTable), +/* harmony export */ "CdkTableModule": () => (/* binding */ CdkTableModule), +/* harmony export */ "CdkTextColumn": () => (/* binding */ CdkTextColumn), +/* harmony export */ "DataRowOutlet": () => (/* binding */ DataRowOutlet), +/* harmony export */ "DataSource": () => (/* reexport safe */ _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.DataSource), +/* harmony export */ "FooterRowOutlet": () => (/* binding */ FooterRowOutlet), +/* harmony export */ "HeaderRowOutlet": () => (/* binding */ HeaderRowOutlet), +/* harmony export */ "NoDataRowOutlet": () => (/* binding */ NoDataRowOutlet), +/* harmony export */ "STICKY_DIRECTIONS": () => (/* binding */ STICKY_DIRECTIONS), +/* harmony export */ "STICKY_POSITIONING_LISTENER": () => (/* binding */ STICKY_POSITIONING_LISTENER), +/* harmony export */ "StickyStyler": () => (/* binding */ StickyStyler), +/* harmony export */ "TEXT_COLUMN_OPTIONS": () => (/* binding */ TEXT_COLUMN_OPTIONS), +/* harmony export */ "_COALESCED_STYLE_SCHEDULER": () => (/* binding */ _COALESCED_STYLE_SCHEDULER), +/* harmony export */ "_CoalescedStyleScheduler": () => (/* binding */ _CoalescedStyleScheduler), +/* harmony export */ "_Schedule": () => (/* binding */ _Schedule), +/* harmony export */ "mixinHasStickyInput": () => (/* binding */ mixinHasStickyInput) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @angular/cdk/bidi */ 2867); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/collections */ 1755); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); +/* harmony import */ var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/cdk/scrolling */ 6328); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 9346); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ 6317); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs */ 4437); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs */ 745); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ 9295); + + + + + + + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Mixin to provide a directive with a function that checks if the sticky input has been + * changed since the last time the function was called. Essentially adds a dirty-check to the + * sticky value. + * @docs-private + */ + +const _c0 = [[["caption"]], [["colgroup"], ["col"]]]; +const _c1 = ["caption", "colgroup, col"]; + +function CdkTextColumn_th_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "th", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("text-align", ctx_r0.justify); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r0.headerText, " "); + } +} + +function CdkTextColumn_td_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + } + + if (rf & 2) { + const data_r2 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("text-align", ctx_r1.justify); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r1.dataAccessor(data_r2, ctx_r1.name), " "); + } +} + +function mixinHasStickyInput(base) { + return class extends base { + constructor(...args) { + super(...args); + this._sticky = false; + /** Whether the sticky input has changed since it was last checked. */ + + this._hasStickyChanged = false; + } + /** Whether sticky positioning should be applied. */ + + + get sticky() { + return this._sticky; + } + + set sticky(v) { + const prevValue = this._sticky; + this._sticky = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(v); + this._hasStickyChanged = prevValue !== this._sticky; + } + /** Whether the sticky value has changed since this was last called. */ + + + hasStickyChanged() { + const hasStickyChanged = this._hasStickyChanged; + this._hasStickyChanged = false; + return hasStickyChanged; + } + /** Resets the dirty check for cases where the sticky state has been used without checking. */ + + + resetStickyChanged() { + this._hasStickyChanged = false; + } + + }; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Used to provide a table to some of the sub-components without causing a circular dependency. + * @docs-private + */ + + +const CDK_TABLE = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.InjectionToken('CDK_TABLE'); +/** Injection token that can be used to specify the text column options. */ + +const TEXT_COLUMN_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.InjectionToken('text-column-options'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Cell definition for a CDK table. + * Captures the template of a column's data row cell as well as cell-specific properties. + */ + +class CdkCellDef { + constructor( + /** @docs-private */ + template) { + this.template = template; + } + +} + +CdkCellDef.ɵfac = function CdkCellDef_Factory(t) { + return new (t || CdkCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef)); +}; + +CdkCellDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkCellDef, + selectors: [["", "cdkCellDef", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkCellDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkCellDef]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }]; + }, null); +})(); +/** + * Header cell definition for a CDK table. + * Captures the template of a column's header cell and as well as cell-specific properties. + */ + + +class CdkHeaderCellDef { + constructor( + /** @docs-private */ + template) { + this.template = template; + } + +} + +CdkHeaderCellDef.ɵfac = function CdkHeaderCellDef_Factory(t) { + return new (t || CdkHeaderCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef)); +}; + +CdkHeaderCellDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkHeaderCellDef, + selectors: [["", "cdkHeaderCellDef", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkHeaderCellDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkHeaderCellDef]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }]; + }, null); +})(); +/** + * Footer cell definition for a CDK table. + * Captures the template of a column's footer cell and as well as cell-specific properties. + */ + + +class CdkFooterCellDef { + constructor( + /** @docs-private */ + template) { + this.template = template; + } + +} + +CdkFooterCellDef.ɵfac = function CdkFooterCellDef_Factory(t) { + return new (t || CdkFooterCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef)); +}; + +CdkFooterCellDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkFooterCellDef, + selectors: [["", "cdkFooterCellDef", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFooterCellDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkFooterCellDef]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }]; + }, null); +})(); // Boilerplate for applying mixins to CdkColumnDef. + +/** @docs-private */ + + +class CdkColumnDefBase {} + +const _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase); +/** + * Column definition for the CDK table. + * Defines a set of cells available for a table column. + */ + + +class CdkColumnDef extends _CdkColumnDefBase { + constructor(_table) { + super(); + this._table = _table; + this._stickyEnd = false; + } + /** Unique name for this column. */ + + + get name() { + return this._name; + } + + set name(name) { + this._setNameInput(name); + } + /** + * Whether this column should be sticky positioned on the end of the row. Should make sure + * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value + * has been changed. + */ + + + get stickyEnd() { + return this._stickyEnd; + } + + set stickyEnd(v) { + const prevValue = this._stickyEnd; + this._stickyEnd = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(v); + this._hasStickyChanged = prevValue !== this._stickyEnd; + } + /** + * Overridable method that sets the css classes that will be added to every cell in this + * column. + * In the future, columnCssClassName will change from type string[] to string and this + * will set a single string value. + * @docs-private + */ + + + _updateColumnCssClassName() { + this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`]; + } + /** + * This has been extracted to a util because of TS 4 and VE. + * View Engine doesn't support property rename inheritance. + * TS 4.0 doesn't allow properties to override accessors or vice-versa. + * @docs-private + */ + + + _setNameInput(value) { + // If the directive is set without a name (updated programmatically), then this setter will + // trigger with an empty string and should not overwrite the programmatically set value. + if (value) { + this._name = value; + this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-'); + + this._updateColumnCssClassName(); + } + } + +} + +CdkColumnDef.ɵfac = function CdkColumnDef_Factory(t) { + return new (t || CdkColumnDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CDK_TABLE, 8)); +}; + +CdkColumnDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkColumnDef, + selectors: [["", "cdkColumnDef", ""]], + contentQueries: function CdkColumnDef_ContentQueries(rf, ctx, dirIndex) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkCellDef, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkHeaderCellDef, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkFooterCellDef, 5); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.cell = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.headerCell = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.footerCell = _t.first); + } + }, + inputs: { + sticky: "sticky", + name: ["cdkColumnDef", "name"], + stickyEnd: "stickyEnd" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{ + provide: 'MAT_SORT_HEADER_COLUMN_DEF', + useExisting: CdkColumnDef + }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkColumnDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkColumnDef]', + inputs: ['sticky'], + providers: [{ + provide: 'MAT_SORT_HEADER_COLUMN_DEF', + useExisting: CdkColumnDef + }] + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [CDK_TABLE] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }]; + }, { + name: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input, + args: ['cdkColumnDef'] + }], + stickyEnd: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input, + args: ['stickyEnd'] + }], + cell: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChild, + args: [CdkCellDef] + }], + headerCell: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChild, + args: [CdkHeaderCellDef] + }], + footerCell: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChild, + args: [CdkFooterCellDef] + }] + }); +})(); +/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */ + + +class BaseCdkCell { + constructor(columnDef, elementRef) { + // If IE 11 is dropped before we switch to setting a single class name, change to multi param + // with destructuring. + const classList = elementRef.nativeElement.classList; + + for (const className of columnDef._columnCssClassName) { + classList.add(className); + } + } + +} +/** Header cell template container that adds the right classes and role. */ + + +class CdkHeaderCell extends BaseCdkCell { + constructor(columnDef, elementRef) { + super(columnDef, elementRef); + } + +} + +CdkHeaderCell.ɵfac = function CdkHeaderCell_Factory(t) { + return new (t || CdkHeaderCell)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +CdkHeaderCell.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkHeaderCell, + selectors: [["cdk-header-cell"], ["th", "cdk-header-cell", ""]], + hostAttrs: ["role", "columnheader", 1, "cdk-header-cell"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkHeaderCell, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: 'cdk-header-cell, th[cdk-header-cell]', + host: { + 'class': 'cdk-header-cell', + 'role': 'columnheader' + } + }] + }], function () { + return [{ + type: CdkColumnDef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** Footer cell template container that adds the right classes and role. */ + + +class CdkFooterCell extends BaseCdkCell { + constructor(columnDef, elementRef) { + super(columnDef, elementRef); + + if (columnDef._table?._elementRef.nativeElement.nodeType === 1) { + const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role'); + + const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell'; + elementRef.nativeElement.setAttribute('role', role); + } + } + +} + +CdkFooterCell.ɵfac = function CdkFooterCell_Factory(t) { + return new (t || CdkFooterCell)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +CdkFooterCell.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkFooterCell, + selectors: [["cdk-footer-cell"], ["td", "cdk-footer-cell", ""]], + hostAttrs: [1, "cdk-footer-cell"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFooterCell, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: 'cdk-footer-cell, td[cdk-footer-cell]', + host: { + 'class': 'cdk-footer-cell' + } + }] + }], function () { + return [{ + type: CdkColumnDef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** Cell template container that adds the right classes and role. */ + + +class CdkCell extends BaseCdkCell { + constructor(columnDef, elementRef) { + super(columnDef, elementRef); + + if (columnDef._table?._elementRef.nativeElement.nodeType === 1) { + const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role'); + + const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell'; + elementRef.nativeElement.setAttribute('role', role); + } + } + +} + +CdkCell.ɵfac = function CdkCell_Factory(t) { + return new (t || CdkCell)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +CdkCell.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkCell, + selectors: [["cdk-cell"], ["td", "cdk-cell", ""]], + hostAttrs: [1, "cdk-cell"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkCell, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: 'cdk-cell, td[cdk-cell]', + host: { + 'class': 'cdk-cell' + } + }] + }], function () { + return [{ + type: CdkColumnDef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @docs-private + */ + + +class _Schedule { + constructor() { + this.tasks = []; + this.endTasks = []; + } + +} +/** Injection token used to provide a coalesced style scheduler. */ + + +const _COALESCED_STYLE_SCHEDULER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.InjectionToken('_COALESCED_STYLE_SCHEDULER'); +/** + * Allows grouping up CSSDom mutations after the current execution context. + * This can significantly improve performance when separate consecutive functions are + * reading from the CSSDom and then mutating it. + * + * @docs-private + */ + + +class _CoalescedStyleScheduler { + constructor(_ngZone) { + this._ngZone = _ngZone; + this._currentSchedule = null; + this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_3__.Subject(); + } + /** + * Schedules the specified task to run at the end of the current VM turn. + */ + + + schedule(task) { + this._createScheduleIfNeeded(); + + this._currentSchedule.tasks.push(task); + } + /** + * Schedules the specified task to run after other scheduled tasks at the end of the current + * VM turn. + */ + + + scheduleEnd(task) { + this._createScheduleIfNeeded(); + + this._currentSchedule.endTasks.push(task); + } + /** Prevent any further tasks from running. */ + + + ngOnDestroy() { + this._destroyed.next(); + + this._destroyed.complete(); + } + + _createScheduleIfNeeded() { + if (this._currentSchedule) { + return; + } + + this._currentSchedule = new _Schedule(); + + this._getScheduleObservable().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.takeUntil)(this._destroyed)).subscribe(() => { + while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) { + const schedule = this._currentSchedule; // Capture new tasks scheduled by the current set of tasks. + + this._currentSchedule = new _Schedule(); + + for (const task of schedule.tasks) { + task(); + } + + for (const task of schedule.endTasks) { + task(); + } + } + + this._currentSchedule = null; + }); + } + + _getScheduleObservable() { + // Use onStable when in the context of an ongoing change detection cycle so that we + // do not accidentally trigger additional cycles. + return this._ngZone.isStable ? (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.from)(Promise.resolve(undefined)) : this._ngZone.onStable.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.take)(1)); + } + +} + +_CoalescedStyleScheduler.ɵfac = function _CoalescedStyleScheduler_Factory(t) { + return new (t || _CoalescedStyleScheduler)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.NgZone)); +}; + +_CoalescedStyleScheduler.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ + token: _CoalescedStyleScheduler, + factory: _CoalescedStyleScheduler.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](_CoalescedStyleScheduler, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Injectable + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.NgZone + }]; + }, null); +})(); +/** + * The row template that can be used by the mat-table. Should not be used outside of the + * material library. + */ + + +const CDK_ROW_TEMPLATE = ``; +/** + * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs + * for changes and notifying the table. + */ + +class BaseRowDef { + constructor( + /** @docs-private */ + template, _differs) { + this.template = template; + this._differs = _differs; + } + + ngOnChanges(changes) { + // Create a new columns differ if one does not yet exist. Initialize it based on initial value + // of the columns property or an empty array if none is provided. + if (!this._columnsDiffer) { + const columns = changes['columns'] && changes['columns'].currentValue || []; + this._columnsDiffer = this._differs.find(columns).create(); + + this._columnsDiffer.diff(columns); + } + } + /** + * Returns the difference between the current columns and the columns from the last diff, or null + * if there is no difference. + */ + + + getColumnsDiff() { + return this._columnsDiffer.diff(this.columns); + } + /** Gets this row def's relevant cell template from the provided column def. */ + + + extractCellTemplate(column) { + if (this instanceof CdkHeaderRowDef) { + return column.headerCell.template; + } + + if (this instanceof CdkFooterRowDef) { + return column.footerCell.template; + } else { + return column.cell.template; + } + } + +} + +BaseRowDef.ɵfac = function BaseRowDef_Factory(t) { + return new (t || BaseRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers)); +}; + +BaseRowDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: BaseRowDef, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BaseRowDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers + }]; + }, null); +})(); // Boilerplate for applying mixins to CdkHeaderRowDef. + +/** @docs-private */ + + +class CdkHeaderRowDefBase extends BaseRowDef {} + +const _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase); +/** + * Header row definition for the CDK table. + * Captures the header row's template and other header properties such as the columns to display. + */ + + +class CdkHeaderRowDef extends _CdkHeaderRowDefBase { + constructor(template, _differs, _table) { + super(template, _differs); + this._table = _table; + } // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance. + // Explicitly define it so that the method is called as part of the Angular lifecycle. + + + ngOnChanges(changes) { + super.ngOnChanges(changes); + } + +} + +CdkHeaderRowDef.ɵfac = function CdkHeaderRowDef_Factory(t) { + return new (t || CdkHeaderRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CDK_TABLE, 8)); +}; + +CdkHeaderRowDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkHeaderRowDef, + selectors: [["", "cdkHeaderRowDef", ""]], + inputs: { + columns: ["cdkHeaderRowDef", "columns"], + sticky: ["cdkHeaderRowDefSticky", "sticky"] + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkHeaderRowDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkHeaderRowDef]', + inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky'] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [CDK_TABLE] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }]; + }, null); +})(); // Boilerplate for applying mixins to CdkFooterRowDef. + +/** @docs-private */ + + +class CdkFooterRowDefBase extends BaseRowDef {} + +const _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase); +/** + * Footer row definition for the CDK table. + * Captures the footer row's template and other footer properties such as the columns to display. + */ + + +class CdkFooterRowDef extends _CdkFooterRowDefBase { + constructor(template, _differs, _table) { + super(template, _differs); + this._table = _table; + } // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance. + // Explicitly define it so that the method is called as part of the Angular lifecycle. + + + ngOnChanges(changes) { + super.ngOnChanges(changes); + } + +} + +CdkFooterRowDef.ɵfac = function CdkFooterRowDef_Factory(t) { + return new (t || CdkFooterRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CDK_TABLE, 8)); +}; + +CdkFooterRowDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkFooterRowDef, + selectors: [["", "cdkFooterRowDef", ""]], + inputs: { + columns: ["cdkFooterRowDef", "columns"], + sticky: ["cdkFooterRowDefSticky", "sticky"] + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFooterRowDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkFooterRowDef]', + inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky'] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [CDK_TABLE] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }]; + }, null); +})(); +/** + * Data row definition for the CDK table. + * Captures the header row's template and other row properties such as the columns to display and + * a when predicate that describes when this row should be used. + */ + + +class CdkRowDef extends BaseRowDef { + // TODO(andrewseguin): Add an input for providing a switch function to determine + // if this template should be used. + constructor(template, _differs, _table) { + super(template, _differs); + this._table = _table; + } + +} + +CdkRowDef.ɵfac = function CdkRowDef_Factory(t) { + return new (t || CdkRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CDK_TABLE, 8)); +}; + +CdkRowDef.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkRowDef, + selectors: [["", "cdkRowDef", ""]], + inputs: { + columns: ["cdkRowDefColumns", "columns"], + when: ["cdkRowDefWhen", "when"] + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkRowDef, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkRowDef]', + inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen'] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [CDK_TABLE] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }]; + }, null); +})(); +/** + * Outlet for rendering cells inside of a row or header row. + * @docs-private + */ + + +class CdkCellOutlet { + constructor(_viewContainer) { + this._viewContainer = _viewContainer; + CdkCellOutlet.mostRecentCellOutlet = this; + } + + ngOnDestroy() { + // If this was the last outlet being rendered in the view, remove the reference + // from the static property after it has been destroyed to avoid leaking memory. + if (CdkCellOutlet.mostRecentCellOutlet === this) { + CdkCellOutlet.mostRecentCellOutlet = null; + } + } + +} +/** + * Static property containing the latest constructed instance of this class. + * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using + * createEmbeddedView. After one of these components are created, this property will provide + * a handle to provide that component's cells and context. After init, the CdkCellOutlet will + * construct the cells with the provided context. + */ + + +CdkCellOutlet.mostRecentCellOutlet = null; + +CdkCellOutlet.ɵfac = function CdkCellOutlet_Factory(t) { + return new (t || CdkCellOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef)); +}; + +CdkCellOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkCellOutlet, + selectors: [["", "cdkCellOutlet", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkCellOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[cdkCellOutlet]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef + }]; + }, null); +})(); +/** Header template container that contains the cell outlet. Adds the right class and role. */ + + +class CdkHeaderRow {} + +CdkHeaderRow.ɵfac = function CdkHeaderRow_Factory(t) { + return new (t || CdkHeaderRow)(); +}; + +CdkHeaderRow.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: CdkHeaderRow, + selectors: [["cdk-header-row"], ["tr", "cdk-header-row", ""]], + hostAttrs: ["role", "row", 1, "cdk-header-row"], + decls: 1, + vars: 0, + consts: [["cdkCellOutlet", ""]], + template: function CdkHeaderRow_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainer"](0, 0); + } + }, + dependencies: [CdkCellOutlet], + encapsulation: 2 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkHeaderRow, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Component, + args: [{ + selector: 'cdk-header-row, tr[cdk-header-row]', + template: CDK_ROW_TEMPLATE, + host: { + 'class': 'cdk-header-row', + 'role': 'row' + }, + // See note on CdkTable for explanation on why this uses the default change detection strategy. + // tslint:disable-next-line:validate-decorators + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectionStrategy.Default, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewEncapsulation.None + }] + }], null, null); +})(); +/** Footer template container that contains the cell outlet. Adds the right class and role. */ + + +class CdkFooterRow {} + +CdkFooterRow.ɵfac = function CdkFooterRow_Factory(t) { + return new (t || CdkFooterRow)(); +}; + +CdkFooterRow.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: CdkFooterRow, + selectors: [["cdk-footer-row"], ["tr", "cdk-footer-row", ""]], + hostAttrs: ["role", "row", 1, "cdk-footer-row"], + decls: 1, + vars: 0, + consts: [["cdkCellOutlet", ""]], + template: function CdkFooterRow_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainer"](0, 0); + } + }, + dependencies: [CdkCellOutlet], + encapsulation: 2 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFooterRow, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Component, + args: [{ + selector: 'cdk-footer-row, tr[cdk-footer-row]', + template: CDK_ROW_TEMPLATE, + host: { + 'class': 'cdk-footer-row', + 'role': 'row' + }, + // See note on CdkTable for explanation on why this uses the default change detection strategy. + // tslint:disable-next-line:validate-decorators + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectionStrategy.Default, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewEncapsulation.None + }] + }], null, null); +})(); +/** Data row template container that contains the cell outlet. Adds the right class and role. */ + + +class CdkRow {} + +CdkRow.ɵfac = function CdkRow_Factory(t) { + return new (t || CdkRow)(); +}; + +CdkRow.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: CdkRow, + selectors: [["cdk-row"], ["tr", "cdk-row", ""]], + hostAttrs: ["role", "row", 1, "cdk-row"], + decls: 1, + vars: 0, + consts: [["cdkCellOutlet", ""]], + template: function CdkRow_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainer"](0, 0); + } + }, + dependencies: [CdkCellOutlet], + encapsulation: 2 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkRow, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Component, + args: [{ + selector: 'cdk-row, tr[cdk-row]', + template: CDK_ROW_TEMPLATE, + host: { + 'class': 'cdk-row', + 'role': 'row' + }, + // See note on CdkTable for explanation on why this uses the default change detection strategy. + // tslint:disable-next-line:validate-decorators + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectionStrategy.Default, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewEncapsulation.None + }] + }], null, null); +})(); +/** Row that can be used to display a message when no data is shown in the table. */ + + +class CdkNoDataRow { + constructor(templateRef) { + this.templateRef = templateRef; + } + +} + +CdkNoDataRow.ɵfac = function CdkNoDataRow_Factory(t) { + return new (t || CdkNoDataRow)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef)); +}; + +CdkNoDataRow.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkNoDataRow, + selectors: [["ng-template", "cdkNoDataRow", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkNoDataRow, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: 'ng-template[cdkNoDataRow]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.TemplateRef + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * List of all possible directions that can be used for sticky positioning. + * @docs-private + */ + + +const STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right']; +/** + * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells. + * @docs-private + */ + +class StickyStyler { + /** + * @param _isNativeHtmlTable Whether the sticky logic should be based on a table + * that uses the native `` element. + * @param _stickCellCss The CSS class that will be applied to every row/cell that has + * sticky positioning applied. + * @param direction The directionality context of the table (ltr/rtl); affects column positioning + * by reversing left/right positions. + * @param _isBrowser Whether the table is currently being rendered on the server or the client. + * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells + * using inline styles. If false, it is assumed that position: sticky is included in + * the component stylesheet for _stickCellCss. + * @param _positionListener A listener that is notified of changes to sticky rows/columns + * and their dimensions. + */ + constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) { + this._isNativeHtmlTable = _isNativeHtmlTable; + this._stickCellCss = _stickCellCss; + this.direction = direction; + this._coalescedStyleScheduler = _coalescedStyleScheduler; + this._isBrowser = _isBrowser; + this._needsPositionStickyOnElement = _needsPositionStickyOnElement; + this._positionListener = _positionListener; + this._cachedCellWidths = []; + this._borderCellCss = { + 'top': `${_stickCellCss}-border-elem-top`, + 'bottom': `${_stickCellCss}-border-elem-bottom`, + 'left': `${_stickCellCss}-border-elem-left`, + 'right': `${_stickCellCss}-border-elem-right` + }; + } + /** + * Clears the sticky positioning styles from the row and its cells by resetting the `position` + * style, setting the zIndex to 0, and unsetting each provided sticky direction. + * @param rows The list of rows that should be cleared from sticking in the provided directions + * @param stickyDirections The directions that should no longer be set as sticky on the rows. + */ + + + clearStickyPositioning(rows, stickyDirections) { + const elementsToClear = []; + + for (const row of rows) { + // If the row isn't an element (e.g. if it's an `ng-container`), + // it won't have inline styles or `children` so we skip it. + if (row.nodeType !== row.ELEMENT_NODE) { + continue; + } + + elementsToClear.push(row); + + for (let i = 0; i < row.children.length; i++) { + elementsToClear.push(row.children[i]); + } + } // Coalesce with sticky row/column updates (and potentially other changes like column resize). + + + this._coalescedStyleScheduler.schedule(() => { + for (const element of elementsToClear) { + this._removeStickyStyle(element, stickyDirections); + } + }); + } + /** + * Applies sticky left and right positions to the cells of each row according to the sticky + * states of the rendered column definitions. + * @param rows The rows that should have its set of cells stuck according to the sticky states. + * @param stickyStartStates A list of boolean states where each state represents whether the cell + * in this index position should be stuck to the start of the row. + * @param stickyEndStates A list of boolean states where each state represents whether the cell + * in this index position should be stuck to the end of the row. + * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each + * column cell. If `false` cached widths will be used instead. + */ + + + updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) { + if (!rows.length || !this._isBrowser || !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) { + if (this._positionListener) { + this._positionListener.stickyColumnsUpdated({ + sizes: [] + }); + + this._positionListener.stickyEndColumnsUpdated({ + sizes: [] + }); + } + + return; + } + + const firstRow = rows[0]; + const numCells = firstRow.children.length; + + const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths); + + const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates); + + const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates); + + const lastStickyStart = stickyStartStates.lastIndexOf(true); + const firstStickyEnd = stickyEndStates.indexOf(true); // Coalesce with sticky row updates (and potentially other changes like column resize). + + this._coalescedStyleScheduler.schedule(() => { + const isRtl = this.direction === 'rtl'; + const start = isRtl ? 'right' : 'left'; + const end = isRtl ? 'left' : 'right'; + + for (const row of rows) { + for (let i = 0; i < numCells; i++) { + const cell = row.children[i]; + + if (stickyStartStates[i]) { + this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart); + } + + if (stickyEndStates[i]) { + this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd); + } + } + } + + if (this._positionListener) { + this._positionListener.stickyColumnsUpdated({ + sizes: lastStickyStart === -1 ? [] : cellWidths.slice(0, lastStickyStart + 1).map((width, index) => stickyStartStates[index] ? width : null) + }); + + this._positionListener.stickyEndColumnsUpdated({ + sizes: firstStickyEnd === -1 ? [] : cellWidths.slice(firstStickyEnd).map((width, index) => stickyEndStates[index + firstStickyEnd] ? width : null).reverse() + }); + } + }); + } + /** + * Applies sticky positioning to the row's cells if using the native table layout, and to the + * row itself otherwise. + * @param rowsToStick The list of rows that should be stuck according to their corresponding + * sticky state and to the provided top or bottom position. + * @param stickyStates A list of boolean states where each state represents whether the row + * should be stuck in the particular top or bottom position. + * @param position The position direction in which the row should be stuck if that row should be + * sticky. + * + */ + + + stickRows(rowsToStick, stickyStates, position) { + // Since we can't measure the rows on the server, we can't stick the rows properly. + if (!this._isBrowser) { + return; + } // If positioning the rows to the bottom, reverse their order when evaluating the sticky + // position such that the last row stuck will be "bottom: 0px" and so on. Note that the + // sticky states need to be reversed as well. + + + const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick; + const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates; // Measure row heights all at once before adding sticky styles to reduce layout thrashing. + + const stickyOffsets = []; + const stickyCellHeights = []; + const elementsToStick = []; + + for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) { + if (!states[rowIndex]) { + continue; + } + + stickyOffsets[rowIndex] = stickyOffset; + const row = rows[rowIndex]; + elementsToStick[rowIndex] = this._isNativeHtmlTable ? Array.from(row.children) : [row]; + const height = row.getBoundingClientRect().height; + stickyOffset += height; + stickyCellHeights[rowIndex] = height; + } + + const borderedRowIndex = states.lastIndexOf(true); // Coalesce with other sticky row updates (top/bottom), sticky columns updates + // (and potentially other changes like column resize). + + this._coalescedStyleScheduler.schedule(() => { + for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) { + if (!states[rowIndex]) { + continue; + } + + const offset = stickyOffsets[rowIndex]; + const isBorderedRowIndex = rowIndex === borderedRowIndex; + + for (const element of elementsToStick[rowIndex]) { + this._addStickyStyle(element, position, offset, isBorderedRowIndex); + } + } + + if (position === 'top') { + this._positionListener?.stickyHeaderRowsUpdated({ + sizes: stickyCellHeights, + offsets: stickyOffsets, + elements: elementsToStick + }); + } else { + this._positionListener?.stickyFooterRowsUpdated({ + sizes: stickyCellHeights, + offsets: stickyOffsets, + elements: elementsToStick + }); + } + }); + } + /** + * When using the native table in Safari, sticky footer cells do not stick. The only way to stick + * footer rows is to apply sticky styling to the tfoot container. This should only be done if + * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from + * the tfoot element. + */ + + + updateStickyFooterContainer(tableElement, stickyStates) { + if (!this._isNativeHtmlTable) { + return; + } + + const tfoot = tableElement.querySelector('tfoot'); // Coalesce with other sticky updates (and potentially other changes like column resize). + + this._coalescedStyleScheduler.schedule(() => { + if (stickyStates.some(state => !state)) { + this._removeStickyStyle(tfoot, ['bottom']); + } else { + this._addStickyStyle(tfoot, 'bottom', 0, false); + } + }); + } + /** + * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating + * the zIndex, removing each of the provided sticky directions, and removing the + * sticky position if there are no more directions. + */ + + + _removeStickyStyle(element, stickyDirections) { + for (const dir of stickyDirections) { + element.style[dir] = ''; + element.classList.remove(this._borderCellCss[dir]); + } // If the element no longer has any more sticky directions, remove sticky positioning and + // the sticky CSS class. + // Short-circuit checking element.style[dir] for stickyDirections as they + // were already removed above. + + + const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]); + + if (hasDirection) { + element.style.zIndex = this._getCalculatedZIndex(element); + } else { + // When not hasDirection, _getCalculatedZIndex will always return ''. + element.style.zIndex = ''; + + if (this._needsPositionStickyOnElement) { + element.style.position = ''; + } + + element.classList.remove(this._stickCellCss); + } + } + /** + * Adds the sticky styling to the element by adding the sticky style class, changing position + * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky + * direction and value. + */ + + + _addStickyStyle(element, dir, dirValue, isBorderElement) { + element.classList.add(this._stickCellCss); + + if (isBorderElement) { + element.classList.add(this._borderCellCss[dir]); + } + + element.style[dir] = `${dirValue}px`; + element.style.zIndex = this._getCalculatedZIndex(element); + + if (this._needsPositionStickyOnElement) { + element.style.cssText += 'position: -webkit-sticky; position: sticky; '; + } + } + /** + * Calculate what the z-index should be for the element, depending on what directions (top, + * bottom, left, right) have been set. It should be true that elements with a top direction + * should have the highest index since these are elements like a table header. If any of those + * elements are also sticky in another direction, then they should appear above other elements + * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements + * (e.g. footer rows) should then be next in the ordering such that they are below the header + * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns) + * should minimally increment so that they are above non-sticky elements but below top and bottom + * elements. + */ + + + _getCalculatedZIndex(element) { + const zIndexIncrements = { + top: 100, + bottom: 10, + left: 1, + right: 1 + }; + let zIndex = 0; // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3, + // loses the array generic type in the `for of`. But we *also* have to use `Array` because + // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration` + + for (const dir of STICKY_DIRECTIONS) { + if (element.style[dir]) { + zIndex += zIndexIncrements[dir]; + } + } + + return zIndex ? `${zIndex}` : ''; + } + /** Gets the widths for each cell in the provided row. */ + + + _getCellWidths(row, recalculateCellWidths = true) { + if (!recalculateCellWidths && this._cachedCellWidths.length) { + return this._cachedCellWidths; + } + + const cellWidths = []; + const firstRowCells = row.children; + + for (let i = 0; i < firstRowCells.length; i++) { + let cell = firstRowCells[i]; + cellWidths.push(cell.getBoundingClientRect().width); + } + + this._cachedCellWidths = cellWidths; + return cellWidths; + } + /** + * Determines the left and right positions of each sticky column cell, which will be the + * accumulation of all sticky column cell widths to the left and right, respectively. + * Non-sticky cells do not need to have a value set since their positions will not be applied. + */ + + + _getStickyStartColumnPositions(widths, stickyStates) { + const positions = []; + let nextPosition = 0; + + for (let i = 0; i < widths.length; i++) { + if (stickyStates[i]) { + positions[i] = nextPosition; + nextPosition += widths[i]; + } + } + + return positions; + } + /** + * Determines the left and right positions of each sticky column cell, which will be the + * accumulation of all sticky column cell widths to the left and right, respectively. + * Non-sticky cells do not need to have a value set since their positions will not be applied. + */ + + + _getStickyEndColumnPositions(widths, stickyStates) { + const positions = []; + let nextPosition = 0; + + for (let i = widths.length; i > 0; i--) { + if (stickyStates[i]) { + positions[i] = nextPosition; + nextPosition += widths[i]; + } + } + + return positions; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Returns an error to be thrown when attempting to find an unexisting column. + * @param id Id whose lookup failed. + * @docs-private + */ + + +function getTableUnknownColumnError(id) { + return Error(`Could not find column with id "${id}".`); +} +/** + * Returns an error to be thrown when two column definitions have the same name. + * @docs-private + */ + + +function getTableDuplicateColumnNameError(name) { + return Error(`Duplicate column definition name provided: "${name}".`); +} +/** + * Returns an error to be thrown when there are multiple rows that are missing a when function. + * @docs-private + */ + + +function getTableMultipleDefaultRowDefsError() { + return Error(`There can only be one default row without a when predicate function.`); +} +/** + * Returns an error to be thrown when there are no matching row defs for a particular set of data. + * @docs-private + */ + + +function getTableMissingMatchingRowDefError(data) { + return Error(`Could not find a matching row definition for the` + `provided row data: ${JSON.stringify(data)}`); +} +/** + * Returns an error to be thrown when there is no row definitions present in the content. + * @docs-private + */ + + +function getTableMissingRowDefsError() { + return Error('Missing definitions for header, footer, and row; ' + 'cannot determine which columns should be rendered.'); +} +/** + * Returns an error to be thrown when the data source does not match the compatible types. + * @docs-private + */ + + +function getTableUnknownDataSourceError() { + return Error(`Provided data source did not match an array, Observable, or DataSource`); +} +/** + * Returns an error to be thrown when the text column cannot find a parent table to inject. + * @docs-private + */ + + +function getTableTextColumnMissingParentTableError() { + return Error(`Text column could not find a parent table for registration.`); +} +/** + * Returns an error to be thrown when a table text column doesn't have a name. + * @docs-private + */ + + +function getTableTextColumnMissingNameError() { + return Error(`Table text column must have a name.`); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** The injection token used to specify the StickyPositioningListener. */ + + +const STICKY_POSITIONING_LISTENER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.InjectionToken('CDK_SPL'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with + * tables that animate rows. + */ + +class CdkRecycleRows {} + +CdkRecycleRows.ɵfac = function CdkRecycleRows_Factory(t) { + return new (t || CdkRecycleRows)(); +}; + +CdkRecycleRows.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: CdkRecycleRows, + selectors: [["cdk-table", "recycleRows", ""], ["table", "cdk-table", "", "recycleRows", ""]], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{ + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._RecycleViewRepeaterStrategy + }])] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkRecycleRows, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]', + providers: [{ + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._RecycleViewRepeaterStrategy + }] + }] + }], null, null); +})(); +/** + * Provides a handle for the table to grab the view container's ng-container to insert data rows. + * @docs-private + */ + + +class DataRowOutlet { + constructor(viewContainer, elementRef) { + this.viewContainer = viewContainer; + this.elementRef = elementRef; + } + +} + +DataRowOutlet.ɵfac = function DataRowOutlet_Factory(t) { + return new (t || DataRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +DataRowOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: DataRowOutlet, + selectors: [["", "rowOutlet", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DataRowOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[rowOutlet]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** + * Provides a handle for the table to grab the view container's ng-container to insert the header. + * @docs-private + */ + + +class HeaderRowOutlet { + constructor(viewContainer, elementRef) { + this.viewContainer = viewContainer; + this.elementRef = elementRef; + } + +} + +HeaderRowOutlet.ɵfac = function HeaderRowOutlet_Factory(t) { + return new (t || HeaderRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +HeaderRowOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: HeaderRowOutlet, + selectors: [["", "headerRowOutlet", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HeaderRowOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[headerRowOutlet]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** + * Provides a handle for the table to grab the view container's ng-container to insert the footer. + * @docs-private + */ + + +class FooterRowOutlet { + constructor(viewContainer, elementRef) { + this.viewContainer = viewContainer; + this.elementRef = elementRef; + } + +} + +FooterRowOutlet.ɵfac = function FooterRowOutlet_Factory(t) { + return new (t || FooterRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +FooterRowOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: FooterRowOutlet, + selectors: [["", "footerRowOutlet", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FooterRowOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[footerRowOutlet]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** + * Provides a handle for the table to grab the view + * container's ng-container to insert the no data row. + * @docs-private + */ + + +class NoDataRowOutlet { + constructor(viewContainer, elementRef) { + this.viewContainer = viewContainer; + this.elementRef = elementRef; + } + +} + +NoDataRowOutlet.ɵfac = function NoDataRowOutlet_Factory(t) { + return new (t || NoDataRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)); +}; + +NoDataRowOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ + type: NoDataRowOutlet, + selectors: [["", "noDataRowOutlet", ""]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](NoDataRowOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Directive, + args: [{ + selector: '[noDataRowOutlet]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }]; + }, null); +})(); +/** + * The table template that can be used by the mat-table. Should not be used outside of the + * material library. + * @docs-private + */ + + +const CDK_TABLE_TEMPLATE = // Note that according to MDN, the `caption` element has to be projected as the **first** +// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption +` + + + + + + +`; +/** + * Class used to conveniently type the embedded view ref for rows with a context. + * @docs-private + */ + +class RowViewRef extends _angular_core__WEBPACK_IMPORTED_MODULE_1__.EmbeddedViewRef {} +/** + * A data table that can render a header row, data rows, and a footer row. + * Uses the dataSource input to determine the data to be rendered. The data can be provided either + * as a data array, an Observable stream that emits the data array to render, or a DataSource with a + * connect function that will return an Observable stream that emits the data array to render. + */ + + +class CdkTable { + constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler, + /** + * @deprecated `_stickyPositioningListener` parameter to become required. + * @breaking-change 13.0.0 + */ + _stickyPositioningListener) { + this._differs = _differs; + this._changeDetectorRef = _changeDetectorRef; + this._elementRef = _elementRef; + this._dir = _dir; + this._platform = _platform; + this._viewRepeater = _viewRepeater; + this._coalescedStyleScheduler = _coalescedStyleScheduler; + this._viewportRuler = _viewportRuler; + this._stickyPositioningListener = _stickyPositioningListener; + /** Subject that emits when the component has been destroyed. */ + + this._onDestroy = new rxjs__WEBPACK_IMPORTED_MODULE_3__.Subject(); + /** + * Map of all the user's defined columns (header, data, and footer cell template) identified by + * name. Collection populated by the column definitions gathered by `ContentChildren` as well as + * any custom column definitions added to `_customColumnDefs`. + */ + + this._columnDefsByName = new Map(); + /** + * Column definitions that were defined outside of the direct content children of the table. + * These will be defined when, e.g., creating a wrapper around the cdkTable that has + * column definitions as *its* content child. + */ + + this._customColumnDefs = new Set(); + /** + * Data row definitions that were defined outside of the direct content children of the table. + * These will be defined when, e.g., creating a wrapper around the cdkTable that has + * built-in data rows as *its* content child. + */ + + this._customRowDefs = new Set(); + /** + * Header row definitions that were defined outside of the direct content children of the table. + * These will be defined when, e.g., creating a wrapper around the cdkTable that has + * built-in header rows as *its* content child. + */ + + this._customHeaderRowDefs = new Set(); + /** + * Footer row definitions that were defined outside of the direct content children of the table. + * These will be defined when, e.g., creating a wrapper around the cdkTable that has a + * built-in footer row as *its* content child. + */ + + this._customFooterRowDefs = new Set(); + /** + * Whether the header row definition has been changed. Triggers an update to the header row after + * content is checked. Initialized as true so that the table renders the initial set of rows. + */ + + this._headerRowDefChanged = true; + /** + * Whether the footer row definition has been changed. Triggers an update to the footer row after + * content is checked. Initialized as true so that the table renders the initial set of rows. + */ + + this._footerRowDefChanged = true; + /** + * Whether the sticky column styles need to be updated. Set to `true` when the visible columns + * change. + */ + + this._stickyColumnStylesNeedReset = true; + /** + * Whether the sticky styler should recalculate cell widths when applying sticky styles. If + * `false`, cached values will be used instead. This is only applicable to tables with + * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated. + */ + + this._forceRecalculateCellWidths = true; + /** + * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing + * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with + * the cached `RenderRow` objects when possible, the row identity is preserved when the data + * and row template matches, which allows the `IterableDiffer` to check rows by reference + * and understand which rows are added/moved/removed. + * + * Implemented as a map of maps where the first key is the `data: T` object and the second is the + * `CdkRowDef` object. With the two keys, the cache points to a `RenderRow` object that + * contains an array of created pairs. The array is necessary to handle cases where the data + * array contains multiple duplicate data objects and each instantiated `RenderRow` must be + * stored. + */ + + this._cachedRenderRowsMap = new Map(); + /** + * CSS class added to any row or cell that has sticky positioning applied. May be overriden by + * table subclasses. + */ + + this.stickyCssClass = 'cdk-table-sticky'; + /** + * Whether to manually add positon: sticky to all sticky cell elements. Not needed if + * the position is set in a selector associated with the value of stickyCssClass. May be + * overridden by table subclasses + */ + + this.needsPositionStickyOnElement = true; + /** Whether the no data row is currently showing anything. */ + + this._isShowingNoDataRow = false; + this._multiTemplateDataRows = false; + this._fixedLayout = false; + /** + * Emits when the table completes rendering a set of data rows based on the latest data from the + * data source, even if the set of rows is empty. + */ + + this.contentChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.EventEmitter(); // TODO(andrewseguin): Remove max value as the end index + // and instead calculate the view on init and scroll. + + /** + * Stream containing the latest information on what rows are being displayed on screen. + * Can be used by the data source to as a heuristic of what data should be provided. + * + * @docs-private + */ + + this.viewChange = new rxjs__WEBPACK_IMPORTED_MODULE_7__.BehaviorSubject({ + start: 0, + end: Number.MAX_VALUE + }); + + if (!role) { + this._elementRef.nativeElement.setAttribute('role', 'table'); + } + + this._document = _document; + this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE'; + } + /** + * Tracking function that will be used to check the differences in data changes. Used similarly + * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data + * relative to the function to know if a row should be added/removed/moved. + * Accepts a function that takes two parameters, `index` and `item`. + */ + + + get trackBy() { + return this._trackByFn; + } + + set trackBy(fn) { + if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') { + console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`); + } + + this._trackByFn = fn; + } + /** + * The table's source of data, which can be provided in three ways (in order of complexity): + * - Simple data array (each object represents one table row) + * - Stream that emits a data array each time the array changes + * - `DataSource` object that implements the connect/disconnect interface. + * + * If a data array is provided, the table must be notified when the array's objects are + * added, removed, or moved. This can be done by calling the `renderRows()` function which will + * render the diff since the last table render. If the data array reference is changed, the table + * will automatically trigger an update to the rows. + * + * When providing an Observable stream, the table will trigger an update automatically when the + * stream emits a new array of data. + * + * Finally, when providing a `DataSource` object, the table will use the Observable stream + * provided by the connect function and trigger updates when that stream emits new data array + * values. During the table's ngOnDestroy or when the data source is removed from the table, the + * table will call the DataSource's `disconnect` function (may be useful for cleaning up any + * subscriptions registered during the connect process). + */ + + + get dataSource() { + return this._dataSource; + } + + set dataSource(dataSource) { + if (this._dataSource !== dataSource) { + this._switchDataSource(dataSource); + } + } + /** + * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when' + * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each + * dataobject will render the first row that evaluates its when predicate to true, in the order + * defined in the table, or otherwise the default row which does not have a when predicate. + */ + + + get multiTemplateDataRows() { + return this._multiTemplateDataRows; + } + + set multiTemplateDataRows(v) { + this._multiTemplateDataRows = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(v); // In Ivy if this value is set via a static attribute (e.g.
), + // this setter will be invoked before the row outlet has been defined hence the null check. + + if (this._rowOutlet && this._rowOutlet.viewContainer.length) { + this._forceRenderDataRows(); + + this.updateStickyColumnStyles(); + } + } + /** + * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths + * and optimize rendering sticky styles for native tables. No-op for flex tables. + */ + + + get fixedLayout() { + return this._fixedLayout; + } + + set fixedLayout(v) { + this._fixedLayout = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(v); // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated. + + this._forceRecalculateCellWidths = true; + this._stickyColumnStylesNeedReset = true; + } + + ngOnInit() { + this._setupStickyStyler(); + + if (this._isNativeHtmlTable) { + this._applyNativeTableSections(); + } // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If + // the user has provided a custom trackBy, return the result of that function as evaluated + // with the values of the `RenderRow`'s data and index. + + + this._dataDiffer = this._differs.find([]).create((_i, dataRow) => { + return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow; + }); + + this._viewportRuler.change().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.takeUntil)(this._onDestroy)).subscribe(() => { + this._forceRecalculateCellWidths = true; + }); + } + + ngAfterContentChecked() { + // Cache the row and column definitions gathered by ContentChildren and programmatic injection. + this._cacheRowDefs(); + + this._cacheColumnDefs(); // Make sure that the user has at least added header, footer, or data row def. + + + if (!this._headerRowDefs.length && !this._footerRowDefs.length && !this._rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableMissingRowDefsError(); + } // Render updates if the list of columns have been changed for the header, row, or footer defs. + + + const columnsChanged = this._renderUpdatedColumns(); + + const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged; // Ensure sticky column styles are reset if set to `true` elsewhere. + + this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged; + this._forceRecalculateCellWidths = rowDefsChanged; // If the header row definition has been changed, trigger a render to the header row. + + if (this._headerRowDefChanged) { + this._forceRenderHeaderRows(); + + this._headerRowDefChanged = false; + } // If the footer row definition has been changed, trigger a render to the footer row. + + + if (this._footerRowDefChanged) { + this._forceRenderFooterRows(); + + this._footerRowDefChanged = false; + } // If there is a data source and row definitions, connect to the data source unless a + // connection has already been made. + + + if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) { + this._observeRenderChanges(); + } else if (this._stickyColumnStylesNeedReset) { + // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being + // called when it row data arrives. Otherwise, we need to call it proactively. + this.updateStickyColumnStyles(); + } + + this._checkStickyStates(); + } + + ngOnDestroy() { + this._rowOutlet.viewContainer.clear(); + + this._noDataRowOutlet.viewContainer.clear(); + + this._headerRowOutlet.viewContainer.clear(); + + this._footerRowOutlet.viewContainer.clear(); + + this._cachedRenderRowsMap.clear(); + + this._onDestroy.next(); + + this._onDestroy.complete(); + + if ((0,_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.isDataSource)(this.dataSource)) { + this.dataSource.disconnect(this); + } + } + /** + * Renders rows based on the table's latest set of data, which was either provided directly as an + * input or retrieved through an Observable stream (directly or from a DataSource). + * Checks for differences in the data since the last diff to perform only the necessary + * changes (add/remove/move rows). + * + * If the table's data source is a DataSource or Observable, this will be invoked automatically + * each time the provided Observable stream emits a new data array. Otherwise if your data is + * an array, this function will need to be called to render any changes. + */ + + + renderRows() { + this._renderRows = this._getAllRenderRows(); + + const changes = this._dataDiffer.diff(this._renderRows); + + if (!changes) { + this._updateNoDataRow(); + + this.contentChanged.next(); + return; + } + + const viewContainer = this._rowOutlet.viewContainer; + + this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, change => { + if (change.operation === 1 + /* INSERTED */ + && change.context) { + this._renderCellTemplateForItem(change.record.item.rowDef, change.context); + } + }); // Update the meta context of a row's context data (index, count, first, last, ...) + + + this._updateRowIndexContext(); // Update rows that did not get added/removed/moved but may have had their identity changed, + // e.g. if trackBy matched data on some property but the actual data reference changed. + + + changes.forEachIdentityChange(record => { + const rowView = viewContainer.get(record.currentIndex); + rowView.context.$implicit = record.item.data; + }); + + this._updateNoDataRow(); + + this.updateStickyColumnStyles(); + this.contentChanged.next(); + } + /** Adds a column definition that was not included as part of the content children. */ + + + addColumnDef(columnDef) { + this._customColumnDefs.add(columnDef); + } + /** Removes a column definition that was not included as part of the content children. */ + + + removeColumnDef(columnDef) { + this._customColumnDefs.delete(columnDef); + } + /** Adds a row definition that was not included as part of the content children. */ + + + addRowDef(rowDef) { + this._customRowDefs.add(rowDef); + } + /** Removes a row definition that was not included as part of the content children. */ + + + removeRowDef(rowDef) { + this._customRowDefs.delete(rowDef); + } + /** Adds a header row definition that was not included as part of the content children. */ + + + addHeaderRowDef(headerRowDef) { + this._customHeaderRowDefs.add(headerRowDef); + + this._headerRowDefChanged = true; + } + /** Removes a header row definition that was not included as part of the content children. */ + + + removeHeaderRowDef(headerRowDef) { + this._customHeaderRowDefs.delete(headerRowDef); + + this._headerRowDefChanged = true; + } + /** Adds a footer row definition that was not included as part of the content children. */ + + + addFooterRowDef(footerRowDef) { + this._customFooterRowDefs.add(footerRowDef); + + this._footerRowDefChanged = true; + } + /** Removes a footer row definition that was not included as part of the content children. */ + + + removeFooterRowDef(footerRowDef) { + this._customFooterRowDefs.delete(footerRowDef); + + this._footerRowDefChanged = true; + } + /** Sets a no data row definition that was not included as a part of the content children. */ + + + setNoDataRow(noDataRow) { + this._customNoDataRow = noDataRow; + } + /** + * Updates the header sticky styles. First resets all applied styles with respect to the cells + * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is + * automatically called when the header row changes its displayed set of columns, or if its + * sticky input changes. May be called manually for cases where the cell content changes outside + * of these events. + */ + + + updateStickyHeaderRowStyles() { + const headerRows = this._getRenderedRows(this._headerRowOutlet); + + const tableElement = this._elementRef.nativeElement; // Hide the thead element if there are no header rows. This is necessary to satisfy + // overzealous a11y checkers that fail because the `rowgroup` element does not contain + // required child `row`. + + const thead = tableElement.querySelector('thead'); + + if (thead) { + thead.style.display = headerRows.length ? '' : 'none'; + } + + const stickyStates = this._headerRowDefs.map(def => def.sticky); + + this._stickyStyler.clearStickyPositioning(headerRows, ['top']); + + this._stickyStyler.stickRows(headerRows, stickyStates, 'top'); // Reset the dirty state of the sticky input change since it has been used. + + + this._headerRowDefs.forEach(def => def.resetStickyChanged()); + } + /** + * Updates the footer sticky styles. First resets all applied styles with respect to the cells + * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is + * automatically called when the footer row changes its displayed set of columns, or if its + * sticky input changes. May be called manually for cases where the cell content changes outside + * of these events. + */ + + + updateStickyFooterRowStyles() { + const footerRows = this._getRenderedRows(this._footerRowOutlet); + + const tableElement = this._elementRef.nativeElement; // Hide the tfoot element if there are no footer rows. This is necessary to satisfy + // overzealous a11y checkers that fail because the `rowgroup` element does not contain + // required child `row`. + + const tfoot = tableElement.querySelector('tfoot'); + + if (tfoot) { + tfoot.style.display = footerRows.length ? '' : 'none'; + } + + const stickyStates = this._footerRowDefs.map(def => def.sticky); + + this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']); + + this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom'); + + this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates); // Reset the dirty state of the sticky input change since it has been used. + + + this._footerRowDefs.forEach(def => def.resetStickyChanged()); + } + /** + * Updates the column sticky styles. First resets all applied styles with respect to the cells + * sticking to the left and right. Then sticky styles are added for the left and right according + * to the column definitions for each cell in each row. This is automatically called when + * the data source provides a new set of data or when a column definition changes its sticky + * input. May be called manually for cases where the cell content changes outside of these events. + */ + + + updateStickyColumnStyles() { + const headerRows = this._getRenderedRows(this._headerRowOutlet); + + const dataRows = this._getRenderedRows(this._rowOutlet); + + const footerRows = this._getRenderedRows(this._footerRowOutlet); // For tables not using a fixed layout, the column widths may change when new rows are rendered. + // In a table using a fixed layout, row content won't affect column width, so sticky styles + // don't need to be cleared unless either the sticky column config changes or one of the row + // defs change. + + + if (this._isNativeHtmlTable && !this._fixedLayout || this._stickyColumnStylesNeedReset) { + // Clear the left and right positioning from all columns in the table across all rows since + // sticky columns span across all table sections (header, data, footer) + this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']); + + this._stickyColumnStylesNeedReset = false; + } // Update the sticky styles for each header row depending on the def's sticky state + + + headerRows.forEach((headerRow, i) => { + this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]); + }); // Update the sticky styles for each data row depending on its def's sticky state + + this._rowDefs.forEach(rowDef => { + // Collect all the rows rendered with this row definition. + const rows = []; + + for (let i = 0; i < dataRows.length; i++) { + if (this._renderRows[i].rowDef === rowDef) { + rows.push(dataRows[i]); + } + } + + this._addStickyColumnStyles(rows, rowDef); + }); // Update the sticky styles for each footer row depending on the def's sticky state + + + footerRows.forEach((footerRow, i) => { + this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]); + }); // Reset the dirty state of the sticky input change since it has been used. + + Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged()); + } + /** + * Get the list of RenderRow objects to render according to the current list of data and defined + * row definitions. If the previous list already contained a particular pair, it should be reused + * so that the differ equates their references. + */ + + + _getAllRenderRows() { + const renderRows = []; // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the + // new cache while unused ones can be picked up by garbage collection. + + const prevCachedRenderRows = this._cachedRenderRowsMap; + this._cachedRenderRowsMap = new Map(); // For each data object, get the list of rows that should be rendered, represented by the + // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`. + + for (let i = 0; i < this._data.length; i++) { + let data = this._data[i]; + + const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data)); + + if (!this._cachedRenderRowsMap.has(data)) { + this._cachedRenderRowsMap.set(data, new WeakMap()); + } + + for (let j = 0; j < renderRowsForData.length; j++) { + let renderRow = renderRowsForData[j]; + + const cache = this._cachedRenderRowsMap.get(renderRow.data); + + if (cache.has(renderRow.rowDef)) { + cache.get(renderRow.rowDef).push(renderRow); + } else { + cache.set(renderRow.rowDef, [renderRow]); + } + + renderRows.push(renderRow); + } + } + + return renderRows; + } + /** + * Gets a list of `RenderRow` for the provided data object and any `CdkRowDef` objects that + * should be rendered for this data. Reuses the cached RenderRow objects if they match the same + * `(T, CdkRowDef)` pair. + */ + + + _getRenderRowsForData(data, dataIndex, cache) { + const rowDefs = this._getRowDefs(data, dataIndex); + + return rowDefs.map(rowDef => { + const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : []; + + if (cachedRenderRows.length) { + const dataRow = cachedRenderRows.shift(); + dataRow.dataIndex = dataIndex; + return dataRow; + } else { + return { + data, + rowDef, + dataIndex + }; + } + }); + } + /** Update the map containing the content's column definitions. */ + + + _cacheColumnDefs() { + this._columnDefsByName.clear(); + + const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs); + columnDefs.forEach(columnDef => { + if (this._columnDefsByName.has(columnDef.name) && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableDuplicateColumnNameError(columnDef.name); + } + + this._columnDefsByName.set(columnDef.name, columnDef); + }); + } + /** Update the list of all available row definitions that can be used. */ + + + _cacheRowDefs() { + this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs); + this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs); + this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs); // After all row definitions are determined, find the row definition to be considered default. + + const defaultRowDefs = this._rowDefs.filter(def => !def.when); + + if (!this.multiTemplateDataRows && defaultRowDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableMultipleDefaultRowDefsError(); + } + + this._defaultRowDef = defaultRowDefs[0]; + } + /** + * Check if the header, data, or footer rows have changed what columns they want to display or + * whether the sticky states have changed for the header or footer. If there is a diff, then + * re-render that section. + */ + + + _renderUpdatedColumns() { + const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff(); // Force re-render data rows if the list of column definitions have changed. + + + const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false); + + if (dataColumnsChanged) { + this._forceRenderDataRows(); + } // Force re-render header/footer rows if the list of column definitions have changed. + + + const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false); + + if (headerColumnsChanged) { + this._forceRenderHeaderRows(); + } + + const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false); + + if (footerColumnsChanged) { + this._forceRenderFooterRows(); + } + + return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged; + } + /** + * Switch to the provided data source by resetting the data and unsubscribing from the current + * render change subscription if one exists. If the data source is null, interpret this by + * clearing the row outlet. Otherwise start listening for new data. + */ + + + _switchDataSource(dataSource) { + this._data = []; + + if ((0,_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.isDataSource)(this.dataSource)) { + this.dataSource.disconnect(this); + } // Stop listening for data from the previous data source. + + + if (this._renderChangeSubscription) { + this._renderChangeSubscription.unsubscribe(); + + this._renderChangeSubscription = null; + } + + if (!dataSource) { + if (this._dataDiffer) { + this._dataDiffer.diff([]); + } + + this._rowOutlet.viewContainer.clear(); + } + + this._dataSource = dataSource; + } + /** Set up a subscription for the data provided by the data source. */ + + + _observeRenderChanges() { + // If no data source has been set, there is nothing to observe for changes. + if (!this.dataSource) { + return; + } + + let dataStream; + + if ((0,_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__.isDataSource)(this.dataSource)) { + dataStream = this.dataSource.connect(this); + } else if ((0,rxjs__WEBPACK_IMPORTED_MODULE_8__.isObservable)(this.dataSource)) { + dataStream = this.dataSource; + } else if (Array.isArray(this.dataSource)) { + dataStream = (0,rxjs__WEBPACK_IMPORTED_MODULE_9__.of)(this.dataSource); + } + + if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableUnknownDataSourceError(); + } + + this._renderChangeSubscription = dataStream.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.takeUntil)(this._onDestroy)).subscribe(data => { + this._data = data || []; + this.renderRows(); + }); + } + /** + * Clears any existing content in the header row outlet and creates a new embedded view + * in the outlet using the header row definition. + */ + + + _forceRenderHeaderRows() { + // Clear the header row outlet if any content exists. + if (this._headerRowOutlet.viewContainer.length > 0) { + this._headerRowOutlet.viewContainer.clear(); + } + + this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i)); + + this.updateStickyHeaderRowStyles(); + } + /** + * Clears any existing content in the footer row outlet and creates a new embedded view + * in the outlet using the footer row definition. + */ + + + _forceRenderFooterRows() { + // Clear the footer row outlet if any content exists. + if (this._footerRowOutlet.viewContainer.length > 0) { + this._footerRowOutlet.viewContainer.clear(); + } + + this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i)); + + this.updateStickyFooterRowStyles(); + } + /** Adds the sticky column styles for the rows according to the columns' stick states. */ + + + _addStickyColumnStyles(rows, rowDef) { + const columnDefs = Array.from(rowDef.columns || []).map(columnName => { + const columnDef = this._columnDefsByName.get(columnName); + + if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableUnknownColumnError(columnName); + } + + return columnDef; + }); + const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky); + const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd); + + this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths); + } + /** Gets the list of rows that have been rendered in the row outlet. */ + + + _getRenderedRows(rowOutlet) { + const renderedRows = []; + + for (let i = 0; i < rowOutlet.viewContainer.length; i++) { + const viewRef = rowOutlet.viewContainer.get(i); + renderedRows.push(viewRef.rootNodes[0]); + } + + return renderedRows; + } + /** + * Get the matching row definitions that should be used for this row data. If there is only + * one row definition, it is returned. Otherwise, find the row definitions that has a when + * predicate that returns true with the data. If none return true, return the default row + * definition. + */ + + + _getRowDefs(data, dataIndex) { + if (this._rowDefs.length == 1) { + return [this._rowDefs[0]]; + } + + let rowDefs = []; + + if (this.multiTemplateDataRows) { + rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data)); + } else { + let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef; + + if (rowDef) { + rowDefs.push(rowDef); + } + } + + if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableMissingMatchingRowDefError(data); + } + + return rowDefs; + } + + _getEmbeddedViewArgs(renderRow, index) { + const rowDef = renderRow.rowDef; + const context = { + $implicit: renderRow.data + }; + return { + templateRef: rowDef.template, + context, + index + }; + } + /** + * Creates a new row template in the outlet and fills it with the set of cell templates. + * Optionally takes a context to provide to the row and cells, as well as an optional index + * of where to place the new row template in the outlet. + */ + + + _renderRow(outlet, rowDef, index, context = {}) { + // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView + const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index); + + this._renderCellTemplateForItem(rowDef, context); + + return view; + } + + _renderCellTemplateForItem(rowDef, context) { + for (let cellTemplate of this._getCellTemplates(rowDef)) { + if (CdkCellOutlet.mostRecentCellOutlet) { + CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context); + } + } + + this._changeDetectorRef.markForCheck(); + } + /** + * Updates the index-related context for each row to reflect any changes in the index of the rows, + * e.g. first/last/even/odd. + */ + + + _updateRowIndexContext() { + const viewContainer = this._rowOutlet.viewContainer; + + for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) { + const viewRef = viewContainer.get(renderIndex); + const context = viewRef.context; + context.count = count; + context.first = renderIndex === 0; + context.last = renderIndex === count - 1; + context.even = renderIndex % 2 === 0; + context.odd = !context.even; + + if (this.multiTemplateDataRows) { + context.dataIndex = this._renderRows[renderIndex].dataIndex; + context.renderIndex = renderIndex; + } else { + context.index = this._renderRows[renderIndex].dataIndex; + } + } + } + /** Gets the column definitions for the provided row def. */ + + + _getCellTemplates(rowDef) { + if (!rowDef || !rowDef.columns) { + return []; + } + + return Array.from(rowDef.columns, columnId => { + const column = this._columnDefsByName.get(columnId); + + if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableUnknownColumnError(columnId); + } + + return rowDef.extractCellTemplate(column); + }); + } + /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */ + + + _applyNativeTableSections() { + const documentFragment = this._document.createDocumentFragment(); + + const sections = [{ + tag: 'thead', + outlets: [this._headerRowOutlet] + }, { + tag: 'tbody', + outlets: [this._rowOutlet, this._noDataRowOutlet] + }, { + tag: 'tfoot', + outlets: [this._footerRowOutlet] + }]; + + for (const section of sections) { + const element = this._document.createElement(section.tag); + + element.setAttribute('role', 'rowgroup'); + + for (const outlet of section.outlets) { + element.appendChild(outlet.elementRef.nativeElement); + } + + documentFragment.appendChild(element); + } // Use a DocumentFragment so we don't hit the DOM on each iteration. + + + this._elementRef.nativeElement.appendChild(documentFragment); + } + /** + * Forces a re-render of the data rows. Should be called in cases where there has been an input + * change that affects the evaluation of which rows should be rendered, e.g. toggling + * `multiTemplateDataRows` or adding/removing row definitions. + */ + + + _forceRenderDataRows() { + this._dataDiffer.diff([]); + + this._rowOutlet.viewContainer.clear(); + + this.renderRows(); + } + /** + * Checks if there has been a change in sticky states since last check and applies the correct + * sticky styles. Since checking resets the "dirty" state, this should only be performed once + * during a change detection and after the inputs are settled (after content check). + */ + + + _checkStickyStates() { + const stickyCheckReducer = (acc, d) => { + return acc || d.hasStickyChanged(); + }; // Note that the check needs to occur for every definition since it notifies the definition + // that it can reset its dirty state. Using another operator like `some` may short-circuit + // remaining definitions and leave them in an unchecked state. + + + if (this._headerRowDefs.reduce(stickyCheckReducer, false)) { + this.updateStickyHeaderRowStyles(); + } + + if (this._footerRowDefs.reduce(stickyCheckReducer, false)) { + this.updateStickyFooterRowStyles(); + } + + if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) { + this._stickyColumnStylesNeedReset = true; + this.updateStickyColumnStyles(); + } + } + /** + * Creates the sticky styler that will be used for sticky rows and columns. Listens + * for directionality changes and provides the latest direction to the styler. Re-applies column + * stickiness when directionality changes. + */ + + + _setupStickyStyler() { + const direction = this._dir ? this._dir.value : 'ltr'; + this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener); + (this._dir ? this._dir.change : (0,rxjs__WEBPACK_IMPORTED_MODULE_9__.of)()).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.takeUntil)(this._onDestroy)).subscribe(value => { + this._stickyStyler.direction = value; + this.updateStickyColumnStyles(); + }); + } + /** Filters definitions that belong to this table from a QueryList. */ + + + _getOwnDefs(items) { + return items.filter(item => !item._table || item._table === this); + } + /** Creates or removes the no data row, depending on whether any data is being shown. */ + + + _updateNoDataRow() { + const noDataRow = this._customNoDataRow || this._noDataRow; + + if (noDataRow) { + const shouldShow = this._rowOutlet.viewContainer.length === 0; + + if (shouldShow !== this._isShowingNoDataRow) { + const container = this._noDataRowOutlet.viewContainer; + shouldShow ? container.createEmbeddedView(noDataRow.templateRef) : container.clear(); + this._isShowingNoDataRow = shouldShow; + } + } + } + +} + +CdkTable.ɵfac = function CdkTable_Factory(t) { + return new (t || CdkTable)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectorRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_10__.Directionality, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_11__.DOCUMENT), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_12__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_COALESCED_STYLE_SCHEDULER), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_13__.ViewportRuler), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](STICKY_POSITIONING_LISTENER, 12)); +}; + +CdkTable.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: CdkTable, + selectors: [["cdk-table"], ["table", "cdk-table", ""]], + contentQueries: function CdkTable_ContentQueries(rf, ctx, dirIndex) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkNoDataRow, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkColumnDef, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkRowDef, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkHeaderRowDef, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, CdkFooterRowDef, 5); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._noDataRow = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentColumnDefs = _t); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentRowDefs = _t); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentHeaderRowDefs = _t); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentFooterRowDefs = _t); + } + }, + viewQuery: function CdkTable_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](DataRowOutlet, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](HeaderRowOutlet, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](FooterRowOutlet, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](NoDataRowOutlet, 7); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._rowOutlet = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._headerRowOutlet = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._footerRowOutlet = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._noDataRowOutlet = _t.first); + } + }, + hostAttrs: [1, "cdk-table"], + hostVars: 2, + hostBindings: function CdkTable_HostBindings(rf, ctx) { + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("cdk-table-fixed-layout", ctx.fixedLayout); + } + }, + inputs: { + trackBy: "trackBy", + dataSource: "dataSource", + multiTemplateDataRows: "multiTemplateDataRows", + fixedLayout: "fixedLayout" + }, + outputs: { + contentChanged: "contentChanged" + }, + exportAs: ["cdkTable"], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{ + provide: CDK_TABLE, + useExisting: CdkTable + }, { + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._DisposeViewRepeaterStrategy + }, { + provide: _COALESCED_STYLE_SCHEDULER, + useClass: _CoalescedStyleScheduler + }, // Prevent nested tables from seeing this table's StickyPositioningListener. + { + provide: STICKY_POSITIONING_LISTENER, + useValue: null + }])], + ngContentSelectors: _c1, + decls: 6, + vars: 0, + consts: [["headerRowOutlet", ""], ["rowOutlet", ""], ["noDataRowOutlet", ""], ["footerRowOutlet", ""]], + template: function CdkTable_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojectionDef"](_c0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](1, 1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainer"](2, 0)(3, 1)(4, 2)(5, 3); + } + }, + dependencies: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet], + styles: [".cdk-table-fixed-layout{table-layout:fixed}\n"], + encapsulation: 2 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkTable, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Component, + args: [{ + selector: 'cdk-table, table[cdk-table]', + exportAs: 'cdkTable', + template: CDK_TABLE_TEMPLATE, + host: { + 'class': 'cdk-table', + '[class.cdk-table-fixed-layout]': 'fixedLayout' + }, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewEncapsulation.None, + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectionStrategy.Default, + providers: [{ + provide: CDK_TABLE, + useExisting: CdkTable + }, { + provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY, + useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._DisposeViewRepeaterStrategy + }, { + provide: _COALESCED_STYLE_SCHEDULER, + useClass: _CoalescedStyleScheduler + }, // Prevent nested tables from seeing this table's StickyPositioningListener. + { + provide: STICKY_POSITIONING_LISTENER, + useValue: null + }], + styles: [".cdk-table-fixed-layout{table-layout:fixed}\n"] + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.IterableDiffers + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectorRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Attribute, + args: ['role'] + }] + }, { + type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_10__.Directionality, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_11__.DOCUMENT] + }] + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_12__.Platform + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_0__._VIEW_REPEATER_STRATEGY] + }] + }, { + type: _CoalescedStyleScheduler, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [_COALESCED_STYLE_SCHEDULER] + }] + }, { + type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_13__.ViewportRuler + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.SkipSelf + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [STICKY_POSITIONING_LISTENER] + }] + }]; + }, { + trackBy: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + dataSource: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + multiTemplateDataRows: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + fixedLayout: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + contentChanged: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Output + }], + _rowOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [DataRowOutlet, { + static: true + }] + }], + _headerRowOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [HeaderRowOutlet, { + static: true + }] + }], + _footerRowOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [FooterRowOutlet, { + static: true + }] + }], + _noDataRowOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [NoDataRowOutlet, { + static: true + }] + }], + _contentColumnDefs: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChildren, + args: [CdkColumnDef, { + descendants: true + }] + }], + _contentRowDefs: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChildren, + args: [CdkRowDef, { + descendants: true + }] + }], + _contentHeaderRowDefs: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChildren, + args: [CdkHeaderRowDef, { + descendants: true + }] + }], + _contentFooterRowDefs: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChildren, + args: [CdkFooterRowDef, { + descendants: true + }] + }], + _noDataRow: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ContentChild, + args: [CdkNoDataRow] + }] + }); +})(); +/** Utility function that gets a merged list of the entries in an array and values of a Set. */ + + +function mergeArrayAndSet(array, set) { + return array.concat(Array.from(set)); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Column that simply shows text content for the header and row cells. Assumes that the table + * is using the native table implementation (`
`). + * + * By default, the name of this column will be the header text and data property accessor. + * The header text can be overridden with the `headerText` input. Cell values can be overridden with + * the `dataAccessor` input. Change the text justification to the start or end using the `justify` + * input. + */ + + +class CdkTextColumn { + constructor( // `CdkTextColumn` is always requiring a table, but we just assert it manually + // for better error reporting. + // tslint:disable-next-line: lightweight-tokens + _table, _options) { + this._table = _table; + this._options = _options; + /** Alignment of the cell values. */ + + this.justify = 'start'; + this._options = _options || {}; + } + /** Column name that should be used to reference this column. */ + + + get name() { + return this._name; + } + + set name(name) { + this._name = name; // With Ivy, inputs can be initialized before static query results are + // available. In that case, we defer the synchronization until "ngOnInit" fires. + + this._syncColumnDefName(); + } + + ngOnInit() { + this._syncColumnDefName(); + + if (this.headerText === undefined) { + this.headerText = this._createDefaultHeaderText(); + } + + if (!this.dataAccessor) { + this.dataAccessor = this._options.defaultDataAccessor || ((data, name) => data[name]); + } + + if (this._table) { + // Provide the cell and headerCell directly to the table with the static `ViewChild` query, + // since the columnDef will not pick up its content by the time the table finishes checking + // its content and initializing the rows. + this.columnDef.cell = this.cell; + this.columnDef.headerCell = this.headerCell; + + this._table.addColumnDef(this.columnDef); + } else if (typeof ngDevMode === 'undefined' || ngDevMode) { + throw getTableTextColumnMissingParentTableError(); + } + } + + ngOnDestroy() { + if (this._table) { + this._table.removeColumnDef(this.columnDef); + } + } + /** + * Creates a default header text. Use the options' header text transformation function if one + * has been provided. Otherwise simply capitalize the column name. + */ + + + _createDefaultHeaderText() { + const name = this.name; + + if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) { + throw getTableTextColumnMissingNameError(); + } + + if (this._options && this._options.defaultHeaderTextTransform) { + return this._options.defaultHeaderTextTransform(name); + } + + return name[0].toUpperCase() + name.slice(1); + } + /** Synchronizes the column definition name with the text column name. */ + + + _syncColumnDefName() { + if (this.columnDef) { + this.columnDef.name = this.name; + } + } + +} + +CdkTextColumn.ɵfac = function CdkTextColumn_Factory(t) { + return new (t || CdkTextColumn)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkTable, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](TEXT_COLUMN_OPTIONS, 8)); +}; + +CdkTextColumn.ɵcmp = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: CdkTextColumn, + selectors: [["cdk-text-column"]], + viewQuery: function CdkTextColumn_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](CdkColumnDef, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](CdkCellDef, 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](CdkHeaderCellDef, 7); + } + + if (rf & 2) { + let _t; + + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.columnDef = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.cell = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.headerCell = _t.first); + } + }, + inputs: { + name: "name", + headerText: "headerText", + dataAccessor: "dataAccessor", + justify: "justify" + }, + decls: 3, + vars: 0, + consts: [["cdkColumnDef", ""], ["cdk-header-cell", "", 3, "text-align", 4, "cdkHeaderCellDef"], ["cdk-cell", "", 3, "text-align", 4, "cdkCellDef"], ["cdk-header-cell", ""], ["cdk-cell", ""]], + template: function CdkTextColumn_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, CdkTextColumn_th_1_Template, 2, 3, "th", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, CdkTextColumn_td_2_Template, 2, 3, "td", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"](); + } + }, + dependencies: [CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCellDef, CdkCell], + encapsulation: 2 +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkTextColumn, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Component, + args: [{ + selector: 'cdk-text-column', + template: ` + + + + + `, + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewEncapsulation.None, + // Change detection is intentionally not set to OnPush. This component's template will be provided + // to the table to be inserted into its view. This is problematic when change detection runs since + // the bindings in this template will be evaluated _after_ the table's view is evaluated, which + // mean's the template in the table's view will not have the updated value (and in fact will cause + // an ExpressionChangedAfterItHasBeenCheckedError). + // tslint:disable-next-line:validate-decorators + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ChangeDetectionStrategy.Default + }] + }], function () { + return [{ + type: CdkTable, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Inject, + args: [TEXT_COLUMN_OPTIONS] + }] + }]; + }, { + name: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + headerText: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + dataAccessor: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + justify: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.Input + }], + columnDef: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [CdkColumnDef, { + static: true + }] + }], + cell: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [CdkCellDef, { + static: true + }] + }], + headerCell: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild, + args: [CdkHeaderCellDef, { + static: true + }] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const EXPORTED_DECLARATIONS = [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, CdkRecycleRows, NoDataRowOutlet]; + +class CdkTableModule {} + +CdkTableModule.ɵfac = function CdkTableModule_Factory(t) { + return new (t || CdkTableModule)(); +}; + +CdkTableModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ + type: CdkTableModule +}); +CdkTableModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ + imports: [[_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_13__.ScrollingModule]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkTableModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_1__.NgModule, + args: [{ + exports: EXPORTED_DECLARATIONS, + declarations: EXPORTED_DECLARATIONS, + imports: [_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_13__.ScrollingModule] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 5804: +/*!***********************************************************!*\ + !*** ./node_modules/@angular/cdk/fesm2020/text-field.mjs ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AutofillMonitor": () => (/* binding */ AutofillMonitor), +/* harmony export */ "CdkAutofill": () => (/* binding */ CdkAutofill), +/* harmony export */ "CdkTextareaAutosize": () => (/* binding */ CdkTextareaAutosize), +/* harmony export */ "TextFieldModule": () => (/* binding */ TextFieldModule) +/* harmony export */ }); +/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/platform */ 9107); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/cdk/coercion */ 8971); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ 591); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ 228); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 3280); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ 998); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs/operators */ 8951); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/common */ 4666); + + + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Options to pass to the animationstart listener. */ + +const listenerOptions = (0,_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.normalizePassiveListenerOptions)({ + passive: true +}); +/** + * An injectable service that can be used to monitor the autofill state of an input. + * Based on the following blog post: + * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7 + */ + +class AutofillMonitor { + constructor(_platform, _ngZone) { + this._platform = _platform; + this._ngZone = _ngZone; + this._monitoredElements = new Map(); + } + + monitor(elementOrRef) { + if (!this._platform.isBrowser) { + return rxjs__WEBPACK_IMPORTED_MODULE_1__.EMPTY; + } + + const element = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceElement)(elementOrRef); + + const info = this._monitoredElements.get(element); + + if (info) { + return info.subject; + } + + const result = new rxjs__WEBPACK_IMPORTED_MODULE_3__.Subject(); + const cssClass = 'cdk-text-field-autofilled'; + + const listener = event => { + // Animation events fire on initial element render, we check for the presence of the autofill + // CSS class to make sure this is a real change in state, not just the initial render before + // we fire off events. + if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) { + element.classList.add(cssClass); + + this._ngZone.run(() => result.next({ + target: event.target, + isAutofilled: true + })); + } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) { + element.classList.remove(cssClass); + + this._ngZone.run(() => result.next({ + target: event.target, + isAutofilled: false + })); + } + }; + + this._ngZone.runOutsideAngular(() => { + element.addEventListener('animationstart', listener, listenerOptions); + element.classList.add('cdk-text-field-autofill-monitored'); + }); + + this._monitoredElements.set(element, { + subject: result, + unlisten: () => { + element.removeEventListener('animationstart', listener, listenerOptions); + } + }); + + return result; + } + + stopMonitoring(elementOrRef) { + const element = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceElement)(elementOrRef); + + const info = this._monitoredElements.get(element); + + if (info) { + info.unlisten(); + info.subject.complete(); + element.classList.remove('cdk-text-field-autofill-monitored'); + element.classList.remove('cdk-text-field-autofilled'); + + this._monitoredElements.delete(element); + } + } + + ngOnDestroy() { + this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element)); + } + +} + +AutofillMonitor.ɵfac = function AutofillMonitor_Factory(t) { + return new (t || AutofillMonitor)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_4__.NgZone)); +}; + +AutofillMonitor.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineInjectable"]({ + token: AutofillMonitor, + factory: AutofillMonitor.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](AutofillMonitor, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.Platform + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.NgZone + }]; + }, null); +})(); +/** A directive that can be used to monitor the autofill state of an input. */ + + +class CdkAutofill { + constructor(_elementRef, _autofillMonitor) { + this._elementRef = _elementRef; + this._autofillMonitor = _autofillMonitor; + /** Emits when the autofill state of the element changes. */ + + this.cdkAutofill = new _angular_core__WEBPACK_IMPORTED_MODULE_4__.EventEmitter(); + } + + ngOnInit() { + this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event)); + } + + ngOnDestroy() { + this._autofillMonitor.stopMonitoring(this._elementRef); + } + +} + +CdkAutofill.ɵfac = function CdkAutofill_Factory(t) { + return new (t || CdkAutofill)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](AutofillMonitor)); +}; + +CdkAutofill.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineDirective"]({ + type: CdkAutofill, + selectors: [["", "cdkAutofill", ""]], + outputs: { + cdkAutofill: "cdkAutofill" + } +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](CdkAutofill, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Directive, + args: [{ + selector: '[cdkAutofill]' + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef + }, { + type: AutofillMonitor + }]; + }, { + cdkAutofill: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Output + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Directive to automatically resize a textarea to fit its content. */ + + +class CdkTextareaAutosize { + constructor(_elementRef, _platform, _ngZone, + /** @breaking-change 11.0.0 make document required */ + document) { + this._elementRef = _elementRef; + this._platform = _platform; + this._ngZone = _ngZone; + this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_3__.Subject(); + this._enabled = true; + /** + * Value of minRows as of last resize. If the minRows has decreased, the + * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight + * does not have the same problem because it does not affect the textarea's scrollHeight. + */ + + this._previousMinRows = -1; + this._isViewInited = false; + /** Handles `focus` and `blur` events. */ + + this._handleFocusEvent = event => { + this._hasFocus = event.type === 'focus'; + }; + + this._document = document; + this._textareaElement = this._elementRef.nativeElement; + } + /** Minimum amount of rows in the textarea. */ + + + get minRows() { + return this._minRows; + } + + set minRows(value) { + this._minRows = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceNumberProperty)(value); + + this._setMinHeight(); + } + /** Maximum amount of rows in the textarea. */ + + + get maxRows() { + return this._maxRows; + } + + set maxRows(value) { + this._maxRows = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceNumberProperty)(value); + + this._setMaxHeight(); + } + /** Whether autosizing is enabled or not */ + + + get enabled() { + return this._enabled; + } + + set enabled(value) { + value = (0,_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__.coerceBooleanProperty)(value); // Only act if the actual value changed. This specifically helps to not run + // resizeToFitContent too early (i.e. before ngAfterViewInit) + + if (this._enabled !== value) { + (this._enabled = value) ? this.resizeToFitContent(true) : this.reset(); + } + } + + get placeholder() { + return this._textareaElement.placeholder; + } + + set placeholder(value) { + this._cachedPlaceholderHeight = undefined; + this._textareaElement.placeholder = value; + + this._cacheTextareaPlaceholderHeight(); + } + /** Sets the minimum height of the textarea as determined by minRows. */ + + + _setMinHeight() { + const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null; + + if (minHeight) { + this._textareaElement.style.minHeight = minHeight; + } + } + /** Sets the maximum height of the textarea as determined by maxRows. */ + + + _setMaxHeight() { + const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null; + + if (maxHeight) { + this._textareaElement.style.maxHeight = maxHeight; + } + } + + ngAfterViewInit() { + if (this._platform.isBrowser) { + // Remember the height which we started with in case autosizing is disabled + this._initialHeight = this._textareaElement.style.height; + this.resizeToFitContent(); + + this._ngZone.runOutsideAngular(() => { + const window = this._getWindow(); + + (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.fromEvent)(window, 'resize').pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__.auditTime)(16), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__.takeUntil)(this._destroyed)).subscribe(() => this.resizeToFitContent(true)); + + this._textareaElement.addEventListener('focus', this._handleFocusEvent); + + this._textareaElement.addEventListener('blur', this._handleFocusEvent); + }); + + this._isViewInited = true; + this.resizeToFitContent(true); + } + } + + ngOnDestroy() { + this._textareaElement.removeEventListener('focus', this._handleFocusEvent); + + this._textareaElement.removeEventListener('blur', this._handleFocusEvent); + + this._destroyed.next(); + + this._destroyed.complete(); + } + /** + * Cache the height of a single-row textarea if it has not already been cached. + * + * We need to know how large a single "row" of a textarea is in order to apply minRows and + * maxRows. For the initial version, we will assume that the height of a single line in the + * textarea does not ever change. + */ + + + _cacheTextareaLineHeight() { + if (this._cachedLineHeight) { + return; + } // Use a clone element because we have to override some styles. + + + let textareaClone = this._textareaElement.cloneNode(false); + + textareaClone.rows = 1; // Use `position: absolute` so that this doesn't cause a browser layout and use + // `visibility: hidden` so that nothing is rendered. Clear any other styles that + // would affect the height. + + textareaClone.style.position = 'absolute'; + textareaClone.style.visibility = 'hidden'; + textareaClone.style.border = 'none'; + textareaClone.style.padding = '0'; + textareaClone.style.height = ''; + textareaClone.style.minHeight = ''; + textareaClone.style.maxHeight = ''; // In Firefox it happens that textarea elements are always bigger than the specified amount + // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar. + // As a workaround that removes the extra space for the scrollbar, we can just set overflow + // to hidden. This ensures that there is no invalid calculation of the line height. + // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654 + + textareaClone.style.overflow = 'hidden'; + + this._textareaElement.parentNode.appendChild(textareaClone); + + this._cachedLineHeight = textareaClone.clientHeight; + textareaClone.remove(); // Min and max heights have to be re-calculated if the cached line height changes + + this._setMinHeight(); + + this._setMaxHeight(); + } + + _measureScrollHeight() { + const element = this._textareaElement; + const previousMargin = element.style.marginBottom || ''; + const isFirefox = this._platform.FIREFOX; + const needsMarginFiller = isFirefox && this._hasFocus; + const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring'; // In some cases the page might move around while we're measuring the `textarea` on Firefox. We + // work around it by assigning a temporary margin with the same height as the `textarea` so that + // it occupies the same amount of space. See #23233. + + if (needsMarginFiller) { + element.style.marginBottom = `${element.clientHeight}px`; + } // Reset the textarea height to auto in order to shrink back to its default size. + // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations. + + + element.classList.add(measuringClass); // The measuring class includes a 2px padding to workaround an issue with Chrome, + // so we account for that extra space here by subtracting 4 (2px top + 2px bottom). + + const scrollHeight = element.scrollHeight - 4; + element.classList.remove(measuringClass); + + if (needsMarginFiller) { + element.style.marginBottom = previousMargin; + } + + return scrollHeight; + } + + _cacheTextareaPlaceholderHeight() { + if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) { + return; + } + + if (!this.placeholder) { + this._cachedPlaceholderHeight = 0; + return; + } + + const value = this._textareaElement.value; + this._textareaElement.value = this._textareaElement.placeholder; + this._cachedPlaceholderHeight = this._measureScrollHeight(); + this._textareaElement.value = value; + } + + ngDoCheck() { + if (this._platform.isBrowser) { + this.resizeToFitContent(); + } + } + /** + * Resize the textarea to fit its content. + * @param force Whether to force a height recalculation. By default the height will be + * recalculated only if the value changed since the last call. + */ + + + resizeToFitContent(force = false) { + // If autosizing is disabled, just skip everything else + if (!this._enabled) { + return; + } + + this._cacheTextareaLineHeight(); + + this._cacheTextareaPlaceholderHeight(); // If we haven't determined the line-height yet, we know we're still hidden and there's no point + // in checking the height of the textarea. + + + if (!this._cachedLineHeight) { + return; + } + + const textarea = this._elementRef.nativeElement; + const value = textarea.value; // Only resize if the value or minRows have changed since these calculations can be expensive. + + if (!force && this._minRows === this._previousMinRows && value === this._previousValue) { + return; + } + + const scrollHeight = this._measureScrollHeight(); + + const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0); // Use the scrollHeight to know how large the textarea *would* be if fit its entire value. + + textarea.style.height = `${height}px`; + + this._ngZone.runOutsideAngular(() => { + if (typeof requestAnimationFrame !== 'undefined') { + requestAnimationFrame(() => this._scrollToCaretPosition(textarea)); + } else { + setTimeout(() => this._scrollToCaretPosition(textarea)); + } + }); + + this._previousValue = value; + this._previousMinRows = this._minRows; + } + /** + * Resets the textarea to its original size + */ + + + reset() { + // Do not try to change the textarea, if the initialHeight has not been determined yet + // This might potentially remove styles when reset() is called before ngAfterViewInit + if (this._initialHeight !== undefined) { + this._textareaElement.style.height = this._initialHeight; + } + } // In Ivy the `host` metadata will be merged, whereas in ViewEngine it is overridden. In order + // to avoid double event listeners, we need to use `HostListener`. Once Ivy is the default, we + // can move this back into `host`. + // tslint:disable:no-host-decorator-in-concrete + + + _noopInputHandler() {// no-op handler that ensures we're running change detection on input events. + } + /** Access injected document if available or fallback to global document reference */ + + + _getDocument() { + return this._document || document; + } + /** Use defaultView of injected document if available or fallback to global window reference */ + + + _getWindow() { + const doc = this._getDocument(); + + return doc.defaultView || window; + } + /** + * Scrolls a textarea to the caret position. On Firefox resizing the textarea will + * prevent it from scrolling to the caret position. We need to re-set the selection + * in order for it to scroll to the proper position. + */ + + + _scrollToCaretPosition(textarea) { + const { + selectionStart, + selectionEnd + } = textarea; // IE will throw an "Unspecified error" if we try to set the selection range after the + // element has been removed from the DOM. Assert that the directive hasn't been destroyed + // between the time we requested the animation frame and when it was executed. + // Also note that we have to assert that the textarea is focused before we set the + // selection range. Setting the selection range on a non-focused textarea will cause + // it to receive focus on IE and Edge. + + if (!this._destroyed.isStopped && this._hasFocus) { + textarea.setSelectionRange(selectionStart, selectionEnd); + } + } + +} + +CdkTextareaAutosize.ɵfac = function CdkTextareaAutosize_Factory(t) { + return new (t || CdkTextareaAutosize)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.Platform), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_4__.NgZone), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_8__.DOCUMENT, 8)); +}; + +CdkTextareaAutosize.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineDirective"]({ + type: CdkTextareaAutosize, + selectors: [["textarea", "cdkTextareaAutosize", ""]], + hostAttrs: ["rows", "1", 1, "cdk-textarea-autosize"], + hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵlistener"]("input", function CdkTextareaAutosize_input_HostBindingHandler() { + return ctx._noopInputHandler(); + }); + } + }, + inputs: { + minRows: ["cdkAutosizeMinRows", "minRows"], + maxRows: ["cdkAutosizeMaxRows", "maxRows"], + enabled: ["cdkTextareaAutosize", "enabled"], + placeholder: "placeholder" + }, + exportAs: ["cdkTextareaAutosize"] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](CdkTextareaAutosize, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Directive, + args: [{ + selector: 'textarea[cdkTextareaAutosize]', + exportAs: 'cdkTextareaAutosize', + host: { + 'class': 'cdk-textarea-autosize', + // Textarea elements that have the directive applied should have a single row by default. + // Browsers normally show two rows by default and therefore this limits the minRows binding. + 'rows': '1' + } + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef + }, { + type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.Platform + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.NgZone + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Inject, + args: [_angular_common__WEBPACK_IMPORTED_MODULE_8__.DOCUMENT] + }] + }]; + }, { + minRows: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Input, + args: ['cdkAutosizeMinRows'] + }], + maxRows: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Input, + args: ['cdkAutosizeMaxRows'] + }], + enabled: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Input, + args: ['cdkTextareaAutosize'] + }], + placeholder: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Input + }], + _noopInputHandler: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.HostListener, + args: ['input'] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class TextFieldModule {} + +TextFieldModule.ɵfac = function TextFieldModule_Factory(t) { + return new (t || TextFieldModule)(); +}; + +TextFieldModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineNgModule"]({ + type: TextFieldModule +}); +TextFieldModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineInjector"]({ + imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.PlatformModule]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](TextFieldModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.NgModule, + args: [{ + declarations: [CdkAutofill, CdkTextareaAutosize], + imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__.PlatformModule], + exports: [CdkAutofill, CdkTextareaAutosize] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 4666: +/*!**********************************************************!*\ + !*** ./node_modules/@angular/common/fesm2020/common.mjs ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "APP_BASE_HREF": () => (/* binding */ APP_BASE_HREF), +/* harmony export */ "AsyncPipe": () => (/* binding */ AsyncPipe), +/* harmony export */ "CommonModule": () => (/* binding */ CommonModule), +/* harmony export */ "CurrencyPipe": () => (/* binding */ CurrencyPipe), +/* harmony export */ "DATE_PIPE_DEFAULT_TIMEZONE": () => (/* binding */ DATE_PIPE_DEFAULT_TIMEZONE), +/* harmony export */ "DOCUMENT": () => (/* binding */ DOCUMENT), +/* harmony export */ "DatePipe": () => (/* binding */ DatePipe), +/* harmony export */ "DecimalPipe": () => (/* binding */ DecimalPipe), +/* harmony export */ "FormStyle": () => (/* binding */ FormStyle), +/* harmony export */ "FormatWidth": () => (/* binding */ FormatWidth), +/* harmony export */ "HashLocationStrategy": () => (/* binding */ HashLocationStrategy), +/* harmony export */ "I18nPluralPipe": () => (/* binding */ I18nPluralPipe), +/* harmony export */ "I18nSelectPipe": () => (/* binding */ I18nSelectPipe), +/* harmony export */ "IMAGE_LOADER": () => (/* binding */ IMAGE_LOADER), +/* harmony export */ "JsonPipe": () => (/* binding */ JsonPipe), +/* harmony export */ "KeyValuePipe": () => (/* binding */ KeyValuePipe), +/* harmony export */ "LOCATION_INITIALIZED": () => (/* binding */ LOCATION_INITIALIZED), +/* harmony export */ "Location": () => (/* binding */ Location), +/* harmony export */ "LocationStrategy": () => (/* binding */ LocationStrategy), +/* harmony export */ "LowerCasePipe": () => (/* binding */ LowerCasePipe), +/* harmony export */ "NgClass": () => (/* binding */ NgClass), +/* harmony export */ "NgComponentOutlet": () => (/* binding */ NgComponentOutlet), +/* harmony export */ "NgFor": () => (/* binding */ NgForOf), +/* harmony export */ "NgForOf": () => (/* binding */ NgForOf), +/* harmony export */ "NgForOfContext": () => (/* binding */ NgForOfContext), +/* harmony export */ "NgIf": () => (/* binding */ NgIf), +/* harmony export */ "NgIfContext": () => (/* binding */ NgIfContext), +/* harmony export */ "NgLocaleLocalization": () => (/* binding */ NgLocaleLocalization), +/* harmony export */ "NgLocalization": () => (/* binding */ NgLocalization), +/* harmony export */ "NgOptimizedImage": () => (/* binding */ NgOptimizedImage), +/* harmony export */ "NgPlural": () => (/* binding */ NgPlural), +/* harmony export */ "NgPluralCase": () => (/* binding */ NgPluralCase), +/* harmony export */ "NgStyle": () => (/* binding */ NgStyle), +/* harmony export */ "NgSwitch": () => (/* binding */ NgSwitch), +/* harmony export */ "NgSwitchCase": () => (/* binding */ NgSwitchCase), +/* harmony export */ "NgSwitchDefault": () => (/* binding */ NgSwitchDefault), +/* harmony export */ "NgTemplateOutlet": () => (/* binding */ NgTemplateOutlet), +/* harmony export */ "NumberFormatStyle": () => (/* binding */ NumberFormatStyle), +/* harmony export */ "NumberSymbol": () => (/* binding */ NumberSymbol), +/* harmony export */ "PRECONNECT_CHECK_BLOCKLIST": () => (/* binding */ PRECONNECT_CHECK_BLOCKLIST), +/* harmony export */ "PathLocationStrategy": () => (/* binding */ PathLocationStrategy), +/* harmony export */ "PercentPipe": () => (/* binding */ PercentPipe), +/* harmony export */ "PlatformLocation": () => (/* binding */ PlatformLocation), +/* harmony export */ "Plural": () => (/* binding */ Plural), +/* harmony export */ "SlicePipe": () => (/* binding */ SlicePipe), +/* harmony export */ "TitleCasePipe": () => (/* binding */ TitleCasePipe), +/* harmony export */ "TranslationWidth": () => (/* binding */ TranslationWidth), +/* harmony export */ "UpperCasePipe": () => (/* binding */ UpperCasePipe), +/* harmony export */ "VERSION": () => (/* binding */ VERSION), +/* harmony export */ "ViewportScroller": () => (/* binding */ ViewportScroller), +/* harmony export */ "WeekDay": () => (/* binding */ WeekDay), +/* harmony export */ "XhrFactory": () => (/* binding */ XhrFactory), +/* harmony export */ "formatCurrency": () => (/* binding */ formatCurrency), +/* harmony export */ "formatDate": () => (/* binding */ formatDate), +/* harmony export */ "formatNumber": () => (/* binding */ formatNumber), +/* harmony export */ "formatPercent": () => (/* binding */ formatPercent), +/* harmony export */ "getCurrencySymbol": () => (/* binding */ getCurrencySymbol), +/* harmony export */ "getLocaleCurrencyCode": () => (/* binding */ getLocaleCurrencyCode), +/* harmony export */ "getLocaleCurrencyName": () => (/* binding */ getLocaleCurrencyName), +/* harmony export */ "getLocaleCurrencySymbol": () => (/* binding */ getLocaleCurrencySymbol), +/* harmony export */ "getLocaleDateFormat": () => (/* binding */ getLocaleDateFormat), +/* harmony export */ "getLocaleDateTimeFormat": () => (/* binding */ getLocaleDateTimeFormat), +/* harmony export */ "getLocaleDayNames": () => (/* binding */ getLocaleDayNames), +/* harmony export */ "getLocaleDayPeriods": () => (/* binding */ getLocaleDayPeriods), +/* harmony export */ "getLocaleDirection": () => (/* binding */ getLocaleDirection), +/* harmony export */ "getLocaleEraNames": () => (/* binding */ getLocaleEraNames), +/* harmony export */ "getLocaleExtraDayPeriodRules": () => (/* binding */ getLocaleExtraDayPeriodRules), +/* harmony export */ "getLocaleExtraDayPeriods": () => (/* binding */ getLocaleExtraDayPeriods), +/* harmony export */ "getLocaleFirstDayOfWeek": () => (/* binding */ getLocaleFirstDayOfWeek), +/* harmony export */ "getLocaleId": () => (/* binding */ getLocaleId), +/* harmony export */ "getLocaleMonthNames": () => (/* binding */ getLocaleMonthNames), +/* harmony export */ "getLocaleNumberFormat": () => (/* binding */ getLocaleNumberFormat), +/* harmony export */ "getLocaleNumberSymbol": () => (/* binding */ getLocaleNumberSymbol), +/* harmony export */ "getLocalePluralCase": () => (/* binding */ getLocalePluralCase), +/* harmony export */ "getLocaleTimeFormat": () => (/* binding */ getLocaleTimeFormat), +/* harmony export */ "getLocaleWeekEndRange": () => (/* binding */ getLocaleWeekEndRange), +/* harmony export */ "getNumberOfCurrencyDigits": () => (/* binding */ getNumberOfCurrencyDigits), +/* harmony export */ "isPlatformBrowser": () => (/* binding */ isPlatformBrowser), +/* harmony export */ "isPlatformServer": () => (/* binding */ isPlatformServer), +/* harmony export */ "isPlatformWorkerApp": () => (/* binding */ isPlatformWorkerApp), +/* harmony export */ "isPlatformWorkerUi": () => (/* binding */ isPlatformWorkerUi), +/* harmony export */ "provideCloudflareLoader": () => (/* binding */ provideCloudflareLoader), +/* harmony export */ "provideCloudinaryLoader": () => (/* binding */ provideCloudinaryLoader), +/* harmony export */ "provideImageKitLoader": () => (/* binding */ provideImageKitLoader), +/* harmony export */ "provideImgixLoader": () => (/* binding */ provideImgixLoader), +/* harmony export */ "registerLocaleData": () => (/* binding */ registerLocaleData), +/* harmony export */ "ɵBrowserPlatformLocation": () => (/* binding */ BrowserPlatformLocation), +/* harmony export */ "ɵDomAdapter": () => (/* binding */ DomAdapter), +/* harmony export */ "ɵNullViewportScroller": () => (/* binding */ NullViewportScroller), +/* harmony export */ "ɵPLATFORM_BROWSER_ID": () => (/* binding */ PLATFORM_BROWSER_ID), +/* harmony export */ "ɵPLATFORM_SERVER_ID": () => (/* binding */ PLATFORM_SERVER_ID), +/* harmony export */ "ɵPLATFORM_WORKER_APP_ID": () => (/* binding */ PLATFORM_WORKER_APP_ID), +/* harmony export */ "ɵPLATFORM_WORKER_UI_ID": () => (/* binding */ PLATFORM_WORKER_UI_ID), +/* harmony export */ "ɵgetDOM": () => (/* binding */ getDOM), +/* harmony export */ "ɵparseCookieValue": () => (/* binding */ parseCookieValue), +/* harmony export */ "ɵsetRootDomAdapter": () => (/* binding */ setRootDomAdapter) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 2560); +/** + * @license Angular v14.3.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +let _DOM = null; + +function getDOM() { + return _DOM; +} + +function setDOM(adapter) { + _DOM = adapter; +} + +function setRootDomAdapter(adapter) { + if (!_DOM) { + _DOM = adapter; + } +} +/* tslint:disable:requireParameterType */ + +/** + * Provides DOM operations in an environment-agnostic way. + * + * @security Tread carefully! Interacting with the DOM directly is dangerous and + * can introduce XSS risks. + */ + + +class DomAdapter {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A DI Token representing the main rendering context. In a browser this is the DOM Document. + * + * Note: Document might not be available in the Application Context when Application and Rendering + * Contexts are not the same (e.g. when running the application in a Web Worker). + * + * @publicApi + */ + + +const DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('DocumentToken'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * This class should not be used directly by an application developer. Instead, use + * {@link Location}. + * + * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be + * platform-agnostic. + * This means that we can have different implementation of `PlatformLocation` for the different + * platforms that Angular supports. For example, `@angular/platform-browser` provides an + * implementation specific to the browser environment, while `@angular/platform-server` provides + * one suitable for use with server-side rendering. + * + * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy} + * when they need to interact with the DOM APIs like pushState, popState, etc. + * + * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly + * by the {@link Router} in order to navigate between routes. Since all interactions between {@link + * Router} / + * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation` + * class, they are all platform-agnostic. + * + * @publicApi + */ + +class PlatformLocation { + historyGo(relativePosition) { + throw new Error('Not implemented'); + } + +} + +PlatformLocation.ɵfac = function PlatformLocation_Factory(t) { + return new (t || PlatformLocation)(); +}; + +PlatformLocation.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: PlatformLocation, + factory: function () { + return useBrowserPlatformLocation(); + }, + providedIn: 'platform' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PlatformLocation, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'platform', + // See #23917 + useFactory: useBrowserPlatformLocation + }] + }], null, null); +})(); + +function useBrowserPlatformLocation() { + return (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(BrowserPlatformLocation); +} +/** + * @description + * Indicates when a location is initialized. + * + * @publicApi + */ + + +const LOCATION_INITIALIZED = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('Location Initialized'); +/** + * `PlatformLocation` encapsulates all of the direct calls to platform APIs. + * This class should not be used directly by an application developer. Instead, use + * {@link Location}. + */ + +class BrowserPlatformLocation extends PlatformLocation { + constructor(_doc) { + super(); + this._doc = _doc; + + this._init(); + } // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it + + /** @internal */ + + + _init() { + this.location = window.location; + this._history = window.history; + } + + getBaseHrefFromDOM() { + return getDOM().getBaseHref(this._doc); + } + + onPopState(fn) { + const window = getDOM().getGlobalEventTarget(this._doc, 'window'); + window.addEventListener('popstate', fn, false); + return () => window.removeEventListener('popstate', fn); + } + + onHashChange(fn) { + const window = getDOM().getGlobalEventTarget(this._doc, 'window'); + window.addEventListener('hashchange', fn, false); + return () => window.removeEventListener('hashchange', fn); + } + + get href() { + return this.location.href; + } + + get protocol() { + return this.location.protocol; + } + + get hostname() { + return this.location.hostname; + } + + get port() { + return this.location.port; + } + + get pathname() { + return this.location.pathname; + } + + get search() { + return this.location.search; + } + + get hash() { + return this.location.hash; + } + + set pathname(newPath) { + this.location.pathname = newPath; + } + + pushState(state, title, url) { + if (supportsState()) { + this._history.pushState(state, title, url); + } else { + this.location.hash = url; + } + } + + replaceState(state, title, url) { + if (supportsState()) { + this._history.replaceState(state, title, url); + } else { + this.location.hash = url; + } + } + + forward() { + this._history.forward(); + } + + back() { + this._history.back(); + } + + historyGo(relativePosition = 0) { + this._history.go(relativePosition); + } + + getState() { + return this._history.state; + } + +} + +BrowserPlatformLocation.ɵfac = function BrowserPlatformLocation_Factory(t) { + return new (t || BrowserPlatformLocation)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DOCUMENT)); +}; + +BrowserPlatformLocation.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: BrowserPlatformLocation, + factory: function () { + return createBrowserPlatformLocation(); + }, + providedIn: 'platform' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserPlatformLocation, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'platform', + // See #23917 + useFactory: createBrowserPlatformLocation + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [DOCUMENT] + }] + }]; + }, null); +})(); + +function supportsState() { + return !!window.history.pushState; +} + +function createBrowserPlatformLocation() { + return new BrowserPlatformLocation((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT)); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Joins two parts of a URL with a slash if needed. + * + * @param start URL string + * @param end URL string + * + * + * @returns The joined URL string. + */ + + +function joinWithSlash(start, end) { + if (start.length == 0) { + return end; + } + + if (end.length == 0) { + return start; + } + + let slashes = 0; + + if (start.endsWith('/')) { + slashes++; + } + + if (end.startsWith('/')) { + slashes++; + } + + if (slashes == 2) { + return start + end.substring(1); + } + + if (slashes == 1) { + return start + end; + } + + return start + '/' + end; +} +/** + * Removes a trailing slash from a URL string if needed. + * Looks for the first occurrence of either `#`, `?`, or the end of the + * line as `/` characters and removes the trailing slash if one exists. + * + * @param url URL string. + * + * @returns The URL string, modified if needed. + */ + + +function stripTrailingSlash(url) { + const match = url.match(/#|\?|$/); + const pathEndIdx = match && match.index || url.length; + const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0); + return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx); +} +/** + * Normalizes URL parameters by prepending with `?` if needed. + * + * @param params String of URL parameters. + * + * @returns The normalized URL parameters string. + */ + + +function normalizeQueryParams(params) { + return params && params[0] !== '?' ? '?' + params : params; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Enables the `Location` service to read route state from the browser's URL. + * Angular provides two strategies: + * `HashLocationStrategy` and `PathLocationStrategy`. + * + * Applications should use the `Router` or `Location` services to + * interact with application route state. + * + * For instance, `HashLocationStrategy` produces URLs like + * http://example.com#/foo, + * and `PathLocationStrategy` produces + * http://example.com/foo as an equivalent URL. + * + * See these two classes for more. + * + * @publicApi + */ + + +class LocationStrategy { + historyGo(relativePosition) { + throw new Error('Not implemented'); + } + +} + +LocationStrategy.ɵfac = function LocationStrategy_Factory(t) { + return new (t || LocationStrategy)(); +}; + +LocationStrategy.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: LocationStrategy, + factory: function () { + return (() => (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(PathLocationStrategy))(); + }, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LocationStrategy, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root', + useFactory: () => (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(PathLocationStrategy) + }] + }], null, null); +})(); +/** + * A predefined [DI token](guide/glossary#di-token) for the base href + * to be used with the `PathLocationStrategy`. + * The base href is the URL prefix that should be preserved when generating + * and recognizing URLs. + * + * @usageNotes + * + * The following example shows how to use this token to configure the root app injector + * with a base href value, so that the DI framework can supply the dependency anywhere in the app. + * + * ```typescript + * import {Component, NgModule} from '@angular/core'; + * import {APP_BASE_HREF} from '@angular/common'; + * + * @NgModule({ + * providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}] + * }) + * class AppModule {} + * ``` + * + * @publicApi + */ + + +const APP_BASE_HREF = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('appBaseHref'); +/** + * @description + * A {@link LocationStrategy} used to configure the {@link Location} service to + * represent its state in the + * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the + * browser's URL. + * + * If you're using `PathLocationStrategy`, you may provide a {@link APP_BASE_HREF} + * or add a `` element to the document to override the default. + * + * For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call + * `location.go('/foo')`, the browser's URL will become + * `example.com/my/app/foo`. To ensure all relative URIs resolve correctly, + * the `` and/or `APP_BASE_HREF` should end with a `/`. + * + * Similarly, if you add `` to the document and call + * `location.go('/foo')`, the browser's URL will become + * `example.com/my/app/foo`. + * + * Note that when using `PathLocationStrategy`, neither the query nor + * the fragment in the `` will be preserved, as outlined + * by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2). + * + * @usageNotes + * + * ### Example + * + * {@example common/location/ts/path_location_component.ts region='LocationComponent'} + * + * @publicApi + */ + +class PathLocationStrategy extends LocationStrategy { + constructor(_platformLocation, href) { + super(); + this._platformLocation = _platformLocation; + this._removeListenerFns = []; + this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(DOCUMENT).location?.origin ?? ''; + } + /** @nodoc */ + + + ngOnDestroy() { + while (this._removeListenerFns.length) { + this._removeListenerFns.pop()(); + } + } + + onPopState(fn) { + this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn)); + } + + getBaseHref() { + return this._baseHref; + } + + prepareExternalUrl(internal) { + return joinWithSlash(this._baseHref, internal); + } + + path(includeHash = false) { + const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search); + const hash = this._platformLocation.hash; + return hash && includeHash ? `${pathname}${hash}` : pathname; + } + + pushState(state, title, url, queryParams) { + const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams)); + + this._platformLocation.pushState(state, title, externalUrl); + } + + replaceState(state, title, url, queryParams) { + const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams)); + + this._platformLocation.replaceState(state, title, externalUrl); + } + + forward() { + this._platformLocation.forward(); + } + + back() { + this._platformLocation.back(); + } + + getState() { + return this._platformLocation.getState(); + } + + historyGo(relativePosition = 0) { + this._platformLocation.historyGo?.(relativePosition); + } + +} + +PathLocationStrategy.ɵfac = function PathLocationStrategy_Factory(t) { + return new (t || PathLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8)); +}; + +PathLocationStrategy.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: PathLocationStrategy, + factory: PathLocationStrategy.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PathLocationStrategy, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: PlatformLocation + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [APP_BASE_HREF] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @description + * A {@link LocationStrategy} used to configure the {@link Location} service to + * represent its state in the + * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) + * of the browser's URL. + * + * For instance, if you call `location.go('/foo')`, the browser's URL will become + * `example.com#/foo`. + * + * @usageNotes + * + * ### Example + * + * {@example common/location/ts/hash_location_component.ts region='LocationComponent'} + * + * @publicApi + */ + + +class HashLocationStrategy extends LocationStrategy { + constructor(_platformLocation, _baseHref) { + super(); + this._platformLocation = _platformLocation; + this._baseHref = ''; + this._removeListenerFns = []; + + if (_baseHref != null) { + this._baseHref = _baseHref; + } + } + /** @nodoc */ + + + ngOnDestroy() { + while (this._removeListenerFns.length) { + this._removeListenerFns.pop()(); + } + } + + onPopState(fn) { + this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn)); + } + + getBaseHref() { + return this._baseHref; + } + + path(includeHash = false) { + // the hash value is always prefixed with a `#` + // and if it is empty then it will stay empty + let path = this._platformLocation.hash; + if (path == null) path = '#'; + return path.length > 0 ? path.substring(1) : path; + } + + prepareExternalUrl(internal) { + const url = joinWithSlash(this._baseHref, internal); + return url.length > 0 ? '#' + url : url; + } + + pushState(state, title, path, queryParams) { + let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)); + + if (url.length == 0) { + url = this._platformLocation.pathname; + } + + this._platformLocation.pushState(state, title, url); + } + + replaceState(state, title, path, queryParams) { + let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)); + + if (url.length == 0) { + url = this._platformLocation.pathname; + } + + this._platformLocation.replaceState(state, title, url); + } + + forward() { + this._platformLocation.forward(); + } + + back() { + this._platformLocation.back(); + } + + getState() { + return this._platformLocation.getState(); + } + + historyGo(relativePosition = 0) { + this._platformLocation.historyGo?.(relativePosition); + } + +} + +HashLocationStrategy.ɵfac = function HashLocationStrategy_Factory(t) { + return new (t || HashLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8)); +}; + +HashLocationStrategy.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: HashLocationStrategy, + factory: HashLocationStrategy.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HashLocationStrategy, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable + }], function () { + return [{ + type: PlatformLocation + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [APP_BASE_HREF] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @description + * + * A service that applications can use to interact with a browser's URL. + * + * Depending on the `LocationStrategy` used, `Location` persists + * to the URL's path or the URL's hash segment. + * + * @usageNotes + * + * It's better to use the `Router.navigate()` service to trigger route changes. Use + * `Location` only if you need to interact with or create normalized URLs outside of + * routing. + * + * `Location` is responsible for normalizing the URL against the application's base href. + * A normalized URL is absolute from the URL host, includes the application's base href, and has no + * trailing slash: + * - `/my/app/user/123` is normalized + * - `my/app/user/123` **is not** normalized + * - `/my/app/user/123/` **is not** normalized + * + * ### Example + * + * + * + * @publicApi + */ + + +class Location { + constructor(locationStrategy) { + /** @internal */ + this._subject = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter(); + /** @internal */ + + this._urlChangeListeners = []; + /** @internal */ + + this._urlChangeSubscription = null; + this._locationStrategy = locationStrategy; + + const browserBaseHref = this._locationStrategy.getBaseHref(); + + this._baseHref = stripTrailingSlash(_stripIndexHtml(browserBaseHref)); + + this._locationStrategy.onPopState(ev => { + this._subject.emit({ + 'url': this.path(true), + 'pop': true, + 'state': ev.state, + 'type': ev.type + }); + }); + } + /** @nodoc */ + + + ngOnDestroy() { + this._urlChangeSubscription?.unsubscribe(); + this._urlChangeListeners = []; + } + /** + * Normalizes the URL path for this location. + * + * @param includeHash True to include an anchor fragment in the path. + * + * @returns The normalized URL path. + */ + // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is + // removed. + + + path(includeHash = false) { + return this.normalize(this._locationStrategy.path(includeHash)); + } + /** + * Reports the current state of the location history. + * @returns The current value of the `history.state` object. + */ + + + getState() { + return this._locationStrategy.getState(); + } + /** + * Normalizes the given path and compares to the current normalized path. + * + * @param path The given URL path. + * @param query Query parameters. + * + * @returns True if the given URL path is equal to the current normalized path, false + * otherwise. + */ + + + isCurrentPathEqualTo(path, query = '') { + return this.path() == this.normalize(path + normalizeQueryParams(query)); + } + /** + * Normalizes a URL path by stripping any trailing slashes. + * + * @param url String representing a URL. + * + * @returns The normalized URL string. + */ + + + normalize(url) { + return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url))); + } + /** + * Normalizes an external URL path. + * If the given URL doesn't begin with a leading slash (`'/'`), adds one + * before normalizing. Adds a hash if `HashLocationStrategy` is + * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use. + * + * @param url String representing a URL. + * + * @returns A normalized platform-specific URL. + */ + + + prepareExternalUrl(url) { + if (url && url[0] !== '/') { + url = '/' + url; + } + + return this._locationStrategy.prepareExternalUrl(url); + } // TODO: rename this method to pushState + + /** + * Changes the browser's URL to a normalized version of a given URL, and pushes a + * new item onto the platform's history. + * + * @param path URL path to normalize. + * @param query Query parameters. + * @param state Location history state. + * + */ + + + go(path, query = '', state = null) { + this._locationStrategy.pushState(state, '', path, query); + + this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state); + } + /** + * Changes the browser's URL to a normalized version of the given URL, and replaces + * the top item on the platform's history stack. + * + * @param path URL path to normalize. + * @param query Query parameters. + * @param state Location history state. + */ + + + replaceState(path, query = '', state = null) { + this._locationStrategy.replaceState(state, '', path, query); + + this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state); + } + /** + * Navigates forward in the platform's history. + */ + + + forward() { + this._locationStrategy.forward(); + } + /** + * Navigates back in the platform's history. + */ + + + back() { + this._locationStrategy.back(); + } + /** + * Navigate to a specific page from session history, identified by its relative position to the + * current page. + * + * @param relativePosition Position of the target page in the history relative to the current + * page. + * A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)` + * moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go + * beyond what's stored in the history session, we stay in the current page. Same behaviour occurs + * when `relativePosition` equals 0. + * @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history + */ + + + historyGo(relativePosition = 0) { + this._locationStrategy.historyGo?.(relativePosition); + } + /** + * Registers a URL change listener. Use to catch updates performed by the Angular + * framework that are not detectible through "popstate" or "hashchange" events. + * + * @param fn The change handler function, which take a URL and a location history state. + * @returns A function that, when executed, unregisters a URL change listener. + */ + + + onUrlChange(fn) { + this._urlChangeListeners.push(fn); + + if (!this._urlChangeSubscription) { + this._urlChangeSubscription = this.subscribe(v => { + this._notifyUrlChangeListeners(v.url, v.state); + }); + } + + return () => { + const fnIndex = this._urlChangeListeners.indexOf(fn); + + this._urlChangeListeners.splice(fnIndex, 1); + + if (this._urlChangeListeners.length === 0) { + this._urlChangeSubscription?.unsubscribe(); + this._urlChangeSubscription = null; + } + }; + } + /** @internal */ + + + _notifyUrlChangeListeners(url = '', state) { + this._urlChangeListeners.forEach(fn => fn(url, state)); + } + /** + * Subscribes to the platform's `popState` events. + * + * Note: `Location.go()` does not trigger the `popState` event in the browser. Use + * `Location.onUrlChange()` to subscribe to URL changes instead. + * + * @param value Event that is triggered when the state history changes. + * @param exception The exception to throw. + * + * @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate) + * + * @returns Subscribed events. + */ + + + subscribe(onNext, onThrow, onReturn) { + return this._subject.subscribe({ + next: onNext, + error: onThrow, + complete: onReturn + }); + } + +} +/** + * Normalizes URL parameters by prepending with `?` if needed. + * + * @param params String of URL parameters. + * + * @returns The normalized URL parameters string. + */ + + +Location.normalizeQueryParams = normalizeQueryParams; +/** + * Joins two parts of a URL with a slash if needed. + * + * @param start URL string + * @param end URL string + * + * + * @returns The joined URL string. + */ + +Location.joinWithSlash = joinWithSlash; +/** + * Removes a trailing slash from a URL string if needed. + * Looks for the first occurrence of either `#`, `?`, or the end of the + * line as `/` characters and removes the trailing slash if one exists. + * + * @param url URL string. + * + * @returns The URL string, modified if needed. + */ + +Location.stripTrailingSlash = stripTrailingSlash; + +Location.ɵfac = function Location_Factory(t) { + return new (t || Location)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LocationStrategy)); +}; + +Location.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: Location, + factory: function () { + return createLocation(); + }, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Location, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root', + // See #23917 + useFactory: createLocation + }] + }], function () { + return [{ + type: LocationStrategy + }]; + }, null); +})(); + +function createLocation() { + return new Location((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(LocationStrategy)); +} + +function _stripBaseHref(baseHref, url) { + return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url; +} + +function _stripIndexHtml(url) { + return url.replace(/\/index.html$/, ''); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** @internal */ + + +const CURRENCIES_EN = { + "ADP": [undefined, undefined, 0], + "AFN": [undefined, "؋", 0], + "ALL": [undefined, undefined, 0], + "AMD": [undefined, "֏", 2], + "AOA": [undefined, "Kz"], + "ARS": [undefined, "$"], + "AUD": ["A$", "$"], + "AZN": [undefined, "₼"], + "BAM": [undefined, "KM"], + "BBD": [undefined, "$"], + "BDT": [undefined, "৳"], + "BHD": [undefined, undefined, 3], + "BIF": [undefined, undefined, 0], + "BMD": [undefined, "$"], + "BND": [undefined, "$"], + "BOB": [undefined, "Bs"], + "BRL": ["R$"], + "BSD": [undefined, "$"], + "BWP": [undefined, "P"], + "BYN": [undefined, undefined, 2], + "BYR": [undefined, undefined, 0], + "BZD": [undefined, "$"], + "CAD": ["CA$", "$", 2], + "CHF": [undefined, undefined, 2], + "CLF": [undefined, undefined, 4], + "CLP": [undefined, "$", 0], + "CNY": ["CN¥", "¥"], + "COP": [undefined, "$", 2], + "CRC": [undefined, "₡", 2], + "CUC": [undefined, "$"], + "CUP": [undefined, "$"], + "CZK": [undefined, "Kč", 2], + "DJF": [undefined, undefined, 0], + "DKK": [undefined, "kr", 2], + "DOP": [undefined, "$"], + "EGP": [undefined, "E£"], + "ESP": [undefined, "₧", 0], + "EUR": ["€"], + "FJD": [undefined, "$"], + "FKP": [undefined, "£"], + "GBP": ["£"], + "GEL": [undefined, "₾"], + "GHS": [undefined, "GH₵"], + "GIP": [undefined, "£"], + "GNF": [undefined, "FG", 0], + "GTQ": [undefined, "Q"], + "GYD": [undefined, "$", 2], + "HKD": ["HK$", "$"], + "HNL": [undefined, "L"], + "HRK": [undefined, "kn"], + "HUF": [undefined, "Ft", 2], + "IDR": [undefined, "Rp", 2], + "ILS": ["₪"], + "INR": ["₹"], + "IQD": [undefined, undefined, 0], + "IRR": [undefined, undefined, 0], + "ISK": [undefined, "kr", 0], + "ITL": [undefined, undefined, 0], + "JMD": [undefined, "$"], + "JOD": [undefined, undefined, 3], + "JPY": ["¥", undefined, 0], + "KHR": [undefined, "៛"], + "KMF": [undefined, "CF", 0], + "KPW": [undefined, "₩", 0], + "KRW": ["₩", undefined, 0], + "KWD": [undefined, undefined, 3], + "KYD": [undefined, "$"], + "KZT": [undefined, "₸"], + "LAK": [undefined, "₭", 0], + "LBP": [undefined, "L£", 0], + "LKR": [undefined, "Rs"], + "LRD": [undefined, "$"], + "LTL": [undefined, "Lt"], + "LUF": [undefined, undefined, 0], + "LVL": [undefined, "Ls"], + "LYD": [undefined, undefined, 3], + "MGA": [undefined, "Ar", 0], + "MGF": [undefined, undefined, 0], + "MMK": [undefined, "K", 0], + "MNT": [undefined, "₮", 2], + "MRO": [undefined, undefined, 0], + "MUR": [undefined, "Rs", 2], + "MXN": ["MX$", "$"], + "MYR": [undefined, "RM"], + "NAD": [undefined, "$"], + "NGN": [undefined, "₦"], + "NIO": [undefined, "C$"], + "NOK": [undefined, "kr", 2], + "NPR": [undefined, "Rs"], + "NZD": ["NZ$", "$"], + "OMR": [undefined, undefined, 3], + "PHP": ["₱"], + "PKR": [undefined, "Rs", 2], + "PLN": [undefined, "zł"], + "PYG": [undefined, "₲", 0], + "RON": [undefined, "lei"], + "RSD": [undefined, undefined, 0], + "RUB": [undefined, "₽"], + "RWF": [undefined, "RF", 0], + "SBD": [undefined, "$"], + "SEK": [undefined, "kr", 2], + "SGD": [undefined, "$"], + "SHP": [undefined, "£"], + "SLE": [undefined, undefined, 2], + "SLL": [undefined, undefined, 0], + "SOS": [undefined, undefined, 0], + "SRD": [undefined, "$"], + "SSP": [undefined, "£"], + "STD": [undefined, undefined, 0], + "STN": [undefined, "Db"], + "SYP": [undefined, "£", 0], + "THB": [undefined, "฿"], + "TMM": [undefined, undefined, 0], + "TND": [undefined, undefined, 3], + "TOP": [undefined, "T$"], + "TRL": [undefined, undefined, 0], + "TRY": [undefined, "₺"], + "TTD": [undefined, "$"], + "TWD": ["NT$", "$", 2], + "TZS": [undefined, undefined, 2], + "UAH": [undefined, "₴"], + "UGX": [undefined, undefined, 0], + "USD": ["$"], + "UYI": [undefined, undefined, 0], + "UYU": [undefined, "$"], + "UYW": [undefined, undefined, 4], + "UZS": [undefined, undefined, 2], + "VEF": [undefined, "Bs", 2], + "VND": ["₫", undefined, 0], + "VUV": [undefined, undefined, 0], + "XAF": ["FCFA", undefined, 0], + "XCD": ["EC$", "$"], + "XOF": ["F CFA", undefined, 0], + "XPF": ["CFPF", undefined, 0], + "XXX": ["¤"], + "YER": [undefined, undefined, 0], + "ZAR": [undefined, "R"], + "ZMK": [undefined, undefined, 0], + "ZMW": [undefined, "ZK"], + "ZWD": [undefined, undefined, 0] +}; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Format styles that can be used to represent numbers. + * @see `getLocaleNumberFormat()`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + +var NumberFormatStyle; + +(function (NumberFormatStyle) { + NumberFormatStyle[NumberFormatStyle["Decimal"] = 0] = "Decimal"; + NumberFormatStyle[NumberFormatStyle["Percent"] = 1] = "Percent"; + NumberFormatStyle[NumberFormatStyle["Currency"] = 2] = "Currency"; + NumberFormatStyle[NumberFormatStyle["Scientific"] = 3] = "Scientific"; +})(NumberFormatStyle || (NumberFormatStyle = {})); +/** + * Plurality cases used for translating plurals to different languages. + * + * @see `NgPlural` + * @see `NgPluralCase` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +var Plural; + +(function (Plural) { + Plural[Plural["Zero"] = 0] = "Zero"; + Plural[Plural["One"] = 1] = "One"; + Plural[Plural["Two"] = 2] = "Two"; + Plural[Plural["Few"] = 3] = "Few"; + Plural[Plural["Many"] = 4] = "Many"; + Plural[Plural["Other"] = 5] = "Other"; +})(Plural || (Plural = {})); +/** + * Context-dependant translation forms for strings. + * Typically the standalone version is for the nominative form of the word, + * and the format version is used for the genitive case. + * @see [CLDR website](http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles) + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +var FormStyle; + +(function (FormStyle) { + FormStyle[FormStyle["Format"] = 0] = "Format"; + FormStyle[FormStyle["Standalone"] = 1] = "Standalone"; +})(FormStyle || (FormStyle = {})); +/** + * String widths available for translations. + * The specific character widths are locale-specific. + * Examples are given for the word "Sunday" in English. + * + * @publicApi + */ + + +var TranslationWidth; + +(function (TranslationWidth) { + /** 1 character for `en-US`. For example: 'S' */ + TranslationWidth[TranslationWidth["Narrow"] = 0] = "Narrow"; + /** 3 characters for `en-US`. For example: 'Sun' */ + + TranslationWidth[TranslationWidth["Abbreviated"] = 1] = "Abbreviated"; + /** Full length for `en-US`. For example: "Sunday" */ + + TranslationWidth[TranslationWidth["Wide"] = 2] = "Wide"; + /** 2 characters for `en-US`, For example: "Su" */ + + TranslationWidth[TranslationWidth["Short"] = 3] = "Short"; +})(TranslationWidth || (TranslationWidth = {})); +/** + * String widths available for date-time formats. + * The specific character widths are locale-specific. + * Examples are given for `en-US`. + * + * @see `getLocaleDateFormat()` + * @see `getLocaleTimeFormat()` + * @see `getLocaleDateTimeFormat()` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * @publicApi + */ + + +var FormatWidth; + +(function (FormatWidth) { + /** + * For `en-US`, 'M/d/yy, h:mm a'` + * (Example: `6/15/15, 9:03 AM`) + */ + FormatWidth[FormatWidth["Short"] = 0] = "Short"; + /** + * For `en-US`, `'MMM d, y, h:mm:ss a'` + * (Example: `Jun 15, 2015, 9:03:01 AM`) + */ + + FormatWidth[FormatWidth["Medium"] = 1] = "Medium"; + /** + * For `en-US`, `'MMMM d, y, h:mm:ss a z'` + * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`) + */ + + FormatWidth[FormatWidth["Long"] = 2] = "Long"; + /** + * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'` + * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`) + */ + + FormatWidth[FormatWidth["Full"] = 3] = "Full"; +})(FormatWidth || (FormatWidth = {})); +/** + * Symbols that can be used to replace placeholders in number patterns. + * Examples are based on `en-US` values. + * + * @see `getLocaleNumberSymbol()` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +var NumberSymbol; + +(function (NumberSymbol) { + /** + * Decimal separator. + * For `en-US`, the dot character. + * Example: 2,345`.`67 + */ + NumberSymbol[NumberSymbol["Decimal"] = 0] = "Decimal"; + /** + * Grouping separator, typically for thousands. + * For `en-US`, the comma character. + * Example: 2`,`345.67 + */ + + NumberSymbol[NumberSymbol["Group"] = 1] = "Group"; + /** + * List-item separator. + * Example: "one, two, and three" + */ + + NumberSymbol[NumberSymbol["List"] = 2] = "List"; + /** + * Sign for percentage (out of 100). + * Example: 23.4% + */ + + NumberSymbol[NumberSymbol["PercentSign"] = 3] = "PercentSign"; + /** + * Sign for positive numbers. + * Example: +23 + */ + + NumberSymbol[NumberSymbol["PlusSign"] = 4] = "PlusSign"; + /** + * Sign for negative numbers. + * Example: -23 + */ + + NumberSymbol[NumberSymbol["MinusSign"] = 5] = "MinusSign"; + /** + * Computer notation for exponential value (n times a power of 10). + * Example: 1.2E3 + */ + + NumberSymbol[NumberSymbol["Exponential"] = 6] = "Exponential"; + /** + * Human-readable format of exponential. + * Example: 1.2x103 + */ + + NumberSymbol[NumberSymbol["SuperscriptingExponent"] = 7] = "SuperscriptingExponent"; + /** + * Sign for permille (out of 1000). + * Example: 23.4‰ + */ + + NumberSymbol[NumberSymbol["PerMille"] = 8] = "PerMille"; + /** + * Infinity, can be used with plus and minus. + * Example: ∞, +∞, -∞ + */ + + NumberSymbol[NumberSymbol["Infinity"] = 9] = "Infinity"; + /** + * Not a number. + * Example: NaN + */ + + NumberSymbol[NumberSymbol["NaN"] = 10] = "NaN"; + /** + * Symbol used between time units. + * Example: 10:52 + */ + + NumberSymbol[NumberSymbol["TimeSeparator"] = 11] = "TimeSeparator"; + /** + * Decimal separator for currency values (fallback to `Decimal`). + * Example: $2,345.67 + */ + + NumberSymbol[NumberSymbol["CurrencyDecimal"] = 12] = "CurrencyDecimal"; + /** + * Group separator for currency values (fallback to `Group`). + * Example: $2,345.67 + */ + + NumberSymbol[NumberSymbol["CurrencyGroup"] = 13] = "CurrencyGroup"; +})(NumberSymbol || (NumberSymbol = {})); +/** + * The value for each day of the week, based on the `en-US` locale + * + * @publicApi + */ + + +var WeekDay; + +(function (WeekDay) { + WeekDay[WeekDay["Sunday"] = 0] = "Sunday"; + WeekDay[WeekDay["Monday"] = 1] = "Monday"; + WeekDay[WeekDay["Tuesday"] = 2] = "Tuesday"; + WeekDay[WeekDay["Wednesday"] = 3] = "Wednesday"; + WeekDay[WeekDay["Thursday"] = 4] = "Thursday"; + WeekDay[WeekDay["Friday"] = 5] = "Friday"; + WeekDay[WeekDay["Saturday"] = 6] = "Saturday"; +})(WeekDay || (WeekDay = {})); +/** + * Retrieves the locale ID from the currently loaded locale. + * The loaded locale could be, for example, a global one rather than a regional one. + * @param locale A locale code, such as `fr-FR`. + * @returns The locale code. For example, `fr`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleId(locale) { + return (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale)[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].LocaleId]; +} +/** + * Retrieves day period strings for the given locale. + * + * @param locale A locale code for the locale format rules to use. + * @param formStyle The required grammatical form. + * @param width The required character width. + * @returns An array of localized period strings. For example, `[AM, PM]` for `en-US`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleDayPeriods(locale, formStyle, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const amPmData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsStandalone]]; + const amPm = getLastDefinedValue(amPmData, formStyle); + return getLastDefinedValue(amPm, width); +} +/** + * Retrieves days of the week for the given locale, using the Gregorian calendar. + * + * @param locale A locale code for the locale format rules to use. + * @param formStyle The required grammatical form. + * @param width The required character width. + * @returns An array of localized name strings. + * For example,`[Sunday, Monday, ... Saturday]` for `en-US`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleDayNames(locale, formStyle, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const daysData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysStandalone]]; + const days = getLastDefinedValue(daysData, formStyle); + return getLastDefinedValue(days, width); +} +/** + * Retrieves months of the year for the given locale, using the Gregorian calendar. + * + * @param locale A locale code for the locale format rules to use. + * @param formStyle The required grammatical form. + * @param width The required character width. + * @returns An array of localized name strings. + * For example, `[January, February, ...]` for `en-US`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleMonthNames(locale, formStyle, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const monthsData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsStandalone]]; + const months = getLastDefinedValue(monthsData, formStyle); + return getLastDefinedValue(months, width); +} +/** + * Retrieves Gregorian-calendar eras for the given locale. + * @param locale A locale code for the locale format rules to use. + * @param width The required character width. + + * @returns An array of localized era strings. + * For example, `[AD, BC]` for `en-US`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleEraNames(locale, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const erasData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Eras]; + return getLastDefinedValue(erasData, width); +} +/** + * Retrieves the first day of the week for the given locale. + * + * @param locale A locale code for the locale format rules to use. + * @returns A day index number, using the 0-based week-day index for `en-US` + * (Sunday = 0, Monday = 1, ...). + * For example, for `fr-FR`, returns 1 to indicate that the first day is Monday. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleFirstDayOfWeek(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].FirstDayOfWeek]; +} +/** + * Range of week days that are considered the week-end for the given locale. + * + * @param locale A locale code for the locale format rules to use. + * @returns The range of day values, `[startDay, endDay]`. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleWeekEndRange(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].WeekendRange]; +} +/** + * Retrieves a localized date-value formatting string. + * + * @param locale A locale code for the locale format rules to use. + * @param width The format type. + * @returns The localized formatting string. + * @see `FormatWidth` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleDateFormat(locale, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateFormat], width); +} +/** + * Retrieves a localized time-value formatting string. + * + * @param locale A locale code for the locale format rules to use. + * @param width The format type. + * @returns The localized formatting string. + * @see `FormatWidth` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + + * @publicApi + */ + + +function getLocaleTimeFormat(locale, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].TimeFormat], width); +} +/** + * Retrieves a localized date-time formatting string. + * + * @param locale A locale code for the locale format rules to use. + * @param width The format type. + * @returns The localized formatting string. + * @see `FormatWidth` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleDateTimeFormat(locale, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const dateTimeFormatData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateTimeFormat]; + return getLastDefinedValue(dateTimeFormatData, width); +} +/** + * Retrieves a localized number symbol that can be used to replace placeholders in number formats. + * @param locale The locale code. + * @param symbol The symbol to localize. + * @returns The character for the localized symbol. + * @see `NumberSymbol` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleNumberSymbol(locale, symbol) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + const res = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][symbol]; + + if (typeof res === 'undefined') { + if (symbol === NumberSymbol.CurrencyDecimal) { + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Decimal]; + } else if (symbol === NumberSymbol.CurrencyGroup) { + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Group]; + } + } + + return res; +} +/** + * Retrieves a number format for a given locale. + * + * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00` + * when used to format the number 12345.678 could result in "12'345,678". That would happen if the + * grouping separator for your language is an apostrophe, and the decimal separator is a comma. + * + * Important: The characters `.` `,` `0` `#` (and others below) are special placeholders + * that stand for the decimal separator, and so on, and are NOT real characters. + * You must NOT "translate" the placeholders. For example, don't change `.` to `,` even though in + * your language the decimal point is written with a comma. The symbols should be replaced by the + * local equivalents, using the appropriate `NumberSymbol` for your language. + * + * Here are the special characters used in number patterns: + * + * | Symbol | Meaning | + * |--------|---------| + * | . | Replaced automatically by the character used for the decimal point. | + * | , | Replaced by the "grouping" (thousands) separator. | + * | 0 | Replaced by a digit (or zero if there aren't enough digits). | + * | # | Replaced by a digit (or nothing if there aren't enough). | + * | ¤ | Replaced by a currency symbol, such as $ or USD. | + * | % | Marks a percent format. The % symbol may change position, but must be retained. | + * | E | Marks a scientific format. The E symbol may change position, but must be retained. | + * | ' | Special characters used as literal characters are quoted with ASCII single quotes. | + * + * @param locale A locale code for the locale format rules to use. + * @param type The type of numeric value to be formatted (such as `Decimal` or `Currency`.) + * @returns The localized format string. + * @see `NumberFormatStyle` + * @see [CLDR website](http://cldr.unicode.org/translation/number-patterns) + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleNumberFormat(locale, type) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberFormats][type]; +} +/** + * Retrieves the symbol used to represent the currency for the main country + * corresponding to a given locale. For example, '$' for `en-US`. + * + * @param locale A locale code for the locale format rules to use. + * @returns The localized symbol character, + * or `null` if the main country cannot be determined. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleCurrencySymbol(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencySymbol] || null; +} +/** + * Retrieves the name of the currency for the main country corresponding + * to a given locale. For example, 'US Dollar' for `en-US`. + * @param locale A locale code for the locale format rules to use. + * @returns The currency name, + * or `null` if the main country cannot be determined. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleCurrencyName(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencyName] || null; +} +/** + * Retrieves the default currency code for the given locale. + * + * The default is defined as the first currency which is still in use. + * + * @param locale The code of the locale whose currency code we want. + * @returns The code of the default currency for the given locale. + * + * @publicApi + */ + + +function getLocaleCurrencyCode(locale) { + return (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocaleCurrencyCode"])(locale); +} +/** + * Retrieves the currency values for a given locale. + * @param locale A locale code for the locale format rules to use. + * @returns The currency values. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + */ + + +function getLocaleCurrencies(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Currencies]; +} +/** + * @alias core/ɵgetLocalePluralCase + * @publicApi + */ + + +const getLocalePluralCase = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocalePluralCase"]; + +function checkFullData(data) { + if (!data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData]) { + throw new Error(`Missing extra locale data for the locale "${data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`); + } +} +/** + * Retrieves locale-specific rules used to determine which day period to use + * when more than one period is defined for a locale. + * + * There is a rule for each defined day period. The + * first rule is applied to the first day period and so on. + * Fall back to AM/PM when no rules are available. + * + * A rule can specify a period as time range, or as a single time value. + * + * This functionality is only available when you have loaded the full locale data. + * See the ["I18n guide"](guide/i18n-common-format-data-locale). + * + * @param locale A locale code for the locale format rules to use. + * @returns The rules for the locale, a single time value or array of *from-time, to-time*, + * or null if no periods are available. + * + * @see `getLocaleExtraDayPeriods()` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleExtraDayPeriodRules(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + checkFullData(data); + const rules = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][2 + /* ɵExtraLocaleDataIndex.ExtraDayPeriodsRules */ + ] || []; + return rules.map(rule => { + if (typeof rule === 'string') { + return extractTime(rule); + } + + return [extractTime(rule[0]), extractTime(rule[1])]; + }); +} +/** + * Retrieves locale-specific day periods, which indicate roughly how a day is broken up + * in different languages. + * For example, for `en-US`, periods are morning, noon, afternoon, evening, and midnight. + * + * This functionality is only available when you have loaded the full locale data. + * See the ["I18n guide"](guide/i18n-common-format-data-locale). + * + * @param locale A locale code for the locale format rules to use. + * @param formStyle The required grammatical form. + * @param width The required character width. + * @returns The translated day-period strings. + * @see `getLocaleExtraDayPeriodRules()` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLocaleExtraDayPeriods(locale, formStyle, width) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + checkFullData(data); + const dayPeriodsData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][0 + /* ɵExtraLocaleDataIndex.ExtraDayPeriodFormats */ + ], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][1 + /* ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone */ + ]]; + const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || []; + return getLastDefinedValue(dayPeriods, width) || []; +} +/** + * Retrieves the writing direction of a specified locale + * @param locale A locale code for the locale format rules to use. + * @publicApi + * @returns 'rtl' or 'ltr' + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + */ + + +function getLocaleDirection(locale) { + const data = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale); + return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Directionality]; +} +/** + * Retrieves the first value that is defined in an array, going backwards from an index position. + * + * To avoid repeating the same data (as when the "format" and "standalone" forms are the same) + * add the first value to the locale data arrays, and add other values only if they are different. + * + * @param data The data array to retrieve from. + * @param index A 0-based index into the array to start from. + * @returns The value immediately before the given index position. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getLastDefinedValue(data, index) { + for (let i = index; i > -1; i--) { + if (typeof data[i] !== 'undefined') { + return data[i]; + } + } + + throw new Error('Locale data API: locale data undefined'); +} +/** + * Extracts the hours and minutes from a string like "15:45" + */ + + +function extractTime(time) { + const [h, m] = time.split(':'); + return { + hours: +h, + minutes: +m + }; +} +/** + * Retrieves the currency symbol for a given currency code. + * + * For example, for the default `en-US` locale, the code `USD` can + * be represented by the narrow symbol `$` or the wide symbol `US$`. + * + * @param code The currency code. + * @param format The format, `wide` or `narrow`. + * @param locale A locale code for the locale format rules to use. + * + * @returns The symbol, or the currency code if no symbol is available. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function getCurrencySymbol(code, format, locale = 'en') { + const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || []; + const symbolNarrow = currency[1 + /* ɵCurrencyIndex.SymbolNarrow */ + ]; + + if (format === 'narrow' && typeof symbolNarrow === 'string') { + return symbolNarrow; + } + + return currency[0 + /* ɵCurrencyIndex.Symbol */ + ] || code; +} // Most currencies have cents, that's why the default is 2 + + +const DEFAULT_NB_OF_CURRENCY_DIGITS = 2; +/** + * Reports the number of decimal digits for a given currency. + * The value depends upon the presence of cents in that particular currency. + * + * @param code The currency code. + * @returns The number of decimal digits, typically 0 or 2. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + +function getNumberOfCurrencyDigits(code) { + let digits; + const currency = CURRENCIES_EN[code]; + + if (currency) { + digits = currency[2 + /* ɵCurrencyIndex.NbOfDigits */ + ]; + } + + return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const ISO8601_DATE_REGEX = /^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; // 1 2 3 4 5 6 7 8 9 10 11 + +const NAMED_FORMATS = {}; +const DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/; +var ZoneWidth; + +(function (ZoneWidth) { + ZoneWidth[ZoneWidth["Short"] = 0] = "Short"; + ZoneWidth[ZoneWidth["ShortGMT"] = 1] = "ShortGMT"; + ZoneWidth[ZoneWidth["Long"] = 2] = "Long"; + ZoneWidth[ZoneWidth["Extended"] = 3] = "Extended"; +})(ZoneWidth || (ZoneWidth = {})); + +var DateType; + +(function (DateType) { + DateType[DateType["FullYear"] = 0] = "FullYear"; + DateType[DateType["Month"] = 1] = "Month"; + DateType[DateType["Date"] = 2] = "Date"; + DateType[DateType["Hours"] = 3] = "Hours"; + DateType[DateType["Minutes"] = 4] = "Minutes"; + DateType[DateType["Seconds"] = 5] = "Seconds"; + DateType[DateType["FractionalSeconds"] = 6] = "FractionalSeconds"; + DateType[DateType["Day"] = 7] = "Day"; +})(DateType || (DateType = {})); + +var TranslationType; + +(function (TranslationType) { + TranslationType[TranslationType["DayPeriods"] = 0] = "DayPeriods"; + TranslationType[TranslationType["Days"] = 1] = "Days"; + TranslationType[TranslationType["Months"] = 2] = "Months"; + TranslationType[TranslationType["Eras"] = 3] = "Eras"; +})(TranslationType || (TranslationType = {})); +/** + * @ngModule CommonModule + * @description + * + * Formats a date according to locale rules. + * + * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch) + * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime). + * @param format The date-time components to include. See `DatePipe` for details. + * @param locale A locale code for the locale format rules to use. + * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`), + * or a standard UTC/GMT or continental US time zone abbreviation. + * If not specified, uses host system settings. + * + * @returns The formatted date string. + * + * @see `DatePipe` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function formatDate(value, format, locale, timezone) { + let date = toDate(value); + const namedFormat = getNamedFormat(locale, format); + format = namedFormat || format; + let parts = []; + let match; + + while (format) { + match = DATE_FORMATS_SPLIT.exec(format); + + if (match) { + parts = parts.concat(match.slice(1)); + const part = parts.pop(); + + if (!part) { + break; + } + + format = part; + } else { + parts.push(format); + break; + } + } + + let dateTimezoneOffset = date.getTimezoneOffset(); + + if (timezone) { + dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); + date = convertTimezoneToLocal(date, timezone, true); + } + + let text = ''; + parts.forEach(value => { + const dateFormatter = getDateFormatter(value); + text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\''); + }); + return text; +} +/** + * Create a new Date object with the given date value, and the time set to midnight. + * + * We cannot use `new Date(year, month, date)` because it maps years between 0 and 99 to 1900-1999. + * See: https://github.com/angular/angular/issues/40377 + * + * Note that this function returns a Date object whose time is midnight in the current locale's + * timezone. In the future we might want to change this to be midnight in UTC, but this would be a + * considerable breaking change. + */ + + +function createDate(year, month, date) { + // The `newDate` is set to midnight (UTC) on January 1st 1970. + // - In PST this will be December 31st 1969 at 4pm. + // - In GMT this will be January 1st 1970 at 1am. + // Note that they even have different years, dates and months! + const newDate = new Date(0); // `setFullYear()` allows years like 0001 to be set correctly. This function does not + // change the internal time of the date. + // Consider calling `setFullYear(2019, 8, 20)` (September 20, 2019). + // - In PST this will now be September 20, 2019 at 4pm + // - In GMT this will now be September 20, 2019 at 1am + + newDate.setFullYear(year, month, date); // We want the final date to be at local midnight, so we reset the time. + // - In PST this will now be September 20, 2019 at 12am + // - In GMT this will now be September 20, 2019 at 12am + + newDate.setHours(0, 0, 0); + return newDate; +} + +function getNamedFormat(locale, format) { + const localeId = getLocaleId(locale); + NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {}; + + if (NAMED_FORMATS[localeId][format]) { + return NAMED_FORMATS[localeId][format]; + } + + let formatValue = ''; + + switch (format) { + case 'shortDate': + formatValue = getLocaleDateFormat(locale, FormatWidth.Short); + break; + + case 'mediumDate': + formatValue = getLocaleDateFormat(locale, FormatWidth.Medium); + break; + + case 'longDate': + formatValue = getLocaleDateFormat(locale, FormatWidth.Long); + break; + + case 'fullDate': + formatValue = getLocaleDateFormat(locale, FormatWidth.Full); + break; + + case 'shortTime': + formatValue = getLocaleTimeFormat(locale, FormatWidth.Short); + break; + + case 'mediumTime': + formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium); + break; + + case 'longTime': + formatValue = getLocaleTimeFormat(locale, FormatWidth.Long); + break; + + case 'fullTime': + formatValue = getLocaleTimeFormat(locale, FormatWidth.Full); + break; + + case 'short': + const shortTime = getNamedFormat(locale, 'shortTime'); + const shortDate = getNamedFormat(locale, 'shortDate'); + formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]); + break; + + case 'medium': + const mediumTime = getNamedFormat(locale, 'mediumTime'); + const mediumDate = getNamedFormat(locale, 'mediumDate'); + formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]); + break; + + case 'long': + const longTime = getNamedFormat(locale, 'longTime'); + const longDate = getNamedFormat(locale, 'longDate'); + formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]); + break; + + case 'full': + const fullTime = getNamedFormat(locale, 'fullTime'); + const fullDate = getNamedFormat(locale, 'fullDate'); + formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]); + break; + } + + if (formatValue) { + NAMED_FORMATS[localeId][format] = formatValue; + } + + return formatValue; +} + +function formatDateTime(str, opt_values) { + if (opt_values) { + str = str.replace(/\{([^}]+)}/g, function (match, key) { + return opt_values != null && key in opt_values ? opt_values[key] : match; + }); + } + + return str; +} + +function padNumber(num, digits, minusSign = '-', trim, negWrap) { + let neg = ''; + + if (num < 0 || negWrap && num <= 0) { + if (negWrap) { + num = -num + 1; + } else { + num = -num; + neg = minusSign; + } + } + + let strNum = String(num); + + while (strNum.length < digits) { + strNum = '0' + strNum; + } + + if (trim) { + strNum = strNum.slice(strNum.length - digits); + } + + return neg + strNum; +} + +function formatFractionalSeconds(milliseconds, digits) { + const strMs = padNumber(milliseconds, 3); + return strMs.substring(0, digits); +} +/** + * Returns a date formatter that transforms a date into its locale digit representation + */ + + +function dateGetter(name, size, offset = 0, trim = false, negWrap = false) { + return function (date, locale) { + let part = getDatePart(name, date); + + if (offset > 0 || part > -offset) { + part += offset; + } + + if (name === DateType.Hours) { + if (part === 0 && offset === -12) { + part = 12; + } + } else if (name === DateType.FractionalSeconds) { + return formatFractionalSeconds(part, size); + } + + const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign); + return padNumber(part, size, localeMinus, trim, negWrap); + }; +} + +function getDatePart(part, date) { + switch (part) { + case DateType.FullYear: + return date.getFullYear(); + + case DateType.Month: + return date.getMonth(); + + case DateType.Date: + return date.getDate(); + + case DateType.Hours: + return date.getHours(); + + case DateType.Minutes: + return date.getMinutes(); + + case DateType.Seconds: + return date.getSeconds(); + + case DateType.FractionalSeconds: + return date.getMilliseconds(); + + case DateType.Day: + return date.getDay(); + + default: + throw new Error(`Unknown DateType value "${part}".`); + } +} +/** + * Returns a date formatter that transforms a date into its locale string representation + */ + + +function dateStrGetter(name, width, form = FormStyle.Format, extended = false) { + return function (date, locale) { + return getDateTranslation(date, locale, name, width, form, extended); + }; +} +/** + * Returns the locale translation of a date for a given form, type and width + */ + + +function getDateTranslation(date, locale, name, width, form, extended) { + switch (name) { + case TranslationType.Months: + return getLocaleMonthNames(locale, form, width)[date.getMonth()]; + + case TranslationType.Days: + return getLocaleDayNames(locale, form, width)[date.getDay()]; + + case TranslationType.DayPeriods: + const currentHours = date.getHours(); + const currentMinutes = date.getMinutes(); + + if (extended) { + const rules = getLocaleExtraDayPeriodRules(locale); + const dayPeriods = getLocaleExtraDayPeriods(locale, form, width); + const index = rules.findIndex(rule => { + if (Array.isArray(rule)) { + // morning, afternoon, evening, night + const [from, to] = rule; + const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes; + const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes; // We must account for normal rules that span a period during the day (e.g. 6am-9am) + // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g. + // 10pm - 5am) where `from` is greater (later!) than `to`. + // + // In the first case the current time must be BOTH after `from` AND before `to` + // (e.g. 8am is after 6am AND before 10am). + // + // In the second case the current time must be EITHER after `from` OR before `to` + // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is + // after 10pm). + + if (from.hours < to.hours) { + if (afterFrom && beforeTo) { + return true; + } + } else if (afterFrom || beforeTo) { + return true; + } + } else { + // noon or midnight + if (rule.hours === currentHours && rule.minutes === currentMinutes) { + return true; + } + } + + return false; + }); + + if (index !== -1) { + return dayPeriods[index]; + } + } // if no rules for the day periods, we use am/pm by default + + + return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1]; + + case TranslationType.Eras: + return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1]; + + default: + // This default case is not needed by TypeScript compiler, as the switch is exhaustive. + // However Closure Compiler does not understand that and reports an error in typed mode. + // The `throw new Error` below works around the problem, and the unexpected: never variable + // makes sure tsc still checks this code is unreachable. + const unexpected = name; + throw new Error(`unexpected translation type ${unexpected}`); + } +} +/** + * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or + * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30, + * extended = +04:30) + */ + + +function timeZoneGetter(width) { + return function (date, locale, offset) { + const zone = -1 * offset; + const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign); + const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60); + + switch (width) { + case ZoneWidth.Short: + return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign); + + case ZoneWidth.ShortGMT: + return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign); + + case ZoneWidth.Long: + return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign); + + case ZoneWidth.Extended: + if (offset === 0) { + return 'Z'; + } else { + return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign); + } + + default: + throw new Error(`Unknown zone width "${width}"`); + } + }; +} + +const JANUARY = 0; +const THURSDAY = 4; + +function getFirstThursdayOfYear(year) { + const firstDayOfYear = createDate(year, JANUARY, 1).getDay(); + return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear); +} + +function getThursdayThisWeek(datetime) { + return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + (THURSDAY - datetime.getDay())); +} + +function weekGetter(size, monthBased = false) { + return function (date, locale) { + let result; + + if (monthBased) { + const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1; + const today = date.getDate(); + result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7); + } else { + const thisThurs = getThursdayThisWeek(date); // Some days of a year are part of next year according to ISO 8601. + // Compute the firstThurs from the year of this week's Thursday + + const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear()); + const diff = thisThurs.getTime() - firstThurs.getTime(); + result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week + } + + return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign)); + }; +} +/** + * Returns a date formatter that provides the week-numbering year for the input date. + */ + + +function weekNumberingYearGetter(size, trim = false) { + return function (date, locale) { + const thisThurs = getThursdayThisWeek(date); + const weekNumberingYear = thisThurs.getFullYear(); + return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim); + }; +} + +const DATE_FORMATS = {}; // Based on CLDR formats: +// See complete list: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table +// See also explanations: http://cldr.unicode.org/translation/date-time +// TODO(ocombe): support all missing cldr formats: U, Q, D, F, e, j, J, C, A, v, V, X, x + +function getDateFormatter(format) { + if (DATE_FORMATS[format]) { + return DATE_FORMATS[format]; + } + + let formatter; + + switch (format) { + // Era name (AD/BC) + case 'G': + case 'GG': + case 'GGG': + formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated); + break; + + case 'GGGG': + formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide); + break; + + case 'GGGGG': + formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow); + break; + // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199) + + case 'y': + formatter = dateGetter(DateType.FullYear, 1, 0, false, true); + break; + // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) + + case 'yy': + formatter = dateGetter(DateType.FullYear, 2, 0, true, true); + break; + // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10) + + case 'yyy': + formatter = dateGetter(DateType.FullYear, 3, 0, false, true); + break; + // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010) + + case 'yyyy': + formatter = dateGetter(DateType.FullYear, 4, 0, false, true); + break; + // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199) + + case 'Y': + formatter = weekNumberingYearGetter(1); + break; + // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD + // 2010 => 10) + + case 'YY': + formatter = weekNumberingYearGetter(2, true); + break; + // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD + // 2010 => 2010) + + case 'YYY': + formatter = weekNumberingYearGetter(3); + break; + // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010) + + case 'YYYY': + formatter = weekNumberingYearGetter(4); + break; + // Month of the year (1-12), numeric + + case 'M': + case 'L': + formatter = dateGetter(DateType.Month, 1, 1); + break; + + case 'MM': + case 'LL': + formatter = dateGetter(DateType.Month, 2, 1); + break; + // Month of the year (January, ...), string, format + + case 'MMM': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated); + break; + + case 'MMMM': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide); + break; + + case 'MMMMM': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow); + break; + // Month of the year (January, ...), string, standalone + + case 'LLL': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone); + break; + + case 'LLLL': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone); + break; + + case 'LLLLL': + formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone); + break; + // Week of the year (1, ... 52) + + case 'w': + formatter = weekGetter(1); + break; + + case 'ww': + formatter = weekGetter(2); + break; + // Week of the month (1, ...) + + case 'W': + formatter = weekGetter(1, true); + break; + // Day of the month (1-31) + + case 'd': + formatter = dateGetter(DateType.Date, 1); + break; + + case 'dd': + formatter = dateGetter(DateType.Date, 2); + break; + // Day of the Week StandAlone (1, 1, Mon, Monday, M, Mo) + + case 'c': + case 'cc': + formatter = dateGetter(DateType.Day, 1); + break; + + case 'ccc': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone); + break; + + case 'cccc': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone); + break; + + case 'ccccc': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone); + break; + + case 'cccccc': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone); + break; + // Day of the Week + + case 'E': + case 'EE': + case 'EEE': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated); + break; + + case 'EEEE': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide); + break; + + case 'EEEEE': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow); + break; + + case 'EEEEEE': + formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short); + break; + // Generic period of the day (am-pm) + + case 'a': + case 'aa': + case 'aaa': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated); + break; + + case 'aaaa': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide); + break; + + case 'aaaaa': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow); + break; + // Extended period of the day (midnight, at night, ...), standalone + + case 'b': + case 'bb': + case 'bbb': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true); + break; + + case 'bbbb': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true); + break; + + case 'bbbbb': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true); + break; + // Extended period of the day (midnight, night, ...), standalone + + case 'B': + case 'BB': + case 'BBB': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true); + break; + + case 'BBBB': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true); + break; + + case 'BBBBB': + formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true); + break; + // Hour in AM/PM, (1-12) + + case 'h': + formatter = dateGetter(DateType.Hours, 1, -12); + break; + + case 'hh': + formatter = dateGetter(DateType.Hours, 2, -12); + break; + // Hour of the day (0-23) + + case 'H': + formatter = dateGetter(DateType.Hours, 1); + break; + // Hour in day, padded (00-23) + + case 'HH': + formatter = dateGetter(DateType.Hours, 2); + break; + // Minute of the hour (0-59) + + case 'm': + formatter = dateGetter(DateType.Minutes, 1); + break; + + case 'mm': + formatter = dateGetter(DateType.Minutes, 2); + break; + // Second of the minute (0-59) + + case 's': + formatter = dateGetter(DateType.Seconds, 1); + break; + + case 'ss': + formatter = dateGetter(DateType.Seconds, 2); + break; + // Fractional second + + case 'S': + formatter = dateGetter(DateType.FractionalSeconds, 1); + break; + + case 'SS': + formatter = dateGetter(DateType.FractionalSeconds, 2); + break; + + case 'SSS': + formatter = dateGetter(DateType.FractionalSeconds, 3); + break; + // Timezone ISO8601 short format (-0430) + + case 'Z': + case 'ZZ': + case 'ZZZ': + formatter = timeZoneGetter(ZoneWidth.Short); + break; + // Timezone ISO8601 extended format (-04:30) + + case 'ZZZZZ': + formatter = timeZoneGetter(ZoneWidth.Extended); + break; + // Timezone GMT short format (GMT+4) + + case 'O': + case 'OO': + case 'OOO': // Should be location, but fallback to format O instead because we don't have the data yet + + case 'z': + case 'zz': + case 'zzz': + formatter = timeZoneGetter(ZoneWidth.ShortGMT); + break; + // Timezone GMT long format (GMT+0430) + + case 'OOOO': + case 'ZZZZ': // Should be location, but fallback to format O instead because we don't have the data yet + + case 'zzzz': + formatter = timeZoneGetter(ZoneWidth.Long); + break; + + default: + return null; + } + + DATE_FORMATS[format] = formatter; + return formatter; +} + +function timezoneToOffset(timezone, fallback) { + // Support: IE 11 only, Edge 13-15+ + // IE/Edge do not "understand" colon (`:`) in timezone + timezone = timezone.replace(/:/g, ''); + const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; + return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset; +} + +function addDateMinutes(date, minutes) { + date = new Date(date.getTime()); + date.setMinutes(date.getMinutes() + minutes); + return date; +} + +function convertTimezoneToLocal(date, timezone, reverse) { + const reverseValue = reverse ? -1 : 1; + const dateTimezoneOffset = date.getTimezoneOffset(); + const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); + return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset)); +} +/** + * Converts a value to date. + * + * Supported input formats: + * - `Date` + * - number: timestamp + * - string: numeric (e.g. "1234"), ISO and date strings in a format supported by + * [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). + * Note: ISO strings without time return a date without timeoffset. + * + * Throws if unable to convert to a date. + */ + + +function toDate(value) { + if (isDate(value)) { + return value; + } + + if (typeof value === 'number' && !isNaN(value)) { + return new Date(value); + } + + if (typeof value === 'string') { + value = value.trim(); + + if (/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(value)) { + /* For ISO Strings without time the day, month and year must be extracted from the ISO String + before Date creation to avoid time offset and errors in the new Date. + If we only replace '-' with ',' in the ISO String ("2015,01,01"), and try to create a new + date, some browsers (e.g. IE 9) will throw an invalid Date error. + If we leave the '-' ("2015-01-01") and try to create a new Date("2015-01-01") the timeoffset + is applied. + Note: ISO months are 0 for January, 1 for February, ... */ + const [y, m = 1, d = 1] = value.split('-').map(val => +val); + return createDate(y, m - 1, d); + } + + const parsedNb = parseFloat(value); // any string that only contains numbers, like "1234" but not like "1234hello" + + if (!isNaN(value - parsedNb)) { + return new Date(parsedNb); + } + + let match; + + if (match = value.match(ISO8601_DATE_REGEX)) { + return isoStringToDate(match); + } + } + + const date = new Date(value); + + if (!isDate(date)) { + throw new Error(`Unable to convert "${value}" into a date`); + } + + return date; +} +/** + * Converts a date in ISO8601 to a Date. + * Used instead of `Date.parse` because of browser discrepancies. + */ + + +function isoStringToDate(match) { + const date = new Date(0); + let tzHour = 0; + let tzMin = 0; // match[8] means that the string contains "Z" (UTC) or a timezone like "+01:00" or "+0100" + + const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear; + const timeSetter = match[8] ? date.setUTCHours : date.setHours; // if there is a timezone defined like "+01:00" or "+0100" + + if (match[9]) { + tzHour = Number(match[9] + match[10]); + tzMin = Number(match[9] + match[11]); + } + + dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3])); + const h = Number(match[4] || 0) - tzHour; + const m = Number(match[5] || 0) - tzMin; + const s = Number(match[6] || 0); // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11) + // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms` + // becomes `999ms`. + + const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000); + timeSetter.call(date, h, m, s, ms); + return date; +} + +function isDate(value) { + return value instanceof Date && !isNaN(value.valueOf()); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/; +const MAX_DIGITS = 22; +const DECIMAL_SEP = '.'; +const ZERO_CHAR = '0'; +const PATTERN_SEP = ';'; +const GROUP_SEP = ','; +const DIGIT_CHAR = '#'; +const CURRENCY_CHAR = '¤'; +const PERCENT_CHAR = '%'; +/** + * Transforms a number to a locale string based on a style and a format. + */ + +function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) { + let formattedText = ''; + let isZero = false; + + if (!isFinite(value)) { + formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity); + } else { + let parsedNumber = parseNumber(value); + + if (isPercent) { + parsedNumber = toPercent(parsedNumber); + } + + let minInt = pattern.minInt; + let minFraction = pattern.minFrac; + let maxFraction = pattern.maxFrac; + + if (digitsInfo) { + const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP); + + if (parts === null) { + throw new Error(`${digitsInfo} is not a valid digit info`); + } + + const minIntPart = parts[1]; + const minFractionPart = parts[3]; + const maxFractionPart = parts[5]; + + if (minIntPart != null) { + minInt = parseIntAutoRadix(minIntPart); + } + + if (minFractionPart != null) { + minFraction = parseIntAutoRadix(minFractionPart); + } + + if (maxFractionPart != null) { + maxFraction = parseIntAutoRadix(maxFractionPart); + } else if (minFractionPart != null && minFraction > maxFraction) { + maxFraction = minFraction; + } + } + + roundNumber(parsedNumber, minFraction, maxFraction); + let digits = parsedNumber.digits; + let integerLen = parsedNumber.integerLen; + const exponent = parsedNumber.exponent; + let decimals = []; + isZero = digits.every(d => !d); // pad zeros for small numbers + + for (; integerLen < minInt; integerLen++) { + digits.unshift(0); + } // pad zeros for small numbers + + + for (; integerLen < 0; integerLen++) { + digits.unshift(0); + } // extract decimals digits + + + if (integerLen > 0) { + decimals = digits.splice(integerLen, digits.length); + } else { + decimals = digits; + digits = [0]; + } // format the integer digits with grouping separators + + + const groups = []; + + if (digits.length >= pattern.lgSize) { + groups.unshift(digits.splice(-pattern.lgSize, digits.length).join('')); + } + + while (digits.length > pattern.gSize) { + groups.unshift(digits.splice(-pattern.gSize, digits.length).join('')); + } + + if (digits.length) { + groups.unshift(digits.join('')); + } + + formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol)); // append the decimal digits + + if (decimals.length) { + formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join(''); + } + + if (exponent) { + formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent; + } + } + + if (value < 0 && !isZero) { + formattedText = pattern.negPre + formattedText + pattern.negSuf; + } else { + formattedText = pattern.posPre + formattedText + pattern.posSuf; + } + + return formattedText; +} +/** + * @ngModule CommonModule + * @description + * + * Formats a number as currency using locale rules. + * + * @param value The number to format. + * @param locale A locale code for the locale format rules to use. + * @param currency A string containing the currency symbol or its name, + * such as "$" or "Canadian Dollar". Used in output string, but does not affect the operation + * of the function. + * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) + * currency code, such as `USD` for the US dollar and `EUR` for the euro. + * Used to determine the number of digits in the decimal part. + * @param digitsInfo Decimal representation options, specified by a string in the following format: + * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details. + * + * @returns The formatted currency value. + * + * @see `formatNumber()` + * @see `DecimalPipe` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function formatCurrency(value, locale, currency, currencyCode, digitsInfo) { + const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency); + const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign)); + pattern.minFrac = getNumberOfCurrencyDigits(currencyCode); + pattern.maxFrac = pattern.minFrac; + const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo); + return res.replace(CURRENCY_CHAR, currency) // if we have 2 time the currency character, the second one is ignored + .replace(CURRENCY_CHAR, '') // If there is a spacing between currency character and the value and + // the currency character is suppressed by passing an empty string, the + // spacing character would remain as part of the string. Then we + // should remove it. + .trim(); +} +/** + * @ngModule CommonModule + * @description + * + * Formats a number as a percentage according to locale rules. + * + * @param value The number to format. + * @param locale A locale code for the locale format rules to use. + * @param digitsInfo Decimal representation options, specified by a string in the following format: + * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details. + * + * @returns The formatted percentage value. + * + * @see `formatNumber()` + * @see `DecimalPipe` + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * @publicApi + * + */ + + +function formatPercent(value, locale, digitsInfo) { + const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent); + const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign)); + const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true); + return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign)); +} +/** + * @ngModule CommonModule + * @description + * + * Formats a number as text, with group sizing, separator, and other + * parameters based on the locale. + * + * @param value The number to format. + * @param locale A locale code for the locale format rules to use. + * @param digitsInfo Decimal representation options, specified by a string in the following format: + * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details. + * + * @returns The formatted text string. + * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n-overview) + * + * @publicApi + */ + + +function formatNumber(value, locale, digitsInfo) { + const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal); + const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign)); + return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo); +} + +function parseNumberFormat(format, minusSign = '-') { + const p = { + minInt: 1, + minFrac: 0, + maxFrac: 0, + posPre: '', + posSuf: '', + negPre: '', + negSuf: '', + gSize: 0, + lgSize: 0 + }; + const patternParts = format.split(PATTERN_SEP); + const positive = patternParts[0]; + const negative = patternParts[1]; + const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)], + integer = positiveParts[0], + fraction = positiveParts[1] || ''; + p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR)); + + for (let i = 0; i < fraction.length; i++) { + const ch = fraction.charAt(i); + + if (ch === ZERO_CHAR) { + p.minFrac = p.maxFrac = i + 1; + } else if (ch === DIGIT_CHAR) { + p.maxFrac = i + 1; + } else { + p.posSuf += ch; + } + } + + const groups = integer.split(GROUP_SEP); + p.gSize = groups[1] ? groups[1].length : 0; + p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0; + + if (negative) { + const trunkLen = positive.length - p.posPre.length - p.posSuf.length, + pos = negative.indexOf(DIGIT_CHAR); + p.negPre = negative.substring(0, pos).replace(/'/g, ''); + p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, ''); + } else { + p.negPre = minusSign + p.posPre; + p.negSuf = p.posSuf; + } + + return p; +} // Transforms a parsed number into a percentage by multiplying it by 100 + + +function toPercent(parsedNumber) { + // if the number is 0, don't do anything + if (parsedNumber.digits[0] === 0) { + return parsedNumber; + } // Getting the current number of decimals + + + const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen; + + if (parsedNumber.exponent) { + parsedNumber.exponent += 2; + } else { + if (fractionLen === 0) { + parsedNumber.digits.push(0, 0); + } else if (fractionLen === 1) { + parsedNumber.digits.push(0); + } + + parsedNumber.integerLen += 2; + } + + return parsedNumber; +} +/** + * Parses a number. + * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/ + */ + + +function parseNumber(num) { + let numStr = Math.abs(num) + ''; + let exponent = 0, + digits, + integerLen; + let i, j, zeros; // Decimal point? + + if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) { + numStr = numStr.replace(DECIMAL_SEP, ''); + } // Exponential form? + + + if ((i = numStr.search(/e/i)) > 0) { + // Work out the exponent. + if (integerLen < 0) integerLen = i; + integerLen += +numStr.slice(i + 1); + numStr = numStr.substring(0, i); + } else if (integerLen < 0) { + // There was no decimal point or exponent so it is an integer. + integerLen = numStr.length; + } // Count the number of leading zeros. + + + for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) { + /* empty */ + } + + if (i === (zeros = numStr.length)) { + // The digits are all zero. + digits = [0]; + integerLen = 1; + } else { + // Count the number of trailing zeros + zeros--; + + while (numStr.charAt(zeros) === ZERO_CHAR) zeros--; // Trailing zeros are insignificant so ignore them + + + integerLen -= i; + digits = []; // Convert string to array of digits without leading/trailing zeros. + + for (j = 0; i <= zeros; i++, j++) { + digits[j] = Number(numStr.charAt(i)); + } + } // If the number overflows the maximum allowed digits then use an exponent. + + + if (integerLen > MAX_DIGITS) { + digits = digits.splice(0, MAX_DIGITS - 1); + exponent = integerLen - 1; + integerLen = 1; + } + + return { + digits, + exponent, + integerLen + }; +} +/** + * Round the parsed number to the specified number of decimal places + * This function changes the parsedNumber in-place + */ + + +function roundNumber(parsedNumber, minFrac, maxFrac) { + if (minFrac > maxFrac) { + throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`); + } + + let digits = parsedNumber.digits; + let fractionLen = digits.length - parsedNumber.integerLen; + const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac); // The index of the digit to where rounding is to occur + + let roundAt = fractionSize + parsedNumber.integerLen; + let digit = digits[roundAt]; + + if (roundAt > 0) { + // Drop fractional digits beyond `roundAt` + digits.splice(Math.max(parsedNumber.integerLen, roundAt)); // Set non-fractional digits beyond `roundAt` to 0 + + for (let j = roundAt; j < digits.length; j++) { + digits[j] = 0; + } + } else { + // We rounded to zero so reset the parsedNumber + fractionLen = Math.max(0, fractionLen); + parsedNumber.integerLen = 1; + digits.length = Math.max(1, roundAt = fractionSize + 1); + digits[0] = 0; + + for (let i = 1; i < roundAt; i++) digits[i] = 0; + } + + if (digit >= 5) { + if (roundAt - 1 < 0) { + for (let k = 0; k > roundAt; k--) { + digits.unshift(0); + parsedNumber.integerLen++; + } + + digits.unshift(1); + parsedNumber.integerLen++; + } else { + digits[roundAt - 1]++; + } + } // Pad out with zeros to get the required fraction length + + + for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0); + + let dropTrailingZeros = fractionSize !== 0; // Minimal length = nb of decimals required + current nb of integers + // Any number besides that is optional and can be removed if it's a trailing 0 + + const minLen = minFrac + parsedNumber.integerLen; // Do any carrying, e.g. a digit was rounded up to 10 + + const carry = digits.reduceRight(function (carry, d, i, digits) { + d = d + carry; + digits[i] = d < 10 ? d : d - 10; // d % 10 + + if (dropTrailingZeros) { + // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52) + if (digits[i] === 0 && i >= minLen) { + digits.pop(); + } else { + dropTrailingZeros = false; + } + } + + return d >= 10 ? 1 : 0; // Math.floor(d / 10); + }, 0); + + if (carry) { + digits.unshift(carry); + parsedNumber.integerLen++; + } +} + +function parseIntAutoRadix(text) { + const result = parseInt(text); + + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + + return result; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @publicApi + */ + + +class NgLocalization {} + +NgLocalization.ɵfac = function NgLocalization_Factory(t) { + return new (t || NgLocalization)(); +}; + +NgLocalization.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: NgLocalization, + factory: function NgLocalization_Factory(t) { + let r = null; + + if (t) { + r = new t(); + } else { + r = (locale => new NgLocaleLocalization(locale))(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID)); + } + + return r; + }, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLocalization, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root', + useFactory: locale => new NgLocaleLocalization(locale), + deps: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }], null, null); +})(); +/** + * Returns the plural category for a given value. + * - "=value" when the case exists, + * - the plural category otherwise + */ + + +function getPluralCategory(value, cases, ngLocalization, locale) { + let key = `=${value}`; + + if (cases.indexOf(key) > -1) { + return key; + } + + key = ngLocalization.getPluralCategory(value, locale); + + if (cases.indexOf(key) > -1) { + return key; + } + + if (cases.indexOf('other') > -1) { + return 'other'; + } + + throw new Error(`No plural message found for value "${value}"`); +} +/** + * Returns the plural case based on the locale + * + * @publicApi + */ + + +class NgLocaleLocalization extends NgLocalization { + constructor(locale) { + super(); + this.locale = locale; + } + + getPluralCategory(value, locale) { + const plural = getLocalePluralCase(locale || this.locale)(value); + + switch (plural) { + case Plural.Zero: + return 'zero'; + + case Plural.One: + return 'one'; + + case Plural.Two: + return 'two'; + + case Plural.Few: + return 'few'; + + case Plural.Many: + return 'many'; + + default: + return 'other'; + } + } + +} + +NgLocaleLocalization.ɵfac = function NgLocaleLocalization_Factory(t) { + return new (t || NgLocaleLocalization)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID)); +}; + +NgLocaleLocalization.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: NgLocaleLocalization, + factory: NgLocaleLocalization.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLocaleLocalization, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Register global data to be used internally by Angular. See the + * ["I18n guide"](guide/i18n-common-format-data-locale) to know how to import additional locale + * data. + * + * The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1 + * + * @publicApi + */ + + +function registerLocaleData(data, localeId, extraData) { + return (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵregisterLocaleData"])(data, localeId, extraData); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function parseCookieValue(cookieStr, name) { + name = encodeURIComponent(name); + + for (const cookie of cookieStr.split(';')) { + const eqIndex = cookie.indexOf('='); + const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)]; + + if (cookieName.trim() === name) { + return decodeURIComponent(cookieValue); + } + } + + return null; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * + * @usageNotes + * ``` + * ... + * + * ... + * + * ... + * + * ... + * + * ... + * ``` + * + * @description + * + * Adds and removes CSS classes on an HTML element. + * + * The CSS classes are updated as follows, depending on the type of the expression evaluation: + * - `string` - the CSS classes listed in the string (space delimited) are added, + * - `Array` - the CSS classes declared as Array elements are added, + * - `Object` - keys are CSS classes that get added when the expression given in the value + * evaluates to a truthy value, otherwise they are removed. + * + * @publicApi + */ + + +class NgClass { + constructor(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) { + this._iterableDiffers = _iterableDiffers; + this._keyValueDiffers = _keyValueDiffers; + this._ngEl = _ngEl; + this._renderer = _renderer; + this._iterableDiffer = null; + this._keyValueDiffer = null; + this._initialClasses = []; + this._rawClass = null; + } + + set klass(value) { + this._removeClasses(this._initialClasses); + + this._initialClasses = typeof value === 'string' ? value.split(/\s+/) : []; + + this._applyClasses(this._initialClasses); + + this._applyClasses(this._rawClass); + } + + set ngClass(value) { + this._removeClasses(this._rawClass); + + this._applyClasses(this._initialClasses); + + this._iterableDiffer = null; + this._keyValueDiffer = null; + this._rawClass = typeof value === 'string' ? value.split(/\s+/) : value; + + if (this._rawClass) { + if ((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisListLikeIterable"])(this._rawClass)) { + this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create(); + } else { + this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create(); + } + } + } + + ngDoCheck() { + if (this._iterableDiffer) { + const iterableChanges = this._iterableDiffer.diff(this._rawClass); + + if (iterableChanges) { + this._applyIterableChanges(iterableChanges); + } + } else if (this._keyValueDiffer) { + const keyValueChanges = this._keyValueDiffer.diff(this._rawClass); + + if (keyValueChanges) { + this._applyKeyValueChanges(keyValueChanges); + } + } + } + + _applyKeyValueChanges(changes) { + changes.forEachAddedItem(record => this._toggleClass(record.key, record.currentValue)); + changes.forEachChangedItem(record => this._toggleClass(record.key, record.currentValue)); + changes.forEachRemovedItem(record => { + if (record.previousValue) { + this._toggleClass(record.key, false); + } + }); + } + + _applyIterableChanges(changes) { + changes.forEachAddedItem(record => { + if (typeof record.item === 'string') { + this._toggleClass(record.item, true); + } else { + throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(record.item)}`); + } + }); + changes.forEachRemovedItem(record => this._toggleClass(record.item, false)); + } + /** + * Applies a collection of CSS classes to the DOM element. + * + * For argument of type Set and Array CSS class names contained in those collections are always + * added. + * For argument of type Map CSS class name in the map's key is toggled based on the value (added + * for truthy and removed for falsy). + */ + + + _applyClasses(rawClassVal) { + if (rawClassVal) { + if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) { + rawClassVal.forEach(klass => this._toggleClass(klass, true)); + } else { + Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, !!rawClassVal[klass])); + } + } + } + /** + * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup + * purposes. + */ + + + _removeClasses(rawClassVal) { + if (rawClassVal) { + if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) { + rawClassVal.forEach(klass => this._toggleClass(klass, false)); + } else { + Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, false)); + } + } + } + + _toggleClass(klass, enabled) { + klass = klass.trim(); + + if (klass) { + klass.split(/\s+/g).forEach(klass => { + if (enabled) { + this._renderer.addClass(this._ngEl.nativeElement, klass); + } else { + this._renderer.removeClass(this._ngEl.nativeElement, klass); + } + }); + } + } + +} + +NgClass.ɵfac = function NgClass_Factory(t) { + return new (t || NgClass)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.Renderer2)); +}; + +NgClass.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgClass, + selectors: [["", "ngClass", ""]], + inputs: { + klass: ["class", "klass"], + ngClass: "ngClass" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgClass, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngClass]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Renderer2 + }]; + }, { + klass: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['class'] + }], + ngClass: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['ngClass'] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Instantiates a {@link Component} type and inserts its Host View into the current View. + * `NgComponentOutlet` provides a declarative approach for dynamic component creation. + * + * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and + * any existing component will be destroyed. + * + * @usageNotes + * + * ### Fine tune control + * + * You can control the component creation process by using the following optional attributes: + * + * * `ngComponentOutletInjector`: Optional custom {@link Injector} that will be used as parent for + * the Component. Defaults to the injector of the current view container. + * + * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content + * section of the component, if it exists. + * + * * `ngComponentOutletNgModule`: Optional NgModule class reference to allow loading another + * module dynamically, then loading a component from that module. + * + * * `ngComponentOutletNgModuleFactory`: Deprecated config option that allows providing optional + * NgModule factory to allow loading another module dynamically, then loading a component from that + * module. Use `ngComponentOutletNgModule` instead. + * + * ### Syntax + * + * Simple + * ``` + * + * ``` + * + * Customized injector/content + * ``` + * + * + * ``` + * + * Customized NgModule reference + * ``` + * + * + * ``` + * + * ### A simple example + * + * {@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'} + * + * A more complete example with additional options: + * + * {@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'} + * + * @publicApi + * @ngModule CommonModule + */ + + +class NgComponentOutlet { + constructor(_viewContainerRef) { + this._viewContainerRef = _viewContainerRef; + this.ngComponentOutlet = null; + } + /** @nodoc */ + + + ngOnChanges(changes) { + const { + _viewContainerRef: viewContainerRef, + ngComponentOutletNgModule: ngModule, + ngComponentOutletNgModuleFactory: ngModuleFactory + } = this; + viewContainerRef.clear(); + this._componentRef = undefined; + + if (this.ngComponentOutlet) { + const injector = this.ngComponentOutletInjector || viewContainerRef.parentInjector; + + if (changes['ngComponentOutletNgModule'] || changes['ngComponentOutletNgModuleFactory']) { + if (this._moduleRef) this._moduleRef.destroy(); + + if (ngModule) { + this._moduleRef = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.createNgModule)(ngModule, getParentInjector(injector)); + } else if (ngModuleFactory) { + this._moduleRef = ngModuleFactory.create(getParentInjector(injector)); + } else { + this._moduleRef = undefined; + } + } + + this._componentRef = viewContainerRef.createComponent(this.ngComponentOutlet, { + index: viewContainerRef.length, + injector, + ngModuleRef: this._moduleRef, + projectableNodes: this.ngComponentOutletContent + }); + } + } + /** @nodoc */ + + + ngOnDestroy() { + if (this._moduleRef) this._moduleRef.destroy(); + } + +} + +NgComponentOutlet.ɵfac = function NgComponentOutlet_Factory(t) { + return new (t || NgComponentOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef)); +}; + +NgComponentOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgComponentOutlet, + selectors: [["", "ngComponentOutlet", ""]], + inputs: { + ngComponentOutlet: "ngComponentOutlet", + ngComponentOutletInjector: "ngComponentOutletInjector", + ngComponentOutletContent: "ngComponentOutletContent", + ngComponentOutletNgModule: "ngComponentOutletNgModule", + ngComponentOutletNgModuleFactory: "ngComponentOutletNgModuleFactory" + }, + standalone: true, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgComponentOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngComponentOutlet]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }]; + }, { + ngComponentOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngComponentOutletInjector: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngComponentOutletContent: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngComponentOutletNgModule: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngComponentOutletNgModuleFactory: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); // Helper function that returns an Injector instance of a parent NgModule. + + +function getParentInjector(injector) { + const parentNgModule = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModuleRef); + return parentNgModule.injector; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode; +/** + * @publicApi + */ + +class NgForOfContext { + constructor($implicit, ngForOf, index, count) { + this.$implicit = $implicit; + this.ngForOf = ngForOf; + this.index = index; + this.count = count; + } + + get first() { + return this.index === 0; + } + + get last() { + return this.index === this.count - 1; + } + + get even() { + return this.index % 2 === 0; + } + + get odd() { + return !this.even; + } + +} +/** + * A [structural directive](guide/structural-directives) that renders + * a template for each item in a collection. + * The directive is placed on an element, which becomes the parent + * of the cloned templates. + * + * The `ngForOf` directive is generally used in the + * [shorthand form](guide/structural-directives#asterisk) `*ngFor`. + * In this form, the template to be rendered for each iteration is the content + * of an anchor element containing the directive. + * + * The following example shows the shorthand syntax with some options, + * contained in an `
  • ` element. + * + * ``` + *
  • ...
  • + * ``` + * + * The shorthand form expands into a long form that uses the `ngForOf` selector + * on an `` element. + * The content of the `` element is the `
  • ` element that held the + * short-form directive. + * + * Here is the expanded version of the short-form example. + * + * ``` + * + *
  • ...
  • + *
    + * ``` + * + * Angular automatically expands the shorthand syntax as it compiles the template. + * The context for each embedded view is logically merged to the current component + * context according to its lexical position. + * + * When using the shorthand syntax, Angular allows only [one structural directive + * on an element](guide/structural-directives#one-per-element). + * If you want to iterate conditionally, for example, + * put the `*ngIf` on a container element that wraps the `*ngFor` element. + * For further discussion, see + * [Structural Directives](guide/structural-directives#one-per-element). + * + * @usageNotes + * + * ### Local variables + * + * `NgForOf` provides exported values that can be aliased to local variables. + * For example: + * + * ``` + *
  • + * {{i}}/{{users.length}}. {{user}} default + *
  • + * ``` + * + * The following exported values can be aliased to local variables: + * + * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`). + * - `ngForOf: NgIterable`: The value of the iterable expression. Useful when the expression is + * more complex then a property access, for example when using the async pipe (`userStreams | + * async`). + * - `index: number`: The index of the current item in the iterable. + * - `count: number`: The length of the iterable. + * - `first: boolean`: True when the item is the first item in the iterable. + * - `last: boolean`: True when the item is the last item in the iterable. + * - `even: boolean`: True when the item has an even index in the iterable. + * - `odd: boolean`: True when the item has an odd index in the iterable. + * + * ### Change propagation + * + * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM: + * + * * When an item is added, a new instance of the template is added to the DOM. + * * When an item is removed, its template instance is removed from the DOM. + * * When items are reordered, their respective templates are reordered in the DOM. + * + * Angular uses object identity to track insertions and deletions within the iterator and reproduce + * those changes in the DOM. This has important implications for animations and any stateful + * controls that are present, such as `` elements that accept user input. Inserted rows can + * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state + * such as user input. + * For more on animations, see [Transitions and Triggers](guide/transition-and-triggers). + * + * The identities of elements in the iterator can change while the data does not. + * This can happen, for example, if the iterator is produced from an RPC to the server, and that + * RPC is re-run. Even if the data hasn't changed, the second response produces objects with + * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old + * elements were deleted and all new elements inserted). + * + * To avoid this expensive operation, you can customize the default tracking algorithm. + * by supplying the `trackBy` option to `NgForOf`. + * `trackBy` takes a function that has two arguments: `index` and `item`. + * If `trackBy` is given, Angular tracks changes by the return value of the function. + * + * @see [Structural Directives](guide/structural-directives) + * @ngModule CommonModule + * @publicApi + */ + + +class NgForOf { + constructor(_viewContainer, _template, _differs) { + this._viewContainer = _viewContainer; + this._template = _template; + this._differs = _differs; + this._ngForOf = null; + this._ngForOfDirty = true; + this._differ = null; + } + /** + * The value of the iterable expression, which can be used as a + * [template input variable](guide/structural-directives#shorthand). + */ + + + set ngForOf(ngForOf) { + this._ngForOf = ngForOf; + this._ngForOfDirty = true; + } + /** + * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable. + * + * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object + * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) + * as the key. + * + * `NgForOf` uses the computed key to associate items in an iterable with DOM elements + * it produces for these items. + * + * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an + * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a + * primary key), and this iterable could be updated with new object instances that still + * represent the same underlying entity (for example, when data is re-fetched from the server, + * and the iterable is recreated and re-rendered, but most of the data is still the same). + * + * @see `TrackByFunction` + */ + + + set ngForTrackBy(fn) { + if (NG_DEV_MODE && fn != null && typeof fn !== 'function') { + // TODO(vicb): use a log service once there is a public one available + if (console && console.warn) { + console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.io/api/common/NgForOf#change-propagation for more information.`); + } + } + + this._trackByFn = fn; + } + + get ngForTrackBy() { + return this._trackByFn; + } + /** + * A reference to the template that is stamped out for each item in the iterable. + * @see [template reference variable](guide/template-reference-variables) + */ + + + set ngForTemplate(value) { + // TODO(TS2.1): make TemplateRef>> once we move to TS v2.1 + // The current type is too restrictive; a template that just uses index, for example, + // should be acceptable. + if (value) { + this._template = value; + } + } + /** + * Applies the changes when needed. + * @nodoc + */ + + + ngDoCheck() { + if (this._ngForOfDirty) { + this._ngForOfDirty = false; // React on ngForOf changes only once all inputs have been initialized + + const value = this._ngForOf; + + if (!this._differ && value) { + if (NG_DEV_MODE) { + try { + // CAUTION: this logic is duplicated for production mode below, as the try-catch + // is only present in development builds. + this._differ = this._differs.find(value).create(this.ngForTrackBy); + } catch { + let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`; + + if (typeof value === 'object') { + errorMessage += ' Did you mean to use the keyvalue pipe?'; + } + + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](-2200 + /* RuntimeErrorCode.NG_FOR_MISSING_DIFFER */ + , errorMessage); + } + } else { + // CAUTION: this logic is duplicated for development mode above, as the try-catch + // is only present in development builds. + this._differ = this._differs.find(value).create(this.ngForTrackBy); + } + } + } + + if (this._differ) { + const changes = this._differ.diff(this._ngForOf); + + if (changes) this._applyChanges(changes); + } + } + + _applyChanges(changes) { + const viewContainer = this._viewContainer; + changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => { + if (item.previousIndex == null) { + // NgForOf is never "null" or "undefined" here because the differ detected + // that a new item needs to be inserted from the iterable. This implies that + // there is an iterable value for "_ngForOf". + viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex); + } else if (currentIndex == null) { + viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex); + } else if (adjustedPreviousIndex !== null) { + const view = viewContainer.get(adjustedPreviousIndex); + viewContainer.move(view, currentIndex); + applyViewChange(view, item); + } + }); + + for (let i = 0, ilen = viewContainer.length; i < ilen; i++) { + const viewRef = viewContainer.get(i); + const context = viewRef.context; + context.index = i; + context.count = ilen; + context.ngForOf = this._ngForOf; + } + + changes.forEachIdentityChange(record => { + const viewRef = viewContainer.get(record.currentIndex); + applyViewChange(viewRef, record); + }); + } + /** + * Asserts the correct type of the context for the template that `NgForOf` will render. + * + * The presence of this method is a signal to the Ivy template type-check compiler that the + * `NgForOf` structural directive renders its template with a specific context type. + */ + + + static ngTemplateContextGuard(dir, ctx) { + return true; + } + +} + +NgForOf.ɵfac = function NgForOf_Factory(t) { + return new (t || NgForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers)); +}; + +NgForOf.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgForOf, + selectors: [["", "ngFor", "", "ngForOf", ""]], + inputs: { + ngForOf: "ngForOf", + ngForTrackBy: "ngForTrackBy", + ngForTemplate: "ngForTemplate" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgForOf, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngFor][ngForOf]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.IterableDiffers + }]; + }, { + ngForOf: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngForTrackBy: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngForTemplate: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); + +function applyViewChange(view, record) { + view.context.$implicit = record.item; +} + +function getTypeName(type) { + return type['name'] || typeof type; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A structural directive that conditionally includes a template based on the value of + * an expression coerced to Boolean. + * When the expression evaluates to true, Angular renders the template + * provided in a `then` clause, and when false or null, + * Angular renders the template provided in an optional `else` clause. The default + * template for the `else` clause is blank. + * + * A [shorthand form](guide/structural-directives#asterisk) of the directive, + * `*ngIf="condition"`, is generally used, provided + * as an attribute of the anchor element for the inserted template. + * Angular expands this into a more explicit version, in which the anchor element + * is contained in an `` element. + * + * Simple form with shorthand syntax: + * + * ``` + *
    Content to render when condition is true.
    + * ``` + * + * Simple form with expanded syntax: + * + * ``` + *
    Content to render when condition is + * true.
    + * ``` + * + * Form with an "else" block: + * + * ``` + *
    Content to render when condition is true.
    + * Content to render when condition is false. + * ``` + * + * Shorthand form with "then" and "else" blocks: + * + * ``` + *
    + * Content to render when condition is true. + * Content to render when condition is false. + * ``` + * + * Form with storing the value locally: + * + * ``` + *
    {{value}}
    + * Content to render when value is null. + * ``` + * + * @usageNotes + * + * The `*ngIf` directive is most commonly used to conditionally show an inline template, + * as seen in the following example. + * The default `else` template is blank. + * + * {@example common/ngIf/ts/module.ts region='NgIfSimple'} + * + * ### Showing an alternative template using `else` + * + * To display a template when `expression` evaluates to false, use an `else` template + * binding as shown in the following example. + * The `else` binding points to an `` element labeled `#elseBlock`. + * The template can be defined anywhere in the component view, but is typically placed right after + * `ngIf` for readability. + * + * {@example common/ngIf/ts/module.ts region='NgIfElse'} + * + * ### Using an external `then` template + * + * In the previous example, the then-clause template is specified inline, as the content of the + * tag that contains the `ngIf` directive. You can also specify a template that is defined + * externally, by referencing a labeled `` element. When you do this, you can + * change which template to use at runtime, as shown in the following example. + * + * {@example common/ngIf/ts/module.ts region='NgIfThenElse'} + * + * ### Storing a conditional result in a variable + * + * You might want to show a set of properties from the same object. If you are waiting + * for asynchronous data, the object can be undefined. + * In this case, you can use `ngIf` and store the result of the condition in a local + * variable as shown in the following example. + * + * {@example common/ngIf/ts/module.ts region='NgIfAs'} + * + * This code uses only one `AsyncPipe`, so only one subscription is created. + * The conditional statement stores the result of `userStream|async` in the local variable `user`. + * You can then bind the local `user` repeatedly. + * + * The conditional displays the data only if `userStream` returns a value, + * so you don't need to use the + * safe-navigation-operator (`?.`) + * to guard against null values when accessing properties. + * You can display an alternative template while waiting for the data. + * + * ### Shorthand syntax + * + * The shorthand syntax `*ngIf` expands into two separate template specifications + * for the "then" and "else" clauses. For example, consider the following shorthand statement, + * that is meant to show a loading page while waiting for data to be loaded. + * + * ``` + *
    + * ... + *
    + * + * + *
    Loading...
    + *
    + * ``` + * + * You can see that the "else" clause references the `` + * with the `#loading` label, and the template for the "then" clause + * is provided as the content of the anchor element. + * + * However, when Angular expands the shorthand syntax, it creates + * another `` tag, with `ngIf` and `ngIfElse` directives. + * The anchor element containing the template for the "then" clause becomes + * the content of this unlabeled `` tag. + * + * ``` + * + *
    + * ... + *
    + *
    + * + * + *
    Loading...
    + *
    + * ``` + * + * The presence of the implicit template object has implications for the nesting of + * structural directives. For more on this subject, see + * [Structural Directives](guide/structural-directives#one-per-element). + * + * @ngModule CommonModule + * @publicApi + */ + + +class NgIf { + constructor(_viewContainer, templateRef) { + this._viewContainer = _viewContainer; + this._context = new NgIfContext(); + this._thenTemplateRef = null; + this._elseTemplateRef = null; + this._thenViewRef = null; + this._elseViewRef = null; + this._thenTemplateRef = templateRef; + } + /** + * The Boolean expression to evaluate as the condition for showing a template. + */ + + + set ngIf(condition) { + this._context.$implicit = this._context.ngIf = condition; + + this._updateView(); + } + /** + * A template to show if the condition expression evaluates to true. + */ + + + set ngIfThen(templateRef) { + assertTemplate('ngIfThen', templateRef); + this._thenTemplateRef = templateRef; + this._thenViewRef = null; // clear previous view if any. + + this._updateView(); + } + /** + * A template to show if the condition expression evaluates to false. + */ + + + set ngIfElse(templateRef) { + assertTemplate('ngIfElse', templateRef); + this._elseTemplateRef = templateRef; + this._elseViewRef = null; // clear previous view if any. + + this._updateView(); + } + + _updateView() { + if (this._context.$implicit) { + if (!this._thenViewRef) { + this._viewContainer.clear(); + + this._elseViewRef = null; + + if (this._thenTemplateRef) { + this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context); + } + } + } else { + if (!this._elseViewRef) { + this._viewContainer.clear(); + + this._thenViewRef = null; + + if (this._elseTemplateRef) { + this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context); + } + } + } + } + /** + * Asserts the correct type of the context for the template that `NgIf` will render. + * + * The presence of this method is a signal to the Ivy template type-check compiler that the + * `NgIf` structural directive renders its template with a specific context type. + */ + + + static ngTemplateContextGuard(dir, ctx) { + return true; + } + +} + +NgIf.ɵfac = function NgIf_Factory(t) { + return new (t || NgIf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef)); +}; + +NgIf.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgIf, + selectors: [["", "ngIf", ""]], + inputs: { + ngIf: "ngIf", + ngIfThen: "ngIfThen", + ngIfElse: "ngIfElse" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgIf, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngIf]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }]; + }, { + ngIf: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngIfThen: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngIfElse: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @publicApi + */ + + +class NgIfContext { + constructor() { + this.$implicit = null; + this.ngIf = null; + } + +} + +function assertTemplate(property, templateRef) { + const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView); + + if (!isTemplateRefOrNull) { + throw new Error(`${property} must be a TemplateRef, but received '${(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(templateRef)}'.`); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class SwitchView { + constructor(_viewContainerRef, _templateRef) { + this._viewContainerRef = _viewContainerRef; + this._templateRef = _templateRef; + this._created = false; + } + + create() { + this._created = true; + + this._viewContainerRef.createEmbeddedView(this._templateRef); + } + + destroy() { + this._created = false; + + this._viewContainerRef.clear(); + } + + enforceState(created) { + if (created && !this._created) { + this.create(); + } else if (!created && this._created) { + this.destroy(); + } + } + +} +/** + * @ngModule CommonModule + * + * @description + * The `[ngSwitch]` directive on a container specifies an expression to match against. + * The expressions to match are provided by `ngSwitchCase` directives on views within the container. + * - Every view that matches is rendered. + * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered. + * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase` + * or `ngSwitchDefault` directive are preserved at the location. + * + * @usageNotes + * Define a container element for the directive, and specify the switch expression + * to match against as an attribute: + * + * ``` + * + * ``` + * + * Within the container, `*ngSwitchCase` statements specify the match expressions + * as attributes. Include `*ngSwitchDefault` as the final case. + * + * ``` + * + * ... + * ... + * ... + * + * ``` + * + * ### Usage Examples + * + * The following example shows how to use more than one case to display the same view: + * + * ``` + * + * + * ... + * ... + * ... + * + * ... + * + * ``` + * + * The following example shows how cases can be nested: + * ``` + * + * ... + * ... + * ... + * + * + * + * + * + * ... + * + * ``` + * + * @publicApi + * @see `NgSwitchCase` + * @see `NgSwitchDefault` + * @see [Structural Directives](guide/structural-directives) + * + */ + + +class NgSwitch { + constructor() { + this._defaultUsed = false; + this._caseCount = 0; + this._lastCaseCheckIndex = 0; + this._lastCasesMatched = false; + } + + set ngSwitch(newValue) { + this._ngSwitch = newValue; + + if (this._caseCount === 0) { + this._updateDefaultCases(true); + } + } + /** @internal */ + + + _addCase() { + return this._caseCount++; + } + /** @internal */ + + + _addDefault(view) { + if (!this._defaultViews) { + this._defaultViews = []; + } + + this._defaultViews.push(view); + } + /** @internal */ + + + _matchCase(value) { + const matched = value == this._ngSwitch; + this._lastCasesMatched = this._lastCasesMatched || matched; + this._lastCaseCheckIndex++; + + if (this._lastCaseCheckIndex === this._caseCount) { + this._updateDefaultCases(!this._lastCasesMatched); + + this._lastCaseCheckIndex = 0; + this._lastCasesMatched = false; + } + + return matched; + } + + _updateDefaultCases(useDefault) { + if (this._defaultViews && useDefault !== this._defaultUsed) { + this._defaultUsed = useDefault; + + for (let i = 0; i < this._defaultViews.length; i++) { + const defaultView = this._defaultViews[i]; + defaultView.enforceState(useDefault); + } + } + } + +} + +NgSwitch.ɵfac = function NgSwitch_Factory(t) { + return new (t || NgSwitch)(); +}; + +NgSwitch.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgSwitch, + selectors: [["", "ngSwitch", ""]], + inputs: { + ngSwitch: "ngSwitch" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitch, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngSwitch]', + standalone: true + }] + }], null, { + ngSwitch: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @ngModule CommonModule + * + * @description + * Provides a switch case expression to match against an enclosing `ngSwitch` expression. + * When the expressions match, the given `NgSwitchCase` template is rendered. + * If multiple match expressions match the switch expression value, all of them are displayed. + * + * @usageNotes + * + * Within a switch container, `*ngSwitchCase` statements specify the match expressions + * as attributes. Include `*ngSwitchDefault` as the final case. + * + * ``` + * + * ... + * ... + * ... + * + * ``` + * + * Each switch-case statement contains an in-line HTML template or template reference + * that defines the subtree to be selected if the value of the match expression + * matches the value of the switch expression. + * + * Unlike JavaScript, which uses strict equality, Angular uses loose equality. + * This means that the empty string, `""` matches 0. + * + * @publicApi + * @see `NgSwitch` + * @see `NgSwitchDefault` + * + */ + + +class NgSwitchCase { + constructor(viewContainer, templateRef, ngSwitch) { + this.ngSwitch = ngSwitch; + + if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) { + throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase'); + } + + ngSwitch._addCase(); + + this._view = new SwitchView(viewContainer, templateRef); + } + /** + * Performs case matching. For internal use only. + * @nodoc + */ + + + ngDoCheck() { + this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); + } + +} + +NgSwitchCase.ɵfac = function NgSwitchCase_Factory(t) { + return new (t || NgSwitchCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 9)); +}; + +NgSwitchCase.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgSwitchCase, + selectors: [["", "ngSwitchCase", ""]], + inputs: { + ngSwitchCase: "ngSwitchCase" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchCase, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngSwitchCase]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: NgSwitch, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Host + }] + }]; + }, { + ngSwitchCase: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @ngModule CommonModule + * + * @description + * + * Creates a view that is rendered when no `NgSwitchCase` expressions + * match the `NgSwitch` expression. + * This statement should be the final case in an `NgSwitch`. + * + * @publicApi + * @see `NgSwitch` + * @see `NgSwitchCase` + * + */ + + +class NgSwitchDefault { + constructor(viewContainer, templateRef, ngSwitch) { + if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) { + throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault'); + } + + ngSwitch._addDefault(new SwitchView(viewContainer, templateRef)); + } + +} + +NgSwitchDefault.ɵfac = function NgSwitchDefault_Factory(t) { + return new (t || NgSwitchDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 9)); +}; + +NgSwitchDefault.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgSwitchDefault, + selectors: [["", "ngSwitchDefault", ""]], + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchDefault, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngSwitchDefault]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: NgSwitch, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Host + }] + }]; + }, null); +})(); + +function throwNgSwitchProviderNotFoundError(attrName, directiveName) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2000 + /* RuntimeErrorCode.PARENT_NG_SWITCH_NOT_FOUND */ + , `An element with the "${attrName}" attribute ` + `(matching the "${directiveName}" directive) must be located inside an element with the "ngSwitch" attribute ` + `(matching "NgSwitch" directive)`); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * + * @usageNotes + * ``` + * + * there is nothing + * there is one + * there are a few + * + * ``` + * + * @description + * + * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization. + * + * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees + * that match the switch expression's pluralization category. + * + * To use this directive you must provide a container element that sets the `[ngPlural]` attribute + * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their + * expression: + * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value + * matches the switch expression exactly, + * - otherwise, the view will be treated as a "category match", and will only display if exact + * value matches aren't found and the value maps to its category for the defined locale. + * + * See http://cldr.unicode.org/index/cldr-spec/plural-rules + * + * @publicApi + */ + + +class NgPlural { + constructor(_localization) { + this._localization = _localization; + this._caseViews = {}; + } + + set ngPlural(value) { + this._switchValue = value; + + this._updateView(); + } + + addCase(value, switchView) { + this._caseViews[value] = switchView; + } + + _updateView() { + this._clearViews(); + + const cases = Object.keys(this._caseViews); + const key = getPluralCategory(this._switchValue, cases, this._localization); + + this._activateView(this._caseViews[key]); + } + + _clearViews() { + if (this._activeView) this._activeView.destroy(); + } + + _activateView(view) { + if (view) { + this._activeView = view; + + this._activeView.create(); + } + } + +} + +NgPlural.ɵfac = function NgPlural_Factory(t) { + return new (t || NgPlural)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization)); +}; + +NgPlural.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgPlural, + selectors: [["", "ngPlural", ""]], + inputs: { + ngPlural: "ngPlural" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPlural, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngPlural]', + standalone: true + }] + }], function () { + return [{ + type: NgLocalization + }]; + }, { + ngPlural: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @ngModule CommonModule + * + * @description + * + * Creates a view that will be added/removed from the parent {@link NgPlural} when the + * given expression matches the plural expression according to CLDR rules. + * + * @usageNotes + * ``` + * + * ... + * ... + * + *``` + * + * See {@link NgPlural} for more details and example. + * + * @publicApi + */ + + +class NgPluralCase { + constructor(value, template, viewContainer, ngPlural) { + this.value = value; + const isANumber = !isNaN(Number(value)); + ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template)); + } + +} + +NgPluralCase.ɵfac = function NgPluralCase_Factory(t) { + return new (t || NgPluralCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('ngPluralCase'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgPlural, 1)); +}; + +NgPluralCase.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgPluralCase, + selectors: [["", "ngPluralCase", ""]], + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPluralCase, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngPluralCase]', + standalone: true + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Attribute, + args: ['ngPluralCase'] + }] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }, { + type: NgPlural, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Host + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * + * @usageNotes + * + * Set the font of the containing element to the result of an expression. + * + * ``` + * ... + * ``` + * + * Set the width of the containing element to a pixel value returned by an expression. + * + * ``` + * ... + * ``` + * + * Set a collection of style values using an expression that returns key-value pairs. + * + * ``` + * ... + * ``` + * + * @description + * + * An attribute directive that updates styles for the containing HTML element. + * Sets one or more style properties, specified as colon-separated key-value pairs. + * The key is a style name, with an optional `.` suffix + * (such as 'top.px', 'font-style.em'). + * The value is an expression to be evaluated. + * The resulting non-null value, expressed in the given unit, + * is assigned to the given style property. + * If the result of evaluation is null, the corresponding style is removed. + * + * @publicApi + */ + + +class NgStyle { + constructor(_ngEl, _differs, _renderer) { + this._ngEl = _ngEl; + this._differs = _differs; + this._renderer = _renderer; + this._ngStyle = null; + this._differ = null; + } + + set ngStyle(values) { + this._ngStyle = values; + + if (!this._differ && values) { + this._differ = this._differs.find(values).create(); + } + } + + ngDoCheck() { + if (this._differ) { + const changes = this._differ.diff(this._ngStyle); + + if (changes) { + this._applyChanges(changes); + } + } + } + + _setStyle(nameAndUnit, value) { + const [name, unit] = nameAndUnit.split('.'); + const flags = name.indexOf('-') === -1 ? undefined : _angular_core__WEBPACK_IMPORTED_MODULE_0__.RendererStyleFlags2.DashCase; + + if (value != null) { + this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags); + } else { + this._renderer.removeStyle(this._ngEl.nativeElement, name, flags); + } + } + + _applyChanges(changes) { + changes.forEachRemovedItem(record => this._setStyle(record.key, null)); + changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue)); + changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue)); + } + +} + +NgStyle.ɵfac = function NgStyle_Factory(t) { + return new (t || NgStyle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.Renderer2)); +}; + +NgStyle.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgStyle, + selectors: [["", "ngStyle", ""]], + inputs: { + ngStyle: "ngStyle" + }, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgStyle, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngStyle]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Renderer2 + }]; + }, { + ngStyle: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input, + args: ['ngStyle'] + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * + * @description + * + * Inserts an embedded view from a prepared `TemplateRef`. + * + * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`. + * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding + * by the local template `let` declarations. + * + * @usageNotes + * ``` + * + * ``` + * + * Using the key `$implicit` in the context object will set its value as default. + * + * ### Example + * + * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'} + * + * @publicApi + */ + + +class NgTemplateOutlet { + constructor(_viewContainerRef) { + this._viewContainerRef = _viewContainerRef; + this._viewRef = null; + /** + * A context object to attach to the {@link EmbeddedViewRef}. This should be an + * object, the object's keys will be available for binding by the local template `let` + * declarations. + * Using the key `$implicit` in the context object will set its value as default. + */ + + this.ngTemplateOutletContext = null; + /** + * A string defining the template reference and optionally the context object for the template. + */ + + this.ngTemplateOutlet = null; + /** Injector to be used within the embedded view. */ + + this.ngTemplateOutletInjector = null; + } + /** @nodoc */ + + + ngOnChanges(changes) { + if (changes['ngTemplateOutlet'] || changes['ngTemplateOutletInjector']) { + const viewContainerRef = this._viewContainerRef; + + if (this._viewRef) { + viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef)); + } + + if (this.ngTemplateOutlet) { + const { + ngTemplateOutlet: template, + ngTemplateOutletContext: context, + ngTemplateOutletInjector: injector + } = this; + this._viewRef = viewContainerRef.createEmbeddedView(template, context, injector ? { + injector + } : undefined); + } else { + this._viewRef = null; + } + } else if (this._viewRef && changes['ngTemplateOutletContext'] && this.ngTemplateOutletContext) { + this._viewRef.context = this.ngTemplateOutletContext; + } + } + +} + +NgTemplateOutlet.ɵfac = function NgTemplateOutlet_Factory(t) { + return new (t || NgTemplateOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef)); +}; + +NgTemplateOutlet.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgTemplateOutlet, + selectors: [["", "ngTemplateOutlet", ""]], + inputs: { + ngTemplateOutletContext: "ngTemplateOutletContext", + ngTemplateOutlet: "ngTemplateOutlet", + ngTemplateOutletInjector: "ngTemplateOutletInjector" + }, + standalone: true, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgTemplateOutlet, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + selector: '[ngTemplateOutlet]', + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewContainerRef + }]; + }, { + ngTemplateOutletContext: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngTemplateOutlet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngTemplateOutletInjector: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A collection of Angular directives that are likely to be used in each and every Angular + * application. + */ + + +const COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase]; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +function invalidPipeArgumentError(type, value) { + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2100 + /* RuntimeErrorCode.INVALID_PIPE_ARGUMENT */ + , ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(type)}'`); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +class SubscribableStrategy { + createSubscription(async, updateLatestValue) { + return async.subscribe({ + next: updateLatestValue, + error: e => { + throw e; + } + }); + } + + dispose(subscription) { + subscription.unsubscribe(); + } + +} + +class PromiseStrategy { + createSubscription(async, updateLatestValue) { + return async.then(updateLatestValue, e => { + throw e; + }); + } + + dispose(subscription) {} + +} + +const _promiseStrategy = new PromiseStrategy(); + +const _subscribableStrategy = new SubscribableStrategy(); +/** + * @ngModule CommonModule + * @description + * + * Unwraps a value from an asynchronous primitive. + * + * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has + * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for + * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid + * potential memory leaks. When the reference of the expression changes, the `async` pipe + * automatically unsubscribes from the old `Observable` or `Promise` and subscribes to the new one. + * + * @usageNotes + * + * ### Examples + * + * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the + * promise. + * + * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'} + * + * It's also possible to use `async` with Observables. The example below binds the `time` Observable + * to the view. The Observable continuously updates the view with the current time. + * + * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'} + * + * @publicApi + */ + + +class AsyncPipe { + constructor(ref) { + this._latestValue = null; + this._subscription = null; + this._obj = null; + this._strategy = null; // Assign `ref` into `this._ref` manually instead of declaring `_ref` in the constructor + // parameter list, as the type of `this._ref` includes `null` unlike the type of `ref`. + + this._ref = ref; + } + + ngOnDestroy() { + if (this._subscription) { + this._dispose(); + } // Clear the `ChangeDetectorRef` and its association with the view data, to mitigate + // potential memory leaks in Observables that could otherwise cause the view data to + // be retained. + // https://github.com/angular/angular/issues/17624 + + + this._ref = null; + } + + transform(obj) { + if (!this._obj) { + if (obj) { + this._subscribe(obj); + } + + return this._latestValue; + } + + if (obj !== this._obj) { + this._dispose(); + + return this.transform(obj); + } + + return this._latestValue; + } + + _subscribe(obj) { + this._obj = obj; + this._strategy = this._selectStrategy(obj); + this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value)); + } + + _selectStrategy(obj) { + if ((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisPromise"])(obj)) { + return _promiseStrategy; + } + + if ((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisSubscribable"])(obj)) { + return _subscribableStrategy; + } + + throw invalidPipeArgumentError(AsyncPipe, obj); + } + + _dispose() { + // Note: `dispose` is only called if a subscription has been initialized before, indicating + // that `this._strategy` is also available. + this._strategy.dispose(this._subscription); + + this._latestValue = null; + this._subscription = null; + this._obj = null; + } + + _updateLatestValue(async, value) { + if (async === this._obj) { + this._latestValue = value; // Note: `this._ref` is only cleared in `ngOnDestroy` so is known to be available when a + // value is being updated. + + this._ref.markForCheck(); + } + } + +} + +AsyncPipe.ɵfac = function AsyncPipe_Factory(t) { + return new (t || AsyncPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.ChangeDetectorRef, 16)); +}; + +AsyncPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "async", + type: AsyncPipe, + pure: false, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AsyncPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'async', + pure: false, + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.ChangeDetectorRef + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Transforms text to all lower case. + * + * @see `UpperCasePipe` + * @see `TitleCasePipe` + * @usageNotes + * + * The following example defines a view that allows the user to enter + * text, and then uses the pipe to convert the input text to all lower case. + * + * + * + * @ngModule CommonModule + * @publicApi + */ + + +class LowerCasePipe { + transform(value) { + if (value == null) return null; + + if (typeof value !== 'string') { + throw invalidPipeArgumentError(LowerCasePipe, value); + } + + return value.toLowerCase(); + } + +} + +LowerCasePipe.ɵfac = function LowerCasePipe_Factory(t) { + return new (t || LowerCasePipe)(); +}; + +LowerCasePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "lowercase", + type: LowerCasePipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LowerCasePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'lowercase', + standalone: true + }] + }], null, null); +})(); // +// Regex below matches any Unicode word and number compatible with ES5. In ES2018 the same result +// can be achieved by using /[0-9\p{L}]\S*/gu and also known as Unicode Property Escapes +// (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no +// transpilation of this functionality down to ES5 without external tool, the only solution is +// to use already transpiled form. Example can be found here - +// https://mothereff.in/regexpu#input=var+regex+%3D+%2F%5B0-9%5Cp%7BL%7D%5D%5CS*%2Fgu%3B%0A%0A&unicodePropertyEscape=1 +// + + +const unicodeWordMatch = /(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g; +/** + * Transforms text to title case. + * Capitalizes the first letter of each word and transforms the + * rest of the word to lower case. + * Words are delimited by any whitespace character, such as a space, tab, or line-feed character. + * + * @see `LowerCasePipe` + * @see `UpperCasePipe` + * + * @usageNotes + * The following example shows the result of transforming various strings into title case. + * + * + * + * @ngModule CommonModule + * @publicApi + */ + +class TitleCasePipe { + transform(value) { + if (value == null) return null; + + if (typeof value !== 'string') { + throw invalidPipeArgumentError(TitleCasePipe, value); + } + + return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase()); + } + +} + +TitleCasePipe.ɵfac = function TitleCasePipe_Factory(t) { + return new (t || TitleCasePipe)(); +}; + +TitleCasePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "titlecase", + type: TitleCasePipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TitleCasePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'titlecase', + standalone: true + }] + }], null, null); +})(); +/** + * Transforms text to all upper case. + * @see `LowerCasePipe` + * @see `TitleCasePipe` + * + * @ngModule CommonModule + * @publicApi + */ + + +class UpperCasePipe { + transform(value) { + if (value == null) return null; + + if (typeof value !== 'string') { + throw invalidPipeArgumentError(UpperCasePipe, value); + } + + return value.toUpperCase(); + } + +} + +UpperCasePipe.ɵfac = function UpperCasePipe_Factory(t) { + return new (t || UpperCasePipe)(); +}; + +UpperCasePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "uppercase", + type: UpperCasePipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](UpperCasePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'uppercase', + standalone: true + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Optionally-provided default timezone to use for all instances of `DatePipe` (such as `'+0430'`). + * If the value isn't provided, the `DatePipe` will use the end-user's local system timezone. + */ + + +const DATE_PIPE_DEFAULT_TIMEZONE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('DATE_PIPE_DEFAULT_TIMEZONE'); // clang-format off + +/** + * @ngModule CommonModule + * @description + * + * Formats a date value according to locale rules. + * + * `DatePipe` is executed only when it detects a pure change to the input value. + * A pure change is either a change to a primitive input value + * (such as `String`, `Number`, `Boolean`, or `Symbol`), + * or a changed object reference (such as `Date`, `Array`, `Function`, or `Object`). + * + * Note that mutating a `Date` object does not cause the pipe to be rendered again. + * To ensure that the pipe is executed, you must create a new `Date` object. + * + * Only the `en-US` locale data comes with Angular. To localize dates + * in another language, you must import the corresponding locale data. + * See the [I18n guide](guide/i18n-common-format-data-locale) for more information. + * + * The time zone of the formatted value can be specified either by passing it in as the second + * parameter of the pipe, or by setting the default through the `DATE_PIPE_DEFAULT_TIMEZONE` + * injection token. The value that is passed in as the second parameter takes precedence over + * the one defined using the injection token. + * + * @see `formatDate()` + * + * + * @usageNotes + * + * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to + * reformat the date on every change-detection cycle, treat the date as an immutable object + * and change the reference when the pipe needs to run again. + * + * ### Pre-defined format options + * + * | Option | Equivalent to | Examples (given in `en-US` locale) | + * |---------------|-------------------------------------|-------------------------------------------------| + * | `'short'` | `'M/d/yy, h:mm a'` | `6/15/15, 9:03 AM` | + * | `'medium'` | `'MMM d, y, h:mm:ss a'` | `Jun 15, 2015, 9:03:01 AM` | + * | `'long'` | `'MMMM d, y, h:mm:ss a z'` | `June 15, 2015 at 9:03:01 AM GMT+1` | + * | `'full'` | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` | + * | `'shortDate'` | `'M/d/yy'` | `6/15/15` | + * | `'mediumDate'`| `'MMM d, y'` | `Jun 15, 2015` | + * | `'longDate'` | `'MMMM d, y'` | `June 15, 2015` | + * | `'fullDate'` | `'EEEE, MMMM d, y'` | `Monday, June 15, 2015` | + * | `'shortTime'` | `'h:mm a'` | `9:03 AM` | + * | `'mediumTime'`| `'h:mm:ss a'` | `9:03:01 AM` | + * | `'longTime'` | `'h:mm:ss a z'` | `9:03:01 AM GMT+1` | + * | `'fullTime'` | `'h:mm:ss a zzzz'` | `9:03:01 AM GMT+01:00` | + * + * ### Custom format options + * + * You can construct a format string using symbols to specify the components + * of a date-time value, as described in the following table. + * Format details depend on the locale. + * Fields marked with (*) are only available in the extra data set for the given locale. + * + * | Field type | Format | Description | Example Value | + * |-------------------- |-------------|---------------------------------------------------------------|------------------------------------------------------------| + * | Era | G, GG & GGG | Abbreviated | AD | + * | | GGGG | Wide | Anno Domini | + * | | GGGGG | Narrow | A | + * | Year | y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 | + * | | yy | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 | + * | | yyy | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 | + * | | yyyy | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 | + * | Week-numbering year | Y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 | + * | | YY | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 | + * | | YYY | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 | + * | | YYYY | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 | + * | Month | M | Numeric: 1 digit | 9, 12 | + * | | MM | Numeric: 2 digits + zero padded | 09, 12 | + * | | MMM | Abbreviated | Sep | + * | | MMMM | Wide | September | + * | | MMMMM | Narrow | S | + * | Month standalone | L | Numeric: 1 digit | 9, 12 | + * | | LL | Numeric: 2 digits + zero padded | 09, 12 | + * | | LLL | Abbreviated | Sep | + * | | LLLL | Wide | September | + * | | LLLLL | Narrow | S | + * | Week of year | w | Numeric: minimum digits | 1... 53 | + * | | ww | Numeric: 2 digits + zero padded | 01... 53 | + * | Week of month | W | Numeric: 1 digit | 1... 5 | + * | Day of month | d | Numeric: minimum digits | 1 | + * | | dd | Numeric: 2 digits + zero padded | 01 | + * | Week day | E, EE & EEE | Abbreviated | Tue | + * | | EEEE | Wide | Tuesday | + * | | EEEEE | Narrow | T | + * | | EEEEEE | Short | Tu | + * | Week day standalone | c, cc | Numeric: 1 digit | 2 | + * | | ccc | Abbreviated | Tue | + * | | cccc | Wide | Tuesday | + * | | ccccc | Narrow | T | + * | | cccccc | Short | Tu | + * | Period | a, aa & aaa | Abbreviated | am/pm or AM/PM | + * | | aaaa | Wide (fallback to `a` when missing) | ante meridiem/post meridiem | + * | | aaaaa | Narrow | a/p | + * | Period* | B, BB & BBB | Abbreviated | mid. | + * | | BBBB | Wide | am, pm, midnight, noon, morning, afternoon, evening, night | + * | | BBBBB | Narrow | md | + * | Period standalone* | b, bb & bbb | Abbreviated | mid. | + * | | bbbb | Wide | am, pm, midnight, noon, morning, afternoon, evening, night | + * | | bbbbb | Narrow | md | + * | Hour 1-12 | h | Numeric: minimum digits | 1, 12 | + * | | hh | Numeric: 2 digits + zero padded | 01, 12 | + * | Hour 0-23 | H | Numeric: minimum digits | 0, 23 | + * | | HH | Numeric: 2 digits + zero padded | 00, 23 | + * | Minute | m | Numeric: minimum digits | 8, 59 | + * | | mm | Numeric: 2 digits + zero padded | 08, 59 | + * | Second | s | Numeric: minimum digits | 0... 59 | + * | | ss | Numeric: 2 digits + zero padded | 00... 59 | + * | Fractional seconds | S | Numeric: 1 digit | 0... 9 | + * | | SS | Numeric: 2 digits + zero padded | 00... 99 | + * | | SSS | Numeric: 3 digits + zero padded (= milliseconds) | 000... 999 | + * | Zone | z, zz & zzz | Short specific non location format (fallback to O) | GMT-8 | + * | | zzzz | Long specific non location format (fallback to OOOO) | GMT-08:00 | + * | | Z, ZZ & ZZZ | ISO8601 basic format | -0800 | + * | | ZZZZ | Long localized GMT format | GMT-8:00 | + * | | ZZZZZ | ISO8601 extended format + Z indicator for offset 0 (= XXXXX) | -08:00 | + * | | O, OO & OOO | Short localized GMT format | GMT-8 | + * | | OOOO | Long localized GMT format | GMT-08:00 | + * + * + * ### Format examples + * + * These examples transform a date into various formats, + * assuming that `dateObj` is a JavaScript `Date` object for + * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11, + * given in the local time for the `en-US` locale. + * + * ``` + * {{ dateObj | date }} // output is 'Jun 15, 2015' + * {{ dateObj | date:'medium' }} // output is 'Jun 15, 2015, 9:43:11 PM' + * {{ dateObj | date:'shortTime' }} // output is '9:43 PM' + * {{ dateObj | date:'mm:ss' }} // output is '43:11' + * ``` + * + * ### Usage example + * + * The following component uses a date pipe to display the current date in different formats. + * + * ``` + * @Component({ + * selector: 'date-pipe', + * template: `
    + *

    Today is {{today | date}}

    + *

    Or if you prefer, {{today | date:'fullDate'}}

    + *

    The time is {{today | date:'h:mm a z'}}

    + *
    ` + * }) + * // Get the current date and time as a date-time value. + * export class DatePipeComponent { + * today: number = Date.now(); + * } + * ``` + * + * @publicApi + */ +// clang-format on + +class DatePipe { + constructor(locale, defaultTimezone) { + this.locale = locale; + this.defaultTimezone = defaultTimezone; + } + + transform(value, format = 'mediumDate', timezone, locale) { + if (value == null || value === '' || value !== value) return null; + + try { + return formatDate(value, format, locale || this.locale, timezone ?? this.defaultTimezone ?? undefined); + } catch (error) { + throw invalidPipeArgumentError(DatePipe, error.message); + } + } + +} + +DatePipe.ɵfac = function DatePipe_Factory(t) { + return new (t || DatePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID, 16), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DATE_PIPE_DEFAULT_TIMEZONE, 24)); +}; + +DatePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "date", + type: DatePipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'date', + pure: true, + standalone: true + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [DATE_PIPE_DEFAULT_TIMEZONE] + }, { + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Optional + }] + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const _INTERPOLATION_REGEXP = /#/g; +/** + * @ngModule CommonModule + * @description + * + * Maps a value to a string that pluralizes the value according to locale rules. + * + * @usageNotes + * + * ### Example + * + * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'} + * + * @publicApi + */ + +class I18nPluralPipe { + constructor(_localization) { + this._localization = _localization; + } + /** + * @param value the number to be formatted + * @param pluralMap an object that mimics the ICU format, see + * https://unicode-org.github.io/icu/userguide/format_parse/messages/. + * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by + * default). + */ + + + transform(value, pluralMap, locale) { + if (value == null) return ''; + + if (typeof pluralMap !== 'object' || pluralMap === null) { + throw invalidPipeArgumentError(I18nPluralPipe, pluralMap); + } + + const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale); + return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString()); + } + +} + +I18nPluralPipe.ɵfac = function I18nPluralPipe_Factory(t) { + return new (t || I18nPluralPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization, 16)); +}; + +I18nPluralPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "i18nPlural", + type: I18nPluralPipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nPluralPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'i18nPlural', + pure: true, + standalone: true + }] + }], function () { + return [{ + type: NgLocalization + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * @description + * + * Generic selector that displays the string that matches the current value. + * + * If none of the keys of the `mapping` match the `value`, then the content + * of the `other` key is returned when present, otherwise an empty string is returned. + * + * @usageNotes + * + * ### Example + * + * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'} + * + * @publicApi + */ + + +class I18nSelectPipe { + /** + * @param value a string to be internationalized. + * @param mapping an object that indicates the text that should be displayed + * for different values of the provided `value`. + */ + transform(value, mapping) { + if (value == null) return ''; + + if (typeof mapping !== 'object' || typeof value !== 'string') { + throw invalidPipeArgumentError(I18nSelectPipe, mapping); + } + + if (mapping.hasOwnProperty(value)) { + return mapping[value]; + } + + if (mapping.hasOwnProperty('other')) { + return mapping['other']; + } + + return ''; + } + +} + +I18nSelectPipe.ɵfac = function I18nSelectPipe_Factory(t) { + return new (t || I18nSelectPipe)(); +}; + +I18nSelectPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "i18nSelect", + type: I18nSelectPipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nSelectPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'i18nSelect', + pure: true, + standalone: true + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * @description + * + * Converts a value into its JSON-format representation. Useful for debugging. + * + * @usageNotes + * + * The following component uses a JSON pipe to convert an object + * to JSON format, and displays the string in both formats for comparison. + * + * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'} + * + * @publicApi + */ + + +class JsonPipe { + /** + * @param value A value of any type to convert into a JSON-format string. + */ + transform(value) { + return JSON.stringify(value, null, 2); + } + +} + +JsonPipe.ɵfac = function JsonPipe_Factory(t) { + return new (t || JsonPipe)(); +}; + +JsonPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "json", + type: JsonPipe, + pure: false, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'json', + pure: false, + standalone: true + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +function makeKeyValuePair(key, value) { + return { + key: key, + value: value + }; +} +/** + * @ngModule CommonModule + * @description + * + * Transforms Object or Map into an array of key value pairs. + * + * The output array will be ordered by keys. + * By default the comparator will be by Unicode point value. + * You can optionally pass a compareFn if your keys are complex types. + * + * @usageNotes + * ### Examples + * + * This examples show how an Object or a Map can be iterated by ngFor with the use of this + * keyvalue pipe. + * + * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'} + * + * @publicApi + */ + + +class KeyValuePipe { + constructor(differs) { + this.differs = differs; + this.keyValues = []; + this.compareFn = defaultComparator; + } + + transform(input, compareFn = defaultComparator) { + if (!input || !(input instanceof Map) && typeof input !== 'object') { + return null; + } + + if (!this.differ) { + // make a differ for whatever type we've been passed in + this.differ = this.differs.find(input).create(); + } + + const differChanges = this.differ.diff(input); + const compareFnChanged = compareFn !== this.compareFn; + + if (differChanges) { + this.keyValues = []; + differChanges.forEachItem(r => { + this.keyValues.push(makeKeyValuePair(r.key, r.currentValue)); + }); + } + + if (differChanges || compareFnChanged) { + this.keyValues.sort(compareFn); + this.compareFn = compareFn; + } + + return this.keyValues; + } + +} + +KeyValuePipe.ɵfac = function KeyValuePipe_Factory(t) { + return new (t || KeyValuePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers, 16)); +}; + +KeyValuePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "keyvalue", + type: KeyValuePipe, + pure: false, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](KeyValuePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'keyvalue', + pure: false, + standalone: true + }] + }], function () { + return [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.KeyValueDiffers + }]; + }, null); +})(); + +function defaultComparator(keyValueA, keyValueB) { + const a = keyValueA.key; + const b = keyValueB.key; // if same exit with 0; + + if (a === b) return 0; // make sure that undefined are at the end of the sort. + + if (a === undefined) return 1; + if (b === undefined) return -1; // make sure that nulls are at the end of the sort. + + if (a === null) return 1; + if (b === null) return -1; + + if (typeof a == 'string' && typeof b == 'string') { + return a < b ? -1 : 1; + } + + if (typeof a == 'number' && typeof b == 'number') { + return a - b; + } + + if (typeof a == 'boolean' && typeof b == 'boolean') { + return a < b ? -1 : 1; + } // `a` and `b` are of different types. Compare their string values. + + + const aString = String(a); + const bString = String(b); + return aString == bString ? 0 : aString < bString ? -1 : 1; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * @description + * + * Formats a value according to digit options and locale rules. + * Locale determines group sizing and separator, + * decimal point character, and other locale-specific configurations. + * + * @see `formatNumber()` + * + * @usageNotes + * + * ### digitsInfo + * + * The value's decimal representation is specified by the `digitsInfo` + * parameter, written in the following format:
    + * + * ``` + * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits} + * ``` + * + * - `minIntegerDigits`: + * The minimum number of integer digits before the decimal point. + * Default is 1. + * + * - `minFractionDigits`: + * The minimum number of digits after the decimal point. + * Default is 0. + * + * - `maxFractionDigits`: + * The maximum number of digits after the decimal point. + * Default is 3. + * + * If the formatted value is truncated it will be rounded using the "to-nearest" method: + * + * ``` + * {{3.6 | number: '1.0-0'}} + * + * + * {{-3.6 | number:'1.0-0'}} + * + * ``` + * + * ### locale + * + * `locale` will format a value according to locale rules. + * Locale determines group sizing and separator, + * decimal point character, and other locale-specific configurations. + * + * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default. + * + * See [Setting your app locale](guide/i18n-common-locale-id). + * + * ### Example + * + * The following code shows how the pipe transforms values + * according to various format specifications, + * where the caller's default locale is `en-US`. + * + * + * + * @publicApi + */ + + +class DecimalPipe { + constructor(_locale) { + this._locale = _locale; + } + /** + * @param value The value to be formatted. + * @param digitsInfo Sets digit and decimal representation. + * [See more](#digitsinfo). + * @param locale Specifies what locale format rules to use. + * [See more](#locale). + */ + + + transform(value, digitsInfo, locale) { + if (!isValue(value)) return null; + locale = locale || this._locale; + + try { + const num = strToNumber(value); + return formatNumber(num, locale, digitsInfo); + } catch (error) { + throw invalidPipeArgumentError(DecimalPipe, error.message); + } + } + +} + +DecimalPipe.ɵfac = function DecimalPipe_Factory(t) { + return new (t || DecimalPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID, 16)); +}; + +DecimalPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "number", + type: DecimalPipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DecimalPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'number', + standalone: true + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }]; + }, null); +})(); +/** + * @ngModule CommonModule + * @description + * + * Transforms a number to a percentage + * string, formatted according to locale rules that determine group sizing and + * separator, decimal-point character, and other locale-specific + * configurations. + * + * @see `formatPercent()` + * + * @usageNotes + * The following code shows how the pipe transforms numbers + * into text strings, according to various format specifications, + * where the caller's default locale is `en-US`. + * + * + * + * @publicApi + */ + + +class PercentPipe { + constructor(_locale) { + this._locale = _locale; + } + /** + * + * @param value The number to be formatted as a percentage. + * @param digitsInfo Decimal representation options, specified by a string + * in the following format:
    + * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}. + * - `minIntegerDigits`: The minimum number of integer digits before the decimal point. + * Default is `1`. + * - `minFractionDigits`: The minimum number of digits after the decimal point. + * Default is `0`. + * - `maxFractionDigits`: The maximum number of digits after the decimal point. + * Default is `0`. + * @param locale A locale code for the locale format rules to use. + * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default. + * See [Setting your app locale](guide/i18n-common-locale-id). + */ + + + transform(value, digitsInfo, locale) { + if (!isValue(value)) return null; + locale = locale || this._locale; + + try { + const num = strToNumber(value); + return formatPercent(num, locale, digitsInfo); + } catch (error) { + throw invalidPipeArgumentError(PercentPipe, error.message); + } + } + +} + +PercentPipe.ɵfac = function PercentPipe_Factory(t) { + return new (t || PercentPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID, 16)); +}; + +PercentPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "percent", + type: PercentPipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PercentPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'percent', + standalone: true + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }]; + }, null); +})(); +/** + * @ngModule CommonModule + * @description + * + * Transforms a number to a currency string, formatted according to locale rules + * that determine group sizing and separator, decimal-point character, + * and other locale-specific configurations. + * + * {@a currency-code-deprecation} + *
    + * + * **Deprecation notice:** + * + * The default currency code is currently always `USD` but this is deprecated from v9. + * + * **In v11 the default currency code will be taken from the current locale identified by + * the `LOCALE_ID` token. See the [i18n guide](guide/i18n-common-locale-id) for + * more information.** + * + * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in + * your application `NgModule`: + * + * ```ts + * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'} + * ``` + * + *
    + * + * @see `getCurrencySymbol()` + * @see `formatCurrency()` + * + * @usageNotes + * The following code shows how the pipe transforms numbers + * into text strings, according to various format specifications, + * where the caller's default locale is `en-US`. + * + * + * + * @publicApi + */ + + +class CurrencyPipe { + constructor(_locale, _defaultCurrencyCode = 'USD') { + this._locale = _locale; + this._defaultCurrencyCode = _defaultCurrencyCode; + } + /** + * + * @param value The number to be formatted as currency. + * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, + * such as `USD` for the US dollar and `EUR` for the euro. The default currency code can be + * configured using the `DEFAULT_CURRENCY_CODE` injection token. + * @param display The format for the currency indicator. One of the following: + * - `code`: Show the code (such as `USD`). + * - `symbol`(default): Show the symbol (such as `$`). + * - `symbol-narrow`: Use the narrow symbol for locales that have two symbols for their + * currency. + * For example, the Canadian dollar CAD has the symbol `CA$` and the symbol-narrow `$`. If the + * locale has no narrow symbol, uses the standard symbol for the locale. + * - String: Use the given string value instead of a code or a symbol. + * For example, an empty string will suppress the currency & symbol. + * - Boolean (marked deprecated in v5): `true` for symbol and false for `code`. + * + * @param digitsInfo Decimal representation options, specified by a string + * in the following format:
    + * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}. + * - `minIntegerDigits`: The minimum number of integer digits before the decimal point. + * Default is `1`. + * - `minFractionDigits`: The minimum number of digits after the decimal point. + * Default is `2`. + * - `maxFractionDigits`: The maximum number of digits after the decimal point. + * Default is `2`. + * If not provided, the number will be formatted with the proper amount of digits, + * depending on what the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) specifies. + * For example, the Canadian dollar has 2 digits, whereas the Chilean peso has none. + * @param locale A locale code for the locale format rules to use. + * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default. + * See [Setting your app locale](guide/i18n-common-locale-id). + */ + + + transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) { + if (!isValue(value)) return null; + locale = locale || this._locale; + + if (typeof display === 'boolean') { + if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) { + console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".`); + } + + display = display ? 'symbol' : 'code'; + } + + let currency = currencyCode || this._defaultCurrencyCode; + + if (display !== 'code') { + if (display === 'symbol' || display === 'symbol-narrow') { + currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale); + } else { + currency = display; + } + } + + try { + const num = strToNumber(value); + return formatCurrency(num, locale, currency, currencyCode, digitsInfo); + } catch (error) { + throw invalidPipeArgumentError(CurrencyPipe, error.message); + } + } + +} + +CurrencyPipe.ɵfac = function CurrencyPipe_Factory(t) { + return new (t || CurrencyPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID, 16), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CURRENCY_CODE, 16)); +}; + +CurrencyPipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "currency", + type: CurrencyPipe, + pure: true, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CurrencyPipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'currency', + standalone: true + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.LOCALE_ID] + }] + }, { + type: undefined, + decorators: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Inject, + args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CURRENCY_CODE] + }] + }]; + }, null); +})(); + +function isValue(value) { + return !(value == null || value === '' || value !== value); +} +/** + * Transforms a string into a number (if needed). + */ + + +function strToNumber(value) { + // Convert strings to numbers + if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) { + return Number(value); + } + + if (typeof value !== 'number') { + throw new Error(`${value} is not a number`); + } + + return value; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @ngModule CommonModule + * @description + * + * Creates a new `Array` or `String` containing a subset (slice) of the elements. + * + * @usageNotes + * + * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()` + * and `String.prototype.slice()`. + * + * When operating on an `Array`, the returned `Array` is always a copy even when all + * the elements are being returned. + * + * When operating on a blank value, the pipe returns the blank value. + * + * ### List Example + * + * This `ngFor` example: + * + * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'} + * + * produces the following: + * + * ```html + *
  • b
  • + *
  • c
  • + * ``` + * + * ### String Examples + * + * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'} + * + * @publicApi + */ + + +class SlicePipe { + transform(value, start, end) { + if (value == null) return null; + + if (!this.supports(value)) { + throw invalidPipeArgumentError(SlicePipe, value); + } + + return value.slice(start, end); + } + + supports(obj) { + return typeof obj === 'string' || Array.isArray(obj); + } + +} + +SlicePipe.ɵfac = function SlicePipe_Factory(t) { + return new (t || SlicePipe)(); +}; + +SlicePipe.ɵpipe = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ + name: "slice", + type: SlicePipe, + pure: false, + standalone: true +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SlicePipe, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe, + args: [{ + name: 'slice', + pure: false, + standalone: true + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A collection of Angular pipes that are likely to be used in each and every application. + */ + + +const COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]; +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Note: This does not contain the location providers, +// as they need some platform specific implementations to work. + +/** + * Exports all the basic Angular directives and pipes, + * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on. + * Re-exported by `BrowserModule`, which is included automatically in the root + * `AppModule` when you create a new app with the CLI `new` command. + * + * @publicApi + */ + +class CommonModule {} + +CommonModule.ɵfac = function CommonModule_Factory(t) { + return new (t || CommonModule)(); +}; + +CommonModule.ɵmod = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ + type: CommonModule +}); +CommonModule.ɵinj = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CommonModule, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule, + args: [{ + imports: [COMMON_DIRECTIVES, COMMON_PIPES], + exports: [COMMON_DIRECTIVES, COMMON_PIPES] + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + +const PLATFORM_BROWSER_ID = 'browser'; +const PLATFORM_SERVER_ID = 'server'; +const PLATFORM_WORKER_APP_ID = 'browserWorkerApp'; +const PLATFORM_WORKER_UI_ID = 'browserWorkerUi'; +/** + * Returns whether a platform id represents a browser platform. + * @publicApi + */ + +function isPlatformBrowser(platformId) { + return platformId === PLATFORM_BROWSER_ID; +} +/** + * Returns whether a platform id represents a server platform. + * @publicApi + */ + + +function isPlatformServer(platformId) { + return platformId === PLATFORM_SERVER_ID; +} +/** + * Returns whether a platform id represents a web worker app platform. + * @publicApi + */ + + +function isPlatformWorkerApp(platformId) { + return platformId === PLATFORM_WORKER_APP_ID; +} +/** + * Returns whether a platform id represents a web worker UI platform. + * @publicApi + */ + + +function isPlatformWorkerUi(platformId) { + return platformId === PLATFORM_WORKER_UI_ID; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @publicApi + */ + + +const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.Version('14.3.0'); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Defines a scroll position manager. Implemented by `BrowserViewportScroller`. + * + * @publicApi + */ + +class ViewportScroller {} // De-sugared tree-shakable injection +// See #23917 + +/** @nocollapse */ + + +ViewportScroller.ɵprov = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ + token: ViewportScroller, + providedIn: 'root', + factory: () => new BrowserViewportScroller((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT), window) +}); +/** + * Manages the scroll position for a browser window. + */ + +class BrowserViewportScroller { + constructor(document, window) { + this.document = document; + this.window = window; + + this.offset = () => [0, 0]; + } + /** + * Configures the top offset used when scrolling to an anchor. + * @param offset A position in screen coordinates (a tuple with x and y values) + * or a function that returns the top offset position. + * + */ + + + setOffset(offset) { + if (Array.isArray(offset)) { + this.offset = () => offset; + } else { + this.offset = offset; + } + } + /** + * Retrieves the current scroll position. + * @returns The position in screen coordinates. + */ + + + getScrollPosition() { + if (this.supportsScrolling()) { + return [this.window.pageXOffset, this.window.pageYOffset]; + } else { + return [0, 0]; + } + } + /** + * Sets the scroll position. + * @param position The new position in screen coordinates. + */ + + + scrollToPosition(position) { + if (this.supportsScrolling()) { + this.window.scrollTo(position[0], position[1]); + } + } + /** + * Scrolls to an element and attempts to focus the element. + * + * Note that the function name here is misleading in that the target string may be an ID for a + * non-anchor element. + * + * @param target The ID of an element or name of the anchor. + * + * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document + * @see https://html.spec.whatwg.org/#scroll-to-fragid + */ + + + scrollToAnchor(target) { + if (!this.supportsScrolling()) { + return; + } + + const elSelected = findAnchorFromDocument(this.document, target); + + if (elSelected) { + this.scrollToElement(elSelected); // After scrolling to the element, the spec dictates that we follow the focus steps for the + // target. Rather than following the robust steps, simply attempt focus. + // + // @see https://html.spec.whatwg.org/#get-the-focusable-area + // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus + // @see https://html.spec.whatwg.org/#focusable-area + + elSelected.focus(); + } + } + /** + * Disables automatic scroll restoration provided by the browser. + */ + + + setHistoryScrollRestoration(scrollRestoration) { + if (this.supportScrollRestoration()) { + const history = this.window.history; + + if (history && history.scrollRestoration) { + history.scrollRestoration = scrollRestoration; + } + } + } + /** + * Scrolls to an element using the native offset and the specified offset set on this scroller. + * + * The offset can be used when we know that there is a floating header and scrolling naively to an + * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header. + */ + + + scrollToElement(el) { + const rect = el.getBoundingClientRect(); + const left = rect.left + this.window.pageXOffset; + const top = rect.top + this.window.pageYOffset; + const offset = this.offset(); + this.window.scrollTo(left - offset[0], top - offset[1]); + } + /** + * We only support scroll restoration when we can get a hold of window. + * This means that we do not support this behavior when running in a web worker. + * + * Lifting this restriction right now would require more changes in the dom adapter. + * Since webworkers aren't widely used, we will lift it once RouterScroller is + * battle-tested. + */ + + + supportScrollRestoration() { + try { + if (!this.supportsScrolling()) { + return false; + } // The `scrollRestoration` property could be on the `history` instance or its prototype. + + + const scrollRestorationDescriptor = getScrollRestorationProperty(this.window.history) || getScrollRestorationProperty(Object.getPrototypeOf(this.window.history)); // We can write to the `scrollRestoration` property if it is a writable data field or it has a + // setter function. + + return !!scrollRestorationDescriptor && !!(scrollRestorationDescriptor.writable || scrollRestorationDescriptor.set); + } catch { + return false; + } + } + + supportsScrolling() { + try { + return !!this.window && !!this.window.scrollTo && 'pageXOffset' in this.window; + } catch { + return false; + } + } + +} + +function getScrollRestorationProperty(obj) { + return Object.getOwnPropertyDescriptor(obj, 'scrollRestoration'); +} + +function findAnchorFromDocument(document, target) { + const documentResult = document.getElementById(target) || document.getElementsByName(target)[0]; + + if (documentResult) { + return documentResult; + } // `getElementById` and `getElementsByName` won't pierce through the shadow DOM so we + // have to traverse the DOM manually and do the lookup through the shadow roots. + + + if (typeof document.createTreeWalker === 'function' && document.body && (document.body.createShadowRoot || document.body.attachShadow)) { + const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT); + let currentNode = treeWalker.currentNode; + + while (currentNode) { + const shadowRoot = currentNode.shadowRoot; + + if (shadowRoot) { + // Note that `ShadowRoot` doesn't support `getElementsByName` + // so we have to fall back to `querySelector`. + const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name="${target}"]`); + + if (result) { + return result; + } + } + + currentNode = treeWalker.nextNode(); + } + } + + return null; +} +/** + * Provides an empty implementation of the viewport scroller. + */ + + +class NullViewportScroller { + /** + * Empty implementation + */ + setOffset(offset) {} + /** + * Empty implementation + */ + + + getScrollPosition() { + return [0, 0]; + } + /** + * Empty implementation + */ + + + scrollToPosition(position) {} + /** + * Empty implementation + */ + + + scrollToAnchor(anchor) {} + /** + * Empty implementation + */ + + + setHistoryScrollRestoration(scrollRestoration) {} + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A wrapper around the `XMLHttpRequest` constructor. + * + * @publicApi + */ + + +class XhrFactory {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Converts a string that represents a URL into a URL class instance. + + +function getUrl(src, win) { + // Don't use a base URL is the URL is absolute. + return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href); +} // Checks whether a URL is absolute (i.e. starts with `http://` or `https://`). + + +function isAbsoluteUrl(src) { + return /^https?:\/\//.test(src); +} // Given a URL, extract the hostname part. +// If a URL is a relative one - the URL is returned as is. + + +function extractHostname(url) { + return isAbsoluteUrl(url) ? new URL(url).hostname : url; +} + +function isValidPath(path) { + const isString = typeof path === 'string'; + + if (!isString || path.trim() === '') { + return false; + } // Calling new URL() will throw if the path string is malformed + + + try { + const url = new URL(path); + return true; + } catch { + return false; + } +} + +function normalizePath(path) { + return path.endsWith('/') ? path.slice(0, -1) : path; +} + +function normalizeSrc(src) { + return src.startsWith('/') ? src.slice(1) : src; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Noop image loader that does no transformation to the original src and just returns it as is. + * This loader is used as a default one if more specific logic is not provided in an app config. + * + * @see `ImageLoader` + * @see `NgOptimizedImage` + */ + + +const noopImageLoader = config => config.src; +/** + * Injection token that configures the image loader function. + * + * @see `ImageLoader` + * @see `NgOptimizedImage` + * @publicApi + */ + + +const IMAGE_LOADER = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('ImageLoader', { + providedIn: 'root', + factory: () => noopImageLoader +}); +/** + * Internal helper function that makes it easier to introduce custom image loaders for the + * `NgOptimizedImage` directive. It is enough to specify a URL builder function to obtain full DI + * configuration for a given loader: a DI token corresponding to the actual loader function, plus DI + * tokens managing preconnect check functionality. + * @param buildUrlFn a function returning a full URL based on loader's configuration + * @param exampleUrls example of full URLs for a given loader (used in error messages) + * @returns a set of DI providers corresponding to the configured image loader + */ + +function createImageLoader(buildUrlFn, exampleUrls) { + return function provideImageLoader(path) { + if (!isValidPath(path)) { + throwInvalidPathError(path, exampleUrls || []); + } // The trailing / is stripped (if provided) to make URL construction (concatenation) easier in + // the individual loader functions. + + + path = normalizePath(path); + + const loaderFn = config => { + if (isAbsoluteUrl(config.src)) { + // Image loader functions expect an image file name (e.g. `my-image.png`) + // or a relative path + a file name (e.g. `/a/b/c/my-image.png`) as an input, + // so the final absolute URL can be constructed. + // When an absolute URL is provided instead - the loader can not + // build a final URL, thus the error is thrown to indicate that. + throwUnexpectedAbsoluteUrlError(path, config.src); + } + + return buildUrlFn(path, { ...config, + src: normalizeSrc(config.src) + }); + }; + + const providers = [{ + provide: IMAGE_LOADER, + useValue: loaderFn + }]; + return providers; + }; +} + +function throwInvalidPathError(path, exampleUrls) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2959 + /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */ + , ngDevMode && `Image loader has detected an invalid path (\`${path}\`). ` + `To fix this, supply a path using one of the following formats: ${exampleUrls.join(' or ')}`); +} + +function throwUnexpectedAbsoluteUrlError(path, url) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2959 + /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */ + , ngDevMode && `Image loader has detected a \`\` tag with an invalid \`ngSrc\` attribute: ${url}. ` + `This image loader expects \`ngSrc\` to be a relative URL - ` + `however the provided value is an absolute URL. ` + `To fix this, provide \`ngSrc\` as a path relative to the base URL ` + `configured for this loader (\`${path}\`).`); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Function that generates an ImageLoader for [Cloudflare Image + * Resizing](https://developers.cloudflare.com/images/image-resizing/) and turns it into an Angular + * provider. Note: Cloudflare has multiple image products - this provider is specifically for + * Cloudflare Image Resizing; it will not work with Cloudflare Images or Cloudflare Polish. + * + * @param path Your domain name, e.g. https://mysite.com + * @returns Provider that provides an ImageLoader function + * + * @publicApi + */ + + +const provideCloudflareLoader = createImageLoader(createCloudflareUrl, ngDevMode ? ['https:///cdn-cgi/image//'] : undefined); + +function createCloudflareUrl(path, config) { + let params = `format=auto`; + + if (config.width) { + params += `,width=${config.width}`; + } // Cloudflare image URLs format: + // https://developers.cloudflare.com/images/image-resizing/url-format/ + + + return `${path}/cdn-cgi/image/${params}/${config.src}`; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Name and URL tester for Cloudinary. + */ + + +const cloudinaryLoaderInfo = { + name: 'Cloudinary', + testUrl: isCloudinaryUrl +}; +const CLOUDINARY_LOADER_REGEX = /https?\:\/\/[^\/]+\.cloudinary\.com\/.+/; +/** + * Tests whether a URL is from Cloudinary CDN. + */ + +function isCloudinaryUrl(url) { + return CLOUDINARY_LOADER_REGEX.test(url); +} +/** + * Function that generates an ImageLoader for Cloudinary and turns it into an Angular provider. + * + * @param path Base URL of your Cloudinary images + * This URL should match one of the following formats: + * https://res.cloudinary.com/mysite + * https://mysite.cloudinary.com + * https://subdomain.mysite.com + * @returns Set of providers to configure the Cloudinary loader. + * + * @publicApi + */ + + +const provideCloudinaryLoader = createImageLoader(createCloudinaryUrl, ngDevMode ? ['https://res.cloudinary.com/mysite', 'https://mysite.cloudinary.com', 'https://subdomain.mysite.com'] : undefined); + +function createCloudinaryUrl(path, config) { + // Cloudinary image URLformat: + // https://cloudinary.com/documentation/image_transformations#transformation_url_structure + // Example of a Cloudinary image URL: + // https://res.cloudinary.com/mysite/image/upload/c_scale,f_auto,q_auto,w_600/marketing/tile-topics-m.png + let params = `f_auto,q_auto`; // sets image format and quality to "auto" + + if (config.width) { + params += `,w_${config.width}`; + } + + return `${path}/image/upload/${params}/${config.src}`; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Name and URL tester for ImageKit. + */ + + +const imageKitLoaderInfo = { + name: 'ImageKit', + testUrl: isImageKitUrl +}; +const IMAGE_KIT_LOADER_REGEX = /https?\:\/\/[^\/]+\.imagekit\.io\/.+/; +/** + * Tests whether a URL is from ImageKit CDN. + */ + +function isImageKitUrl(url) { + return IMAGE_KIT_LOADER_REGEX.test(url); +} +/** + * Function that generates an ImageLoader for ImageKit and turns it into an Angular provider. + * + * @param path Base URL of your ImageKit images + * This URL should match one of the following formats: + * https://ik.imagekit.io/myaccount + * https://subdomain.mysite.com + * @returns Set of providers to configure the ImageKit loader. + * + * @publicApi + */ + + +const provideImageKitLoader = createImageLoader(createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined); + +function createImagekitUrl(path, config) { + // Example of an ImageKit image URL: + // https://ik.imagekit.io/demo/tr:w-300,h-300/medium_cafe_B1iTdD0C.jpg + let params = `tr:q-auto`; // applies the "auto quality" transformation + + if (config.width) { + params += `,w-${config.width}`; + } + + return `${path}/${params}/${config.src}`; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Name and URL tester for Imgix. + */ + + +const imgixLoaderInfo = { + name: 'Imgix', + testUrl: isImgixUrl +}; +const IMGIX_LOADER_REGEX = /https?\:\/\/[^\/]+\.imgix\.net\/.+/; +/** + * Tests whether a URL is from Imgix CDN. + */ + +function isImgixUrl(url) { + return IMGIX_LOADER_REGEX.test(url); +} +/** + * Function that generates an ImageLoader for Imgix and turns it into an Angular provider. + * + * @param path path to the desired Imgix origin, + * e.g. https://somepath.imgix.net or https://images.mysite.com + * @returns Set of providers to configure the Imgix loader. + * + * @publicApi + */ + + +const provideImgixLoader = createImageLoader(createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined); + +function createImgixUrl(path, config) { + const url = new URL(`${path}/${config.src}`); // This setting ensures the smallest allowable format is set. + + url.searchParams.set('auto', 'format'); + + if (config.width) { + url.searchParams.set('w', config.width.toString()); + } + + return url.href; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Assembles directive details string, useful for error messages. + + +function imgDirectiveDetails(ngSrc, includeNgSrc = true) { + const ngSrcInfo = includeNgSrc ? `(activated on an element with the \`ngSrc="${ngSrc}"\`) ` : ''; + return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`; +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Asserts that the application is in development mode. Throws an error if the application is in + * production mode. This assert can be used to make sure that there is no dev-mode code invoked in + * the prod mode accidentally. + */ + + +function assertDevMode(checkName) { + if (!ngDevMode) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2958 + /* RuntimeErrorCode.UNEXPECTED_DEV_MODE_CHECK_IN_PROD_MODE */ + , `Unexpected invocation of the ${checkName} in the prod mode. ` + `Please make sure that the prod mode is enabled for production builds.`); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Observer that detects whether an image with `NgOptimizedImage` + * is treated as a Largest Contentful Paint (LCP) element. If so, + * asserts that the image has the `priority` attribute. + * + * Note: this is a dev-mode only class and it does not appear in prod bundles, + * thus there is no `ngDevMode` use in the code. + * + * Based on https://web.dev/lcp/#measure-lcp-in-javascript. + */ + + +class LCPImageObserver { + constructor() { + // Map of full image URLs -> original `ngSrc` values. + this.images = new Map(); // Keep track of images for which `console.warn` was produced. + + this.alreadyWarned = new Set(); + this.window = null; + this.observer = null; + assertDevMode('LCP checker'); + const win = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(DOCUMENT).defaultView; + + if (typeof win !== 'undefined' && typeof PerformanceObserver !== 'undefined') { + this.window = win; + this.observer = this.initPerformanceObserver(); + } + } + /** + * Inits PerformanceObserver and subscribes to LCP events. + * Based on https://web.dev/lcp/#measure-lcp-in-javascript + */ + + + initPerformanceObserver() { + const observer = new PerformanceObserver(entryList => { + const entries = entryList.getEntries(); + if (entries.length === 0) return; // We use the latest entry produced by the `PerformanceObserver` as the best + // signal on which element is actually an LCP one. As an example, the first image to load on + // a page, by virtue of being the only thing on the page so far, is often a LCP candidate + // and gets reported by PerformanceObserver, but isn't necessarily the LCP element. + + const lcpElement = entries[entries.length - 1]; // Cast to `any` due to missing `element` on the `LargestContentfulPaint` type of entry. + // See https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint + + const imgSrc = lcpElement.element?.src ?? ''; // Exclude `data:` and `blob:` URLs, since they are not supported by the directive. + + if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return; + const imgNgSrc = this.images.get(imgSrc); + + if (imgNgSrc && !this.alreadyWarned.has(imgSrc)) { + this.alreadyWarned.add(imgSrc); + logMissingPriorityWarning(imgSrc); + } + }); + observer.observe({ + type: 'largest-contentful-paint', + buffered: true + }); + return observer; + } + + registerImage(rewrittenSrc, originalNgSrc) { + if (!this.observer) return; + this.images.set(getUrl(rewrittenSrc, this.window).href, originalNgSrc); + } + + unregisterImage(rewrittenSrc) { + if (!this.observer) return; + this.images.delete(getUrl(rewrittenSrc, this.window).href); + } + + ngOnDestroy() { + if (!this.observer) return; + this.observer.disconnect(); + this.images.clear(); + this.alreadyWarned.clear(); + } + +} + +LCPImageObserver.ɵfac = function LCPImageObserver_Factory(t) { + return new (t || LCPImageObserver)(); +}; + +LCPImageObserver.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: LCPImageObserver, + factory: LCPImageObserver.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LCPImageObserver, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return []; + }, null); +})(); + +function logMissingPriorityWarning(ngSrc) { + const directiveDetails = imgDirectiveDetails(ngSrc); + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2955 + /* RuntimeErrorCode.LCP_IMG_MISSING_PRIORITY */ + , `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element but was not marked "priority". This image should be marked ` + `"priority" in order to prioritize its loading. ` + `To fix this, add the "priority" attribute.`)); +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Set of origins that are always excluded from the preconnect checks. + + +const INTERNAL_PRECONNECT_CHECK_BLOCKLIST = new Set(['localhost', '127.0.0.1', '0.0.0.0']); +/** + * Injection token to configure which origins should be excluded + * from the preconnect checks. It can either be a single string or an array of strings + * to represent a group of origins, for example: + * + * ```typescript + * {provide: PRECONNECT_CHECK_BLOCKLIST, useValue: 'https://your-domain.com'} + * ``` + * + * or: + * + * ```typescript + * {provide: PRECONNECT_CHECK_BLOCKLIST, + * useValue: ['https://your-domain-1.com', 'https://your-domain-2.com']} + * ``` + * + * @publicApi + */ + +const PRECONNECT_CHECK_BLOCKLIST = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('PRECONNECT_CHECK_BLOCKLIST'); +/** + * Contains the logic to detect whether an image, marked with the "priority" attribute + * has a corresponding `` tag in the `document.head`. + * + * Note: this is a dev-mode only class, which should not appear in prod bundles, + * thus there is no `ngDevMode` use in the code. + */ + +class PreconnectLinkChecker { + constructor() { + this.document = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(DOCUMENT); + /** + * Set of tags found on this page. + * The `null` value indicates that there was no DOM query operation performed. + */ + + this.preconnectLinks = null; + /* + * Keep track of all already seen origin URLs to avoid repeating the same check. + */ + + this.alreadySeen = new Set(); + this.window = null; + this.blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST); + assertDevMode('preconnect link checker'); + const win = this.document.defaultView; + + if (typeof win !== 'undefined') { + this.window = win; + } + + const blocklist = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(PRECONNECT_CHECK_BLOCKLIST, { + optional: true + }); + + if (blocklist) { + this.populateBlocklist(blocklist); + } + } + + populateBlocklist(origins) { + if (Array.isArray(origins)) { + deepForEach(origins, origin => { + this.blocklist.add(extractHostname(origin)); + }); + } else { + this.blocklist.add(extractHostname(origins)); + } + } + /** + * Checks that a preconnect resource hint exists in the head for the + * given src. + * + * @param rewrittenSrc src formatted with loader + * @param originalNgSrc ngSrc value + */ + + + assertPreconnect(rewrittenSrc, originalNgSrc) { + if (!this.window) return; + const imgUrl = getUrl(rewrittenSrc, this.window); + if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return; // Register this origin as seen, so we don't check it again later. + + this.alreadySeen.add(imgUrl.origin); + + if (!this.preconnectLinks) { + // Note: we query for preconnect links only *once* and cache the results + // for the entire lifespan of an application, since it's unlikely that the + // list would change frequently. This allows to make sure there are no + // performance implications of making extra DOM lookups for each image. + this.preconnectLinks = this.queryPreconnectLinks(); + } + + if (!this.preconnectLinks.has(imgUrl.origin)) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2956 + /* RuntimeErrorCode.PRIORITY_IMG_MISSING_PRECONNECT_TAG */ + , `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this ` + `image. Preconnecting to the origin(s) that serve priority images ensures that these ` + `images are delivered as soon as possible. To fix this, please add the following ` + `element into the of the document:\n` + ` `)); + } + } + + queryPreconnectLinks() { + const preconnectUrls = new Set(); + const selector = 'link[rel=preconnect]'; + const links = Array.from(this.document.querySelectorAll(selector)); + + for (let link of links) { + const url = getUrl(link.href, this.window); + preconnectUrls.add(url.origin); + } + + return preconnectUrls; + } + + ngOnDestroy() { + this.preconnectLinks?.clear(); + this.alreadySeen.clear(); + } + +} + +PreconnectLinkChecker.ɵfac = function PreconnectLinkChecker_Factory(t) { + return new (t || PreconnectLinkChecker)(); +}; + +PreconnectLinkChecker.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: PreconnectLinkChecker, + factory: PreconnectLinkChecker.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PreconnectLinkChecker, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return []; + }, null); +})(); +/** + * Invokes a callback for each element in the array. Also invokes a callback + * recursively for each nested array. + */ + + +function deepForEach(input, fn) { + for (let value of input) { + Array.isArray(value) ? deepForEach(value, fn) : fn(value); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * In SSR scenarios, a preload `` element is generated for priority images. + * Having a large number of preload tags may negatively affect the performance, + * so we warn developers (by throwing an error) if the number of preloaded images + * is above a certain threshold. This const specifies this threshold. + */ + + +const DEFAULT_PRELOADED_IMAGES_LIMIT = 5; +/** + * Helps to keep track of priority images that already have a corresponding + * preload tag (to avoid generating multiple preload tags with the same URL). + * + * This Set tracks the original src passed into the `ngSrc` input not the src after it has been + * run through the specified `IMAGE_LOADER`. + */ + +const PRELOADED_IMAGES = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('NG_OPTIMIZED_PRELOADED_IMAGES', { + providedIn: 'root', + factory: () => new Set() +}); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @description Contains the logic needed to track and add preload link tags to the `` tag. It + * will also track what images have already had preload link tags added so as to not duplicate link + * tags. + * + * In dev mode this service will validate that the number of preloaded images does not exceed the + * configured default preloaded images limit: {@link DEFAULT_PRELOADED_IMAGES_LIMIT}. + */ + +class PreloadLinkCreator { + constructor() { + this.preloadedImages = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(PRELOADED_IMAGES); + this.document = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(DOCUMENT); + } + /** + * @description Add a preload `` to the `` of the `index.html` that is served from the + * server while using Angular Universal and SSR to kick off image loads for high priority images. + * + * The `sizes` (passed in from the user) and `srcset` (parsed and formatted from `ngSrcset`) + * properties used to set the corresponding attributes, `imagesizes` and `imagesrcset` + * respectively, on the preload `` tag so that the correctly sized image is preloaded from + * the CDN. + * + * {@link https://web.dev/preload-responsive-images/#imagesrcset-and-imagesizes} + * + * @param renderer The `Renderer2` passed in from the directive + * @param src The original src of the image that is set on the `ngSrc` input. + * @param srcset The parsed and formatted srcset created from the `ngSrcset` input + * @param sizes The value of the `sizes` attribute passed in to the `` tag + */ + + + createPreloadLinkTag(renderer, src, srcset, sizes) { + if (ngDevMode) { + if (this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2961 + /* RuntimeErrorCode.TOO_MANY_PRELOADED_IMAGES */ + , ngDevMode && `The \`NgOptimizedImage\` directive has detected that more than ` + `${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. ` + `This might negatively affect an overall performance of the page. ` + `To fix this, remove the "priority" attribute from images with less priority.`); + } + } + + if (this.preloadedImages.has(src)) { + return; + } + + this.preloadedImages.add(src); + const preload = renderer.createElement('link'); + renderer.setAttribute(preload, 'as', 'image'); + renderer.setAttribute(preload, 'href', src); + renderer.setAttribute(preload, 'rel', 'preload'); + renderer.setAttribute(preload, 'fetchpriority', 'high'); + + if (sizes) { + renderer.setAttribute(preload, 'imageSizes', sizes); + } + + if (srcset) { + renderer.setAttribute(preload, 'imageSrcset', srcset); + } + + renderer.appendChild(this.document.head, preload); + } + +} + +PreloadLinkCreator.ɵfac = function PreloadLinkCreator_Factory(t) { + return new (t || PreloadLinkCreator)(); +}; + +PreloadLinkCreator.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: PreloadLinkCreator, + factory: PreloadLinkCreator.ɵfac, + providedIn: 'root' +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PreloadLinkCreator, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * When a Base64-encoded image is passed as an input to the `NgOptimizedImage` directive, + * an error is thrown. The image content (as a string) might be very long, thus making + * it hard to read an error message if the entire string is included. This const defines + * the number of characters that should be included into the error message. The rest + * of the content is truncated. + */ + + +const BASE64_IMG_MAX_LENGTH_IN_ERROR = 50; +/** + * RegExpr to determine whether a src in a srcset is using width descriptors. + * Should match something like: "100w, 200w". + */ + +const VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\s*\d+w\s*(,|$)){1,})$/; +/** + * RegExpr to determine whether a src in a srcset is using density descriptors. + * Should match something like: "1x, 2x, 50x". Also supports decimals like "1.5x, 1.50x". + */ + +const VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\s*\d+(\.\d+)?x\s*(,|$)){1,})$/; +/** + * Srcset values with a density descriptor higher than this value will actively + * throw an error. Such densities are not permitted as they cause image sizes + * to be unreasonably large and slow down LCP. + */ + +const ABSOLUTE_SRCSET_DENSITY_CAP = 3; +/** + * Used only in error message text to communicate best practices, as we will + * only throw based on the slightly more conservative ABSOLUTE_SRCSET_DENSITY_CAP. + */ + +const RECOMMENDED_SRCSET_DENSITY_CAP = 2; +/** + * Used in generating automatic density-based srcsets + */ + +const DENSITY_SRCSET_MULTIPLIERS = [1, 2]; +/** + * Used to determine which breakpoints to use on full-width images + */ + +const VIEWPORT_BREAKPOINT_CUTOFF = 640; +/** + * Used to determine whether two aspect ratios are similar in value. + */ + +const ASPECT_RATIO_TOLERANCE = .1; +/** + * Used to determine whether the image has been requested at an overly + * large size compared to the actual rendered image size (after taking + * into account a typical device pixel ratio). In pixels. + */ + +const OVERSIZED_IMAGE_TOLERANCE = 1000; +/** + * Used to limit automatic srcset generation of very large sources for + * fixed-size images. In pixels. + */ + +const FIXED_SRCSET_WIDTH_LIMIT = 1920; +const FIXED_SRCSET_HEIGHT_LIMIT = 1080; +/** Info about built-in loaders we can test for. */ + +const BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo]; +const defaultConfig = { + breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840] +}; +/** + * Injection token that configures the image optimized image functionality. + * + * @see `NgOptimizedImage` + * @publicApi + * @developerPreview + */ + +const IMAGE_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.InjectionToken('ImageConfig', { + providedIn: 'root', + factory: () => defaultConfig +}); +/** + * Directive that improves image loading performance by enforcing best practices. + * + * `NgOptimizedImage` ensures that the loading of the Largest Contentful Paint (LCP) image is + * prioritized by: + * - Automatically setting the `fetchpriority` attribute on the `` tag + * - Lazy loading non-priority images by default + * - Asserting that there is a corresponding preconnect link tag in the document head + * + * In addition, the directive: + * - Generates appropriate asset URLs if a corresponding `ImageLoader` function is provided + * - Automatically generates a srcset + * - Requires that `width` and `height` are set + * - Warns if `width` or `height` have been set incorrectly + * - Warns if the image will be visually distorted when rendered + * + * @usageNotes + * The `NgOptimizedImage` directive is marked as [standalone](guide/standalone-components) and can + * be imported directly. + * + * Follow the steps below to enable and use the directive: + * 1. Import it into the necessary NgModule or a standalone Component. + * 2. Optionally provide an `ImageLoader` if you use an image hosting service. + * 3. Update the necessary `` tags in templates and replace `src` attributes with `ngSrc`. + * Using a `ngSrc` allows the directive to control when the `src` gets set, which triggers an image + * download. + * + * Step 1: import the `NgOptimizedImage` directive. + * + * ```typescript + * import { NgOptimizedImage } from '@angular/common'; + * + * // Include it into the necessary NgModule + * @NgModule({ + * imports: [NgOptimizedImage], + * }) + * class AppModule {} + * + * // ... or a standalone Component + * @Component({ + * standalone: true + * imports: [NgOptimizedImage], + * }) + * class MyStandaloneComponent {} + * ``` + * + * Step 2: configure a loader. + * + * To use the **default loader**: no additional code changes are necessary. The URL returned by the + * generic loader will always match the value of "src". In other words, this loader applies no + * transformations to the resource URL and the value of the `ngSrc` attribute will be used as is. + * + * To use an existing loader for a **third-party image service**: add the provider factory for your + * chosen service to the `providers` array. In the example below, the Imgix loader is used: + * + * ```typescript + * import {provideImgixLoader} from '@angular/common'; + * + * // Call the function and add the result to the `providers` array: + * providers: [ + * provideImgixLoader("https://my.base.url/"), + * ], + * ``` + * + * The `NgOptimizedImage` directive provides the following functions: + * - `provideCloudflareLoader` + * - `provideCloudinaryLoader` + * - `provideImageKitLoader` + * - `provideImgixLoader` + * + * If you use a different image provider, you can create a custom loader function as described + * below. + * + * To use a **custom loader**: provide your loader function as a value for the `IMAGE_LOADER` DI + * token. + * + * ```typescript + * import {IMAGE_LOADER, ImageLoaderConfig} from '@angular/common'; + * + * // Configure the loader using the `IMAGE_LOADER` token. + * providers: [ + * { + * provide: IMAGE_LOADER, + * useValue: (config: ImageLoaderConfig) => { + * return `https://example.com/${config.src}-${config.width}.jpg}`; + * } + * }, + * ], + * ``` + * + * Step 3: update `` tags in templates to use `ngSrc` instead of `src`. + * + * ``` + * + * ``` + * + * @publicApi + */ + +class NgOptimizedImage { + constructor() { + this.imageLoader = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(IMAGE_LOADER); + this.config = processConfig((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(IMAGE_CONFIG)); + this.renderer = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(_angular_core__WEBPACK_IMPORTED_MODULE_0__.Renderer2); + this.imgElement = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(_angular_core__WEBPACK_IMPORTED_MODULE_0__.ElementRef).nativeElement; + this.injector = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(_angular_core__WEBPACK_IMPORTED_MODULE_0__.Injector); + this.isServer = isPlatformServer((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(_angular_core__WEBPACK_IMPORTED_MODULE_0__.PLATFORM_ID)); + this.preloadLinkChecker = (0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.inject)(PreloadLinkCreator); // a LCP image observer - should be injected only in the dev mode + + this.lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null; + /** + * Calculate the rewritten `src` once and store it. + * This is needed to avoid repetitive calculations and make sure the directive cleanup in the + * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other + * instance that might be already destroyed). + */ + + this._renderedSrc = null; + this._priority = false; + this._disableOptimizedSrcset = false; + this._fill = false; + } + /** + * For responsive images: the intrinsic width of the image in pixels. + * For fixed size images: the desired rendered width of the image in pixels. + */ + + + set width(value) { + ngDevMode && assertGreaterThanZero(this, value, 'width'); + this._width = inputToInteger(value); + } + + get width() { + return this._width; + } + /** + * For responsive images: the intrinsic height of the image in pixels. + * For fixed size images: the desired rendered height of the image in pixels.* The intrinsic + * height of the image in pixels. + */ + + + set height(value) { + ngDevMode && assertGreaterThanZero(this, value, 'height'); + this._height = inputToInteger(value); + } + + get height() { + return this._height; + } + /** + * Indicates whether this image should have a high priority. + */ + + + set priority(value) { + this._priority = inputToBoolean(value); + } + + get priority() { + return this._priority; + } + /** + * Disables automatic srcset generation for this image. + */ + + + set disableOptimizedSrcset(value) { + this._disableOptimizedSrcset = inputToBoolean(value); + } + + get disableOptimizedSrcset() { + return this._disableOptimizedSrcset; + } + /** + * Sets the image to "fill mode", which eliminates the height/width requirement and adds + * styles such that the image fills its containing element. + * + * @developerPreview + */ + + + set fill(value) { + this._fill = inputToBoolean(value); + } + + get fill() { + return this._fill; + } + /** @nodoc */ + + + ngOnInit() { + if (ngDevMode) { + assertNonEmptyInput(this, 'ngSrc', this.ngSrc); + assertValidNgSrcset(this, this.ngSrcset); + assertNoConflictingSrc(this); + + if (this.ngSrcset) { + assertNoConflictingSrcset(this); + } + + assertNotBase64Image(this); + assertNotBlobUrl(this); + + if (this.fill) { + assertEmptyWidthAndHeight(this); + assertNonZeroRenderedHeight(this, this.imgElement, this.renderer); + } else { + assertNonEmptyWidthAndHeight(this); // Only check for distorted images when not in fill mode, where + // images may be intentionally stretched, cropped or letterboxed. + + assertNoImageDistortion(this, this.imgElement, this.renderer); + } + + assertValidLoadingInput(this); + + if (!this.ngSrcset) { + assertNoComplexSizes(this); + } + + assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader); + assertNoNgSrcsetWithoutLoader(this, this.imageLoader); + assertNoLoaderParamsWithoutLoader(this, this.imageLoader); + + if (this.priority) { + const checker = this.injector.get(PreconnectLinkChecker); + checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc); + } else { + // Monitor whether an image is an LCP element only in case + // the `priority` attribute is missing. Otherwise, an image + // has the necessary settings and no extra checks are required. + if (this.lcpObserver !== null) { + const ngZone = this.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgZone); + ngZone.runOutsideAngular(() => { + this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc); + }); + } + } + } + + this.setHostAttributes(); + } + + setHostAttributes() { + // Must set width/height explicitly in case they are bound (in which case they will + // only be reflected and not found by the browser) + if (this.fill) { + if (!this.sizes) { + this.sizes = '100vw'; + } + } else { + this.setHostAttribute('width', this.width.toString()); + this.setHostAttribute('height', this.height.toString()); + } + + this.setHostAttribute('loading', this.getLoadingBehavior()); + this.setHostAttribute('fetchpriority', this.getFetchPriority()); // The `data-ng-img` attribute flags an image as using the directive, to allow + // for analysis of the directive's performance. + + this.setHostAttribute('ng-img', 'true'); // The `src` and `srcset` attributes should be set last since other attributes + // could affect the image's loading behavior. + + const rewrittenSrc = this.getRewrittenSrc(); + this.setHostAttribute('src', rewrittenSrc); + let rewrittenSrcset = undefined; + + if (this.sizes) { + this.setHostAttribute('sizes', this.sizes); + } + + if (this.ngSrcset) { + rewrittenSrcset = this.getRewrittenSrcset(); + } else if (this.shouldGenerateAutomaticSrcset()) { + rewrittenSrcset = this.getAutomaticSrcset(); + } + + if (rewrittenSrcset) { + this.setHostAttribute('srcset', rewrittenSrcset); + } + + if (this.isServer && this.priority) { + this.preloadLinkChecker.createPreloadLinkTag(this.renderer, rewrittenSrc, rewrittenSrcset, this.sizes); + } + } + /** @nodoc */ + + + ngOnChanges(changes) { + if (ngDevMode) { + assertNoPostInitInputChange(this, changes, ['ngSrc', 'ngSrcset', 'width', 'height', 'priority', 'fill', 'loading', 'sizes', 'loaderParams', 'disableOptimizedSrcset']); + } + } + + callImageLoader(configWithoutCustomParams) { + let augmentedConfig = configWithoutCustomParams; + + if (this.loaderParams) { + augmentedConfig.loaderParams = this.loaderParams; + } + + return this.imageLoader(augmentedConfig); + } + + getLoadingBehavior() { + if (!this.priority && this.loading !== undefined) { + return this.loading; + } + + return this.priority ? 'eager' : 'lazy'; + } + + getFetchPriority() { + return this.priority ? 'high' : 'auto'; + } + + getRewrittenSrc() { + // ImageLoaderConfig supports setting a width property. However, we're not setting width here + // because if the developer uses rendered width instead of intrinsic width in the HTML width + // attribute, the image requested may be too small for 2x+ screens. + if (!this._renderedSrc) { + const imgConfig = { + src: this.ngSrc + }; // Cache calculated image src to reuse it later in the code. + + this._renderedSrc = this.callImageLoader(imgConfig); + } + + return this._renderedSrc; + } + + getRewrittenSrcset() { + const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset); + const finalSrcs = this.ngSrcset.split(',').filter(src => src !== '').map(srcStr => { + srcStr = srcStr.trim(); + const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width; + return `${this.callImageLoader({ + src: this.ngSrc, + width + })} ${srcStr}`; + }); + return finalSrcs.join(', '); + } + + getAutomaticSrcset() { + if (this.sizes) { + return this.getResponsiveSrcset(); + } else { + return this.getFixedSrcset(); + } + } + + getResponsiveSrcset() { + const { + breakpoints + } = this.config; + let filteredBreakpoints = breakpoints; + + if (this.sizes?.trim() === '100vw') { + // Since this is a full-screen-width image, our srcset only needs to include + // breakpoints with full viewport widths. + filteredBreakpoints = breakpoints.filter(bp => bp >= VIEWPORT_BREAKPOINT_CUTOFF); + } + + const finalSrcs = filteredBreakpoints.map(bp => `${this.callImageLoader({ + src: this.ngSrc, + width: bp + })} ${bp}w`); + return finalSrcs.join(', '); + } + + getFixedSrcset() { + const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map(multiplier => { + const imgUrl = this.callImageLoader({ + src: this.ngSrc, + width: this.width * multiplier + }); + return `${imgUrl} ${multiplier}x`; + }); + return finalSrcs.join(', '); + } + + shouldGenerateAutomaticSrcset() { + return !this._disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !(this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT); + } + /** @nodoc */ + + + ngOnDestroy() { + if (ngDevMode) { + if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) { + this.lcpObserver.unregisterImage(this._renderedSrc); + } + } + } + + setHostAttribute(name, value) { + this.renderer.setAttribute(this.imgElement, name, value); + } + +} + +NgOptimizedImage.ɵfac = function NgOptimizedImage_Factory(t) { + return new (t || NgOptimizedImage)(); +}; + +NgOptimizedImage.ɵdir = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ + type: NgOptimizedImage, + selectors: [["img", "ngSrc", ""]], + hostVars: 8, + hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) { + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("position", ctx.fill ? "absolute" : null)("width", ctx.fill ? "100%" : null)("height", ctx.fill ? "100%" : null)("inset", ctx.fill ? "0px" : null); + } + }, + inputs: { + ngSrc: "ngSrc", + ngSrcset: "ngSrcset", + sizes: "sizes", + width: "width", + height: "height", + loading: "loading", + priority: "priority", + loaderParams: "loaderParams", + disableOptimizedSrcset: "disableOptimizedSrcset", + fill: "fill", + src: "src", + srcset: "srcset" + }, + standalone: true, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgOptimizedImage, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Directive, + args: [{ + standalone: true, + selector: 'img[ngSrc]', + host: { + '[style.position]': 'fill ? "absolute" : null', + '[style.width]': 'fill ? "100%" : null', + '[style.height]': 'fill ? "100%" : null', + '[style.inset]': 'fill ? "0px" : null' + } + }] + }], null, { + ngSrc: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + ngSrcset: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + sizes: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + width: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + height: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + loading: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + priority: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + loaderParams: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + disableOptimizedSrcset: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + fill: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + src: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }], + srcset: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_0__.Input + }] + }); +})(); +/***** Helpers *****/ + +/** + * Convert input value to integer. + */ + + +function inputToInteger(value) { + return typeof value === 'string' ? parseInt(value, 10) : value; +} +/** + * Convert input value to boolean. + */ + + +function inputToBoolean(value) { + return value != null && `${value}` !== 'false'; +} +/** + * Sorts provided config breakpoints and uses defaults. + */ + + +function processConfig(config) { + let sortedBreakpoints = {}; + + if (config.breakpoints) { + sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b); + } + + return Object.assign({}, defaultConfig, config, sortedBreakpoints); +} +/***** Assert functions *****/ + +/** + * Verifies that there is no `src` set on a host element. + */ + + +function assertNoConflictingSrc(dir) { + if (dir.src) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2950 + /* RuntimeErrorCode.UNEXPECTED_SRC_ATTR */ + , `${imgDirectiveDetails(dir.ngSrc)} both \`src\` and \`ngSrc\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \`src\` itself based on the value of \`ngSrc\`. ` + `To fix this, please remove the \`src\` attribute.`); + } +} +/** + * Verifies that there is no `srcset` set on a host element. + */ + + +function assertNoConflictingSrcset(dir) { + if (dir.srcset) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2951 + /* RuntimeErrorCode.UNEXPECTED_SRCSET_ATTR */ + , `${imgDirectiveDetails(dir.ngSrc)} both \`srcset\` and \`ngSrcset\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \`srcset\` itself based on the value of ` + `\`ngSrcset\`. To fix this, please remove the \`srcset\` attribute.`); + } +} +/** + * Verifies that the `ngSrc` is not a Base64-encoded image. + */ + + +function assertNotBase64Image(dir) { + let ngSrc = dir.ngSrc.trim(); + + if (ngSrc.startsWith('data:')) { + if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) { + ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...'; + } + + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc, false)} \`ngSrc\` is a Base64-encoded string ` + `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \`ngSrc\` and using a standard \`src\` attribute instead.`); + } +} +/** + * Verifies that the 'sizes' only includes responsive values. + */ + + +function assertNoComplexSizes(dir) { + let sizes = dir.sizes; + + if (sizes?.match(/((\)|,)\s|^)\d+px/)) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc, false)} \`sizes\` was set to a string including ` + `pixel values. For automatic \`srcset\` generation, \`sizes\` must only include responsive ` + `values, such as \`sizes="50vw"\` or \`sizes="(min-width: 768px) 50vw, 100vw"\`. ` + `To fix this, modify the \`sizes\` attribute, or provide your own \`ngSrcset\` value directly.`); + } +} +/** + * Verifies that the `ngSrc` is not a Blob URL. + */ + + +function assertNotBlobUrl(dir) { + const ngSrc = dir.ngSrc.trim(); + + if (ngSrc.startsWith('blob:')) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} \`ngSrc\` was set to a blob URL (${ngSrc}). ` + `Blob URLs are not supported by the NgOptimizedImage directive. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \`ngSrc\` and using a regular \`src\` attribute instead.`); + } +} +/** + * Verifies that the input is set to a non-empty string. + */ + + +function assertNonEmptyInput(dir, name, value) { + const isString = typeof value === 'string'; + const isEmptyString = isString && value.trim() === ''; + + if (!isString || isEmptyString) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} \`${name}\` has an invalid value ` + `(\`${value}\`). To fix this, change the value to a non-empty string.`); + } +} +/** + * Verifies that the `ngSrcset` is in a valid format, e.g. "100w, 200w" or "1x, 2x". + */ + + +function assertValidNgSrcset(dir, value) { + if (value == null) return; + assertNonEmptyInput(dir, 'ngSrcset', value); + const stringVal = value; + const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal); + const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal); + + if (isValidDensityDescriptor) { + assertUnderDensityCap(dir, stringVal); + } + + const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor; + + if (!isValidSrcset) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} \`ngSrcset\` has an invalid value (\`${value}\`). ` + `To fix this, supply \`ngSrcset\` using a comma-separated list of one or more width ` + `descriptors (e.g. "100w, 200w") or density descriptors (e.g. "1x, 2x").`); + } +} + +function assertUnderDensityCap(dir, value) { + const underDensityCap = value.split(',').every(num => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP); + + if (!underDensityCap) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` contains an unsupported image density:` + `\`${value}\`. NgOptimizedImage generally recommends a max image density of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` + `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` + `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`); + } +} +/** + * Creates a `RuntimeError` instance to represent a situation when an input is set after + * the directive has initialized. + */ + + +function postInitInputChangeError(dir, inputName) { + let reason; + + if (inputName === 'width' || inputName === 'height') { + reason = `Changing \`${inputName}\` may result in different attribute value ` + `applied to the underlying image element and cause layout shifts on a page.`; + } else { + reason = `Changing the \`${inputName}\` would have no effect on the underlying ` + `image element, because the resource loading has already occurred.`; + } + + return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2953 + /* RuntimeErrorCode.UNEXPECTED_INPUT_CHANGE */ + , `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` was updated after initialization. ` + `The NgOptimizedImage directive will not react to this input change. ${reason} ` + `To fix this, either switch \`${inputName}\` to a static value ` + `or wrap the image element in an *ngIf that is gated on the necessary value.`); +} +/** + * Verify that none of the listed inputs has changed. + */ + + +function assertNoPostInitInputChange(dir, changes, inputs) { + inputs.forEach(input => { + const isUpdated = changes.hasOwnProperty(input); + + if (isUpdated && !changes[input].isFirstChange()) { + if (input === 'ngSrc') { + // When the `ngSrc` input changes, we detect that only in the + // `ngOnChanges` hook, thus the `ngSrc` is already set. We use + // `ngSrc` in the error message, so we use a previous value, but + // not the updated one in it. + dir = { + ngSrc: changes[input].previousValue + }; + } + + throw postInitInputChangeError(dir, input); + } + }); +} +/** + * Verifies that a specified input is a number greater than 0. + */ + + +function assertGreaterThanZero(dir, inputValue, inputName) { + const validNumber = typeof inputValue === 'number' && inputValue > 0; + const validString = typeof inputValue === 'string' && /^\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0; + + if (!validNumber && !validString) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` has an invalid value ` + `(\`${inputValue}\`). To fix this, provide \`${inputName}\` ` + `as a number greater than 0.`); + } +} +/** + * Verifies that the rendered image is not visually distorted. Effectively this is checking: + * - Whether the "width" and "height" attributes reflect the actual dimensions of the image. + * - Whether image styling is "correct" (see below for a longer explanation). + */ + + +function assertNoImageDistortion(dir, img, renderer) { + const removeListenerFn = renderer.listen(img, 'load', () => { + removeListenerFn(); + const renderedWidth = img.clientWidth; + const renderedHeight = img.clientHeight; + const renderedAspectRatio = renderedWidth / renderedHeight; + const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0; + const intrinsicWidth = img.naturalWidth; + const intrinsicHeight = img.naturalHeight; + const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight; + const suppliedWidth = dir.width; + const suppliedHeight = dir.height; + const suppliedAspectRatio = suppliedWidth / suppliedHeight; // Tolerance is used to account for the impact of subpixel rendering. + // Due to subpixel rendering, the rendered, intrinsic, and supplied + // aspect ratios of a correctly configured image may not exactly match. + // For example, a `width=4030 height=3020` image might have a rendered + // size of "1062w, 796.48h". (An aspect ratio of 1.334... vs. 1.333...) + + const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE; + const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE; + + if (inaccurateDimensions) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` + `the aspect ratio indicated by the width and height attributes. ` + `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${intrinsicAspectRatio}). \nSupplied width and height attributes: ` + `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${suppliedAspectRatio}). ` + `\nTo fix this, update the width and height attributes.`)); + } else if (stylingDistortion) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` + `does not match the image's intrinsic aspect ratio. ` + `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${intrinsicAspectRatio}). \nRendered image size: ` + `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` + `${renderedAspectRatio}). \nThis issue can occur if "width" and "height" ` + `attributes are added to an image without updating the corresponding ` + `image styling. To fix this, adjust image styling. In most cases, ` + `adding "height: auto" or "width: auto" to the image styling will fix ` + `this issue.`)); + } else if (!dir.ngSrcset && nonZeroRenderedDimensions) { + // If `ngSrcset` hasn't been set, sanity check the intrinsic size. + const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth; + const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight; + const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE; + const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE; + + if (oversizedWidth || oversizedHeight) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2960 + /* RuntimeErrorCode.OVERSIZED_IMAGE */ + , `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` + `larger than necessary. ` + `\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` + `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` + `\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` + `\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` + `or consider using the "ngSrcset" and "sizes" attributes.`)); + } + } + }); +} +/** + * Verifies that a specified input is set. + */ + + +function assertNonEmptyWidthAndHeight(dir) { + let missingAttributes = []; + if (dir.width === undefined) missingAttributes.push('width'); + if (dir.height === undefined) missingAttributes.push('height'); + + if (missingAttributes.length > 0) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2954 + /* RuntimeErrorCode.REQUIRED_INPUT_MISSING */ + , `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` + `are missing: ${missingAttributes.map(attr => `"${attr}"`).join(', ')}. ` + `Including "width" and "height" attributes will prevent image-related layout shifts. ` + `To fix this, include "width" and "height" attributes on the image tag or turn on ` + `"fill" mode with the \`fill\` attribute.`); + } +} +/** + * Verifies that width and height are not set. Used in fill mode, where those attributes don't make + * sense. + */ + + +function assertEmptyWidthAndHeight(dir) { + if (dir.width || dir.height) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the attributes \`height\` and/or \`width\` are present ` + `along with the \`fill\` attribute. Because \`fill\` mode causes an image to fill its containing ` + `element, the size attributes have no effect and should be removed.`); + } +} +/** + * Verifies that the rendered image has a nonzero height. If the image is in fill mode, provides + * guidance that this can be caused by the containing element's CSS position property. + */ + + +function assertNonZeroRenderedHeight(dir, img, renderer) { + const removeListenerFn = renderer.listen(img, 'load', () => { + removeListenerFn(); + const renderedHeight = img.clientHeight; + + if (dir.fill && renderedHeight === 0) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` + `This is likely because the containing element does not have the CSS 'position' ` + `property set to one of the following: "relative", "fixed", or "absolute". ` + `To fix this problem, make sure the container element has the CSS 'position' ` + `property defined and the height of the element is not zero.`)); + } + }); +} +/** + * Verifies that the `loading` attribute is set to a valid input & + * is not used on priority images. + */ + + +function assertValidLoadingInput(dir) { + if (dir.loading && dir.priority) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` + `was used on an image that was marked "priority". ` + `Setting \`loading\` on priority images is not allowed ` + `because these images will always be eagerly loaded. ` + `To fix this, remove the “loading” attribute from the priority image.`); + } + + const validInputs = ['auto', 'eager', 'lazy']; + + if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) { + throw new _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵRuntimeError"](2952 + /* RuntimeErrorCode.INVALID_INPUT */ + , `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` + `has an invalid value (\`${dir.loading}\`). ` + `To fix this, provide a valid value ("lazy", "eager", or "auto").`); + } +} +/** + * Warns if NOT using a loader (falling back to the generic loader) and + * the image appears to be hosted on one of the image CDNs for which + * we do have a built-in image loader. Suggests switching to the + * built-in loader. + * + * @param ngSrc Value of the ngSrc attribute + * @param imageLoader ImageLoader provided + */ + + +function assertNotMissingBuiltInLoader(ngSrc, imageLoader) { + if (imageLoader === noopImageLoader) { + let builtInLoaderName = ''; + + for (const loader of BUILT_IN_LOADERS) { + if (loader.testUrl(ngSrc)) { + builtInLoaderName = loader.name; + break; + } + } + + if (builtInLoaderName) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2962 + /* RuntimeErrorCode.MISSING_BUILTIN_LOADER */ + , `NgOptimizedImage: It looks like your images may be hosted on the ` + `${builtInLoaderName} CDN, but your app is not using Angular's ` + `built-in loader for that CDN. We recommend switching to use ` + `the built-in by calling \`provide${builtInLoaderName}Loader()\` ` + `in your \`providers\` and passing it your instance's base URL. ` + `If you don't want to use the built-in loader, define a custom ` + `loader function using IMAGE_LOADER to silence this warning.`)); + } + } +} +/** + * Warns if ngSrcset is present and no loader is configured (i.e. the default one is being used). + */ + + +function assertNoNgSrcsetWithoutLoader(dir, imageLoader) { + if (dir.ngSrcset && imageLoader === noopImageLoader) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2963 + /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */ + , `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for all configured sizes. ` + `To fix this, provide a loader or remove the \`ngSrcset\` attribute from the image.`)); + } +} +/** + * Warns if loaderParams is present and no loader is configured (i.e. the default one is being + * used). + */ + + +function assertNoLoaderParamsWithoutLoader(dir, imageLoader) { + if (dir.loaderParams && imageLoader === noopImageLoader) { + console.warn((0,_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵformatRuntimeError"])(2963 + /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */ + , `${imgDirectiveDetails(dir.ngSrc)} the \`loaderParams\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which means that the loaderParams data will not be consumed and will not affect the URL. ` + `To fix this, provide a custom loader or remove the \`loaderParams\` attribute from the image.`)); + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// This file only reexports content of the `src` folder. Keep it that way. + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Generated bundle index. Do not edit. + */ + + + + +/***/ }), + +/***/ 8987: +/*!********************************************************!*\ + !*** ./node_modules/@angular/common/fesm2020/http.mjs ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "HTTP_INTERCEPTORS": () => (/* binding */ HTTP_INTERCEPTORS), +/* harmony export */ "HttpBackend": () => (/* binding */ HttpBackend), +/* harmony export */ "HttpClient": () => (/* binding */ HttpClient), +/* harmony export */ "HttpClientJsonpModule": () => (/* binding */ HttpClientJsonpModule), +/* harmony export */ "HttpClientModule": () => (/* binding */ HttpClientModule), +/* harmony export */ "HttpClientXsrfModule": () => (/* binding */ HttpClientXsrfModule), +/* harmony export */ "HttpContext": () => (/* binding */ HttpContext), +/* harmony export */ "HttpContextToken": () => (/* binding */ HttpContextToken), +/* harmony export */ "HttpErrorResponse": () => (/* binding */ HttpErrorResponse), +/* harmony export */ "HttpEventType": () => (/* binding */ HttpEventType), +/* harmony export */ "HttpHandler": () => (/* binding */ HttpHandler), +/* harmony export */ "HttpHeaderResponse": () => (/* binding */ HttpHeaderResponse), +/* harmony export */ "HttpHeaders": () => (/* binding */ HttpHeaders), +/* harmony export */ "HttpParams": () => (/* binding */ HttpParams), +/* harmony export */ "HttpRequest": () => (/* binding */ HttpRequest), +/* harmony export */ "HttpResponse": () => (/* binding */ HttpResponse), +/* harmony export */ "HttpResponseBase": () => (/* binding */ HttpResponseBase), +/* harmony export */ "HttpUrlEncodingCodec": () => (/* binding */ HttpUrlEncodingCodec), +/* harmony export */ "HttpXhrBackend": () => (/* binding */ HttpXhrBackend), +/* harmony export */ "HttpXsrfTokenExtractor": () => (/* binding */ HttpXsrfTokenExtractor), +/* harmony export */ "JsonpClientBackend": () => (/* binding */ JsonpClientBackend), +/* harmony export */ "JsonpInterceptor": () => (/* binding */ JsonpInterceptor), +/* harmony export */ "XhrFactory": () => (/* binding */ XhrFactory), +/* harmony export */ "ɵHttpInterceptingHandler": () => (/* binding */ HttpInterceptingHandler) +/* harmony export */ }); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/common */ 4666); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 2560); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ 745); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 833); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ 3853); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ 116); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ 635); +/** + * @license Angular v14.3.0 + * (c) 2010-2022 Google LLC. https://angular.io/ + * License: MIT + */ + + + + + + +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a + * `HttpResponse`. + * + * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the + * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the + * `HttpBackend`. + * + * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain. + * + * @publicApi + */ + +class HttpHandler {} +/** + * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend. + * + * Interceptors sit between the `HttpClient` interface and the `HttpBackend`. + * + * When injected, `HttpBackend` dispatches requests directly to the backend, without going + * through the interceptor chain. + * + * @publicApi + */ + + +class HttpBackend {} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Represents the header configuration options for an HTTP request. + * Instances are immutable. Modifying methods return a cloned + * instance with the change. The original object is never changed. + * + * @publicApi + */ + + +class HttpHeaders { + /** Constructs a new HTTP header object with the given values.*/ + constructor(headers) { + /** + * Internal map of lowercased header names to the normalized + * form of the name (the form seen first). + */ + this.normalizedNames = new Map(); + /** + * Queued updates to be materialized the next initialization. + */ + + this.lazyUpdate = null; + + if (!headers) { + this.headers = new Map(); + } else if (typeof headers === 'string') { + this.lazyInit = () => { + this.headers = new Map(); + headers.split('\n').forEach(line => { + const index = line.indexOf(':'); + + if (index > 0) { + const name = line.slice(0, index); + const key = name.toLowerCase(); + const value = line.slice(index + 1).trim(); + this.maybeSetNormalizedName(name, key); + + if (this.headers.has(key)) { + this.headers.get(key).push(value); + } else { + this.headers.set(key, [value]); + } + } + }); + }; + } else { + this.lazyInit = () => { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + assertValidHeaders(headers); + } + + this.headers = new Map(); + Object.keys(headers).forEach(name => { + let values = headers[name]; + const key = name.toLowerCase(); + + if (typeof values === 'string') { + values = [values]; + } + + if (values.length > 0) { + this.headers.set(key, values); + this.maybeSetNormalizedName(name, key); + } + }); + }; + } + } + /** + * Checks for existence of a given header. + * + * @param name The header name to check for existence. + * + * @returns True if the header exists, false otherwise. + */ + + + has(name) { + this.init(); + return this.headers.has(name.toLowerCase()); + } + /** + * Retrieves the first value of a given header. + * + * @param name The header name. + * + * @returns The value string if the header exists, null otherwise + */ + + + get(name) { + this.init(); + const values = this.headers.get(name.toLowerCase()); + return values && values.length > 0 ? values[0] : null; + } + /** + * Retrieves the names of the headers. + * + * @returns A list of header names. + */ + + + keys() { + this.init(); + return Array.from(this.normalizedNames.values()); + } + /** + * Retrieves a list of values for a given header. + * + * @param name The header name from which to retrieve values. + * + * @returns A string of values if the header exists, null otherwise. + */ + + + getAll(name) { + this.init(); + return this.headers.get(name.toLowerCase()) || null; + } + /** + * Appends a new value to the existing set of values for a header + * and returns them in a clone of the original instance. + * + * @param name The header name for which to append the values. + * @param value The value to append. + * + * @returns A clone of the HTTP headers object with the value appended to the given header. + */ + + + append(name, value) { + return this.clone({ + name, + value, + op: 'a' + }); + } + /** + * Sets or modifies a value for a given header in a clone of the original instance. + * If the header already exists, its value is replaced with the given value + * in the returned object. + * + * @param name The header name. + * @param value The value or values to set or override for the given header. + * + * @returns A clone of the HTTP headers object with the newly set header value. + */ + + + set(name, value) { + return this.clone({ + name, + value, + op: 's' + }); + } + /** + * Deletes values for a given header in a clone of the original instance. + * + * @param name The header name. + * @param value The value or values to delete for the given header. + * + * @returns A clone of the HTTP headers object with the given value deleted. + */ + + + delete(name, value) { + return this.clone({ + name, + value, + op: 'd' + }); + } + + maybeSetNormalizedName(name, lcName) { + if (!this.normalizedNames.has(lcName)) { + this.normalizedNames.set(lcName, name); + } + } + + init() { + if (!!this.lazyInit) { + if (this.lazyInit instanceof HttpHeaders) { + this.copyFrom(this.lazyInit); + } else { + this.lazyInit(); + } + + this.lazyInit = null; + + if (!!this.lazyUpdate) { + this.lazyUpdate.forEach(update => this.applyUpdate(update)); + this.lazyUpdate = null; + } + } + } + + copyFrom(other) { + other.init(); + Array.from(other.headers.keys()).forEach(key => { + this.headers.set(key, other.headers.get(key)); + this.normalizedNames.set(key, other.normalizedNames.get(key)); + }); + } + + clone(update) { + const clone = new HttpHeaders(); + clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this; + clone.lazyUpdate = (this.lazyUpdate || []).concat([update]); + return clone; + } + + applyUpdate(update) { + const key = update.name.toLowerCase(); + + switch (update.op) { + case 'a': + case 's': + let value = update.value; + + if (typeof value === 'string') { + value = [value]; + } + + if (value.length === 0) { + return; + } + + this.maybeSetNormalizedName(update.name, key); + const base = (update.op === 'a' ? this.headers.get(key) : undefined) || []; + base.push(...value); + this.headers.set(key, base); + break; + + case 'd': + const toDelete = update.value; + + if (!toDelete) { + this.headers.delete(key); + this.normalizedNames.delete(key); + } else { + let existing = this.headers.get(key); + + if (!existing) { + return; + } + + existing = existing.filter(value => toDelete.indexOf(value) === -1); + + if (existing.length === 0) { + this.headers.delete(key); + this.normalizedNames.delete(key); + } else { + this.headers.set(key, existing); + } + } + + break; + } + } + /** + * @internal + */ + + + forEach(fn) { + this.init(); + Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key))); + } + +} +/** + * Verifies that the headers object has the right shape: the values + * must be either strings or arrays. Throws an error if an invalid + * header value is present. + */ + + +function assertValidHeaders(headers) { + for (const [key, value] of Object.entries(headers)) { + if (typeof value !== 'string' && !Array.isArray(value)) { + throw new Error(`Unexpected value of the \`${key}\` header provided. ` + `Expecting either a string or an array, but got: \`${value}\`.`); + } + } +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Provides encoding and decoding of URL parameter and query-string values. + * + * Serializes and parses URL parameter keys and values to encode and decode them. + * If you pass URL query parameters without encoding, + * the query parameters can be misinterpreted at the receiving end. + * + * + * @publicApi + */ + + +class HttpUrlEncodingCodec { + /** + * Encodes a key name for a URL parameter or query-string. + * @param key The key name. + * @returns The encoded key name. + */ + encodeKey(key) { + return standardEncoding(key); + } + /** + * Encodes the value of a URL parameter or query-string. + * @param value The value. + * @returns The encoded value. + */ + + + encodeValue(value) { + return standardEncoding(value); + } + /** + * Decodes an encoded URL parameter or query-string key. + * @param key The encoded key name. + * @returns The decoded key name. + */ + + + decodeKey(key) { + return decodeURIComponent(key); + } + /** + * Decodes an encoded URL parameter or query-string value. + * @param value The encoded value. + * @returns The decoded value. + */ + + + decodeValue(value) { + return decodeURIComponent(value); + } + +} + +function paramParser(rawParams, codec) { + const map = new Map(); + + if (rawParams.length > 0) { + // The `window.location.search` can be used while creating an instance of the `HttpParams` class + // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search` + // may start with the `?` char, so we strip it if it's present. + const params = rawParams.replace(/^\?/, '').split('&'); + params.forEach(param => { + const eqIdx = param.indexOf('='); + const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))]; + const list = map.get(key) || []; + list.push(val); + map.set(key, list); + }); + } + + return map; +} +/** + * Encode input string with standard encodeURIComponent and then un-encode specific characters. + */ + + +const STANDARD_ENCODING_REGEX = /%(\d[a-f0-9])/gi; +const STANDARD_ENCODING_REPLACEMENTS = { + '40': '@', + '3A': ':', + '24': '$', + '2C': ',', + '3B': ';', + '3D': '=', + '3F': '?', + '2F': '/' +}; + +function standardEncoding(v) { + return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s); +} + +function valueToString(value) { + return `${value}`; +} +/** + * An HTTP request/response body that represents serialized parameters, + * per the MIME type `application/x-www-form-urlencoded`. + * + * This class is immutable; all mutation operations return a new instance. + * + * @publicApi + */ + + +class HttpParams { + constructor(options = {}) { + this.updates = null; + this.cloneFrom = null; + this.encoder = options.encoder || new HttpUrlEncodingCodec(); + + if (!!options.fromString) { + if (!!options.fromObject) { + throw new Error(`Cannot specify both fromString and fromObject.`); + } + + this.map = paramParser(options.fromString, this.encoder); + } else if (!!options.fromObject) { + this.map = new Map(); + Object.keys(options.fromObject).forEach(key => { + const value = options.fromObject[key]; // convert the values to strings + + const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)]; + this.map.set(key, values); + }); + } else { + this.map = null; + } + } + /** + * Reports whether the body includes one or more values for a given parameter. + * @param param The parameter name. + * @returns True if the parameter has one or more values, + * false if it has no value or is not present. + */ + + + has(param) { + this.init(); + return this.map.has(param); + } + /** + * Retrieves the first value for a parameter. + * @param param The parameter name. + * @returns The first value of the given parameter, + * or `null` if the parameter is not present. + */ + + + get(param) { + this.init(); + const res = this.map.get(param); + return !!res ? res[0] : null; + } + /** + * Retrieves all values for a parameter. + * @param param The parameter name. + * @returns All values in a string array, + * or `null` if the parameter not present. + */ + + + getAll(param) { + this.init(); + return this.map.get(param) || null; + } + /** + * Retrieves all the parameters for this body. + * @returns The parameter names in a string array. + */ + + + keys() { + this.init(); + return Array.from(this.map.keys()); + } + /** + * Appends a new value to existing values for a parameter. + * @param param The parameter name. + * @param value The new value to add. + * @return A new body with the appended value. + */ + + + append(param, value) { + return this.clone({ + param, + value, + op: 'a' + }); + } + /** + * Constructs a new body with appended values for the given parameter name. + * @param params parameters and values + * @return A new body with the new value. + */ + + + appendAll(params) { + const updates = []; + Object.keys(params).forEach(param => { + const value = params[param]; + + if (Array.isArray(value)) { + value.forEach(_value => { + updates.push({ + param, + value: _value, + op: 'a' + }); + }); + } else { + updates.push({ + param, + value: value, + op: 'a' + }); + } + }); + return this.clone(updates); + } + /** + * Replaces the value for a parameter. + * @param param The parameter name. + * @param value The new value. + * @return A new body with the new value. + */ + + + set(param, value) { + return this.clone({ + param, + value, + op: 's' + }); + } + /** + * Removes a given value or all values from a parameter. + * @param param The parameter name. + * @param value The value to remove, if provided. + * @return A new body with the given value removed, or with all values + * removed if no value is specified. + */ + + + delete(param, value) { + return this.clone({ + param, + value, + op: 'd' + }); + } + /** + * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are + * separated by `&`s. + */ + + + toString() { + this.init(); + return this.keys().map(key => { + const eKey = this.encoder.encodeKey(key); // `a: ['1']` produces `'a=1'` + // `b: []` produces `''` + // `c: ['1', '2']` produces `'c=1&c=2'` + + return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&'); + }) // filter out empty values because `b: []` produces `''` + // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't + .filter(param => param !== '').join('&'); + } + + clone(update) { + const clone = new HttpParams({ + encoder: this.encoder + }); + clone.cloneFrom = this.cloneFrom || this; + clone.updates = (this.updates || []).concat(update); + return clone; + } + + init() { + if (this.map === null) { + this.map = new Map(); + } + + if (this.cloneFrom !== null) { + this.cloneFrom.init(); + this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key))); + this.updates.forEach(update => { + switch (update.op) { + case 'a': + case 's': + const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || []; + base.push(valueToString(update.value)); + this.map.set(update.param, base); + break; + + case 'd': + if (update.value !== undefined) { + let base = this.map.get(update.param) || []; + const idx = base.indexOf(valueToString(update.value)); + + if (idx !== -1) { + base.splice(idx, 1); + } + + if (base.length > 0) { + this.map.set(update.param, base); + } else { + this.map.delete(update.param); + } + } else { + this.map.delete(update.param); + break; + } + + } + }); + this.cloneFrom = this.updates = null; + } + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * A token used to manipulate and access values stored in `HttpContext`. + * + * @publicApi + */ + + +class HttpContextToken { + constructor(defaultValue) { + this.defaultValue = defaultValue; + } + +} +/** + * Http context stores arbitrary user defined values and ensures type safety without + * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash. + * + * This context is mutable and is shared between cloned requests unless explicitly specified. + * + * @usageNotes + * + * ### Usage Example + * + * ```typescript + * // inside cache.interceptors.ts + * export const IS_CACHE_ENABLED = new HttpContextToken(() => false); + * + * export class CacheInterceptor implements HttpInterceptor { + * + * intercept(req: HttpRequest, delegate: HttpHandler): Observable> { + * if (req.context.get(IS_CACHE_ENABLED) === true) { + * return ...; + * } + * return delegate.handle(req); + * } + * } + * + * // inside a service + * + * this.httpClient.get('/api/weather', { + * context: new HttpContext().set(IS_CACHE_ENABLED, true) + * }).subscribe(...); + * ``` + * + * @publicApi + */ + + +class HttpContext { + constructor() { + this.map = new Map(); + } + /** + * Store a value in the context. If a value is already present it will be overwritten. + * + * @param token The reference to an instance of `HttpContextToken`. + * @param value The value to store. + * + * @returns A reference to itself for easy chaining. + */ + + + set(token, value) { + this.map.set(token, value); + return this; + } + /** + * Retrieve the value associated with the given token. + * + * @param token The reference to an instance of `HttpContextToken`. + * + * @returns The stored value or default if one is defined. + */ + + + get(token) { + if (!this.map.has(token)) { + this.map.set(token, token.defaultValue()); + } + + return this.map.get(token); + } + /** + * Delete the value associated with the given token. + * + * @param token The reference to an instance of `HttpContextToken`. + * + * @returns A reference to itself for easy chaining. + */ + + + delete(token) { + this.map.delete(token); + return this; + } + /** + * Checks for existence of a given token. + * + * @param token The reference to an instance of `HttpContextToken`. + * + * @returns True if the token exists, false otherwise. + */ + + + has(token) { + return this.map.has(token); + } + /** + * @returns a list of tokens currently stored in the context. + */ + + + keys() { + return this.map.keys(); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Determine whether the given HTTP method may include a body. + */ + + +function mightHaveBody(method) { + switch (method) { + case 'DELETE': + case 'GET': + case 'HEAD': + case 'OPTIONS': + case 'JSONP': + return false; + + default: + return true; + } +} +/** + * Safely assert whether the given value is an ArrayBuffer. + * + * In some execution environments ArrayBuffer is not defined. + */ + + +function isArrayBuffer(value) { + return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer; +} +/** + * Safely assert whether the given value is a Blob. + * + * In some execution environments Blob is not defined. + */ + + +function isBlob(value) { + return typeof Blob !== 'undefined' && value instanceof Blob; +} +/** + * Safely assert whether the given value is a FormData instance. + * + * In some execution environments FormData is not defined. + */ + + +function isFormData(value) { + return typeof FormData !== 'undefined' && value instanceof FormData; +} +/** + * Safely assert whether the given value is a URLSearchParams instance. + * + * In some execution environments URLSearchParams is not defined. + */ + + +function isUrlSearchParams(value) { + return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams; +} +/** + * An outgoing HTTP request with an optional typed body. + * + * `HttpRequest` represents an outgoing request, including URL, method, + * headers, body, and other request configuration options. Instances should be + * assumed to be immutable. To modify a `HttpRequest`, the `clone` + * method should be used. + * + * @publicApi + */ + + +class HttpRequest { + constructor(method, url, third, fourth) { + this.url = url; + /** + * The request body, or `null` if one isn't set. + * + * Bodies are not enforced to be immutable, as they can include a reference to any + * user-defined data type. However, interceptors should take care to preserve + * idempotence by treating them as such. + */ + + this.body = null; + /** + * Whether this request should be made in a way that exposes progress events. + * + * Progress events are expensive (change detection runs on each event) and so + * they should only be requested if the consumer intends to monitor them. + */ + + this.reportProgress = false; + /** + * Whether this request should be sent with outgoing credentials (cookies). + */ + + this.withCredentials = false; + /** + * The expected response type of the server. + * + * This is used to parse the response appropriately before returning it to + * the requestee. + */ + + this.responseType = 'json'; + this.method = method.toUpperCase(); // Next, need to figure out which argument holds the HttpRequestInit + // options, if any. + + let options; // Check whether a body argument is expected. The only valid way to omit + // the body argument is to use a known no-body method like GET. + + if (mightHaveBody(this.method) || !!fourth) { + // Body is the third argument, options are the fourth. + this.body = third !== undefined ? third : null; + options = fourth; + } else { + // No body required, options are the third argument. The body stays null. + options = third; + } // If options have been passed, interpret them. + + + if (options) { + // Normalize reportProgress and withCredentials. + this.reportProgress = !!options.reportProgress; + this.withCredentials = !!options.withCredentials; // Override default response type of 'json' if one is provided. + + if (!!options.responseType) { + this.responseType = options.responseType; + } // Override headers if they're provided. + + + if (!!options.headers) { + this.headers = options.headers; + } + + if (!!options.context) { + this.context = options.context; + } + + if (!!options.params) { + this.params = options.params; + } + } // If no headers have been passed in, construct a new HttpHeaders instance. + + + if (!this.headers) { + this.headers = new HttpHeaders(); + } // If no context have been passed in, construct a new HttpContext instance. + + + if (!this.context) { + this.context = new HttpContext(); + } // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance. + + + if (!this.params) { + this.params = new HttpParams(); + this.urlWithParams = url; + } else { + // Encode the parameters to a string in preparation for inclusion in the URL. + const params = this.params.toString(); + + if (params.length === 0) { + // No parameters, the visible URL is just the URL given at creation time. + this.urlWithParams = url; + } else { + // Does the URL already have query parameters? Look for '?'. + const qIdx = url.indexOf('?'); // There are 3 cases to handle: + // 1) No existing parameters -> append '?' followed by params. + // 2) '?' exists and is followed by existing query string -> + // append '&' followed by params. + // 3) '?' exists at the end of the url -> append params directly. + // This basically amounts to determining the character, if any, with + // which to join the URL and parameters. + + const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : ''; + this.urlWithParams = url + sep + params; + } + } + } + /** + * Transform the free-form body into a serialized format suitable for + * transmission to the server. + */ + + + serializeBody() { + // If no body is present, no need to serialize it. + if (this.body === null) { + return null; + } // Check whether the body is already in a serialized form. If so, + // it can just be returned directly. + + + if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body) || typeof this.body === 'string') { + return this.body; + } // Check whether the body is an instance of HttpUrlEncodedParams. + + + if (this.body instanceof HttpParams) { + return this.body.toString(); + } // Check whether the body is an object or array, and serialize with JSON if so. + + + if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) { + return JSON.stringify(this.body); + } // Fall back on toString() for everything else. + + + return this.body.toString(); + } + /** + * Examine the body and attempt to infer an appropriate MIME type + * for it. + * + * If no such type can be inferred, this method will return `null`. + */ + + + detectContentTypeHeader() { + // An empty body has no content type. + if (this.body === null) { + return null; + } // FormData bodies rely on the browser's content type assignment. + + + if (isFormData(this.body)) { + return null; + } // Blobs usually have their own content type. If it doesn't, then + // no type can be inferred. + + + if (isBlob(this.body)) { + return this.body.type || null; + } // Array buffers have unknown contents and thus no type can be inferred. + + + if (isArrayBuffer(this.body)) { + return null; + } // Technically, strings could be a form of JSON data, but it's safe enough + // to assume they're plain strings. + + + if (typeof this.body === 'string') { + return 'text/plain'; + } // `HttpUrlEncodedParams` has its own content-type. + + + if (this.body instanceof HttpParams) { + return 'application/x-www-form-urlencoded;charset=UTF-8'; + } // Arrays, objects, boolean and numbers will be encoded as JSON. + + + if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') { + return 'application/json'; + } // No type could be inferred. + + + return null; + } + + clone(update = {}) { + // For method, url, and responseType, take the current value unless + // it is overridden in the update hash. + const method = update.method || this.method; + const url = update.url || this.url; + const responseType = update.responseType || this.responseType; // The body is somewhat special - a `null` value in update.body means + // whatever current body is present is being overridden with an empty + // body, whereas an `undefined` value in update.body implies no + // override. + + const body = update.body !== undefined ? update.body : this.body; // Carefully handle the boolean options to differentiate between + // `false` and `undefined` in the update args. + + const withCredentials = update.withCredentials !== undefined ? update.withCredentials : this.withCredentials; + const reportProgress = update.reportProgress !== undefined ? update.reportProgress : this.reportProgress; // Headers and params may be appended to if `setHeaders` or + // `setParams` are used. + + let headers = update.headers || this.headers; + let params = update.params || this.params; // Pass on context if needed + + const context = update.context ?? this.context; // Check whether the caller has asked to add headers. + + if (update.setHeaders !== undefined) { + // Set every requested header. + headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers); + } // Check whether the caller has asked to set params. + + + if (update.setParams) { + // Set every requested param. + params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params); + } // Finally, construct the new HttpRequest using the pieces from above. + + + return new HttpRequest(method, url, body, { + params, + headers, + context, + reportProgress, + responseType, + withCredentials + }); + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Type enumeration for the different kinds of `HttpEvent`. + * + * @publicApi + */ + + +var HttpEventType; + +(function (HttpEventType) { + /** + * The request was sent out over the wire. + */ + HttpEventType[HttpEventType["Sent"] = 0] = "Sent"; + /** + * An upload progress event was received. + */ + + HttpEventType[HttpEventType["UploadProgress"] = 1] = "UploadProgress"; + /** + * The response status code and headers were received. + */ + + HttpEventType[HttpEventType["ResponseHeader"] = 2] = "ResponseHeader"; + /** + * A download progress event was received. + */ + + HttpEventType[HttpEventType["DownloadProgress"] = 3] = "DownloadProgress"; + /** + * The full response including the body was received. + */ + + HttpEventType[HttpEventType["Response"] = 4] = "Response"; + /** + * A custom event from an interceptor or a backend. + */ + + HttpEventType[HttpEventType["User"] = 5] = "User"; +})(HttpEventType || (HttpEventType = {})); +/** + * Base class for both `HttpResponse` and `HttpHeaderResponse`. + * + * @publicApi + */ + + +class HttpResponseBase { + /** + * Super-constructor for all responses. + * + * The single parameter accepted is an initialization hash. Any properties + * of the response passed there will override the default values. + */ + constructor(init, defaultStatus = 200 + /* HttpStatusCode.Ok */ + , defaultStatusText = 'OK') { + // If the hash has values passed, use them to initialize the response. + // Otherwise use the default values. + this.headers = init.headers || new HttpHeaders(); + this.status = init.status !== undefined ? init.status : defaultStatus; + this.statusText = init.statusText || defaultStatusText; + this.url = init.url || null; // Cache the ok value to avoid defining a getter. + + this.ok = this.status >= 200 && this.status < 300; + } + +} +/** + * A partial HTTP response which only includes the status and header data, + * but no response body. + * + * `HttpHeaderResponse` is a `HttpEvent` available on the response + * event stream, only when progress events are requested. + * + * @publicApi + */ + + +class HttpHeaderResponse extends HttpResponseBase { + /** + * Create a new `HttpHeaderResponse` with the given parameters. + */ + constructor(init = {}) { + super(init); + this.type = HttpEventType.ResponseHeader; + } + /** + * Copy this `HttpHeaderResponse`, overriding its contents with the + * given parameter hash. + */ + + + clone(update = {}) { + // Perform a straightforward initialization of the new HttpHeaderResponse, + // overriding the current parameters with new ones if given. + return new HttpHeaderResponse({ + headers: update.headers || this.headers, + status: update.status !== undefined ? update.status : this.status, + statusText: update.statusText || this.statusText, + url: update.url || this.url || undefined + }); + } + +} +/** + * A full HTTP response, including a typed response body (which may be `null` + * if one was not returned). + * + * `HttpResponse` is a `HttpEvent` available on the response event + * stream. + * + * @publicApi + */ + + +class HttpResponse extends HttpResponseBase { + /** + * Construct a new `HttpResponse`. + */ + constructor(init = {}) { + super(init); + this.type = HttpEventType.Response; + this.body = init.body !== undefined ? init.body : null; + } + + clone(update = {}) { + return new HttpResponse({ + body: update.body !== undefined ? update.body : this.body, + headers: update.headers || this.headers, + status: update.status !== undefined ? update.status : this.status, + statusText: update.statusText || this.statusText, + url: update.url || this.url || undefined + }); + } + +} +/** + * A response that represents an error or failure, either from a + * non-successful HTTP status, an error while executing the request, + * or some other failure which occurred during the parsing of the response. + * + * Any error returned on the `Observable` response stream will be + * wrapped in an `HttpErrorResponse` to provide additional context about + * the state of the HTTP layer when the error occurred. The error property + * will contain either a wrapped Error object or the error response returned + * from the server. + * + * @publicApi + */ + + +class HttpErrorResponse extends HttpResponseBase { + constructor(init) { + // Initialize with a default status of 0 / Unknown Error. + super(init, 0, 'Unknown Error'); + this.name = 'HttpErrorResponse'; + /** + * Errors are never okay, even when the status code is in the 2xx success range. + */ + + this.ok = false; // If the response was successful, then this was a parse error. Otherwise, it was + // a protocol-level failure of some sort. Either the request failed in transit + // or the server returned an unsuccessful status code. + + if (this.status >= 200 && this.status < 300) { + this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`; + } else { + this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`; + } + + this.error = init.error || null; + } + +} +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * Constructs an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and + * the given `body`. This function clones the object and adds the body. + * + * Note that the `responseType` *options* value is a String that identifies the + * single data type of the response. + * A single overload version of the method handles each response type. + * The value of `responseType` cannot be a union, as the combined signature could imply. + * + */ + + +function addBody(options, body) { + return { + body, + headers: options.headers, + context: options.context, + observe: options.observe, + params: options.params, + reportProgress: options.reportProgress, + responseType: options.responseType, + withCredentials: options.withCredentials + }; +} +/** + * Performs HTTP requests. + * This service is available as an injectable class, with methods to perform HTTP requests. + * Each request method has multiple signatures, and the return type varies based on + * the signature that is called (mainly the values of `observe` and `responseType`). + * + * Note that the `responseType` *options* value is a String that identifies the + * single data type of the response. + * A single overload version of the method handles each response type. + * The value of `responseType` cannot be a union, as the combined signature could imply. + + * + * @usageNotes + * Sample HTTP requests for the [Tour of Heroes](/tutorial/toh-pt0) application. + * + * ### HTTP Request Example + * + * ``` + * // GET heroes whose name contains search term + * searchHeroes(term: string): observable{ + * + * const params = new HttpParams({fromString: 'name=term'}); + * return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params}); + * } + * ``` + * + * Alternatively, the parameter string can be used without invoking HttpParams + * by directly joining to the URL. + * ``` + * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'}); + * ``` + * + * + * ### JSONP Example + * ``` + * requestJsonp(url, callback = 'callback') { + * return this.httpClient.jsonp(this.heroesURL, callback); + * } + * ``` + * + * ### PATCH Example + * ``` + * // PATCH one of the heroes' name + * patchHero (id: number, heroName: string): Observable<{}> { + * const url = `${this.heroesUrl}/${id}`; // PATCH api/heroes/42 + * return this.httpClient.patch(url, {name: heroName}, httpOptions) + * .pipe(catchError(this.handleError('patchHero'))); + * } + * ``` + * + * @see [HTTP Guide](guide/http) + * @see [HTTP Request](api/common/http/HttpRequest) + * + * @publicApi + */ + + +class HttpClient { + constructor(handler) { + this.handler = handler; + } + /** + * Constructs an observable for a generic HTTP request that, when subscribed, + * fires the request through the chain of registered interceptors and on to the + * server. + * + * You can pass an `HttpRequest` directly as the only parameter. In this case, + * the call returns an observable of the raw `HttpEvent` stream. + * + * Alternatively you can pass an HTTP method as the first parameter, + * a URL string as the second, and an options hash containing the request body as the third. + * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the + * type of returned observable. + * * The `responseType` value determines how a successful response body is parsed. + * * If `responseType` is the default `json`, you can pass a type interface for the resulting + * object as a type parameter to the call. + * + * The `observe` value determines the return type, according to what you are interested in + * observing. + * * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including + * progress events by default. + * * An `observe` value of response returns an observable of `HttpResponse`, + * where the `T` parameter depends on the `responseType` and any optionally provided type + * parameter. + * * An `observe` value of body returns an observable of `` with the same `T` body type. + * + */ + + + request(first, url, options = {}) { + let req; // First, check whether the primary argument is an instance of `HttpRequest`. + + if (first instanceof HttpRequest) { + // It is. The other arguments must be undefined (per the signatures) and can be + // ignored. + req = first; + } else { + // It's a string, so it represents a URL. Construct a request based on it, + // and incorporate the remaining arguments (assuming `GET` unless a method is + // provided. + // Figure out the headers. + let headers = undefined; + + if (options.headers instanceof HttpHeaders) { + headers = options.headers; + } else { + headers = new HttpHeaders(options.headers); + } // Sort out parameters. + + + let params = undefined; + + if (!!options.params) { + if (options.params instanceof HttpParams) { + params = options.params; + } else { + params = new HttpParams({ + fromObject: options.params + }); + } + } // Construct the request. + + + req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, { + headers, + context: options.context, + params, + reportProgress: options.reportProgress, + // By default, JSON is assumed to be returned for all calls. + responseType: options.responseType || 'json', + withCredentials: options.withCredentials + }); + } // Start with an Observable.of() the initial request, and run the handler (which + // includes all interceptors) inside a concatMap(). This way, the handler runs + // inside an Observable chain, which causes interceptors to be re-run on every + // subscription (this also makes retries re-run the handler, including interceptors). + + + const events$ = (0,rxjs__WEBPACK_IMPORTED_MODULE_0__.of)(req).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_1__.concatMap)(req => this.handler.handle(req))); // If coming via the API signature which accepts a previously constructed HttpRequest, + // the only option is to get the event stream. Otherwise, return the event stream if + // that is what was requested. + + if (first instanceof HttpRequest || options.observe === 'events') { + return events$; + } // The requested stream contains either the full response or the body. In either + // case, the first step is to filter the event stream to extract a stream of + // responses(s). + + + const res$ = events$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_2__.filter)(event => event instanceof HttpResponse)); // Decide which stream to return. + + switch (options.observe || 'body') { + case 'body': + // The requested stream is the body. Map the response stream to the response + // body. This could be done more simply, but a misbehaving interceptor might + // transform the response body into a different format and ignore the requested + // responseType. Guard against this by validating that the response is of the + // requested type. + switch (req.responseType) { + case 'arraybuffer': + return res$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.map)(res => { + // Validate that the body is an ArrayBuffer. + if (res.body !== null && !(res.body instanceof ArrayBuffer)) { + throw new Error('Response is not an ArrayBuffer.'); + } + + return res.body; + })); + + case 'blob': + return res$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.map)(res => { + // Validate that the body is a Blob. + if (res.body !== null && !(res.body instanceof Blob)) { + throw new Error('Response is not a Blob.'); + } + + return res.body; + })); + + case 'text': + return res$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.map)(res => { + // Validate that the body is a string. + if (res.body !== null && typeof res.body !== 'string') { + throw new Error('Response is not a string.'); + } + + return res.body; + })); + + case 'json': + default: + // No validation needed for JSON responses, as they can be of any type. + return res$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.map)(res => res.body)); + } + + case 'response': + // The response stream was requested directly, so return it. + return res$; + + default: + // Guard against new future observe types being added. + throw new Error(`Unreachable: unhandled observe type ${options.observe}}`); + } + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `DELETE` request to execute on the server. See the individual overloads for + * details on the return type. + * + * @param url The endpoint URL. + * @param options The HTTP options to send with the request. + * + */ + + + delete(url, options = {}) { + return this.request('DELETE', url, options); + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `GET` request to execute on the server. See the individual overloads for + * details on the return type. + */ + + + get(url, options = {}) { + return this.request('GET', url, options); + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `HEAD` request to execute on the server. The `HEAD` method returns + * meta information about the resource without transferring the + * resource itself. See the individual overloads for + * details on the return type. + */ + + + head(url, options = {}) { + return this.request('HEAD', url, options); + } + /** + * Constructs an `Observable` that, when subscribed, causes a request with the special method + * `JSONP` to be dispatched via the interceptor pipeline. + * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain + * API endpoints that don't support newer, + * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol. + * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the + * requests even if the API endpoint is not located on the same domain (origin) as the client-side + * application making the request. + * The endpoint API must support JSONP callback for JSONP requests to work. + * The resource API returns the JSON response wrapped in a callback function. + * You can pass the callback function name as one of the query parameters. + * Note that JSONP requests can only be used with `GET` requests. + * + * @param url The resource URL. + * @param callbackParam The callback function name. + * + */ + + + jsonp(url, callbackParam) { + return this.request('JSONP', url, { + params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'), + observe: 'body', + responseType: 'json' + }); + } + /** + * Constructs an `Observable` that, when subscribed, causes the configured + * `OPTIONS` request to execute on the server. This method allows the client + * to determine the supported HTTP methods and other capabilities of an endpoint, + * without implying a resource action. See the individual overloads for + * details on the return type. + */ + + + options(url, options = {}) { + return this.request('OPTIONS', url, options); + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `PATCH` request to execute on the server. See the individual overloads for + * details on the return type. + */ + + + patch(url, body, options = {}) { + return this.request('PATCH', url, addBody(options, body)); + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `POST` request to execute on the server. The server responds with the location of + * the replaced resource. See the individual overloads for + * details on the return type. + */ + + + post(url, body, options = {}) { + return this.request('POST', url, addBody(options, body)); + } + /** + * Constructs an observable that, when subscribed, causes the configured + * `PUT` request to execute on the server. The `PUT` method replaces an existing resource + * with a new set of values. + * See the individual overloads for details on the return type. + */ + + + put(url, body, options = {}) { + return this.request('PUT', url, addBody(options, body)); + } + +} + +HttpClient.ɵfac = function HttpClient_Factory(t) { + return new (t || HttpClient)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵinject"](HttpHandler)); +}; + +HttpClient.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineInjectable"]({ + token: HttpClient, + factory: HttpClient.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](HttpClient, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Injectable + }], function () { + return [{ + type: HttpHandler + }]; + }, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`. + * + * + */ + + +class HttpInterceptorHandler { + constructor(next, interceptor) { + this.next = next; + this.interceptor = interceptor; + } + + handle(req) { + return this.interceptor.intercept(req, this.next); + } + +} +/** + * A multi-provider token that represents the array of registered + * `HttpInterceptor` objects. + * + * @publicApi + */ + + +const HTTP_INTERCEPTORS = new _angular_core__WEBPACK_IMPORTED_MODULE_4__.InjectionToken('HTTP_INTERCEPTORS'); + +class NoopInterceptor { + intercept(req, next) { + return next.handle(req); + } + +} + +NoopInterceptor.ɵfac = function NoopInterceptor_Factory(t) { + return new (t || NoopInterceptor)(); +}; + +NoopInterceptor.ɵprov = /* @__PURE__ */_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineInjectable"]({ + token: NoopInterceptor, + factory: NoopInterceptor.ɵfac +}); + +(function () { + (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵsetClassMetadata"](NoopInterceptor, [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Injectable + }], null, null); +})(); +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// Every request made through JSONP needs a callback name that's unique across the +// whole page. Each request is assigned an id and the callback name is constructed +// from that. The next id to be assigned is tracked in a global variable here that +// is shared among all applications on the page. + + +let nextRequestId = 0; +/** + * When a pending
    + {{headerText}} + + {{dataAccessor(data, name)}} +