From 0fbb0437987c17789d767d1c226d483a0473e90f Mon Sep 17 00:00:00 2001 From: shaharkazaz Date: Fri, 19 Apr 2024 21:30:59 +0300 Subject: [PATCH] Deploy website - based on 854621d40487195a644149f1af05ee0f68e9180e --- 404.html | 4 ++-- assets/js/{066c37e2.8a1262ec.js => 066c37e2.a989d117.js} | 2 +- assets/js/{2c8f1445.54d8cbfc.js => 2c8f1445.3bbce273.js} | 2 +- .../{runtime~main.8af759de.js => runtime~main.e2bb0c06.js} | 2 +- docs/additional-functionality.html | 4 ++-- docs/blog-posts.html | 4 ++-- docs/faq.html | 4 ++-- docs/getting-started/angular-compatability.html | 4 ++-- docs/getting-started/config-options.html | 4 ++-- docs/getting-started/installation.html | 4 ++-- docs/hack.html | 4 ++-- docs/language-api.html | 4 ++-- docs/lazy-load/inline-loaders.html | 4 ++-- docs/lazy-load/scope-configuration.html | 6 +++--- docs/loading-template.html | 4 ++-- docs/migration/angular.html | 4 ++-- docs/migration/ngx.html | 4 ++-- docs/multi-lang.html | 4 ++-- docs/plugins/locale.html | 6 +++--- docs/plugins/message-format.html | 4 ++-- docs/plugins/persist-lang.html | 4 ++-- docs/plugins/persist-translations.html | 4 ++-- docs/plugins/preload-langs.html | 4 ++-- docs/plugins/third-party.html | 4 ++-- docs/recipes/google-translate-integration.html | 4 ++-- docs/recipes/prefetch.html | 4 ++-- docs/recipes/xliff.html | 4 ++-- docs/schematics.html | 4 ++-- docs/schematics/component.html | 4 ++-- docs/schematics/join.html | 4 ++-- docs/schematics/ng-add.html | 4 ++-- docs/schematics/scope.html | 4 ++-- docs/schematics/split.html | 4 ++-- docs/schematics/upgrade.html | 4 ++-- docs/ssr-support.html | 4 ++-- docs/tools/comments.html | 4 ++-- docs/tools/optimize.html | 4 ++-- docs/tools/scope-lib-extractor.html | 4 ++-- docs/tools/validator.html | 4 ++-- docs/translation-api.html | 4 ++-- docs/translation-in-the-template.html | 4 ++-- docs/transpiler.html | 4 ++-- docs/unit-testing.html | 4 ++-- index.html | 4 ++-- live-app.html | 4 ++-- search.html | 4 ++-- transloco-playground/76.a77738d5ecb6deb5.js | 1 + transloco-playground/index.html | 2 +- transloco-playground/main.87964fc4105893a0.js | 1 + transloco-playground/runtime.3c03cea8cca53c0b.js | 1 + videoGuides.html | 4 ++-- 51 files changed, 97 insertions(+), 94 deletions(-) rename assets/js/{066c37e2.8a1262ec.js => 066c37e2.a989d117.js} (86%) rename assets/js/{2c8f1445.54d8cbfc.js => 2c8f1445.3bbce273.js} (60%) rename assets/js/{runtime~main.8af759de.js => runtime~main.e2bb0c06.js} (96%) create mode 100644 transloco-playground/76.a77738d5ecb6deb5.js create mode 100644 transloco-playground/main.87964fc4105893a0.js create mode 100644 transloco-playground/runtime.3c03cea8cca53c0b.js diff --git a/404.html b/404.html index 5ad1c1dfc..41cb02187 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Transloco Angular i18n - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/066c37e2.8a1262ec.js b/assets/js/066c37e2.a989d117.js similarity index 86% rename from assets/js/066c37e2.8a1262ec.js rename to assets/js/066c37e2.a989d117.js index ebae336e7..2086f5143 100644 --- a/assets/js/066c37e2.8a1262ec.js +++ b/assets/js/066c37e2.a989d117.js @@ -1 +1 @@ -"use strict";(self.webpackChunktransloco_docs=self.webpackChunktransloco_docs||[]).push([[3737],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,r(r({ref:t},u),{},{components:n})):a.createElement(f,r({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,r=new Array(l);r[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,r[1]=i;for(var c=2;c child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function m(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:p(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function d(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function f(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,l=(0,i.k6)(),r=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,s._X)(r),(0,o.useCallback)((function(e){if(r){var t=new URLSearchParams(l.location.search);t.set(r,e),l.replace(Object.assign({},l.location,{search:t.toString()}))}}),[r,l])]}function g(e){var t,n,a,l,r=e.defaultValue,i=e.queryString,s=void 0!==i&&i,c=e.groupId,p=m(e),g=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!d({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:r,tabValues:p})})),v=g[0],h=g[1],b=f({queryString:s,groupId:c}),k=b[0],y=b[1],N=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],l=n[1],[a,(0,o.useCallback)((function(e){t&&l.set(e)}),[t,l])]),T=N[0],C=N[1],S=function(){var e=null!=k?k:T;return d({value:e,tabValues:p})?e:null}();return(0,o.useLayoutEffect)((function(){S&&h(S)}),[S]),{selectedValue:v,selectValue:(0,o.useCallback)((function(e){if(!d({value:e,tabValues:p}))throw new Error("Can't select invalid tab value="+e);h(e),y(e),C(e)}),[y,C,p]),tabValues:p}}var v=n(2389),h="tabList__CuJ",b="tabItem_LNqP";function k(e){var t=e.className,n=e.block,i=e.selectedValue,s=e.selectValue,c=e.tabValues,u=[],p=(0,r.o5)().blockElementScrollPositionUntilNextRender,m=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(p(t),s(a))},d=function(e){var t,n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var l,r=u.indexOf(e.currentTarget)-1;n=null!=(l=u[r])?l:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,r=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:d,onClick:m},r,{className:(0,l.Z)("tabs__item",b,null==r?void 0:r.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function y(e){var t=e.lazy,n=e.children,a=e.selectedValue,l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var r=l.find((function(e){return e.props.value===a}));return r?(0,o.cloneElement)(r,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},l.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function N(e){var t=g(e);return o.createElement("div",{className:(0,l.Z)("tabs-container",h)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(y,(0,a.Z)({},e,t)))}function T(e){var t=(0,v.Z)();return o.createElement(N,(0,a.Z)({key:String(t)},e))}},5743:function(e,t,n){n.r(t),n.d(t,{assets:function(){return m},contentTitle:function(){return u},default:function(){return g},frontMatter:function(){return c},metadata:function(){return p},toc:function(){return d}});var a=n(7462),o=n(3366),l=(n(7294),n(3905)),r=n(4866),i=n(5162),s=["components"],c={title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n"},u=void 0,p={unversionedId:"plugins/locale",id:"plugins/locale",title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n",source:"@site/docs/plugins/locale.mdx",sourceDirName:"plugins",slug:"/plugins/locale",permalink:"/transloco/docs/plugins/locale",draft:!1,editUrl:"https://github.com/jsverse/transloco/edit/master/docs/docs/plugins/locale.mdx",tags:[],version:"current",frontMatter:{title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n"},sidebar:"docs",previous:{title:"Preload Languages",permalink:"/transloco/docs/plugins/preload-langs"},next:{title:"3rd Party",permalink:"/transloco/docs/plugins/third-party"}},m={},d=[{value:"Installation",id:"installation",level:2},{value:"Setup",id:"setup",level:2},{value:"Localization Pipes",id:"localization-pipes",level:2},{value:"Date Pipe",id:"date-pipe",level:3},{value:"Currency Pipe",id:"currency-pipe",level:3},{value:"Decimal Pipe",id:"decimal-pipe",level:3},{value:"Percent Pipe",id:"percent-pipe",level:3},{value:"Setting Locale",id:"setting-locale",level:2},{value:"Translation file names",id:"translation-file-names",level:3},{value:"Language Locale Mapping:",id:"language-locale-mapping",level:3},{value:"Manually Setting Locale:",id:"manually-setting-locale",level:3},{value:"Configuration Options",id:"configuration-options",level:2},{value:"Locale Format Options",id:"locale-format-options",level:2},{value:"Number Format Options",id:"number-format-options",level:2},{value:"Date Format Options",id:"date-format-options",level:2},{value:"Service API",id:"service-api",level:2},{value:"Localization Transformer",id:"localization-transformer",level:2}],f={toc:d};function g(e){var t=e.components,n=(0,o.Z)(e,s);return(0,l.kt)("wrapper",(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"This plugin provides localization(l10n) support for Transloco."),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"Localization refers to the adaptation of a product, application or document content to meet the language, cultural and other requirements of a specific target market (a locale).")),(0,l.kt)("h2",{id:"installation"},"Installation"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"npm i @jsverse/transloco-locale\n")),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",mdxType:"TabItem"}),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",mdxType:"TabItem"})),(0,l.kt)("h2",{id:"setup"},"Setup"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("p",null,"Add the locale providers to your app config:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"export const appConfig = {\n providers: [\n provideTranslocoLocale(),\n ...\n ]\n};\n")),(0,l.kt)("p",null,"Import the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoLocaleModule")," or the directive/pipe you are using into your standalone component.")),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("p",null,"Export the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoLocaleModule")," along with ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoModule")," from the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoRootModule")," and add the locale providers:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule, provideTranslocoLocale } from '@jsverse/transloco-locale';\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale()\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("h2",{id:"localization-pipes"},"Localization Pipes"),(0,l.kt)("p",null,"The library provides localization API provided by pipes or from a service, base on the native Javascript's ",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"},"API"),"."),(0,l.kt)("h3",{id:"date-pipe"},"Date Pipe"),(0,l.kt)("p",null,"Transform a date into the locale's date format."),(0,l.kt)("p",null,"The date expression could be: a Date object, a number (milliseconds since UTC epoch), or an ",(0,l.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/NOTE-datetime"},"ISO")," string."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--9/10/2019--\x3e\n {{ date | translocoDate }} \n\x3c!-- Sep 10, 2019, 10:46:12 PM--\x3e\n\n {{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}\n\n\x3c!-- 7:40:32 PM Coordinated--\x3e\n\n {{ date | translocoDate: { timeZone: 'UTC', timeStyle: 'full' } }}\n\n\x3c!-- Jan 1, 1970--\x3e\n\n {{ 1 | translocoDate: { dateStyle: 'medium' } }}\n\n\x3c!-- Feb 8, 2019--\x3e\n\n {{ '2019-02-08' | translocoDate: { dateStyle: 'medium' } }}\n\n")),(0,l.kt)("h3",{id:"currency-pipe"},"Currency Pipe"),(0,l.kt)("p",null,"Transform a given number into the locale's currency format."),(0,l.kt)("p",null,"The library comes out of the box with locale currency mapping, so once the locale is change the currency will automatically display the right currency.\nThe currency mapping could be customise if needed through the ",(0,l.kt)("a",{parentName:"p",href:"#configuration-options"},"config"),", and could be provided by ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoLocaleCurrencyMapping"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--$1,000,000.00--\x3e\n {{ 1000000 | translocoCurrency }} \n\x3c!--1,000,000.00 US dollars--\x3e\n\n {{ 1000000 | translocoCurrency: 'name' }}\n\n\x3c!--$1,000,000--\x3e\n\n {{ 1000000 | translocoCurrency: 'symbol' : { minimumFractionDigits: 0 } }}\n\n")),(0,l.kt)("h3",{id:"decimal-pipe"},"Decimal Pipe"),(0,l.kt)("p",null,"Transform a given number into current locale's decimal number format."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--1,234,567,890--\x3e\n\n {{ 1234567890 | translocoDecimal }}\n\n\x3c!--1234567890--\x3e\n\n {{ 1234567890 | translocoDecimal: {useGrouping: false} }}\n\n")),(0,l.kt)("h3",{id:"percent-pipe"},"Percent Pipe"),(0,l.kt)("p",null,"Transform a given number into current locale's percent number format."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},'\x3c!--100%--\x3e\n 1 | translocoPercent \n\x3c!--100%--\x3e\n "1" | translocoPercent \n')),(0,l.kt)("h2",{id:"setting-locale"},"Setting Locale"),(0,l.kt)("p",null,"The library provides three different ways to set the locale."),(0,l.kt)("h3",{id:"translation-file-names"},"Translation file names"),(0,l.kt)("p",null,"Using locale format for the translation files will automatically declare the locale on ",(0,l.kt)("inlineCode",{parentName:"p"},"langChanges$")," event:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"\u251c\u2500 i18n/\n \u251c\u2500 en-US.json\n \u251c\u2500 en-GB.json\n \u251c\u2500 es-ES.json\n")),(0,l.kt)("h3",{id:"language-locale-mapping"},"Language Locale Mapping:"),(0,l.kt)("p",null,"Users who don't have more than one locale per language\ncould provide a language to locale mapping object using the ",(0,l.kt)("a",{parentName:"p",href:"#configuration-options"},"config's")," ",(0,l.kt)("inlineCode",{parentName:"p"},"langToLocaleMapping"),":"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"export const appConfig = {\n providers: [\n provideTranslocoLocale({\n langToLocaleMapping: {\n en: 'en-US',\n es: 'es-ES'\n }\n })\n ...\n ]\n};\n"))),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule, provideTranslocoLocale } from '@jsverse/transloco-locale';\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale({\n langToLocaleMapping: {\n en: 'en-US',\n es: 'es-ES'\n }\n })\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("h3",{id:"manually-setting-locale"},"Manually Setting Locale:"),(0,l.kt)("p",null,"The third option in manually setting the locale, this could be done by calling ",(0,l.kt)("inlineCode",{parentName:"p"},"setLocale")," method from ",(0,l.kt)("inlineCode",{parentName:"p"},"localeService"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.component.ts"',title:'"app.component.ts"'},"export class AppComponent {\n constructor(private service: TranslocoLocaleService) {}\n\n ngOnInit() {\n this.service.setLocale('en-US');\n }\n}\n")),(0,l.kt)("h2",{id:"configuration-options"},"Configuration Options"),(0,l.kt)("p",null,"Let's go over each one of the ",(0,l.kt)("inlineCode",{parentName:"p"},"config")," options:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeConfig?"),": Declare the default configuration of the locale's formatting. A general configuration could be set using the ",(0,l.kt)("inlineCode",{parentName:"li"},"global")," property, for a configuration by locale use ",(0,l.kt)("inlineCode",{parentName:"li"},"localeBased")," property (default value determine by the native ",(0,l.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"},"Javascript's API"),")."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"defaultLocale?"),": The default locale formatted in ",(0,l.kt)("a",{parentName:"li",href:"https://tools.ietf.org/html/bcp47"},"BCP 47")," (default value: ",(0,l.kt)("inlineCode",{parentName:"li"},"en-US"),"),"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"langToLocaleMapping?"),": A key value ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," that maps Transloco language to it's Locale (default value: ",(0,l.kt)("inlineCode",{parentName:"li"},"{}"),")."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeToCurrencyMapping?"),": A key value ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," that maps the Locale to its currency (formatted in ",(0,l.kt)("a",{parentName:"li",href:"https://www.iso.org/iso-4217-currency-codes.html"},"ISO 4217"),") (the library provide a default value with all of the existing mapping).")),(0,l.kt)("h2",{id:"locale-format-options"},"Locale Format Options"),(0,l.kt)("p",null,"There are two types of formatting options, one for ",(0,l.kt)("inlineCode",{parentName:"p"},"date")," and one for ",(0,l.kt)("inlineCode",{parentName:"p"},"number"),"."),(0,l.kt)("p",null,"The formatted options could be declared in three levels"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"In the app's configuration (as mentioned above):")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"const globalFormatConfig = {\n date: {\n dateStyle: 'long',\n timeStyle: 'long'\n }\n};\n\nconst esESFormatConfig = {\n date: {\n timeStyle: 'medium'\n },\n currency: {\n minimumFractionDigits: 0\n }\n};\n\nexport const appConfig = {\n providers: [\n provideTranslocoLocale({\n localeConfig: {\n global: globalFormatConfig,\n localeBased: {\n 'es-ES': esESFormatConfig\n }\n }\n })\n ...\n ]\n};\n"))),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"In the module's configuration (as mentioned above):")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule } from '@jsverse/transloco-locale';\n\nconst globalFormatConfig = {\n date: {\n dateStyle: 'long',\n timeStyle: 'long'\n }\n};\n\nconst esESFormatConfig = {\n date: {\n timeStyle: 'medium'\n },\n currency: {\n minimumFractionDigits: 0\n }\n};\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale({\n localeConfig: {\n global: globalFormatConfig,\n localeBased: {\n 'es-ES': esESFormatConfig\n }\n }\n })\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"It could be set in the component's providers using ",(0,l.kt)("inlineCode",{parentName:"li"},"provideTranslocoLocaleConfig"),":")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"@Component({\n selector: 'my-comp',\n templateUrl: './my-comp.component.html',\n providers: [provideTranslocoLocaleConfig(localeConfig)]\n})\nexport class MyComponent {}\n")),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},"We can pass it to each ",(0,l.kt)("a",{parentName:"li",href:"#localization-pipes"},"pipe")," in the HTML template:")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\n {{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}\n\n\n\n {{ number | translocoDecimal: {useGrouping: false} }}\n\n")),(0,l.kt)("p",null,"Note the format option of the global, locale's format and the one's being passed in the template, will be merged. While the template is the stronger one and then the locale and the global."),(0,l.kt)("h2",{id:"number-format-options"},"Number Format Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"useGrouping"),"- Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the (default is true)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumIntegerDigits"),"- The minimum number of integer digits to use. Possible values are from 1 to 21 (default is 1)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumFractionDigits"),"- The minimum number of fraction digits to use. Possible values are from 0 to 20 (default is 0)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"maximumFractionDigits"),"- The maximum number of fraction digits to use. Possible values are from 0 to 20 (default is 3)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumSignificantDigits"),"- The minimum number of significant digits to use. Possible values are from 1 to 21 (default is 1)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"maximumSignificantDigits"),"- The maximum number of significant digits to use. Possible values are from 1 to 21 (default is 21)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"currency"),'- The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "USD" for the US dollar, "EUR" for the euro.'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"signDisplay"),'- When to display the sign for the number. Possible values are "auto", "always", "exceptZero", "negative", "never" (default is "auto").')),(0,l.kt)("h2",{id:"date-format-options"},"Date Format Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"dateStyle")," - The date formatting style."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"timeStyle")," - The time formatting style."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"timeZone"),' - The time zone to use. The only value implementations must recognize is "UTC"; the default is the runtime\'s default time zone. Implementations may also recognize the time zone names of the ',(0,l.kt)("a",{parentName:"li",href:"https://www.iana.org/time-zones"},"IANA"),' time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".')),(0,l.kt)("h2",{id:"service-api"},"Service API"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeChanges$")," - Observable of the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localizeDate()")," - Transform a date into a locale's date format."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localizeNumber()")," - Transform a number into the locale's number format according to the number type."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"getLocale")," - Gets the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"setLocale")," - Sets the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"getCurrencySymbol")," - Gets the currency symbol for a given locale. If no locale is specified the currently active one is used.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts"},"translocoLocaleService.localeChanges$.subscribe(activeLocale => ...)\n\ntranslocoLocaleService.localizeNumber(1234567890, 'decimal') // 1,234,567,890\ntranslocoLocaleService.localizeNumber(0.5, 'percent') // 50%\ntranslocoLocaleService.localizeNumber(1000, 'currency') // $1,000.00\n\nconst locale = translocoLocaleService.getLocale();\ntranslocoLocaleService.setLocale('en-US')\n\ntranslocoLocaleService.getCurrencySymbol() // $\n")),(0,l.kt)("h2",{id:"localization-transformer"},"Localization Transformer"),(0,l.kt)("p",null,"In some cases you might want to customize the localization transformation, to achieve that you could provide your own localization transformer class."),(0,l.kt)("p",null,"There are two types of transformers for date and number:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="custom-transformer.ts"',title:'"custom-transformer.ts"'},"import { DefaultDateTransformer, DefaultNumberTransformer } from '@jsverse/transloco-locale';\n\nexport class CustomDateTransformer extends DefaultDateTransformer {\n public transform(date: Date, locale: Locale, options: DateFormatOptions): string {\n return ...\n\n // Fallback to default transformer\n return super.transform(date, locale, options);\n }\n}\n\nexport class CustomNumberTransformer extends DefaultNumberTransformer {\n public transform(\n value: number | string,\n type: NumberTypes,\n locale: string,\n options: Intl.NumberFormatOptions\n ): string {\n return ...\n\n // Fallback to default transformer\n return super.transform(value, type, locale, options);\n }\n}\n")),(0,l.kt)("p",null,"Provide these custom transformers using the ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoDateTransformer")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoNumberTransformer")," functions."))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunktransloco_docs=self.webpackChunktransloco_docs||[]).push([[3737],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,r(r({ref:t},u),{},{components:n})):a.createElement(f,r({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,r=new Array(l);r[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,r[1]=i;for(var c=2;c child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function m(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:p(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function d(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function f(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,l=(0,i.k6)(),r=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,s._X)(r),(0,o.useCallback)((function(e){if(r){var t=new URLSearchParams(l.location.search);t.set(r,e),l.replace(Object.assign({},l.location,{search:t.toString()}))}}),[r,l])]}function g(e){var t,n,a,l,r=e.defaultValue,i=e.queryString,s=void 0!==i&&i,c=e.groupId,p=m(e),g=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!d({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:r,tabValues:p})})),h=g[0],v=g[1],b=f({queryString:s,groupId:c}),k=b[0],y=b[1],N=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],l=n[1],[a,(0,o.useCallback)((function(e){t&&l.set(e)}),[t,l])]),T=N[0],C=N[1],S=function(){var e=null!=k?k:T;return d({value:e,tabValues:p})?e:null}();return(0,o.useLayoutEffect)((function(){S&&v(S)}),[S]),{selectedValue:h,selectValue:(0,o.useCallback)((function(e){if(!d({value:e,tabValues:p}))throw new Error("Can't select invalid tab value="+e);v(e),y(e),C(e)}),[y,C,p]),tabValues:p}}var h=n(2389),v="tabList__CuJ",b="tabItem_LNqP";function k(e){var t=e.className,n=e.block,i=e.selectedValue,s=e.selectValue,c=e.tabValues,u=[],p=(0,r.o5)().blockElementScrollPositionUntilNextRender,m=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(p(t),s(a))},d=function(e){var t,n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var l,r=u.indexOf(e.currentTarget)-1;n=null!=(l=u[r])?l:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,r=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:d,onClick:m},r,{className:(0,l.Z)("tabs__item",b,null==r?void 0:r.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function y(e){var t=e.lazy,n=e.children,a=e.selectedValue,l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var r=l.find((function(e){return e.props.value===a}));return r?(0,o.cloneElement)(r,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},l.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function N(e){var t=g(e);return o.createElement("div",{className:(0,l.Z)("tabs-container",v)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(y,(0,a.Z)({},e,t)))}function T(e){var t=(0,h.Z)();return o.createElement(N,(0,a.Z)({key:String(t)},e))}},5743:function(e,t,n){n.r(t),n.d(t,{assets:function(){return m},contentTitle:function(){return u},default:function(){return g},frontMatter:function(){return c},metadata:function(){return p},toc:function(){return d}});var a=n(7462),o=n(3366),l=(n(7294),n(3905)),r=n(4866),i=n(5162),s=["components"],c={title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n"},u=void 0,p={unversionedId:"plugins/locale",id:"plugins/locale",title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n",source:"@site/docs/plugins/locale.mdx",sourceDirName:"plugins",slug:"/plugins/locale",permalink:"/transloco/docs/plugins/locale",draft:!1,editUrl:"https://github.com/jsverse/transloco/edit/master/docs/docs/plugins/locale.mdx",tags:[],version:"current",frontMatter:{title:"Locale L10N",description:"Plugins - Locale L10N | Transloco Angular i18n"},sidebar:"docs",previous:{title:"Preload Languages",permalink:"/transloco/docs/plugins/preload-langs"},next:{title:"3rd Party",permalink:"/transloco/docs/plugins/third-party"}},m={},d=[{value:"Installation",id:"installation",level:2},{value:"Setup",id:"setup",level:2},{value:"Localization Pipes",id:"localization-pipes",level:2},{value:"Date Pipe",id:"date-pipe",level:3},{value:"Currency Pipe",id:"currency-pipe",level:3},{value:"Decimal Pipe",id:"decimal-pipe",level:3},{value:"Percent Pipe",id:"percent-pipe",level:3},{value:"Setting Locale",id:"setting-locale",level:2},{value:"Translation file names",id:"translation-file-names",level:3},{value:"Language Locale Mapping:",id:"language-locale-mapping",level:3},{value:"Manually Setting Locale:",id:"manually-setting-locale",level:3},{value:"Configuration Options",id:"configuration-options",level:2},{value:"Locale Format Options",id:"locale-format-options",level:2},{value:"Number Format Options",id:"number-format-options",level:2},{value:"Date Format Options",id:"date-format-options",level:2},{value:"Service API",id:"service-api",level:2},{value:"Localization Transformer",id:"localization-transformer",level:2}],f={toc:d};function g(e){var t=e.components,n=(0,o.Z)(e,s);return(0,l.kt)("wrapper",(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"This plugin provides localization(l10n) support for Transloco."),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"Localization refers to the adaptation of a product, application or document content to meet the language, cultural and other requirements of a specific target market (a locale).")),(0,l.kt)("h2",{id:"installation"},"Installation"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"npm i @jsverse/transloco-locale\n")),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",mdxType:"TabItem"}),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",mdxType:"TabItem"})),(0,l.kt)("h2",{id:"setup"},"Setup"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("p",null,"Add the locale providers to your app config:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"export const appConfig = {\n providers: [\n provideTranslocoLocale(),\n ...\n ]\n};\n")),(0,l.kt)("p",null,"Import the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoLocaleModule")," or the directive/pipe you are using into your standalone component.")),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("p",null,"Export the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoLocaleModule")," along with ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoModule")," from the ",(0,l.kt)("inlineCode",{parentName:"p"},"TranslocoRootModule")," and add the locale providers:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule, provideTranslocoLocale } from '@jsverse/transloco-locale';\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale()\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("h2",{id:"localization-pipes"},"Localization Pipes"),(0,l.kt)("p",null,"The library provides localization API provided by pipes or from a service, base on the native Javascript's ",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"},"API"),"."),(0,l.kt)("h3",{id:"date-pipe"},"Date Pipe"),(0,l.kt)("p",null,"Transform a date into the locale's date format."),(0,l.kt)("p",null,"The date expression could be: a Date object, a number (milliseconds since UTC epoch), or an ",(0,l.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/NOTE-datetime"},"ISO")," string."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--9/10/2019--\x3e\n {{ date | translocoDate }} \n\x3c!-- Sep 10, 2019, 10:46:12 PM--\x3e\n\n {{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}\n\n\x3c!-- 7:40:32 PM Coordinated--\x3e\n\n {{ date | translocoDate: { timeZone: 'UTC', timeStyle: 'full' } }}\n\n\x3c!-- Jan 1, 1970--\x3e\n\n {{ 1 | translocoDate: { dateStyle: 'medium' } }}\n\n\x3c!-- Feb 8, 2019--\x3e\n\n {{ '2019-02-08' | translocoDate: { dateStyle: 'medium' } }}\n\n")),(0,l.kt)("h3",{id:"currency-pipe"},"Currency Pipe"),(0,l.kt)("p",null,"Transform a given number into the locale's currency format."),(0,l.kt)("p",null,"The library comes out of the box with locale currency mapping, so once the locale is change the currency will automatically display the right currency.\nThe currency mapping could be customise if needed through the ",(0,l.kt)("a",{parentName:"p",href:"#configuration-options"},"config"),", and could be provided by ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoLocaleCurrencyMapping"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--$1,000,000.00--\x3e\n {{ 1000000 | translocoCurrency }} \n\x3c!--1,000,000.00 US dollars--\x3e\n\n {{ 1000000 | translocoCurrency: 'name' }}\n\n\x3c!--$1,000,000--\x3e\n\n {{ 1000000 | translocoCurrency: 'symbol' : { minimumFractionDigits: 0 } }}\n\n")),(0,l.kt)("h3",{id:"decimal-pipe"},"Decimal Pipe"),(0,l.kt)("p",null,"Transform a given number into current locale's decimal number format."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\x3c!--1,234,567,890--\x3e\n\n {{ 1234567890 | translocoDecimal }}\n\n\x3c!--1234567890--\x3e\n\n {{ 1234567890 | translocoDecimal: {useGrouping: false} }}\n\n")),(0,l.kt)("h3",{id:"percent-pipe"},"Percent Pipe"),(0,l.kt)("p",null,"Transform a given number into current locale's percent number format."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},'\x3c!--100%--\x3e\n 1 | translocoPercent \n\x3c!--100%--\x3e\n "1" | translocoPercent \n')),(0,l.kt)("h2",{id:"setting-locale"},"Setting Locale"),(0,l.kt)("p",null,"The library provides three different ways to set the locale."),(0,l.kt)("h3",{id:"translation-file-names"},"Translation file names"),(0,l.kt)("p",null,"Using locale format for the translation files will automatically declare the locale on ",(0,l.kt)("inlineCode",{parentName:"p"},"langChanges$")," event:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"\u251c\u2500 i18n/\n \u251c\u2500 en-US.json\n \u251c\u2500 en-GB.json\n \u251c\u2500 es-ES.json\n")),(0,l.kt)("h3",{id:"language-locale-mapping"},"Language Locale Mapping:"),(0,l.kt)("p",null,"Users who don't have more than one locale per language\ncould provide a language to locale mapping object using the ",(0,l.kt)("a",{parentName:"p",href:"#configuration-options"},"config's")," ",(0,l.kt)("inlineCode",{parentName:"p"},"langToLocaleMapping"),":"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"export const appConfig = {\n providers: [\n provideTranslocoLocale({\n langToLocaleMapping: {\n en: 'en-US',\n es: 'es-ES'\n }\n })\n ...\n ]\n};\n"))),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule, provideTranslocoLocale } from '@jsverse/transloco-locale';\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale({\n langToLocaleMapping: {\n en: 'en-US',\n es: 'es-ES'\n }\n })\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("h3",{id:"manually-setting-locale"},"Manually Setting Locale:"),(0,l.kt)("p",null,"The third option in manually setting the locale, this could be done by calling ",(0,l.kt)("inlineCode",{parentName:"p"},"setLocale")," method from ",(0,l.kt)("inlineCode",{parentName:"p"},"localeService"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.component.ts"',title:'"app.component.ts"'},"export class AppComponent {\n constructor(private service: TranslocoLocaleService) {}\n\n ngOnInit() {\n this.service.setLocale('en-US');\n }\n}\n")),(0,l.kt)("h2",{id:"configuration-options"},"Configuration Options"),(0,l.kt)("p",null,"Let's go over each one of the ",(0,l.kt)("inlineCode",{parentName:"p"},"config")," options:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeConfig?"),": Declare the default configuration of the locale's formatting. A general configuration could be set using the ",(0,l.kt)("inlineCode",{parentName:"li"},"global")," property, for a configuration by locale use ",(0,l.kt)("inlineCode",{parentName:"li"},"localeBased")," property (default value determine by the native ",(0,l.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"},"Javascript's API"),")."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"defaultLocale?"),": The default locale formatted in ",(0,l.kt)("a",{parentName:"li",href:"https://tools.ietf.org/html/bcp47"},"BCP 47")," (default value: ",(0,l.kt)("inlineCode",{parentName:"li"},"en-US"),"),"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"langToLocaleMapping?"),": A key value ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," that maps Transloco language to it's Locale (default value: ",(0,l.kt)("inlineCode",{parentName:"li"},"{}"),")."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeToCurrencyMapping?"),": A key value ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," that maps the Locale to its currency (formatted in ",(0,l.kt)("a",{parentName:"li",href:"https://www.iso.org/iso-4217-currency-codes.html"},"ISO 4217"),") (the library provide a default value with all of the existing mapping).")),(0,l.kt)("h2",{id:"locale-format-options"},"Locale Format Options"),(0,l.kt)("p",null,"There are two types of formatting options, one for ",(0,l.kt)("inlineCode",{parentName:"p"},"date")," and one for ",(0,l.kt)("inlineCode",{parentName:"p"},"number"),"."),(0,l.kt)("p",null,"The formatted options could be declared in three levels"),(0,l.kt)(r.Z,{groupId:"app-type",queryString:!0,mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"standalone",label:"Standalone",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"In the app's configuration (as mentioned above):")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="app.config.ts"',title:'"app.config.ts"'},"const globalFormatConfig = {\n date: {\n dateStyle: 'long',\n timeStyle: 'long'\n }\n};\n\nconst esESFormatConfig = {\n date: {\n timeStyle: 'medium'\n },\n currency: {\n minimumFractionDigits: 0\n }\n};\n\nexport const appConfig = {\n providers: [\n provideTranslocoLocale({\n localeConfig: {\n global: globalFormatConfig,\n localeBased: {\n 'es-ES': esESFormatConfig\n }\n }\n })\n ...\n ]\n};\n"))),(0,l.kt)(i.Z,{value:"ng-module",label:"NgModule",attributes:{style:{display:"none"}},mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"In the module's configuration (as mentioned above):")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="transloco-root.module.ts"',title:'"transloco-root.module.ts"'},"import { TranslocoLocaleModule } from '@jsverse/transloco-locale';\n\nconst globalFormatConfig = {\n date: {\n dateStyle: 'long',\n timeStyle: 'long'\n }\n};\n\nconst esESFormatConfig = {\n date: {\n timeStyle: 'medium'\n },\n currency: {\n minimumFractionDigits: 0\n }\n};\n\n@NgModule({\n exports: [ TranslocoModule, TranslocoLocaleModule ],\n providers: [\n provideTranslocoLocale({\n localeConfig: {\n global: globalFormatConfig,\n localeBased: {\n 'es-ES': esESFormatConfig\n }\n }\n })\n ...\n ],\n})\nexport class TranslocoRootModule {}\n")))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"It could be set in the component's providers using ",(0,l.kt)("inlineCode",{parentName:"li"},"provideTranslocoLocaleConfig"),":")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"@Component({\n selector: 'my-comp',\n templateUrl: './my-comp.component.html',\n providers: [provideTranslocoLocaleConfig(localeConfig)]\n})\nexport class MyComponent {}\n")),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},"We can pass it to each ",(0,l.kt)("a",{parentName:"li",href:"#localization-pipes"},"pipe")," in the HTML template:")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="my-comp.component.html"',title:'"my-comp.component.html"'},"\n {{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}\n\n\n\n {{ number | translocoDecimal: {useGrouping: false} }}\n\n")),(0,l.kt)("p",null,"Note the format option of the global, locale's format and the one's being passed in the template, will be merged. While the template is the stronger one and then the locale and the global."),(0,l.kt)("h2",{id:"number-format-options"},"Number Format Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"useGrouping"),"- Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the (default is true)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumIntegerDigits"),"- The minimum number of integer digits to use. Possible values are from 1 to 21 (default is 1)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumFractionDigits"),"- The minimum number of fraction digits to use. Possible values are from 0 to 20 (default is 0)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"maximumFractionDigits"),"- The maximum number of fraction digits to use. Possible values are from 0 to 20 (default is 3)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"minimumSignificantDigits"),"- The minimum number of significant digits to use. Possible values are from 1 to 21 (default is 1)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"maximumSignificantDigits"),"- The maximum number of significant digits to use. Possible values are from 1 to 21 (default is 21)."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"currency"),'- The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "USD" for the US dollar, "EUR" for the euro.'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"signDisplay"),'- When to display the sign for the number. Possible values are "auto", "always", "exceptZero", "negative", "never" (default is "auto").')),(0,l.kt)("h2",{id:"date-format-options"},"Date Format Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"dateStyle")," - The date formatting style."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"timeStyle")," - The time formatting style."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"timeZone"),' - The time zone to use. The only value implementations must recognize is "UTC"; the default is the runtime\'s default time zone. Implementations may also recognize the time zone names of the ',(0,l.kt)("a",{parentName:"li",href:"https://www.iana.org/time-zones"},"IANA"),' time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".')),(0,l.kt)("p",null,"By default those options are passed to the native ",(0,l.kt)("inlineCode",{parentName:"p"},"Intl.DateTimeFormat"),", full documentation for the options you can find ",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options"},"here")),(0,l.kt)("h2",{id:"service-api"},"Service API"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localeChanges$")," - Observable of the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localizeDate()")," - Transform a date into a locale's date format."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"localizeNumber()")," - Transform a number into the locale's number format according to the number type."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"getLocale")," - Gets the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"setLocale")," - Sets the active locale."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"getCurrencySymbol")," - Gets the currency symbol for a given locale. If no locale is specified the currently active one is used.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts"},"translocoLocaleService.localeChanges$.subscribe(activeLocale => ...)\n\ntranslocoLocaleService.localizeNumber(1234567890, 'decimal') // 1,234,567,890\ntranslocoLocaleService.localizeNumber(0.5, 'percent') // 50%\ntranslocoLocaleService.localizeNumber(1000, 'currency') // $1,000.00\n\nconst locale = translocoLocaleService.getLocale();\ntranslocoLocaleService.setLocale('en-US')\n\ntranslocoLocaleService.getCurrencySymbol() // $\n")),(0,l.kt)("h2",{id:"localization-transformer"},"Localization Transformer"),(0,l.kt)("p",null,"In some cases you might want to customize the localization transformation, to achieve that you could provide your own localization transformer class."),(0,l.kt)("p",null,"There are two types of transformers for date and number:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="custom-transformer.ts"',title:'"custom-transformer.ts"'},"import { DefaultDateTransformer, DefaultNumberTransformer } from '@jsverse/transloco-locale';\n\nexport class CustomDateTransformer extends DefaultDateTransformer {\n public transform(date: Date, locale: Locale, options: DateFormatOptions): string {\n return ...\n\n // Fallback to default transformer\n return super.transform(date, locale, options);\n }\n}\n\nexport class CustomNumberTransformer extends DefaultNumberTransformer {\n public transform(\n value: number | string,\n type: NumberTypes,\n locale: string,\n options: Intl.NumberFormatOptions\n ): string {\n return ...\n\n // Fallback to default transformer\n return super.transform(value, type, locale, options);\n }\n}\n")),(0,l.kt)("p",null,"Provide these custom transformers using the ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoDateTransformer")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"provideTranslocoNumberTransformer")," functions."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c8f1445.54d8cbfc.js b/assets/js/2c8f1445.3bbce273.js similarity index 60% rename from assets/js/2c8f1445.54d8cbfc.js rename to assets/js/2c8f1445.3bbce273.js index 658480935..1b4ed76ad 100644 --- a/assets/js/2c8f1445.54d8cbfc.js +++ b/assets/js/2c8f1445.3bbce273.js @@ -1 +1 @@ -"use strict";(self.webpackChunktransloco_docs=self.webpackChunktransloco_docs||[]).push([[1483],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return m}});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=o.createContext({}),u=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=u(e.components);return o.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(t),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||a;return t?o.createElement(f,l(l({ref:n},c),{},{components:t})):o.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=d;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:t.filter(Boolean))?n:[]}(e).map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes,default:n.default}}))}function d(e){var n=e.values,t=e.children;return(0,r.useMemo)((function(){var e=null!=n?n:p(t);return function(e){var n=(0,u.l)(e,(function(e,n){return e.value===n.value}));if(n.length>0)throw new Error('Docusaurus error: Duplicate values "'+n.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[n,t])}function m(e){var n=e.value;return e.tabValues.some((function(e){return e.value===n}))}function f(e){var n=e.queryString,t=void 0!==n&&n,o=e.groupId,a=(0,i.k6)(),l=function(e){var n=e.queryString,t=void 0!==n&&n,o=e.groupId;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=o?o:null}({queryString:t,groupId:o});return[(0,s._X)(l),(0,r.useCallback)((function(e){if(l){var n=new URLSearchParams(a.location.search);n.set(l,e),a.replace(Object.assign({},a.location,{search:n.toString()}))}}),[l,a])]}function v(e){var n,t,o,a,l=e.defaultValue,i=e.queryString,s=void 0!==i&&i,u=e.groupId,p=d(e),v=(0,r.useState)((function(){return function(e){var n,t=e.defaultValue,o=e.tabValues;if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:o}))throw new Error('Docusaurus error: The has a defaultValue "'+t+'" but none of its children has the corresponding value. Available values are: '+o.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return t}var r=null!=(n=o.find((function(e){return e.default})))?n:o[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:l,tabValues:p})})),g=v[0],h=v[1],b=f({queryString:s,groupId:u}),y=b[0],k=b[1],N=(n=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),t=(0,c.Nk)(n),o=t[0],a=t[1],[o,(0,r.useCallback)((function(e){n&&a.set(e)}),[n,a])]),w=N[0],T=N[1],C=function(){var e=null!=y?y:w;return m({value:e,tabValues:p})?e:null}();return(0,r.useLayoutEffect)((function(){C&&h(C)}),[C]),{selectedValue:g,selectValue:(0,r.useCallback)((function(e){if(!m({value:e,tabValues:p}))throw new Error("Can't select invalid tab value="+e);h(e),k(e),T(e)}),[k,T,p]),tabValues:p}}var g=t(2389),h="tabList__CuJ",b="tabItem_LNqP";function y(e){var n=e.className,t=e.block,i=e.selectedValue,s=e.selectValue,u=e.tabValues,c=[],p=(0,l.o5)().blockElementScrollPositionUntilNextRender,d=function(e){var n=e.currentTarget,t=c.indexOf(n),o=u[t].value;o!==i&&(p(n),s(o))},m=function(e){var n,t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":var o,r=c.indexOf(e.currentTarget)+1;t=null!=(o=c[r])?o:c[0];break;case"ArrowLeft":var a,l=c.indexOf(e.currentTarget)-1;t=null!=(a=c[l])?a:c[c.length-1]}null==(n=t)||n.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},n)},u.map((function(e){var n=e.value,t=e.label,l=e.attributes;return r.createElement("li",(0,o.Z)({role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,key:n,ref:function(e){return c.push(e)},onKeyDown:m,onClick:d},l,{className:(0,a.Z)("tabs__item",b,null==l?void 0:l.className,{"tabs__item--active":i===n})}),null!=t?t:n)})))}function k(e){var n=e.lazy,t=e.children,o=e.selectedValue,a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){var l=a.find((function(e){return e.props.value===o}));return l?(0,r.cloneElement)(l,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},a.map((function(e,n){return(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})})))}function N(e){var n=v(e);return r.createElement("div",{className:(0,a.Z)("tabs-container",h)},r.createElement(y,(0,o.Z)({},e,n)),r.createElement(k,(0,o.Z)({},e,n)))}function w(e){var n=(0,g.Z)();return r.createElement(N,(0,o.Z)({key:String(n)},e))}},7317:function(e,n,t){t.r(n),t.d(n,{assets:function(){return d},contentTitle:function(){return c},default:function(){return v},frontMatter:function(){return u},metadata:function(){return p},toc:function(){return m}});var o=t(7462),r=t(3366),a=(t(7294),t(3905)),l=t(4866),i=t(5162),s=["components"],u={title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n"},c=void 0,p={unversionedId:"lazy-load/scope-configuration",id:"lazy-load/scope-configuration",title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n",source:"@site/docs/lazy-load/scope-configuration.mdx",sourceDirName:"lazy-load",slug:"/lazy-load/scope-configuration",permalink:"/transloco/docs/lazy-load/scope-configuration",draft:!1,editUrl:"https://github.com/jsverse/transloco/edit/master/docs/docs/lazy-load/scope-configuration.mdx",tags:[],version:"current",frontMatter:{title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n"},sidebar:"docs",previous:{title:"Language API",permalink:"/transloco/docs/language-api"},next:{title:"Inline Loaders",permalink:"/transloco/docs/lazy-load/inline-loaders"}},d={},m=[{value:"Lazy Module Providers",id:"lazy-module-providers",level:2},{value:"Component's Providers",id:"components-providers",level:2},{value:"Inline Input",id:"inline-input",level:2},{value:"Scope's namespace",id:"scopes-namespace",level:2}],f={toc:m};function v(e){var n=e.components,t=(0,r.Z)(e,s);return(0,a.kt)("wrapper",(0,o.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note that scopes follow ",(0,a.kt)("strong",{parentName:"p"},"Angular DI rules"),". They only work when declared in a lazy load module, or a component's providers.")),(0,a.kt)("p",null,"Let's say we have a todos page and we want to create separate translation files for this page, and load them only when the user navigates there.\nFirst, we need to create a ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," folder (or whatever name you choose); In it, we create a translation file for each language we want to support:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"\u251c\u2500 i18n/\n \u251c\u2500 en.json\n \u251c\u2500 es.json\n \u251c\u2500 todos/\n \u251c\u2500 en.json\n \u251c\u2500 es.json\n")),(0,a.kt)("p",null,"There are 3 levels of setting the translation scope:"),(0,a.kt)("h2",{id:"lazy-module-providers"},"Lazy Module Providers"),(0,a.kt)(l.Z,{mdxType:"Tabs"},(0,a.kt)(i.Z,{value:"Standalone",mdxType:"TabItem"},(0,a.kt)("p",null,"We can set it inside the ",(0,a.kt)("em",{parentName:"p"},"lazy route")," providers:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.routes.ts"',title:'"todos.routes.ts"'},"import { Route } from '@angular/router';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\nexport const TODO_ROUTES: Route = {\n path: '',\n loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),\n providers: [\n provideTranslocoScope('todos'),\n ],\n};\n\n"))),(0,a.kt)(i.Z,{value:"NgModule",mdxType:"TabItem"},(0,a.kt)("p",null,"We can set it inside the ",(0,a.kt)("em",{parentName:"p"},"lazy module")," providers:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.module.ts"',title:'"todos.module.ts"'},"import { provideTranslocoScope } from '@jsverse/transloco';\n\nconst routes: Routes = [\n {\n path: '',\n component: TodosComponent\n }\n];\n\n@NgModule({\n declarations: [TodosComponent],\n providers: [provideTranslocoScope('todos')],\n imports: [RouterModule.forChild(routes), TranslocoModule]\n})\nexport class TodosModule {}\n")))),(0,a.kt)("h2",{id:"components-providers"},"Component's Providers"),(0,a.kt)("p",null,"We can set it in a ",(0,a.kt)("em",{parentName:"p"},"component's providers"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.component.ts"',title:'"todos.component.ts"'},"@Component({\n selector: 'my-comp',\n templateUrl: './my-comp.component.html',\n providers: [provideTranslocoScope('todos')]\n})\nexport class MyComponent {}\n")),(0,a.kt)("h2",{id:"inline-input"},"Inline Input"),(0,a.kt)("p",null,"We can set the ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," input in the ",(0,a.kt)("inlineCode",{parentName:"p"},"transloco")," structural directive:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="todos.component.html"',"{1}":!0,title:'"todos.component.html"'},"\n

{{ t('todos.keyFromTodos') }}

\n
\n")),(0,a.kt)("p",null,"Each one of these options tells Transloco to load the corresponding ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," based on the active language and merge it under the scope namespace into the active language translation object."),(0,a.kt)("p",null,"For example, if the active language is ",(0,a.kt)("inlineCode",{parentName:"p"},"en"),", it will load the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos/en.json")," file, and will set the translation to be the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "header": "",\n "login": "",\n "todos": {\n "submit": "",\n "title": ""\n }\n}\n')),(0,a.kt)("p",null,"Now we can access each one of the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," keys by using the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," namespace:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="todos.component.html"',title:'"todos.component.html"'},"\n

{{ t('todos.title') }}

\n
\n\n{{ 'todos.title' | transloco }}\n\n\n")),(0,a.kt)("h2",{id:"scopes-namespace"},"Scope's namespace"),(0,a.kt)("p",null,"By default, the namespace will be the ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," name (camel cased), but we can override it by providing custom ",(0,a.kt)("inlineCode",{parentName:"p"},"alias")," name in the module/component ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," provider:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"provideTranslocoScope({ scope: 'todos', alias: 'customName' })\n")),(0,a.kt)("p",null,"Now we can access it through ",(0,a.kt)("inlineCode",{parentName:"p"},"customName")," instead of the original scope name (",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," in our case):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="todos.component.html"',title:'"todos.component.html"'},"\n

{{ t('customName.title') }}

\n
\n\n{{ 'customName.title' | transloco }}\n\n\n")))}v.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunktransloco_docs=self.webpackChunktransloco_docs||[]).push([[1483],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return m}});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=o.createContext({}),u=function(e){var n=o.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=u(e.components);return o.createElement(i.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||a;return t?o.createElement(f,l(l({ref:n},c),{},{components:t})):o.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=d;var s={};for(var i in n)hasOwnProperty.call(n,i)&&(s[i]=n[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var u=2;u child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:t.filter(Boolean))?n:[]}(e).map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes,default:n.default}}))}function d(e){var n=e.values,t=e.children;return(0,r.useMemo)((function(){var e=null!=n?n:p(t);return function(e){var n=(0,u.l)(e,(function(e,n){return e.value===n.value}));if(n.length>0)throw new Error('Docusaurus error: Duplicate values "'+n.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[n,t])}function m(e){var n=e.value;return e.tabValues.some((function(e){return e.value===n}))}function f(e){var n=e.queryString,t=void 0!==n&&n,o=e.groupId,a=(0,s.k6)(),l=function(e){var n=e.queryString,t=void 0!==n&&n,o=e.groupId;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=o?o:null}({queryString:t,groupId:o});return[(0,i._X)(l),(0,r.useCallback)((function(e){if(l){var n=new URLSearchParams(a.location.search);n.set(l,e),a.replace(Object.assign({},a.location,{search:n.toString()}))}}),[l,a])]}function v(e){var n,t,o,a,l=e.defaultValue,s=e.queryString,i=void 0!==s&&s,u=e.groupId,p=d(e),v=(0,r.useState)((function(){return function(e){var n,t=e.defaultValue,o=e.tabValues;if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:o}))throw new Error('Docusaurus error: The has a defaultValue "'+t+'" but none of its children has the corresponding value. Available values are: '+o.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return t}var r=null!=(n=o.find((function(e){return e.default})))?n:o[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:l,tabValues:p})})),g=v[0],h=v[1],b=f({queryString:i,groupId:u}),y=b[0],k=b[1],N=(n=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),t=(0,c.Nk)(n),o=t[0],a=t[1],[o,(0,r.useCallback)((function(e){n&&a.set(e)}),[n,a])]),w=N[0],T=N[1],C=function(){var e=null!=y?y:w;return m({value:e,tabValues:p})?e:null}();return(0,r.useLayoutEffect)((function(){C&&h(C)}),[C]),{selectedValue:g,selectValue:(0,r.useCallback)((function(e){if(!m({value:e,tabValues:p}))throw new Error("Can't select invalid tab value="+e);h(e),k(e),T(e)}),[k,T,p]),tabValues:p}}var g=t(2389),h="tabList__CuJ",b="tabItem_LNqP";function y(e){var n=e.className,t=e.block,s=e.selectedValue,i=e.selectValue,u=e.tabValues,c=[],p=(0,l.o5)().blockElementScrollPositionUntilNextRender,d=function(e){var n=e.currentTarget,t=c.indexOf(n),o=u[t].value;o!==s&&(p(n),i(o))},m=function(e){var n,t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":var o,r=c.indexOf(e.currentTarget)+1;t=null!=(o=c[r])?o:c[0];break;case"ArrowLeft":var a,l=c.indexOf(e.currentTarget)-1;t=null!=(a=c[l])?a:c[c.length-1]}null==(n=t)||n.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},n)},u.map((function(e){var n=e.value,t=e.label,l=e.attributes;return r.createElement("li",(0,o.Z)({role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,key:n,ref:function(e){return c.push(e)},onKeyDown:m,onClick:d},l,{className:(0,a.Z)("tabs__item",b,null==l?void 0:l.className,{"tabs__item--active":s===n})}),null!=t?t:n)})))}function k(e){var n=e.lazy,t=e.children,o=e.selectedValue,a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){var l=a.find((function(e){return e.props.value===o}));return l?(0,r.cloneElement)(l,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},a.map((function(e,n){return(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})})))}function N(e){var n=v(e);return r.createElement("div",{className:(0,a.Z)("tabs-container",h)},r.createElement(y,(0,o.Z)({},e,n)),r.createElement(k,(0,o.Z)({},e,n)))}function w(e){var n=(0,g.Z)();return r.createElement(N,(0,o.Z)({key:String(n)},e))}},7317:function(e,n,t){t.r(n),t.d(n,{assets:function(){return d},contentTitle:function(){return c},default:function(){return v},frontMatter:function(){return u},metadata:function(){return p},toc:function(){return m}});var o=t(7462),r=t(3366),a=(t(7294),t(3905)),l=t(4866),s=t(5162),i=["components"],u={title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n"},c=void 0,p={unversionedId:"lazy-load/scope-configuration",id:"lazy-load/scope-configuration",title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n",source:"@site/docs/lazy-load/scope-configuration.mdx",sourceDirName:"lazy-load",slug:"/lazy-load/scope-configuration",permalink:"/transloco/docs/lazy-load/scope-configuration",draft:!1,editUrl:"https://github.com/jsverse/transloco/edit/master/docs/docs/lazy-load/scope-configuration.mdx",tags:[],version:"current",frontMatter:{title:"Scope Configuration",description:"Scope Configuration | Transloco Angular i18n"},sidebar:"docs",previous:{title:"Language API",permalink:"/transloco/docs/language-api"},next:{title:"Inline Loaders",permalink:"/transloco/docs/lazy-load/inline-loaders"}},d={},m=[{value:"Lazy Module Providers",id:"lazy-module-providers",level:2},{value:"Component's Providers",id:"components-providers",level:2},{value:"Inline Input",id:"inline-input",level:2},{value:"Scope's namespace",id:"scopes-namespace",level:2}],f={toc:m};function v(e){var n=e.components,t=(0,r.Z)(e,i);return(0,a.kt)("wrapper",(0,o.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note that scopes follow ",(0,a.kt)("strong",{parentName:"p"},"Angular DI rules"),". They only work when declared in a lazy load module, or a component's providers.")),(0,a.kt)("p",null,"Let's say we have a todos page and we want to create separate translation files for this page, and load them only when the user navigates there.\nFirst, we need to create a ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," folder (or whatever name you choose); In it, we create a translation file for each language we want to support:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"\u251c\u2500 i18n/\n \u251c\u2500 en.json\n \u251c\u2500 es.json\n \u251c\u2500 todos/\n \u251c\u2500 en.json\n \u251c\u2500 es.json\n")),(0,a.kt)("p",null,"There are 3 levels of setting the translation scope:"),(0,a.kt)("h2",{id:"lazy-module-providers"},"Lazy Module Providers"),(0,a.kt)(l.Z,{mdxType:"Tabs"},(0,a.kt)(s.Z,{value:"Standalone",mdxType:"TabItem"},(0,a.kt)("p",null,"We can set it inside the ",(0,a.kt)("em",{parentName:"p"},"lazy route")," providers:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.routes.ts"',title:'"todos.routes.ts"'},"import { Route } from '@angular/router';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\nexport const TODO_ROUTES: Route = {\n path: '',\n loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),\n providers: [\n provideTranslocoScope('todos'),\n ],\n};\n\n")),(0,a.kt)("p",null,"We also can provide several scopes at once: "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="core.module.ts"',title:'"core.module.ts"'},"import { Route } from '@angular/router';\nimport {provideTranslocoScope} from \"./transloco.providers\";\n\nexport const TODO_ROUTES: Route = {\n path: '',\n loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),\n providers: [\n provideTranslocoScope('todos', { scope: 'shared', alias: 'sharedAlias' }),\n ],\n};\n"))),(0,a.kt)(s.Z,{value:"NgModule",mdxType:"TabItem"},(0,a.kt)("p",null,"We can set it inside the ",(0,a.kt)("em",{parentName:"p"},"lazy module")," providers:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.module.ts"',title:'"todos.module.ts"'},"import { provideTranslocoScope } from '@jsverse/transloco';\n\nconst routes: Routes = [\n {\n path: '',\n component: TodosComponent\n }\n];\n\n@NgModule({\n declarations: [TodosComponent],\n providers: [provideTranslocoScope('todos')],\n imports: [RouterModule.forChild(routes), TranslocoModule]\n})\nexport class TodosModule {}\n")))),(0,a.kt)("h2",{id:"components-providers"},"Component's Providers"),(0,a.kt)("p",null,"We can set it in a ",(0,a.kt)("em",{parentName:"p"},"component's providers"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="todos.component.ts"',title:'"todos.component.ts"'},"@Component({\n selector: 'my-comp',\n templateUrl: './my-comp.component.html',\n providers: [provideTranslocoScope('todos')]\n})\nexport class MyComponent {}\n")),(0,a.kt)("h2",{id:"inline-input"},"Inline Input"),(0,a.kt)("p",null,"We can set the ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," input in the ",(0,a.kt)("inlineCode",{parentName:"p"},"transloco")," structural directive:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="todos.component.html"',"{1}":!0,title:'"todos.component.html"'},"\n

{{ t('todos.keyFromTodos') }}

\n
\n")),(0,a.kt)("p",null,"Each one of these options tells Transloco to load the corresponding ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," based on the active language and merge it under the scope namespace into the active language translation object."),(0,a.kt)("p",null,"For example, if the active language is ",(0,a.kt)("inlineCode",{parentName:"p"},"en"),", it will load the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos/en.json")," file, and will set the translation to be the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "header": "",\n "login": "",\n "todos": {\n "submit": "",\n "title": ""\n }\n}\n')),(0,a.kt)("p",null,"Now we can access each one of the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," keys by using the ",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," namespace:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="todos.component.html"',title:'"todos.component.html"'},"\n

{{ t('todos.title') }}

\n
\n\n{{ 'todos.title' | transloco }}\n\n\n")),(0,a.kt)("h2",{id:"scopes-namespace"},"Scope's namespace"),(0,a.kt)("p",null,"By default, the namespace will be the ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," name (camel cased), but we can override it by providing custom ",(0,a.kt)("inlineCode",{parentName:"p"},"alias")," name in the module/component ",(0,a.kt)("inlineCode",{parentName:"p"},"scope")," provider:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"provideTranslocoScope({ scope: 'todos', alias: 'customName' })\n")),(0,a.kt)("p",null,"Now we can access it through ",(0,a.kt)("inlineCode",{parentName:"p"},"customName")," instead of the original scope name (",(0,a.kt)("inlineCode",{parentName:"p"},"todos")," in our case):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="todos.component.html"',title:'"todos.component.html"'},"\n

{{ t('customName.title') }}

\n
\n\n{{ 'customName.title' | transloco }}\n\n\n")))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.8af759de.js b/assets/js/runtime~main.e2bb0c06.js similarity index 96% rename from assets/js/runtime~main.8af759de.js rename to assets/js/runtime~main.e2bb0c06.js index b93e5d401..96608c26d 100644 --- a/assets/js/runtime~main.8af759de.js +++ b/assets/js/runtime~main.e2bb0c06.js @@ -1 +1 @@ -!function(){"use strict";var e,t,n,r,f,c={},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={id:e,loaded:!1,exports:{}};return c[e].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=c,o.c=a,e=[],o.O=function(t,n,r,f){if(!n){var c=1/0;for(u=0;u=f)&&Object.keys(o.O).every((function(e){return o.O[e](n[d])}))?n.splice(d--,1):(a=!1,f0&&e[u-1][2]>f;u--)e[u]=e[u-1];e[u]=[n,r,f]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);o.r(f);var c={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},o.d(f,c),f},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))},o.u=function(e){return"assets/js/"+({53:"935f2afb",88:"2d91c6cb",379:"578a8fbd",626:"2428b542",688:"bc25c4a6",851:"1895fca9",961:"f5916a9d",1056:"828e241f",1369:"34418544",1483:"2c8f1445",1633:"a3e68599",1883:"3f0d6008",1924:"4bb42e48",1971:"6fa4345c",2340:"4dc7fb17",2345:"10e5051b",3331:"25290e68",3710:"711e5342",3737:"066c37e2",4067:"0db64d9d",4077:"57575c16",4172:"e427aef3",4195:"c4f5d8e4",4608:"54a4611d",4933:"11049548",5595:"177de9e1",5808:"f8289b03",5961:"b6de4ce1",6079:"45d7e894",6240:"3e47ec67",6488:"1dc2873a",6505:"d16f17f3",6577:"edca4672",6686:"bcaefbdc",6976:"a675d0dd",7081:"11402d4c",7370:"138741eb",7702:"36dc5c97",7868:"6459b84b",7918:"17896441",7920:"1a4e3797",7937:"ea313555",7938:"b46bbad0",7947:"6b158a97",8245:"6ebf2a3a",8835:"4687851f",8877:"584eeadd",9514:"1be78505",9717:"50fbf339"}[e]||e)+"."+{53:"c16bea6e",88:"241c983f",379:"4ae0e220",626:"455c1211",688:"2a677717",851:"1cdd6bab",961:"bdbeaf65",1056:"c69b37d0",1369:"13525f48",1426:"0b6cbf13",1483:"54d8cbfc",1633:"656a6798",1883:"895351d0",1924:"eef992b3",1971:"a0f7cf6c",2340:"f7a83c13",2345:"f0919c77",3331:"b9682eaa",3710:"1b77fd7d",3737:"8a1262ec",4067:"ffc1c391",4077:"3af16636",4172:"ce084581",4195:"7612b7eb",4608:"dc2062b8",4933:"1cc86197",4972:"10645dc8",5595:"4594def5",5808:"a4a8402a",5961:"66829a9a",6079:"a6c7c417",6240:"c1944889",6488:"e359b913",6505:"af4b0a20",6577:"7a4da45f",6686:"8926481f",6945:"068a88f5",6976:"ab592cb4",7081:"52a5ec3e",7370:"f40810c2",7702:"9800a51c",7868:"458c7db9",7918:"7b100453",7920:"553ad5b1",7937:"aefa0868",7938:"78d24c4f",7947:"9ed30a15",8245:"d0a0bac4",8835:"1a47985d",8877:"8fbd6508",8894:"1fa7ea6e",9514:"e3c503c1",9717:"b7b66cc7"}[e]+".js"},o.miniCssF=function(e){},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},f="transloco-docs:",o.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var a,d;if(void 0!==n)for(var b=document.getElementsByTagName("script"),u=0;u=f)&&Object.keys(o.O).every((function(e){return o.O[e](n[d])}))?n.splice(d--,1):(a=!1,f0&&e[u-1][2]>f;u--)e[u]=e[u-1];e[u]=[n,r,f]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);o.r(f);var c={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},o.d(f,c),f},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))},o.u=function(e){return"assets/js/"+({53:"935f2afb",88:"2d91c6cb",379:"578a8fbd",626:"2428b542",688:"bc25c4a6",851:"1895fca9",961:"f5916a9d",1056:"828e241f",1369:"34418544",1483:"2c8f1445",1633:"a3e68599",1883:"3f0d6008",1924:"4bb42e48",1971:"6fa4345c",2340:"4dc7fb17",2345:"10e5051b",3331:"25290e68",3710:"711e5342",3737:"066c37e2",4067:"0db64d9d",4077:"57575c16",4172:"e427aef3",4195:"c4f5d8e4",4608:"54a4611d",4933:"11049548",5595:"177de9e1",5808:"f8289b03",5961:"b6de4ce1",6079:"45d7e894",6240:"3e47ec67",6488:"1dc2873a",6505:"d16f17f3",6577:"edca4672",6686:"bcaefbdc",6976:"a675d0dd",7081:"11402d4c",7370:"138741eb",7702:"36dc5c97",7868:"6459b84b",7918:"17896441",7920:"1a4e3797",7937:"ea313555",7938:"b46bbad0",7947:"6b158a97",8245:"6ebf2a3a",8835:"4687851f",8877:"584eeadd",9514:"1be78505",9717:"50fbf339"}[e]||e)+"."+{53:"c16bea6e",88:"241c983f",379:"4ae0e220",626:"455c1211",688:"2a677717",851:"1cdd6bab",961:"bdbeaf65",1056:"c69b37d0",1369:"13525f48",1426:"0b6cbf13",1483:"3bbce273",1633:"656a6798",1883:"895351d0",1924:"eef992b3",1971:"a0f7cf6c",2340:"f7a83c13",2345:"f0919c77",3331:"b9682eaa",3710:"1b77fd7d",3737:"a989d117",4067:"ffc1c391",4077:"3af16636",4172:"ce084581",4195:"7612b7eb",4608:"dc2062b8",4933:"1cc86197",4972:"10645dc8",5595:"4594def5",5808:"a4a8402a",5961:"66829a9a",6079:"a6c7c417",6240:"c1944889",6488:"e359b913",6505:"af4b0a20",6577:"7a4da45f",6686:"8926481f",6945:"068a88f5",6976:"ab592cb4",7081:"52a5ec3e",7370:"f40810c2",7702:"9800a51c",7868:"458c7db9",7918:"7b100453",7920:"553ad5b1",7937:"aefa0868",7938:"78d24c4f",7947:"9ed30a15",8245:"d0a0bac4",8835:"1a47985d",8877:"8fbd6508",8894:"1fa7ea6e",9514:"e3c503c1",9717:"b7b66cc7"}[e]+".js"},o.miniCssF=function(e){},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},f="transloco-docs:",o.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var a,d;if(void 0!==n)for(var b=document.getElementsByTagName("script"),u=0;u Additional Functionality | Transloco Angular i18n - + @@ -14,7 +14,7 @@ In order to safely use this method, you are responsible for ensuring that the translation files have been successfully loaded by the time it's called.

translateObject()

You don't have to inject the service each time you need to translate an object. Transloco has an exported translateObject() function:

import { translateObject } from '@jsverse/transloco';

translateObject('some.object');
info

Note that this function is a proxy to the TranslocoService.translateObject method. It will not work if the service didn't initialize.
In order to safely use this method, you are responsible for ensuring that the translation files have been successfully loaded by the time it's called.

getBrowserLang()

Returns the language code name from the browser, e.g. "en"

import { getBrowserLang } from '@jsverse/transloco';

getBrowserLang();

getBrowserCultureLang()

Returns the culture language code name from the browser, e.g. "en-US"

import { getBrowserCultureLang } from '@jsverse/transloco';

getBrowserCultureLang()
- + \ No newline at end of file diff --git a/docs/blog-posts.html b/docs/blog-posts.html index bff9f9d6f..09de820ba 100644 --- a/docs/blog-posts.html +++ b/docs/blog-posts.html @@ -4,13 +4,13 @@ Blog Posts | Transloco Angular i18n - +

Blog Posts

🚀 Introducing Transloco: Angular Internationalization Done Right
For a while I’ve been thinking about creating an Angular i18n library, which incorporates some concepts I had in mind…
medium.com
Transloco Proudly Presents: Functional Translations
A friend told me of an exciting use-case, where he needed to change translation values depending on whether the user was allowed access to a feature or not.…
medium.com
Lazy Load and Encapsulate i18n Files in Angular with Transloco
When building an application that needs to be translated, one of the most important things to consider is how we organize our translation…
medium.com
Lazy Load Translation Files In Angular Using Transloco
In this article, we will learn how we can use Transloco to lazy load translation files in our Angular application.…
medium.com
Introducing Localization Support for Transloco: The Internalization Library for Angular
Transloco comes with many features which will help us to easily create…
medium.com
Using MessageFormat with Transloco
🎸 Using MessageFormat with Transloco. Transloco, an Angular Internationalization Library, w…
dev.to
Help the Translator by Using Transloco
There are times where we need to help the translator with a description and meaning. To translate a text message accurately, the…
medium.com
🎉 Good Things Come to Those Who Wait: What’s new in Transloco
The next generation i18n library for Angular just got better! Updates for Transloco, the Angular translation library…
medium.com
Creating Search Engine-Friendly Internationalized Apps with Angular Universal and Transloco 🌐
In this article, I will show you how easily we can add internalization (i18n) support to Angular SSR using the next generation Angular…
medium.com
Translation Files Validation in Angular with Transloco
When working on an enterprise application and with multiple teams, it’s often the case where we have merge conflicts with one of the…
medium.com
Strategies for Cache-Busting Translation Files in Angular
When a translation file is initially loaded, the browser views it as a static asset, and as such, might cache it for a long time (depending on how your website…
medium.com
- + \ No newline at end of file diff --git a/docs/faq.html b/docs/faq.html index d2429478f..8bb35e78f 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -4,7 +4,7 @@ FAQ | Transloco Angular i18n - + @@ -14,7 +14,7 @@ before calling it.

You can make sure you translations are loaded before your test executes by simply setting the preloadLangs to true in the options passed to TranslocoTestingModule.forRoot.

Why does querying an element inside the *transloco directive using @ViewChild() not working?

The transloco structural directive has an async operation in its internals which is fetching the translations.

Because of that, the contents of the directive won't be available until the translations are fetched, so you can't access the element in the ngOnInit nor the ngAfterViewInit.

The simplest way you can gain access to the element on render is by making the ViewChild a setter.

- + \ No newline at end of file diff --git a/docs/getting-started/angular-compatability.html b/docs/getting-started/angular-compatability.html index ef3afa3a4..82e74764f 100644 --- a/docs/getting-started/angular-compatability.html +++ b/docs/getting-started/angular-compatability.html @@ -4,13 +4,13 @@ Angular Compatability | Transloco Angular i18n - +

Angular Compatability

Make sure you install the version corresponding to your Angular version:

Angular@jsverse/transloco@jsverse/transloco-locale@jsverse/transloco-messageformat@jsverse/transloco-preload-langs@jsverse/transloco-persist-translations@jsverse/transloco-persist-lang
>=167.x7.x7.x7.x7.x7.x

Soon support for older angular versions will be released under the jsverse scope.

See older versions

Angular@ngneat/transloco@ngneat/transloco-locale@ngneat/transloco-messageformat@ngneat/transloco-preload-langs@ngneat/transloco-persist-translations@ngneat/transloco-persist-lang
>=13 <164.x4.x4.x4.x4.x4.x
123.x3.x3.x3.x3.x3.x
>=6 <122.x<3<3<3<3<3

- + \ No newline at end of file diff --git a/docs/getting-started/config-options.html b/docs/getting-started/config-options.html index 13bb93dea..f406adf76 100644 --- a/docs/getting-started/config-options.html +++ b/docs/getting-started/config-options.html @@ -4,7 +4,7 @@ Config Options | Transloco Angular i18n - + @@ -12,7 +12,7 @@

Config Options

Below is a list of the config options and their usages:

reRenderOnLangChange

Applications that don't allow the user to change the language in runtime (i.e., from a dropdown), should leave it false. It can save on memory by rendering the view once and unsubscribing from the language changes event (defaults to false):

translocoConfig({
reRenderOnLangChange: boolean
})

defaultLang

Sets the default language: (defaults to en)

translocoConfig({
defaultLang: 'en'
})

fallbackLang

Sets the default language/s to use as a fallback. See the TranslocoFallbackStrategy section if you need to customize it:

translocoConfig({
fallbackLang: 'en',
fallbackLang: ['en', 'ru']
})

failedRetries

How many time should Transloco retry to load translation files, in case of a load failure (defaults to 2):

translocoConfig({
failedRetries: 1
})

prodMode

Whether the application runs in production mode: (defaults to false) When enabled, Transloco will disable all console warnings.

import { isDevMode } from '@angular/core';

translocoConfig({
prodMode: !isDevMode()
})

availableLangs

The available languages in your application:

translocoConfig({
availableLangs: ['en', 'es']
})

missingHandler.allowEmpty

Whether to allow empty values: (defaults to false)

translocoConfig({
missingHandler: {
allowEmpty: true
}
})

missingHandler.useFallbackTranslation

Whether to use the fallback language for missing keys or values: (defaults to false)

translocoConfig({
fallbackLang: 'en',
missingHandler: {
// It will use the first language set in the `fallbackLang` property
useFallbackTranslation: true
}
})

missingHandler.logMissingKey

Whether to console.warn a missing key: (defaults to true)

translocoConfig({
missingHandler: {
logMissingKey: false
}
})

flatten.aot

Check the optimization plugin:

import {isDevMode} from "@angular/core";

translocoConfig({
flatten: {
aot: !isDevMode()
}
})

interpolation

The start and end markings for parameters: (defaults to ['{{', '}}'])

translocoConfig({
// This will enable you to specify parameters as such: `"Hello <<<value>>>"`
interpolation: ['<<<', '>>>']
})
- + \ No newline at end of file diff --git a/docs/getting-started/installation.html b/docs/getting-started/installation.html index 6a29052f4..0aea67d2d 100644 --- a/docs/getting-started/installation.html +++ b/docs/getting-started/installation.html @@ -4,13 +4,13 @@ Installation | Transloco Angular i18n - +

Installation

Install the library using Angular CLI:

ng add @jsverse/transloco
# On an nx workspace
nx g @jsverse/transloco:ng-add

For more information, see the ng-add command page.

As part of the installation process you'll be presented with questions; Once you answer them, everything you need will automatically be created for you. Let's take a closer look at the generated files:

Transloco loader

A default http loader implementation to fetch the translation files:

import { inject, Injectable } from "@angular/core";
import { Translation, TranslocoLoader } from "@jsverse/transloco";
import { HttpClient } from "@angular/common/http";

@Injectable({ providedIn: 'root' })
export class TranslocoHttpLoader implements TranslocoLoader {
private http = inject(HttpClient);

getTranslation(lang: string) {
return this.http.get<Translation>(`/assets/i18n/${lang}.json`);
}
}

note

When you deploy your application and Transloco is unable to load your language files it might because you need to use a relative path:

getTranslation(langPath: string) {
return this.http.get(`./assets/i18n/${langPath}.json`);
}

Translation JSON files

Transloco creates boilerplate files for the requested languages with an empty JSON:

assets/i18n/{en, es}.json
{}

The command will add the provideTransloco and provideHttpClient to your app providers:

app.config.ts
import { ApplicationConfig, isDevMode } from '@angular/core';
import { provideHttpClient } from '@angular/common/http';
import { provideTransloco } from '@jsverse/transloco';

import { TranslocoHttpLoader } from './transloco-loader';

export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(),
provideTransloco({
config: {
availableLangs: ['en', 'es'],
defaultLang: 'en',
// Remove this option if your application doesn't support changing language in runtime.
reRenderOnLangChange: true,
prodMode: !isDevMode(),
},
loader: TranslocoHttpLoader
})
]
};

And that's it! Now we are ready to use it in our project.

- + \ No newline at end of file diff --git a/docs/hack.html b/docs/hack.html index 57e00e59f..6d8b02629 100644 --- a/docs/hack.html +++ b/docs/hack.html @@ -4,13 +4,13 @@ Hack The Library | Transloco Angular i18n - +

Hack The Library

The Loader

The loader provides you with the ability to override the default handling of translation file loading.

import { TranslocoLoader } from '@jsverse/transloco';

export class CustomLoader implements TranslocoLoader {
getTranslation(lang: string) {
if(langInLocalStorage) {
return of(langFromStorage);
}

return ...
}
}

The Interceptor

The interceptor provides you with the ability to manipulate the translation object before it is saved by the service.

import { TranslocoInterceptor } from '@jsverse/transloco';

export class CustomInterceptor implements TranslocoInterceptor {
preSaveTranslation(translation: Translation, lang: string): Translation {
return translation;
}

preSaveTranslationKey(key: string, value: string, lang: string): string {
return value;
}
}

Missing Handler

This handler is responsible for handling missing keys. The default handler calls console.warn() with the key when config.isProdMode is set to false, and returns an empty string to use as a replacement for the missing key's value.

import { TranslocoMissingHandler } from '@jsverse/transloco';

export class CustomHandler implements TranslocoMissingHandler {
handle(key: string, config: TranslocoConfig) {
return '...';
}
}

Fallback Strategy

The fallback strategy is responsible for loading the fallback translation file, when the selected active language has failed to load. The default behavior is to load the language set in the config.fallbackLang, and set it as the new active language.

When you need more control over this functionality, you can define your own strategy:

import { TranslocoFallbackStrategy } from '@jsverse/transloco';

export class CustomStrategy implements TranslocoFallbackStrategy {
getNextLangs(failedLang: string) {
return '...';
}
}

The getNextLangs method is called with the failed language, and should return an array containing the next languages to load, in order of preference.

- + \ No newline at end of file diff --git a/docs/language-api.html b/docs/language-api.html index 135c86ee0..2f1193935 100644 --- a/docs/language-api.html +++ b/docs/language-api.html @@ -4,13 +4,13 @@ Language API | Transloco Angular i18n - +

Language API

Below is a list of the TranslocoService API and their usages:

getDefaultLang()

Returns the default language:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.getDefaultLang();
}
}

setDefaultLang()

Sets the default language:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.setDefaultLang('es');
}
}

getActiveLang()

Gets the current active language:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.getActiveLang();
}
}

setActiveLang()

Sets the current active language:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.setActiveLang('es');
}
}

getAvailableLangs()

Gets the available languages:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.getAvailableLangs();
}
}

setFallbackLangForMissingTranslation()

Sets the fallback translation language for the currently active language in case of a missing key:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'he' });
}
}
caution

If you pass an array, the first value is used. The reason for that is that fallback translation for a missing key only supports one language.

setAvailableLangs()

Sets the available languages:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.setAvailableLangs(['en', 'es']);

// Or use an object
translocoService.setAvailableLangs([{ id: 'en', label: 'English' }]);
}
}

langChanges$

Listens to the language change event:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.langChanges$.subscribe(lang => ...);
}
}
note

langChanges$ will emit the active language on subscription.

load()

Load the given language, and add it to the service:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {
translocoService.load('en').subscribe();
}
}
- + \ No newline at end of file diff --git a/docs/lazy-load/inline-loaders.html b/docs/lazy-load/inline-loaders.html index 0a6111685..fdaada502 100644 --- a/docs/lazy-load/inline-loaders.html +++ b/docs/lazy-load/inline-loaders.html @@ -4,14 +4,14 @@ Inline Loaders | Transloco Angular i18n - +

Inline Loaders

When working on a feature module or a library (which is common in a monorepo environment), we may want to have the translation files inside the module folder and ship them together with it. To enable this feature, Transloco supports scope with inline loaders. We can pass the scope name and an inline loader that leverages Webpack import function to lazy load the local translation files.

Let's say we have the following Angular CLI project:

📦projects
┗ 📂feature
┃ ┣ 📂src
┃ ┃ ┣ 📂lib
┃ ┃ ┃ ┣ 📂i18n
┃ ┃ ┃ ┃ ┣ 📜en.json
┃ ┃ ┃ ┃ ┗ 📜es.json
┃ ┃ ┃ ┣ 📜feature.component.ts
┃ ┃ ┃ ┣ 📜feature.routes.ts
┃ ┃ ┃ ┗ 📜feature.service.ts
┃ ┃ ┣ 📜public-api.ts
📦src
┣ 📂app
┃ ┣ 📜app.routes.ts
┃ ┣ 📜app.component.css
┃ ┣ 📜app.component.html
┃ ┣ 📜app.component.ts
┃ ┣ 📜app.config.ts
┃ ┗ 📜transloco.loader.ts
┣ 📂assets
┃ ┣ 📂i18n
┃ ┃ ┣ 📜en.json
┃ ┃ ┗ 📜es.json

Inside the feature route/component, we can define a scope provider and pass an inline loader:

feature.routes.ts
export const loader = ['en', 'es'].reduce((acc, lang) => {
acc[lang] = () => import(`../i18n/${lang}.json`);
return acc;
}, {});

export const FEATURE_ROUTES: Route = {
path: 'feature',
loadComponent: () => import('./feature.component').then(FeatureComponent => FeatureComponent),
providers: [
provideTranslocoScope({
scope: 'scopeName',
loader
})
]
};
info

Note that when using an inline loader, the scope key is used as the alias.

Now we can translate our content using the scope we define:

feature.component.ts
@Component({
selector: 'app-feature',
template: `
<ng-container *transloco="let t">
<p>{{ t('scopeName.title') }}</p>
</ng-container>`,
imports: [TranslocoDirective]
})
export default class FeatureComponent {}
info

Note that following the Angular DI rules, it can be done either in a feature module that we lazy-loaded or at the component providers level.

- + \ No newline at end of file diff --git a/docs/lazy-load/scope-configuration.html b/docs/lazy-load/scope-configuration.html index 817ac038d..4cbc61893 100644 --- a/docs/lazy-load/scope-configuration.html +++ b/docs/lazy-load/scope-configuration.html @@ -4,14 +4,14 @@ Scope Configuration | Transloco Angular i18n - +

Scope Configuration

info

Note that scopes follow Angular DI rules. They only work when declared in a lazy load module, or a component's providers.

Let's say we have a todos page and we want to create separate translation files for this page, and load them only when the user navigates there. -First, we need to create a todos folder (or whatever name you choose); In it, we create a translation file for each language we want to support:

├─ i18n/
├─ en.json
├─ es.json
├─ todos/
├─ en.json
├─ es.json

There are 3 levels of setting the translation scope:

Lazy Module Providers

We can set it inside the lazy route providers:

todos.routes.ts
import { Route } from '@angular/router';
import { provideTranslocoScope } from '@jsverse/transloco';

export const TODO_ROUTES: Route = {
path: '',
loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),
providers: [
provideTranslocoScope('todos'),
],
};

Component's Providers

We can set it in a component's providers:

todos.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoScope('todos')]
})
export class MyComponent {}

Inline Input

We can set the scope input in the transloco structural directive:

todos.component.html
<ng-container *transloco="let t; scope: 'todos';">
<h1>{{ t('todos.keyFromTodos') }}</h1>
</ng-container>

Each one of these options tells Transloco to load the corresponding scope based on the active language and merge it under the scope namespace into the active language translation object.

For example, if the active language is en, it will load the todos/en.json file, and will set the translation to be the following:

{
"header": "",
"login": "",
"todos": {
"submit": "",
"title": ""
}
}

Now we can access each one of the todos keys by using the todos namespace:

todos.component.html
<ng-container *transloco="let t">
<h1>{{ t('todos.title') }}</h1>
</ng-container>

{{ 'todos.title' | transloco }}

<span transloco="todos.submit"></span>

Scope's namespace

By default, the namespace will be the scope name (camel cased), but we can override it by providing custom alias name in the module/component scope provider:

provideTranslocoScope({ scope: 'todos', alias: 'customName' })

Now we can access it through customName instead of the original scope name (todos in our case):

todos.component.html
<ng-container *transloco="let t">
<h1>{{ t('customName.title') }}</h1>
</ng-container>

{{ 'customName.title' | transloco }}

<span transloco="customName.submit"></span>
- +First, we need to create a todos folder (or whatever name you choose); In it, we create a translation file for each language we want to support:

├─ i18n/
├─ en.json
├─ es.json
├─ todos/
├─ en.json
├─ es.json

There are 3 levels of setting the translation scope:

Lazy Module Providers

We can set it inside the lazy route providers:

todos.routes.ts
import { Route } from '@angular/router';
import { provideTranslocoScope } from '@jsverse/transloco';

export const TODO_ROUTES: Route = {
path: '',
loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),
providers: [
provideTranslocoScope('todos'),
],
};

We also can provide several scopes at once:

core.module.ts
import { Route } from '@angular/router';
import {provideTranslocoScope} from "./transloco.providers";

export const TODO_ROUTES: Route = {
path: '',
loadComponent: () => import('./todos.component').then((TodosComponent) => TodosComponent),
providers: [
provideTranslocoScope('todos', { scope: 'shared', alias: 'sharedAlias' }),
],
};

Component's Providers

We can set it in a component's providers:

todos.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoScope('todos')]
})
export class MyComponent {}

Inline Input

We can set the scope input in the transloco structural directive:

todos.component.html
<ng-container *transloco="let t; scope: 'todos';">
<h1>{{ t('todos.keyFromTodos') }}</h1>
</ng-container>

Each one of these options tells Transloco to load the corresponding scope based on the active language and merge it under the scope namespace into the active language translation object.

For example, if the active language is en, it will load the todos/en.json file, and will set the translation to be the following:

{
"header": "",
"login": "",
"todos": {
"submit": "",
"title": ""
}
}

Now we can access each one of the todos keys by using the todos namespace:

todos.component.html
<ng-container *transloco="let t">
<h1>{{ t('todos.title') }}</h1>
</ng-container>

{{ 'todos.title' | transloco }}

<span transloco="todos.submit"></span>

Scope's namespace

By default, the namespace will be the scope name (camel cased), but we can override it by providing custom alias name in the module/component scope provider:

provideTranslocoScope({ scope: 'todos', alias: 'customName' })

Now we can access it through customName instead of the original scope name (todos in our case):

todos.component.html
<ng-container *transloco="let t">
<h1>{{ t('customName.title') }}</h1>
</ng-container>

{{ 'customName.title' | transloco }}

<span transloco="customName.submit"></span>
+ \ No newline at end of file diff --git a/docs/loading-template.html b/docs/loading-template.html index 6e8a08a8d..4188f72fa 100644 --- a/docs/loading-template.html +++ b/docs/loading-template.html @@ -4,13 +4,13 @@ Loading Template | Transloco Angular i18n - +

Loading Template

Transloco provides you with a way to define a loading template, that will be used while the translation file is loading.

Use the provideTranslocoLoadingTpl function either in lazy module providers, component providers, in the template, or even in the AppModule/app.config.ts itself (affecting the entire app).

For example:

my-comp.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoLoadingTpl(`<p>loading...</p>`)]
})
export class MyComponent {}

It can take a raw HTML value, or a custom Angular component. Alternatively, here is how to use it directly in the template:

my-comp.component.html
<ng-container *transloco="let t; loadingTpl: loading">
<h1>{{ t('title') }}</h1>
</ng-container>

<ng-template #loading>
<h1>Loading...</h1>
</ng-template>
- + \ No newline at end of file diff --git a/docs/migration/angular.html b/docs/migration/angular.html index 2aae5d649..30b7350fc 100644 --- a/docs/migration/angular.html +++ b/docs/migration/angular.html @@ -4,14 +4,14 @@ Angular | Transloco Angular i18n - +

Angular

info

some manual changes might still be needed after the script ran.

The script will iterate over all your HTML files, build a translation file and will execute the replacements described below.

Command

ng g @jsverse/transloco:migrate

The Translation file

The script will extract all the translations from the HTML files and will construct a translations JSON file. The script will use the translation string as the key by making the entire string kebab case (My sample string => my-sample-string) example for the output JSON:

en.json
{
"my-sample-string": "My sample string",
"my-title": "My title"
}

Here is an example of an HTML section and the matching JSON output:

<h1 i18n>translation value</h1>
<h1 i18n="site header|value 1 sample">Val1</h1>
<h1 i18n="site header|value 2 sample">Val2</h1>
<h1 i18n="other context|another comment@@myId">Val3</h1>

Will output:

en.json
{
"translation-value": "translation value",
"site header": {
"val1": "Val1",
"val1.comment": "value 1 sample",
"val2": "Val2",
"val2.comment": "value 2 sample",
},
"other context": {
"myId": "Val3",
"myId.comment": "another comment"
}
}

Note: the .comment is the way we support comments in Transloco.

Directives

The i18n & i18n-<attribute> directives will be replaced with the transloco pipe:

before.html
<h1 i18n>Hello World</h1>
<h1 i18n="other context|another comment@@myId">Some value</h1>
<img src="..." i18n i18n-title="Wow image">
after.html
<h1>{{ 'hello-world' | transloco }}</h1>
<h1>{{ 'some-value' | transloco }}</h1>
<img src="..." title="{{ 'wow-image' | transloco }}">

If you encounter any issues with the migration script please open a Github issue so we can resolve them and make a better experience for all.

- + \ No newline at end of file diff --git a/docs/migration/ngx.html b/docs/migration/ngx.html index 62ee4e32e..dad4afd01 100644 --- a/docs/migration/ngx.html +++ b/docs/migration/ngx.html @@ -4,14 +4,14 @@ ngx-translate | Transloco Angular i18n - +

ngx-translate

info

some manual changes might still be needed after the script ran.

Command

ng g @jsverse/transloco:migrate

What will be done?

The script will iterate recursively over all your HTML and TS files and will execute the replacements described below:

Pipes

The translate pipes will be replaced with the transloco pipe.

Examples:
  1. {{ "hello.world" | translate }} will be replaced with{{ "hello.world" | transloco }}
  2. {{ "hello.world" | translate | anotherPipe | oneMore ... }} will be replaced with{{ "hello.world" | transloco | anotherPipe | oneMore ... }}
  3. {{ "hello" | translate:{name: 'Jhon'} }} will be replaced with{{ "hello" | transloco:{name: 'Jhon'} }}
  4. {{ "hello" | translate:{name: 'Jhon'} | anotherPipe }} will be replaced with{{ "hello" | transloco:{name: 'Jhon'} | anotherPipe }}
  5. <component [header]="'hello.world' | translate"... will be replaced with <component [header]="'hello.world' | transloco"...
  6. <component [header]="'hello.world' | translate | anotherPipe"... will be replaced with <component [header]="'hello.world' | transloco | anotherPipe"...
  7. <component [header]="'hello' | translate:params | anotherPipe"... will be replaced with <component [header]="'hello' | transloco:params | anotherPipe"...

Directives

The translate & translateParams directives will be replaced with the matching transloco directives.

Examples:
  1. <div [translate]="'HELLO'" [translateParams]="{value: 'world'}"></div> will be replaced with<div [transloco]="'HELLO'" [translocoParams]="{value: 'world'}"></div>

Imports

The TranslateService imports will be replaced with TranslocoService.

Examples:
  1. import {TranslateService} from '@ngx-translate/core'; will be replaced with import { TranslocoService } from '@jsverse/transloco';
  2. import {TranslateModule, TranslateLoader} from '@ngx-translate/core'; will be replaced with import {TranslateLoader} from '@ngx-translate/core';import { TranslocoService } from '@jsverse/transloco';

Constructor Injections

The TranslateService injections will be replaced with TranslocoService.

Examples:
  1. constructor(private translate: TranslateService) { will be replaced with constructor(private translate: TranslocoService) {

Service Usages

  1. translateService.currentLang will be replaced with translateService.getActiveLang().
  2. translateService.onLangChange will be replaced with translateService.langChanges$.
  3. translateService.use(...) calls will be replaced with translateService.setActiveLang(...).
  4. translateService.instant(...) calls will be replaced with translateService.translate(...).
  5. translateService.get(...) calls will be replaced with translateService.selectTranslate(...) and take(1) needs to be manually added translateService.selectTranslate(...).pipe(take(1)) in order to prevent listening to language changes.
  6. translateService.stream(...) calls will be replaced with translateService.selectTranslate(...).
  7. translateService.set(...) calls will be replaced with translateService.setTranslation(...).
Examples:
  1. const translation = this.translateService.instant('hello') will be replaced with const translation = this.translateService.translate('hello')
Manual Replacements
  1. getBrowserLang() - In Transloco it's a pure function that needs to be imported.
  2. getBrowserCultureLang() - In Transloco it's a pure function that needs to be imported.
  3. currentLoader - No equivalent in Transloco.
  4. addLangs(...) - No equivalent in Transloco.
  5. getLangs(...) - No equivalent in Transloco.
  6. reloadLang(...) - No equivalent in Transloco.
  7. resetLang(...) - No equivalent in Transloco.

Modules

TranslateModule & TranslateModule.forChild(...) & TranslateModule.forRoot(...) will be replaced with TranslocoModule

Examples:
  1. TranslateModule.forChild({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } }) will be replaced with TranslocoModule

Specs

Imports, Modules and TranslateService will be replaced with TranslocoService

Issues

If you encounter any issues with the migration script please open a github issue so we can resolve them and make a better experience for all.

- + \ No newline at end of file diff --git a/docs/multi-lang.html b/docs/multi-lang.html index 9488646ce..5d31b72b6 100644 --- a/docs/multi-lang.html +++ b/docs/multi-lang.html @@ -4,13 +4,13 @@ Multiple Languages Simultaneously | Transloco Angular i18n - +

Multiple Languages Simultaneously

There are times you may need to use a different language in a specific part of the template, or in a particular component or module. This can be achieved in by using the provideTranslocoLang function.

Here's an example of setting it in a component's providers:

my-comp.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoLang('es')]
})
export class MyComponent {}

Using Angular's DI rules, this will ensure that the language in this component's template and all of its children's templates is es.

Alternatively, here is how to use it directly in the template:

my-comp.component.html
<ng-container *transloco="let t; lang: 'en'">
<p>Inline (en) wins: {{ t('home') }}</p>
</ng-container>

Note that it will be used as the initial language. If you need it to be static, you can use the static pipe:

my-comp.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoLang('es|static')]
})
export class MyComponent {}

Or in the template:

my-comp.component.html
// Define the lang dynamically in the component
<ng-container *transloco="let t; lang: someVariable">

// Or pass it as inline string
<ng-container *transloco="let t; lang: 'es|static'">
<p>Inline (es) wins and stays: {{ t('home') }}</p>
</ng-container>
- + \ No newline at end of file diff --git a/docs/plugins/locale.html b/docs/plugins/locale.html index 3193d9662..e99dff9c2 100644 --- a/docs/plugins/locale.html +++ b/docs/plugins/locale.html @@ -4,15 +4,15 @@ Locale L10N | Transloco Angular i18n - +

Locale L10N

This plugin provides localization(l10n) support for Transloco.

Localization refers to the adaptation of a product, application or document content to meet the language, cultural and other requirements of a specific target market (a locale).

Installation

npm i @jsverse/transloco-locale

Setup

Add the locale providers to your app config:

app.config.ts
export const appConfig = {
providers: [
provideTranslocoLocale(),
...
]
};

Import the TranslocoLocaleModule or the directive/pipe you are using into your standalone component.

Localization Pipes

The library provides localization API provided by pipes or from a service, base on the native Javascript's API.

Date Pipe

Transform a date into the locale's date format.

The date expression could be: a Date object, a number (milliseconds since UTC epoch), or an ISO string.

my-comp.component.html
<!--9/10/2019-->
<span> {{ date | translocoDate }} </span>
<!-- Sep 10, 2019, 10:46:12 PM-->
<span>
{{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}
</span>
<!-- 7:40:32 PM Coordinated-->
<span>
{{ date | translocoDate: { timeZone: 'UTC', timeStyle: 'full' } }}
</span>
<!-- Jan 1, 1970-->
<span>
{{ 1 | translocoDate: { dateStyle: 'medium' } }}
</span>
<!-- Feb 8, 2019-->
<span>
{{ '2019-02-08' | translocoDate: { dateStyle: 'medium' } }}
</span>

Currency Pipe

Transform a given number into the locale's currency format.

The library comes out of the box with locale currency mapping, so once the locale is change the currency will automatically display the right currency. The currency mapping could be customise if needed through the config, and could be provided by provideTranslocoLocaleCurrencyMapping.

my-comp.component.html
<!--$1,000,000.00-->
<span> {{ 1000000 | translocoCurrency }} </span>
<!--1,000,000.00 US dollars-->
<span>
{{ 1000000 | translocoCurrency: 'name' }}
</span>
<!--$1,000,000-->
<span>
{{ 1000000 | translocoCurrency: 'symbol' : { minimumFractionDigits: 0 } }}
</span>

Decimal Pipe

Transform a given number into current locale's decimal number format.

my-comp.component.html
<!--1,234,567,890-->
<span>
{{ 1234567890 | translocoDecimal }}
</span>
<!--1234567890-->
<span>
{{ 1234567890 | translocoDecimal: {useGrouping: false} }}
</span>

Percent Pipe

Transform a given number into current locale's percent number format.

my-comp.component.html
<!--100%-->
<span> 1 | translocoPercent </span>
<!--100%-->
<span> "1" | translocoPercent </span>

Setting Locale

The library provides three different ways to set the locale.

Translation file names

Using locale format for the translation files will automatically declare the locale on langChanges$ event:

├─ i18n/
├─ en-US.json
├─ en-GB.json
├─ es-ES.json

Language Locale Mapping:

Users who don't have more than one locale per language -could provide a language to locale mapping object using the config's langToLocaleMapping:

app.config.ts
export const appConfig = {
providers: [
provideTranslocoLocale({
langToLocaleMapping: {
en: 'en-US',
es: 'es-ES'
}
})
...
]
};

Manually Setting Locale:

The third option in manually setting the locale, this could be done by calling setLocale method from localeService:

app.component.ts
export class AppComponent {
constructor(private service: TranslocoLocaleService) {}

ngOnInit() {
this.service.setLocale('en-US');
}
}

Configuration Options

Let's go over each one of the config options:

  • localeConfig?: Declare the default configuration of the locale's formatting. A general configuration could be set using the global property, for a configuration by locale use localeBased property (default value determine by the native Javascript's API).
  • defaultLocale?: The default locale formatted in BCP 47 (default value: en-US),
  • langToLocaleMapping?: A key value object that maps Transloco language to it's Locale (default value: {}).
  • localeToCurrencyMapping?: A key value object that maps the Locale to its currency (formatted in ISO 4217) (the library provide a default value with all of the existing mapping).

Locale Format Options

There are two types of formatting options, one for date and one for number.

The formatted options could be declared in three levels

  1. In the app's configuration (as mentioned above):
app.config.ts
const globalFormatConfig = {
date: {
dateStyle: 'long',
timeStyle: 'long'
}
};

const esESFormatConfig = {
date: {
timeStyle: 'medium'
},
currency: {
minimumFractionDigits: 0
}
};

export const appConfig = {
providers: [
provideTranslocoLocale({
localeConfig: {
global: globalFormatConfig,
localeBased: {
'es-ES': esESFormatConfig
}
}
})
...
]
};
  1. It could be set in the component's providers using provideTranslocoLocaleConfig:
my-comp.component.html
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoLocaleConfig(localeConfig)]
})
export class MyComponent {}
  1. We can pass it to each pipe in the HTML template:
my-comp.component.html
<span>
{{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}
</span>

<span>
{{ number | translocoDecimal: {useGrouping: false} }}
</span>

Note the format option of the global, locale's format and the one's being passed in the template, will be merged. While the template is the stronger one and then the locale and the global.

Number Format Options

  • useGrouping- Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the (default is true).
  • minimumIntegerDigits- The minimum number of integer digits to use. Possible values are from 1 to 21 (default is 1).
  • minimumFractionDigits- The minimum number of fraction digits to use. Possible values are from 0 to 20 (default is 0).
  • maximumFractionDigits- The maximum number of fraction digits to use. Possible values are from 0 to 20 (default is 3).
  • minimumSignificantDigits- The minimum number of significant digits to use. Possible values are from 1 to 21 (default is 1).
  • maximumSignificantDigits- The maximum number of significant digits to use. Possible values are from 1 to 21 (default is 21).
  • currency- The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "USD" for the US dollar, "EUR" for the euro.
  • signDisplay- When to display the sign for the number. Possible values are "auto", "always", "exceptZero", "negative", "never" (default is "auto").

Date Format Options

  • dateStyle - The date formatting style.
  • timeStyle - The time formatting style.
  • timeZone - The time zone to use. The only value implementations must recognize is "UTC"; the default is the runtime's default time zone. Implementations may also recognize the time zone names of the IANA time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".

Service API

  • localeChanges$ - Observable of the active locale.
  • localizeDate() - Transform a date into a locale's date format.
  • localizeNumber() - Transform a number into the locale's number format according to the number type.
  • getLocale - Gets the active locale.
  • setLocale - Sets the active locale.
  • getCurrencySymbol - Gets the currency symbol for a given locale. If no locale is specified the currently active one is used.
translocoLocaleService.localeChanges$.subscribe(activeLocale => ...)

translocoLocaleService.localizeNumber(1234567890, 'decimal') // 1,234,567,890
translocoLocaleService.localizeNumber(0.5, 'percent') // 50%
translocoLocaleService.localizeNumber(1000, 'currency') // $1,000.00

const locale = translocoLocaleService.getLocale();
translocoLocaleService.setLocale('en-US')

translocoLocaleService.getCurrencySymbol() // $

Localization Transformer

In some cases you might want to customize the localization transformation, to achieve that you could provide your own localization transformer class.

There are two types of transformers for date and number:

custom-transformer.ts
import { DefaultDateTransformer, DefaultNumberTransformer } from '@jsverse/transloco-locale';

export class CustomDateTransformer extends DefaultDateTransformer {
public transform(date: Date, locale: Locale, options: DateFormatOptions): string {
return ...

// Fallback to default transformer
return super.transform(date, locale, options);
}
}

export class CustomNumberTransformer extends DefaultNumberTransformer {
public transform(
value: number | string,
type: NumberTypes,
locale: string,
options: Intl.NumberFormatOptions
): string {
return ...

// Fallback to default transformer
return super.transform(value, type, locale, options);
}
}

Provide these custom transformers using the provideTranslocoDateTransformer and provideTranslocoNumberTransformer functions.

- +could provide a language to locale mapping object using the config's langToLocaleMapping:

app.config.ts
export const appConfig = {
providers: [
provideTranslocoLocale({
langToLocaleMapping: {
en: 'en-US',
es: 'es-ES'
}
})
...
]
};

Manually Setting Locale:

The third option in manually setting the locale, this could be done by calling setLocale method from localeService:

app.component.ts
export class AppComponent {
constructor(private service: TranslocoLocaleService) {}

ngOnInit() {
this.service.setLocale('en-US');
}
}

Configuration Options

Let's go over each one of the config options:

  • localeConfig?: Declare the default configuration of the locale's formatting. A general configuration could be set using the global property, for a configuration by locale use localeBased property (default value determine by the native Javascript's API).
  • defaultLocale?: The default locale formatted in BCP 47 (default value: en-US),
  • langToLocaleMapping?: A key value object that maps Transloco language to it's Locale (default value: {}).
  • localeToCurrencyMapping?: A key value object that maps the Locale to its currency (formatted in ISO 4217) (the library provide a default value with all of the existing mapping).

Locale Format Options

There are two types of formatting options, one for date and one for number.

The formatted options could be declared in three levels

  1. In the app's configuration (as mentioned above):
app.config.ts
const globalFormatConfig = {
date: {
dateStyle: 'long',
timeStyle: 'long'
}
};

const esESFormatConfig = {
date: {
timeStyle: 'medium'
},
currency: {
minimumFractionDigits: 0
}
};

export const appConfig = {
providers: [
provideTranslocoLocale({
localeConfig: {
global: globalFormatConfig,
localeBased: {
'es-ES': esESFormatConfig
}
}
})
...
]
};
  1. It could be set in the component's providers using provideTranslocoLocaleConfig:
my-comp.component.html
@Component({
selector: 'my-comp',
templateUrl: './my-comp.component.html',
providers: [provideTranslocoLocaleConfig(localeConfig)]
})
export class MyComponent {}
  1. We can pass it to each pipe in the HTML template:
my-comp.component.html
<span>
{{ date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } }}
</span>

<span>
{{ number | translocoDecimal: {useGrouping: false} }}
</span>

Note the format option of the global, locale's format and the one's being passed in the template, will be merged. While the template is the stronger one and then the locale and the global.

Number Format Options

  • useGrouping- Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the (default is true).
  • minimumIntegerDigits- The minimum number of integer digits to use. Possible values are from 1 to 21 (default is 1).
  • minimumFractionDigits- The minimum number of fraction digits to use. Possible values are from 0 to 20 (default is 0).
  • maximumFractionDigits- The maximum number of fraction digits to use. Possible values are from 0 to 20 (default is 3).
  • minimumSignificantDigits- The minimum number of significant digits to use. Possible values are from 1 to 21 (default is 1).
  • maximumSignificantDigits- The maximum number of significant digits to use. Possible values are from 1 to 21 (default is 21).
  • currency- The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "USD" for the US dollar, "EUR" for the euro.
  • signDisplay- When to display the sign for the number. Possible values are "auto", "always", "exceptZero", "negative", "never" (default is "auto").

Date Format Options

  • dateStyle - The date formatting style.
  • timeStyle - The time formatting style.
  • timeZone - The time zone to use. The only value implementations must recognize is "UTC"; the default is the runtime's default time zone. Implementations may also recognize the time zone names of the IANA time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".

By default those options are passed to the native Intl.DateTimeFormat, full documentation for the options you can find here

Service API

  • localeChanges$ - Observable of the active locale.
  • localizeDate() - Transform a date into a locale's date format.
  • localizeNumber() - Transform a number into the locale's number format according to the number type.
  • getLocale - Gets the active locale.
  • setLocale - Sets the active locale.
  • getCurrencySymbol - Gets the currency symbol for a given locale. If no locale is specified the currently active one is used.
translocoLocaleService.localeChanges$.subscribe(activeLocale => ...)

translocoLocaleService.localizeNumber(1234567890, 'decimal') // 1,234,567,890
translocoLocaleService.localizeNumber(0.5, 'percent') // 50%
translocoLocaleService.localizeNumber(1000, 'currency') // $1,000.00

const locale = translocoLocaleService.getLocale();
translocoLocaleService.setLocale('en-US')

translocoLocaleService.getCurrencySymbol() // $

Localization Transformer

In some cases you might want to customize the localization transformation, to achieve that you could provide your own localization transformer class.

There are two types of transformers for date and number:

custom-transformer.ts
import { DefaultDateTransformer, DefaultNumberTransformer } from '@jsverse/transloco-locale';

export class CustomDateTransformer extends DefaultDateTransformer {
public transform(date: Date, locale: Locale, options: DateFormatOptions): string {
return ...

// Fallback to default transformer
return super.transform(date, locale, options);
}
}

export class CustomNumberTransformer extends DefaultNumberTransformer {
public transform(
value: number | string,
type: NumberTypes,
locale: string,
options: Intl.NumberFormatOptions
): string {
return ...

// Fallback to default transformer
return super.transform(value, type, locale, options);
}
}

Provide these custom transformers using the provideTranslocoDateTransformer and provideTranslocoNumberTransformer functions.

+ \ No newline at end of file diff --git a/docs/plugins/message-format.html b/docs/plugins/message-format.html index 6844f6264..0582d06ab 100644 --- a/docs/plugins/message-format.html +++ b/docs/plugins/message-format.html @@ -4,13 +4,13 @@ Message Format | Transloco Angular i18n - +

Message Format

Transpiler for @jsverse/transloco that uses @messageformat/core to compile translations using ICU syntax for handling pluralization and gender.

Messageformat is a mechanism for handling both pluralization and gender in your app.

You can see its format guide here.

Installation

npm i @jsverse/transloco-messageformat

Usage

The MessageFormatTranspiler is compatible with the DefaultTranspiler and therefore you can switch without worry that it will break your current translations.

It then enables support for the following within your i18n translation files:

en.json
{
"mySelectRule": "{myVar, select, val1 {Value 1} val2 {Value 2} other {Other Value}}",
"myPluralRule": "{myCount, plural, =0 {no results} one {1 result} other {# results}}"
}

To enable this plugin, add the following import in your TranslocoRootModule:

transloco-root.module.ts
import { provideTranslocoMessageformat } from '@jsverse/transloco-messageformat';

@NgModule({
providers: [
provideTranslocoMessageformat()
]
...
})
export class TranslocoRootModule {}

Locale initialization

By default, messageformat initializes all locales. You could also provide the locales you will need:

transloco-root.module.ts
@NgModule({
providers: [
provideTranslocoMessageformat({
locales: 'en-GB'
})
],
...
})
export class TranslocoRootModule {}

The value for locales is either a string or an array of strings. The first locale is used as the default locale by messageformat. More info here.

Advanced configuration

MessageFormat instances provides some options to influence its behaviour, among them customFormatters, biDiSupport, and strictNumberSign. Learn about their meaning here

This is how you would enable bidirectional support and add a custom formatter, for example:

transloco-root.module.ts
 @NgModule({
imports: [
TranslocoMessageFormatModule.forRoot({
biDiSupport: true,
customFormatters: { upcase: v => v.toUpperCase() }
})
],
...
})
export class TranslocoRootModule {}

Caching (from v3)

By default, the messageformat compile output is cached to reduce computing times, you can disable caching by passing the enableCache option:

transloco-root.module.ts
@NgModule({
imports: [
TranslocoMessageFormatModule({
enableCache: false,
})
],
...
})
export class TranslocoRootModule {}
- + \ No newline at end of file diff --git a/docs/plugins/persist-lang.html b/docs/plugins/persist-lang.html index 4cd62adeb..f4cb2c26c 100644 --- a/docs/plugins/persist-lang.html +++ b/docs/plugins/persist-lang.html @@ -4,13 +4,13 @@ Persist Lang | Transloco Angular i18n - +

Persist Lang

This plugin provides the functionality of persisting the active language to the provided storage.

Installation

npm install @jsverse/transloco-persist-lang

Usage

Add persist lang providers using the into the TranslocoRootModule/app.config.ts, and provide the storage you would like to use:

transloco-root.module.ts
import { provideTranslocoPersistLang } from '@jsverse/transloco-persist-lang';

@NgModule({
providers: [
provideTranslocoPersistLang({
storage: {
useValue: localStorage,
},
}),
],
...
})
export class TranslocoRootModule {}

When the user changes the current language, the plugin will keep it in the provided storage and set it as active when the user returns to the application.

By default, the plugin will use the cached language if available otherwise it will use the default language provided in the config. You can always change this behavior by providing a getLangFn option:

transloco-root.module.ts
import { provideTranslocoPersistLang } from '@jsverse/transloco-persist-lang';

export function getLangFn({
cachedLang,
browserLang,
cultureLang,
defaultLang,
}) {
return yourLogic;
}

@NgModule({
providers: [
provideTranslocoPersistLang({
getLangFn,
storage: {
useValue: localStorage,
},
}),
],
...
})
export class TranslocoRootModule {}

The plugin also provides a cookiesStorage function that you can use to save the language in a cookie. (SSR advantage)

transloco-root.module.ts
import { provideTranslocoPersistLang, cookiesStorage } from '@jsverse/transloco-persist-lang';

@NgModule({
imports: [
provideTranslocoPersistLang({
storage: {
useValue: cookiesStorage(),
},
}),
],
...
})
export class TranslocoRootModule {}
- + \ No newline at end of file diff --git a/docs/plugins/persist-translations.html b/docs/plugins/persist-translations.html index 747e0269c..e91de2962 100644 --- a/docs/plugins/persist-translations.html +++ b/docs/plugins/persist-translations.html @@ -4,13 +4,13 @@ Persist Translations | Transloco Angular i18n - +

Persist Translations

This plugin provides the functionality of persisting translations to the provided storage.

Installation

npm install @jsverse/transloco-persist-translations

Usage

Add persist translation providers using the into the TranslocoRootModule/app.config.ts, and provide the storage you would like to use:

transloco-root.module.ts
import {provideTranslocoPersistTranslations} from '@jsverse/transloco-persist-translations';

import { TranslocoHttpLoader } from './transloco-loader';

@NgModule({
providers: [
provideTranslocoPersistTranslations({
loader: TranslocoHttpLoader, // ====> Auto generated via ng add
storage: { useValue: localStorage }
})
],
...
})
export class TranslocoRootModule {}

Note that you should not include the default loader to make it work.

You can also use an async storage. For example, let's install localForage and use IndexedDB:

transloco-root.module.ts
import {provideTranslocoPersistTranslations} from '@jsverse/transloco-persist-translations';
import * as localForage from 'localforage';

import { TranslocoHttpLoader } from './transloco-loader';

localForage.config({
driver: localForage.INDEXEDDB,
name: 'Transloco',
storeName: 'translations'
});

@NgModule({
providers: [
provideTranslocoPersistTranslations({
loader: TranslocoHttpLoader, // ====> Auto generated via ng add
storage: { useValue: localForage }
})
],
...
})
export class TranslocoRootModule {}

Configuration

provideTranslocoPersistTranslations can also receive the following configuration:

{
"ttl": 86400,
"storageKey": "yourKey"
}
  • ttl: How long the cache should live in seconds.
  • storageKey: The key to be used to save the translations data.

Clear Storage

The storage cleanup is done automatically once the ttl is passed, but it could also can be done manually by calling clearCache method from the cache service:

app.component.ts
import { TranslocoPersistTranslations } from '@jsverse/transloco-persist-translations';

export class AppComponent {
constructor(private loader: TranslocoPersistTranslations) {}

clearTranslationsCache() {
this.loader.clearCache();
}
}
- + \ No newline at end of file diff --git a/docs/plugins/preload-langs.html b/docs/plugins/preload-langs.html index 8c65a9480..8e00d4102 100644 --- a/docs/plugins/preload-langs.html +++ b/docs/plugins/preload-langs.html @@ -4,13 +4,13 @@ Preload Languages | Transloco Angular i18n - +

Preload Languages

This plugin provides the functionality of preloading the provided languages when the browser is idle by using the requestIdleCallback API.

Installation

npm install @jsverse/transloco-preload-langs

Usage

transloco-root.module.ts
import { provideTranslocoPreloadLangs } from '@jsverse/transloco-preload-langs';

@NgModule({
providers: [
provideTranslocoPreloadLangs(['es', 'some-scope'])
]
...
})
export class TranslocoRootModule {}
- + \ No newline at end of file diff --git a/docs/plugins/third-party.html b/docs/plugins/third-party.html index f1ad47e05..daf8cc796 100644 --- a/docs/plugins/third-party.html +++ b/docs/plugins/third-party.html @@ -4,13 +4,13 @@ 3rd Party | Transloco Angular i18n - + - + \ No newline at end of file diff --git a/docs/recipes/google-translate-integration.html b/docs/recipes/google-translate-integration.html index c7cbaf371..944b2e66c 100644 --- a/docs/recipes/google-translate-integration.html +++ b/docs/recipes/google-translate-integration.html @@ -4,13 +4,13 @@ Generate Locale Files using Google Translate | Transloco Angular i18n - +

Generate Locale Files using Google Translate

Many thanks to born2net for sharing this. (#261)

The script will read the en.json translation file and will generate new localized files based on what's defined in the script.

Steps

  1. Uncomment createLocalFiles() one time to create all the files: he.json, ca.json etc...
  2. Comment/Delete createLocalFiles() as you no longer need it
  3. Provide your google key via process.env.GOOGLE_KEY
  4. Run the script to populate the translations, re-run it whenever you make changes to your en.json

Note: this script requires google-translate


#!/usr/bin/env node
const fs = require('fs');
const googleTranslate = require('google-translate')(process.env.GOOGLE_KEY);
const i18Dir = './src/assets/i18n';
const defaultSourceLang = 'en';
const codes = {
Afrikaans: 'af',
Irish: 'ga',
Albanian: 'sq',
Italian: 'it',
Arabic: 'ar',
Japanese: 'ja',
Azerbaijani: 'az',
Kannada: 'kn',
Basque: 'eu',
Korean: 'ko',
Bengali: 'bn',
Latin: 'la',
Belarusian: 'be',
Latvian: 'lv',
Bulgarian: 'bg',
Lithuanian: 'lt',
Catalan: 'ca',
Macedonian: 'mk',
ChineseSimplified: 'zh-CN',
Malay: 'ms',
ChineseTraditional: 'zh-TW',
Maltese: 'mt',
Croatian: 'hr',
Norwegian: 'no',
Czech: 'cs',
Persian: 'fa',
Danish: 'da',
Polish: 'pl',
Dutch: 'nl',
Portuguese: 'pt',
English: 'en',
Romanian: 'ro',
Esperanto: 'eo',
Russian: 'ru',
Estonian: 'et',
Serbian: 'sr',
Filipino: 'tl',
Slovak: 'sk',
Finnish: 'fi',
Slovenian: 'sl',
French: 'fr',
Spanish: 'es',
Galician: 'gl',
Swahili: 'sw',
Georgian: 'ka',
Swedish: 'sv',
German: 'de',
Tamil: 'ta',
Greek: 'el',
Telugu: 'te',
Gujarati: 'gu',
Thai: 'th',
Haitian: 'ht',
Turkish: 'tr',
Hebrew: 'he',
Ukrainian: 'uk',
Hindi: 'hi',
Urdu: 'ur',
Hungarian: 'hu',
Vietnamese: 'vi',
Icelandic: 'is',
Welsh: 'cy',
Indonesian: 'id',
Yiddish: 'yi'
};

let createLocalFiles = () => {
Object.values(codes).forEach((local) => {
if (local === defaultSourceLang) return;
const p = `./src/assets/i18n/${local}.json`;
if (fs.existsSync(p)) {
console.log('exists ' + p);
} else {
fs.writeFileSync(p, '', {encoding: 'utf8', flag: 'w'});
}
});
};

// createLocalFiles();

let sourceFile = (local) => {
try {
return JSON.parse(fs.readFileSync(`./src/assets/i18n/${local}.json`, 'utf8'));
} catch (e) {
return null;
}

};

let getLocals = () => {
return new Promise((resolve, reject) => {
const locals = [];
fs.readdir(i18Dir, (err, files) => {
files.forEach(file => {
if (file === `${defaultSourceLang}.json`) return;
file = file.replace(/\.json/, '');
locals.push(file);
});
resolve(locals);
});
});
};

let translate = (word, local) => {
return new Promise((resolve, reject) => {
googleTranslate.translate(word, local, function (err, translation) {
if (translation === undefined) {
console.log('>> google error ' + err + ' ' + word + ' ' + local);
} else {
var translated = cleanProbCharactersV2(translation.translatedText);
}
resolve(translated);
});
});
};

const cleanProbCharactersV2 = (i_string) => {
i_string = i_string.replace(/'/ig, "");
i_string = i_string.replace(/"/ig, "");
i_string = i_string.replace(/}/ig, "");
i_string = i_string.replace(/{/ig, "");
i_string = i_string.replace(/\)/ig, "");
i_string = i_string.replace(/\r/ig, "");
i_string = i_string.replace(/\n/ig, "");
i_string = i_string.replace(/()/ig, "");
return i_string;
};

const localSource = sourceFile(defaultSourceLang);

(async function asyncConnect() {
try {
const languages = await getLocals(3000);
for (let i = 0; i < languages.length; i++) {
let final = {};
const local = languages[i];
console.log('processing local ' + local + ' >>>');
const destlSource = sourceFile(local);
if (destlSource) {
final = destlSource;
}
for (section in localSource) {
if (!final[section])
final[section] = {};
const words = localSource[section];
for (word in words) {
if (destlSource && destlSource[section] && destlSource[section][word]) {
final[section][word] = destlSource[section][word]
} else {
console.log(' >>> ' + section + ' ' + words[word]);
const newWord = await trasnlate(words[word], local);
console.log(' ### translated to ' + newWord);
final[section][word] = newWord;
}
}
}
const f = i18Dir + '/' + local + '.json';
try {
fs.writeFileSync(f, JSON.stringify(final, null, '\t'), {encoding: 'utf8', flag: 'w'});
} catch (err) {
console.error(err);
}

}
} catch (err) {
console.log('problem encountered ' + err);
client.end()
}
})();

Expected output:

- + \ No newline at end of file diff --git a/docs/recipes/prefetch.html b/docs/recipes/prefetch.html index 08c04d00e..dde6c4206 100644 --- a/docs/recipes/prefetch.html +++ b/docs/recipes/prefetch.html @@ -4,13 +4,13 @@ Prefetch the User Language | Transloco Angular i18n - +

Prefetch the User Language

Prefetch the User Language

We recommend pre-emptively fetching the user’s data from the server, including internationalization settings, and making it available to the components, before we allow the user to interact with them.

We want to ensure the data is available, because we don’t want to incur a bad user experience, such as jumpy content or flickering CSS.

Here's how you can achieve this using the APP_INITIALIZER token:

import { APP_INITIALIZER } from '@angular/core';
import { UserService } from './user.service';
import { TranslocoService } from '@jsverse/transloco';

export function preloadUser(userService: UserService, transloco: TranslocoService) {
return function() {
return userService.getUser().then(({ lang }) => {
transloco.setActiveLang(lang);
return transloco.load(lang).toPromise();
}
};
}

export const preLoad = {
provide: APP_INITIALIZER,
multi: true,
useFactory: preloadUser,
deps: [UserService, TranslocoService]
};

This will make sure the application doesn't bootstrap before Transloco loads the translation file based on the current user's language.

You can read more about it in this article.

- + \ No newline at end of file diff --git a/docs/recipes/xliff.html b/docs/recipes/xliff.html index f280e7431..706a0aa3e 100644 --- a/docs/recipes/xliff.html +++ b/docs/recipes/xliff.html @@ -4,13 +4,13 @@ Using xliff | Transloco Angular i18n - +

Using xliff

Install the xliff package:

npm i xliff
yarn add xliff

Replace the default http loader with the following loader implementation:

transloco-root.module.ts
import { HttpClient } from '@angular/common/http';
import {
TRANSLOCO_LOADER,
Translation,
TranslocoLoader,
TRANSLOCO_CONFIG,
translocoConfig,
TranslocoModule
} from '@jsverse/transloco';
import { Injectable, isDevMode, NgModule } from '@angular/core';
import { from } from 'rxjs';
import { switchMap, map } from 'rxjs/operators';
// xliff v1.2
import xliff from "xliff/esm/xliff12ToJs";
// xliff v2
//import xliff from "xliff/esm/xliff2js";

function toTranslationFormat(json) {
const obj = json.resources.transloco;
return Object.keys(obj).reduce((acc, key) => {
acc[key] = obj[key].target;
return acc;
}, {});
}

@Injectable({ providedIn: 'root' })
export class TranslocoXliffHttpLoader implements TranslocoLoader {
constructor(private http: HttpClient) {}

getTranslation(lang: string) {
return this.http.get<Translation>(`/assets/i18n/${lang}.xlf`, { responseType: 'text' })
.pipe(
switchMap((translation) => from(xliff(translation))),
map(toTranslationFormat)
);
}
}

@NgModule({
exports: [ TranslocoModule ],
providers: [
{
provide: TRANSLOCO_CONFIG,
useValue: translocoConfig({
availableLangs: ['en', 'es'],
defaultLang: 'en',
// Remove this option if your application
// doesn't support changing language in runtime.
reRenderOnLangChange: true,
prodMode: !isDevMode(),
})
},
{ provide: TRANSLOCO_LOADER, useClass: TranslocoXliffHttpLoader }
]
})
export class TranslocoRootModule {}

The translation file (xliff v1.2):

<?xml version="1.0" encoding="UTF-8" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="transloco">
<body>
<trans-unit id="title">
<source>Hello Transloco!</source>
<target>Bonjour Transloco!</target>
</trans-unit>
</body>
</file>
</xliff>
- + \ No newline at end of file diff --git a/docs/schematics.html b/docs/schematics.html index f09ff0571..eb70b47b7 100644 --- a/docs/schematics.html +++ b/docs/schematics.html @@ -4,14 +4,14 @@ Schematics | Transloco Angular i18n - +

Schematics

Ng-add

Overview

Creates boilerplate translation files for the given languages, and adds Transloco configuration for the project's root module.

Command

  ng add @jsverse/transloco

Options

Create the translation files along with the required configuration.

  • --langs

    type: string

    default: en, es

Provide the translation files loader.

  • --loader

    type: string

    default: Http

    options: Http, Webpack

    alias: lo

Define the translation files format.

  • --translate-type

    type: string

    default: JSON

    options: JSON, Typescript

    alias: t

Provide the configuration that is needed for a project using server side rendering.

  • --ssr

    type: boolean,

    default: false

Define the location of the translation files.

  • --path

    type: string

    default: assets/i18n/

    alias: p

Provide the name of the project where Transloco should be installed to.

  • --project

    type: string

Provide the path to a root Module and import TranslocoModule along with the module's required configuration defined by previous flags.

  • --module

    type: string

    default: app

Scope

Overview

Add new Transloco scope to a new/existing Angular module, and create the scope's translation files.

Command

ng generate @jsverse/transloco:scope [name]

Options

Define the name of the new scope.

  • --name

type: string

Define the path at which module to add scope to, relative to the workspace root.

Note if this flag won't be provide a new Module should be created.

  • --module

type: string

Define the languages of the scope, default is the root languages.

  • --langs

type: string

alias: la

Skip the creation of the translation files.

  • --skip-creation

type: boolean

Define the format of the translation files.

  • --translate-type

type: string

default: JSON

Define the location of the translation files.

  • --translation-path

type: string

Examples

ng g @jsverse/transloco:scope my-scope
ng g @jsverse/transloco:scope my-scope --module path/to/my-scope
ng g @jsverse/transloco:scope my-scope --inline-loader

Component

Overview

Creates boilerplate files for Angular component with a simple translation

Command

ng generate @jsverse/transloco:component [name]

Options

Define the component's name.

  • --name

    type: string

Join

Overview

Merge all our translation files into one piece for each language.

Command

ng generate @jsverse/transloco:join
info

If you have more then one entry folder for your translation files, you will have to add a mapping for each folder entry and the scope name. It could be done using scopePathMap property in your transloco.config.js file.

By default the build script will go over the root translation file directory and will refer every sub directory as scope.

Let's say we have the following translations folder:

├─ src/assets/i18n/
├─ en.json
├─ fr.json
├─ es.json
├─ todos/
├─ en.json
├─ fr.json
├─ es.json

The script will run over all the directory files (minus the default language) and will merge the scope files to the main translation files.

Say our project's default language is English, if we run the script the expected output would be:

dist-i18n/es.json
{
"hello": "transloco es",
"todos": {
"todos-translation": "todos es"
}
}
dist-i18n/fr.json
{
"hello": "transloco fr",
"todos": {
"todos-translation": "todos fr"
}
}

If we have more then one entry folder for a scope we can specify a map between the scope name and the path to the translations using scopePathMap property in your transloco.config.js file:

transloco.config.js
{
"scopePathMap": {
"my-scope": "src/app/path-to-scope",
"my-project-scope": "projects/my-project/i18n"
}
}
info

Once you specify the scopePathMap the script will automatically use it

Examples

Merge translations files to a specific output directory:

ng g @jsverse/transloco:build --default-lang en

Options

The folder that contains the root translation files.

  • --translation-path

    type: string

    default: src/assets/i18n

    alias: root

The output directory path

  • --out-dir

    type: string

    default: dist-i18n

    alias: o

The default language of the project

  • --default-lang

    type: string

    alias: o

Determine rather to join also the default language

  • --include-default-lang

    type: boolean

    default: false

Split

Overview

Does the opposite process of join command. It splits the translated files between the project's translation files.

Command

ng generate @jsverse/transloco:split

Options

The folder that contains the root translation files.

  • --translation-path

    type: string

    default: src/assets/i18n

    alias: root

The path of the source directory that contains the translated files.

  • source

    type: string

    default: dist-i18n

    alias: o

Upgrade

Overview

The Library's upgrade script from lower versions. For more information about the script see: v2-upgrade.md

Command

 ng generate @jsverse/transloco:upgrade

Options

Define the entry path of the upgrade script.

  • --path

    type: string

    default: ./src/app

    alias: p

- + \ No newline at end of file diff --git a/docs/schematics/component.html b/docs/schematics/component.html index 250bfb6fc..ba92c6905 100644 --- a/docs/schematics/component.html +++ b/docs/schematics/component.html @@ -4,13 +4,13 @@ Component | Transloco Angular i18n - + - + \ No newline at end of file diff --git a/docs/schematics/join.html b/docs/schematics/join.html index a95dc3a5a..d50b99a6a 100644 --- a/docs/schematics/join.html +++ b/docs/schematics/join.html @@ -4,13 +4,13 @@ Join | Transloco Angular i18n - +

Join

Join

Overview

Merge all our translation files into one piece for each language.

Command

ng generate @jsverse/transloco:join
info

If you have more then one entry folder for your translation files, you will have to add a mapping for each folder entry and the scope name. It could be done using scopePathMap property in your transloco.config.js file.

By default the build script will go over the root translation file directory and will refer every sub directory as scope.

Let's say we have the following translations folder:

├─ src/assets/i18n/
├─ en.json
├─ fr.json
├─ es.json
├─ todos/
├─ en.json
├─ fr.json
├─ es.json

The script will run over all the directory files (minus the default language) and will merge the scope files to the main translation files.

Say our project's default language is English, if we run the script the expected output would be:

dist-i18n/es.json
{
"hello": "transloco es",
"todos": {
"todos-translation": "todos es"
}
}
dist-i18n/fr.json
{
"hello": "transloco fr",
"todos": {
"todos-translation": "todos fr"
}
}

If we have more then one entry folder for a scope we can specify a map between the scope name and the path to the translations using scopePathMap property in your transloco.config.js file:

transloco.config.js
{
"scopePathMap": {
"my-scope": "src/app/path-to-scope",
"my-project-scope": "projects/my-project/i18n"
}
}
info

Once you specify the scopePathMap the script will automatically use it

Options

The folder that contains the root translation files.

  • --translation-path

    type: string

    default: src/assets/i18n

    alias: root

The output directory path

  • --out-dir

    type: string

    default: dist-i18n

    alias: o

The default language of the project

  • --default-lang

    type: string

    alias: o

Determine rather to join also the default language

  • --include-defaultLang

    type: boolean

    default: false

Examples

Merge translations files to a specific output directory:

ng g @jsverse/transloco:build --default-lang en
- + \ No newline at end of file diff --git a/docs/schematics/ng-add.html b/docs/schematics/ng-add.html index e1a0b4409..3383b8aed 100644 --- a/docs/schematics/ng-add.html +++ b/docs/schematics/ng-add.html @@ -4,13 +4,13 @@ Ng Add | Transloco Angular i18n - +

Ng Add

Ng-add

Overview

Creates boilerplate translation files for the given languages, and adds Transloco configuration for the project's root module.

Command

  ng add @jsverse/transloco

Options

Create the translation files along with the required configuration.

  • --langs

    type: string

    default: en, es

Provide the translation files loader.

  • --loader

    type: string

    default: Http

    options: Http, Webpack

    alias: lo

Provide the configuration that is needed for a project using server side rendering.

  • --ssr

    type: boolean,

    default: false

Define the location of the translation files.

  • --path

    type: string

    default: assets/i18n/

    alias: p

Provide the name of the project where Transloco should be installed to.

  • --project

    type: string

    default: project root directory name

Provide the path to a root Module and import TranslocoModule along with the module's required configuration defined by previous flags.

  • --module

    type: string

    default: app

- + \ No newline at end of file diff --git a/docs/schematics/scope.html b/docs/schematics/scope.html index afcbebb3b..e2f860379 100644 --- a/docs/schematics/scope.html +++ b/docs/schematics/scope.html @@ -4,13 +4,13 @@ Scope | Transloco Angular i18n - +

Scope

Scope

Overview

Add new Transloco scope to a new/existing Angular module, and create the scope's translation files.

Command

ng generate @jsverse/transloco:scope [name]

Options

Define the name of the new scope.

  • --name

type: string

Define the path at which module to add scope to, relative to the workspace root.

Note if this flag won't be provide a new Module should be created.

  • --module

type: string

Define the languages of the scope, default is the root languages.

  • --langs

type: string

alias: la

Skip the creation of the translation files.

  • --skip-creation

type: boolean

Define the format of the translation files.

  • --translate-type

type: string

default: JSON

Define the location of the translation files.

  • --translation-path

type: string

Examples

ng g @jsverse/transloco:scope my-scope
ng g @jsverse/transloco:scope my-scope --module path/to/my-scope
ng g @jsverse/transloco:scope my-scope --inline-loader
- + \ No newline at end of file diff --git a/docs/schematics/split.html b/docs/schematics/split.html index 0e9ba37cf..c98946220 100644 --- a/docs/schematics/split.html +++ b/docs/schematics/split.html @@ -4,13 +4,13 @@ Split | Transloco Angular i18n - +

Split

Split

Overview

Does the opposite process of join command. It splits the translated files between the project's translation files.

Command

ng generate @jsverse/transloco:split

Options

The folder that contains the root translation files.

  • --translation-path

    type: string

    default: src/assets/i18n

    alias: root

The path of the source directory that contains the translated files.

  • source

    type: string

    default: dist-i18n

    alias: o

- + \ No newline at end of file diff --git a/docs/schematics/upgrade.html b/docs/schematics/upgrade.html index dc4c1749b..def91e026 100644 --- a/docs/schematics/upgrade.html +++ b/docs/schematics/upgrade.html @@ -4,14 +4,14 @@ Upgrade | Transloco Angular i18n - +

Upgrade

Upgrade [Legacy and will be removed in v7]

Overview

The Library's upgrade script from v1 to v2. For more information about the script see: v2-upgrade.md

Command

 ng generate @jsverse/transloco:upgrade

Options

Define the entry path of the upgrade script.

  • --path

    type: string

    default: ./src/app

    alias: p

- + \ No newline at end of file diff --git a/docs/ssr-support.html b/docs/ssr-support.html index d8584200e..173887c2b 100644 --- a/docs/ssr-support.html +++ b/docs/ssr-support.html @@ -4,13 +4,13 @@ SSR Support | Transloco Angular i18n - +

SSR Support

Create a new CLI project and add SSR support:

ng add @nguniversal/express-engine --clientProject <PROJECT-NAME>

When employing Angular SSR, we need to change our loader base path to be absolute instead of relative, in order for it to work. Run ng add @jsverse/transloco and choose the SSR option. This will make sure to update the loader to use an absolute path.

Moreover, Transloco will add a baseUrl key to the environment object. Make sure to update it based on your environments.

environment.ts
export const environment = {
production: false,
baseUrl: 'http://localhost:4200' <====
};
- + \ No newline at end of file diff --git a/docs/tools/comments.html b/docs/tools/comments.html index 79d2bb111..de1e18952 100644 --- a/docs/tools/comments.html +++ b/docs/tools/comments.html @@ -4,13 +4,13 @@ Comments for Translators | Transloco Angular i18n - +

Comments for Translators

Help the translator with a description and meaning

There are times where we need to help the translator with a description and meaning. To translate a text message accurately, the translator may need additional information or context.

For each translation key that requires a description, we can add a companion key post-fixed with .comment, as shown in the example below:

en.json
{
"hello": "",
"hello.comment": "Write a comment for the translator"
}

We don't want these keys to get into our final bundle, so we can remove them using the optimize library when building the production environment.

The library will take care of removing these keys from the translation files specified in the path.

- + \ No newline at end of file diff --git a/docs/tools/optimize.html b/docs/tools/optimize.html index f3660201e..9a83c4755 100644 --- a/docs/tools/optimize.html +++ b/docs/tools/optimize.html @@ -4,13 +4,13 @@ Optimize | Transloco Angular i18n - +

Optimize

This library will do the following things:

  • AOT translation file flatting
  • Remove translators comments
  • Minify the JSON file

Installation

npm install @jsverse/transloco-optimize --save-dev

Usage

Add to your package.json the following script:

package.json
"scripts": {
"transloco:optimize": "transloco-optimize dist/appName/assets/i18n",
"build:prod": "ng build --prod && npm run transloco:optimize",
}

Then, add the following config option to the application Transloco config object:

import {isDevMode} from "@angular/core";

translocoConfig({
flatten: {
aot: !isDevMode()
}
})

You can also use it as a function:

import translocoOptimize from '@jsverse/transloco-optimize';
import { task } from 'gulp';

// e.g: `${__dirname}/dist/${appName}/assets/i18n`;
const pathToLocales = ...

task('transloco:optimize', function(cb) {
translocoOptimize({ dist: pathToLocales }).then(cb);
});
- + \ No newline at end of file diff --git a/docs/tools/scope-lib-extractor.html b/docs/tools/scope-lib-extractor.html index 2099d6479..10fe3de2d 100644 --- a/docs/tools/scope-lib-extractor.html +++ b/docs/tools/scope-lib-extractor.html @@ -4,14 +4,14 @@ Scoped Library Extractor | Transloco Angular i18n - +

Scoped Library Extractor

There are cases where we need to use translations in our npm libraries (which is common in a monorepo environment). In these cases, we probably want to have the translation files inside the library's folder and ship them together with it.

Unfortunately, we won't be able to load our translation files from the library for two reasons:

  1. We can't access the application's public directory
  2. Webpack dynamic imports don't work with libraries

The only option we've got is to load the library translation files from our application public folder.

So if we want our translation files to be under the library's folder, we'll need to copy and paste the translation files repeatedly.

Well, this is why we've created the Scoped Library Extractor tool, which will do the work for you.

For example, here we have created a new CLI project, with the main application (app), and another library with translations (core):

📦 projects
┣ 📂 core
┃ ┣ 📂 src
┃ ┃ ┣ 📂 lib
┃ ┃ ┃ ┣ 📜 core.component.ts
┃ ┃ ┃ ┣ 📜 core.module.ts
┃ ┃ ┃ ┣ 📂 i18n
┃ ┃ ┃ ┃ ┣ 📜 en.json
┃ ┃ ┃ ┃ ┗ 📜 es.json
┃ ┃ ┣ 📜 public-api.ts
┣ 📜 ng-package.json
┣ 📜 package.json
📦 src
┣ 📂 app
┃ ┣ 📜 app.component.html
┃ ┣ 📜 app.component.ts
┃ ┣ 📜 app.module.ts
┃ ┗ 📜 transloco.loader.ts
┣ 📂 assets
┃ ┣ 📂 i18n
┃ ┃ ┣ 📜 en.json
┃ ┃ ┗ 📜 es.json

Now we need to declare the scope in the CoreModule:

core.module.ts
import {provideTranslocoScope} from "./transloco.providers";
@NgModule({
declarations: [CoreComponent],
providers: [provideTranslocoScope('core')],
imports: [TranslocoModule]
})
export class CoreModule {}

Now, we can use the scope in our component:

lib-core.component.html
@Component({
selector: 'lib-core',
template: `
<ng-container *transloco="let t">
{{ t('core.title') }}
</ng-container>
`
})
export class CoreComponent {
}

Now, let's install transloco-scoped-libs package:

$ npm install @jsverse/transloco-scoped-libs --save-dev

The first thing we need to do is to add i18n configuration with the path to the translation folder in the library's package.json:

projects/core/package.json
{
"name": "@app/core",
"i18n": [
{
"scope": "core",
"path": "src/lib/i18n"
}
]
}

Next, we need to add the library's path into transloco.config.js as following (we can also pass npm package):

transloco.config.js
module.exports = {
scopedLibs: ['./projects/core/', '@lib/name']
};

If multiple destination is needed you could also pass scopedLibs as an object:

transloco.config.js
module.exports = {
scopedLibs: [
{
src: './projects/core',
dist: ['./projects/spa/src/assets/i18n', './src/assets/i18n/']
}
]
};

Note that the path should refer to the location of the library's package.json file. Finally, we need to add the following script to the main package.json:

package.json
"scripts": {
"transloco:extract-scoped-libs": "transloco-scoped-libs"
}

It also support "watch mode" by passing --watch flag:

package.json
"scripts": {
"transloco:extract-scoped-libs": "transloco-scoped-libs --watch"
}

Now, if we run the script, the following things will happen:

  1. The script will extract the translation files from our library and copy them to the main project's translation root folder (e.g., src/assets/i18n).

  2. It will add the library's translation files to the .gitignore ( if you don't want to modify the .gitignore use the --skip-gitignore flag).

Join Strategies

This tool supports two different strategies. The default option, the one we used above, and join.

The join strategy will combine all the translation files into one file under the root translation path for each language (e.g., en.vendor.json).

We can set the strategy in our library's package.json:

projects/core/package.json
{
"name": "@app/core",
"i18n": [
{
"scope": "core",
"path": "src/lib/i18n",
"strategy": "join"
}
]
}

Then, we can use it in our application loader:

transloco-loader.ts
@Injectable({ providedIn: 'root' })
export class HttpLoader implements TranslocoLoader {

constructor(private http: HttpClient) {}

getTranslation(lang: string, { scope }) {
const base = this.http.get(`/assets/i18n/${lang}.json`);

if(scope) {
return base;
}

return forkJoin([
base,
this.http.get(`/assets/i18n/${lang}.vendor.json`)
]).pipe(map(([translation, vendor]) => {
return { ...translation, ...vendor }
}))
}
}

export const httpLoader = { provide: TRANSLOCO_LOADER, useClass: HttpLoader };

Use the Webpack Plugin

Add custom Webpack support by using a tool such as ngx-build-plus, and add the plugin to webpack.config file:

webpack.config.js
const TranslocoScopedLibsWebpackPlugin = require('@jsverse/transloco-scoped-libs/webpack');

module.exports = {
plugins: [new TranslocoScopedLibsWebpackPlugin()]
};
- + \ No newline at end of file diff --git a/docs/tools/validator.html b/docs/tools/validator.html index ecea11fa8..b73f50fae 100644 --- a/docs/tools/validator.html +++ b/docs/tools/validator.html @@ -4,13 +4,13 @@ Validator | Transloco Angular i18n - +

Validator

This package provides validation for translation files. It validates that the JSON is valid and that it doesn't contain duplicates keys.

Installation

Usage

{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/assets/i18n/*.json": ["transloco-validator"]
}
}

This will make sure no one accidentally pushes an invalid translation file.

- + \ No newline at end of file diff --git a/docs/translation-api.html b/docs/translation-api.html index 3a73cf93f..01ed5dc28 100644 --- a/docs/translation-api.html +++ b/docs/translation-api.html @@ -4,7 +4,7 @@ Translation API | Transloco Angular i18n - + @@ -13,7 +13,7 @@ and provide it to the selectTranslate function:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService,
@Inject(TRANSLOCO_SCOPE) private scope
) {}

ngOnInit() {
this.translocoService.selectTranslate('title', params, this.scope)
.subscribe(console.log);
}
}

translateObject()

en.json
{
"home": "Home",
"hello": "Hello {{ name }}",
"some": {
"object": {
"hi": "Hi",
"hey": "Hey"
}
},
"path": {
"to": {
"object": {
"welcome": "Welcome {{ name }}",
"nested": {
"subscribe": "subscribe today for {{ price }}$"
}
}
}
}
}

The following code is based on the en.json above ☝

  • Returns an object based on the given path:
app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
let result = this.translocoService.translateObject('some.object');
expect(result).toEqual({
hi: "Hi",
hey: "Hey"
});

/* When querying an object that should be transpiled */
result = this.translocoService.translateObject('path.to.object', {
welcome: { value: 'John' },
'nested.subscribe': { price: 100 }
});
expect(result).toEqual({
welcome: "Welcome John",
nested: {
"subscribe": "subscribe today for 100$"
}});
}
}
  • Given a key: params map (object | Map), returns an array of translated values:
app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
/* If there are no parameters to transpile pass an empty `object` or `null` */
let keyParams = {
home: null, // {}
}
let result = this.translocoService.translateObject(keyParams);
expect(result).toEqual(["Home"]);

/* When querying an object that should be transpiled */
keyParams = {
home: null,
hello: { name: 'John' },
}
result = this.translocoService.translateObject(keyParams);
expect(result).toEqual(["Home", "Hello John"]);

/* Works with object paths */
keyParams = {
hello: { name: 'John' },
'path.to.object.nested': {subscribe: {price: 100}}
}
result = this.translocoService.translateObject(keyParams);
expect(result).toEqual([ "Home", { subscribe: "subscribe today for 100$" }]);

/* Works with `Map` */
keyParams = new Map();
keyParams.set('home', null);
result = this.translocoService.translateObject(keyParams);
expect(result).toEqual(["Home"]);
}
}
info

Note that in order to safely use this method, you are responsible for ensuring that the translation files have been successfully loaded by the time it's called.

If you aren't sure, you can use the selectTranslateObject() method instead:

selectTranslateObject()

Load the translation file (if not loaded yet) and behaves the same as translateObject. The only difference is that this method returns an observable to which you can subscribe.

The following code is based on the en.json in translateObject

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
this.translocoService.selectTranslateObject('path.to.object', {
welcome: { value: 'John' },
'nested.subscribe': { price: 100 }
}).subscribe(result => {
expect(result).toEqual({
welcome: "Welcome John",
nested: {
"subscribe": "subscribe today for 100$"
}
});
});

keyParams = {
hello: { name: 'John' },
'path.to.object.nested': {subscribe: {price: 100}}
}
this.translocoService.selectTranslateObject(keyParams)
.subscribe(result => {
expect(result).toEqual(["Home", { subscribe: "subscribe today for 100$" }]);
});
}
}

getTranslation()

Returns the selected language translation or a scope translation, if a language isn't passed, the method will return the entire translation map:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
this.translocoService.getTranslation();
this.translocoService.getTranslation('es');
this.translocoService.getTranslation('todos/es');
}
}

selectTranslation()

Returns an observable that when subscribed loads and emits the given language translation object, if no language is passed the active language will be used.
This method can also be used to retrieve a scope translation object:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

// Don't forget to unsubscribe
ngOnInit() {
this.translocoService.selectTranslation('es')
.subscribe(console.log);

this.translocoService.selectTranslation('todos/es')
.subscribe(console.log);

// Will emit a new value on language changes.
this.translocoService.selectTranslation()
.subscribe(console.log);

this.translocoService.selectTranslation('todos')
.subscribe(console.log);
}
}

setTranslation()

Manually sets a translations object to be used for a given language, set merge to true if you want to append the translations instead of replacing them:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
this.translocoService.setTranslation({ key: value });
this.translocoService.setTranslation({ ... }, 'es');
this.translocoService.setTranslation({ ... }, 'en', { merge: false } );

// Set a scope
this.translocoService.setTranslation({ ... }, 'todos/en');
}
}

setTranslationKey()

Sets the translated value of a key. If a language isn't specified in the third parameter, it sets the key value for the current active language:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
this.translocoService.setTranslationKey('key', 'value');
this.translocoService.setTranslationKey('key.nested', 'value');
this.translocoService.setTranslationKey('key', 'value', 'en');
this.translocoService.setTranslationKey('key', 'value', 'en', { emitChange: false });
}
}

events$

Subscribe to the translation loading events:

app.component.ts
export class AppComponent {
constructor(private translocoService: TranslocoService) {}

ngOnInit() {
this.translocoService.events$.pipe(
filter(e => e.type === 'translationLoadSuccess'),
pluck('payload')
).subscribe(({ langName, scope }) => ...);

this.translocoService.events$.pipe(
filter(e => e.type === 'translationLoadFailure'),
pluck('payload')
).subscribe(({ langName, scope }) => ...);

this.translocoService.events$.pipe(
filter(e => e.type === 'langChanged'),
pluck('payload')
).subscribe(({ langName, scope }) => ...);
}
info

Note that these events will only fire when the translation is loaded from the server, meaning that when switching from a given lang and back won't trigger the events again since the language is loaded from the cache.

- + \ No newline at end of file diff --git a/docs/translation-in-the-template.html b/docs/translation-in-the-template.html index 35e386e96..43114b16d 100644 --- a/docs/translation-in-the-template.html +++ b/docs/translation-in-the-template.html @@ -4,14 +4,14 @@ Translation in The Template | Transloco Angular i18n - +

Translation in The Template

Structural Directive

Using a structural directive is the recommended approach. It's DRY and efficient, as it creates one subscription per template:

home.component.html
<ng-container *transloco="let t">
<p>{{ t('title') }}</p>

<comp [title]="t('title')"></comp>
</ng-container>

Note that the t function is memoized. It means that given the same key it will return the result directly from the cache.

We can pass a params object as the second parameter:

home.component.html
<ng-container *transloco="let t">
<p>{{ t('name', { name: 'Transloco' }) }}</p>
</ng-container>
en.json
{
"name": "My name is {{name}}"
}

We can instruct the directive to use a different language in our template:

home.component.html
<ng-container *transloco="let t; lang: 'es'">
<p>{{ t('title') }}</p>
</ng-container>

This will translate each key based on the Spanish language translation file.

Utilizing the prefix input

info

This input was previously named read and was renamed to prefix starting v7.1.0.
The read input is deprecated and will be removed in v8.

We can use the prefix input in the structural directive to get translations of a particular nested (including deeply nested) property.

Let's say we need to use the dashboard scope all over the template. Given this translation file:

en.json
{
"foo": "Foo",
"bar": "Bar",
"dashboard": {
"title": "Dashboard Title",
"desc": "Dashboard Desc"
}
}

we can write:

home.component.html
<ng-container *transloco="let t; prefix: 'dashboard'">
<p>{{ t('title') }}</p>
</ng-container>

without having to repeat the dashboard key in each translation. Under the hood, it will do the following for you:

home.component.html
<ng-container *transloco="let t;">
<h1>{{ t('dashboard.title') }}</h1>
<p>{{ t('dashboard.desc') }}</p>
</ng-container>

Pipe

The second option we have is to use the transloco pipe:

home.component.html
<span>{{ 'home' | transloco }}</span>

Use it with params:

home.component.html
<span>{{ 'alert' | transloco: { value: dynamic } }}</span>

Use it with inputs:

home.component.html
<span [attr.alt]="'hello' | transloco">Attribute</span>
<span [title]="'hello' | transloco">Property</span>

Use it with a different language:

home.component.html
<span>{{ 'alert' | transloco:params:'es' }}</span>

Attribute Directive

The last option we have is to use transloco attribute directive:

home.component.html
<span transloco="home"></span>

Use it with params:

home.component.html
<span transloco="alert" [translocoParams]="{ value: dynamic }"></span>

Use it with a different language:

home.component.html
<span transloco="home" translocoLang="es"></span>
- + \ No newline at end of file diff --git a/docs/transpiler.html b/docs/transpiler.html index 5fd13e67e..db1b586d3 100644 --- a/docs/transpiler.html +++ b/docs/transpiler.html @@ -4,7 +4,7 @@ The Transpiler | Transloco Angular i18n - + @@ -12,7 +12,7 @@

The Transpiler

The transpiler is responsible for resolving the given value. For example, when given Hello {{ key }} the default transpiler will replace the dynamic variable key based on the given params, or in some cases, within the translation object itself.

DefaultTranspiler

The default transpiler can be configured with custom interpolation start and end markings to match message parameters.

To configure the DefaultTranspiler interpolation markings you must provide a Transloco config with the interpolation property set.

Functional Transpiler

In addition to the default transpiler, Transloco also exposes the FunctionalTranspiler which allows you to implement function calls into your translation values. This way you can leverage Angular's DI power and make your translations even more flexible.

The FunctionalTranspiler is compatible with the DefaultTranspiler, therefore you can switch to the functional without worrying that it'll break your current translations.

note

Switching back to the default transpiler will require you to remove all the functional syntax.

To enable this transpiler, add the following provider in your TranslocoRootModule:

transloco-root.module.ts
import { FunctionalTranspiler, provideTranslocoTranspiler } from '@jsverse/transloco';

@NgModule({
...
providers: [provideTranslocoTranspiler(FunctionalTranspiler)]
})
export class TranslocoRootModule {}

Usage

In order to use a function in the translation, we need to provide it to the transpiler. We do so by creating a new class that implements the TranslocoTranspilerFunction interface.

For example, let's say we want to display different texts, based on whether the user is exposed to a specific feature or not:

has-feature-flag.ts
import { FFService } from './feature-flag.service';
import { TranslocoTranspilerFunction } from '@jsverse/transloco';

class FeatureFlagResolver implements TranslocoTranspilerFunction {
constructor(private featureFlagService: FFService) {}

transpile(...args: string[]): any {
const [flagName, trueValue, falseValue] = args;

return this.featureFlagService.hasFF(flagName) ? trueValue : falseValue;
}
}

As you can see, the transpile function can accept any number of arguments; you're the one who defines which arguments will be passed. In my case I'm passing three:

  • The feature flag's name.
  • The value I want to present in case the user has the flag.
  • The value I want to present in case the user doesn't have the flag.

Now we will add this transpiler function to the TranslocoRootModule providers:

transloco-root.module.ts
import { FunctionalTranspiler, provideTranslocoTranspiler } from '@jsverse/transloco';
import { FeatureFlagResolver } from './has-feature-flag';

@NgModule({
...
providers: [provideTranslocoTranspiler(FunctionalTranspiler),
{
provide: 'hasFeatureFlag', // ====> The function name used in the translation
useClass: FeatureFlagResolver
}],
})
export class TranslocoRootModule {}

The functional syntax is very similar to calling a regular function, here is an example:

en.json
{
"title": "[[ hasFeatureFlag(newDashboards, has flag, missing flag) ]]",
}

In this case, we are checking if the user has the newDashboard flag, and in case he does, we want to display 'has flag'; otherwise, we will display 'missing flag'.

Usage Notes

If the function returns a string that includes the interpolation syntax ({{value}}), the transpiler will replace it with the params or other keys references just like the default transpiler does.

If your function param needs to include a comma, you need to escape it:

en.json
{
"title": "[[ someFunc(Hello {{user}}\\, welcome ,...) ]]",
}

'Hello {{user}}, welcome' will be the first param passed.

Custom Transpiler

You can also provide a custom transpiler by creating a class that implements the TranslocoTranspiler interface.

import { TranslocoTranspiler } from '@jsverse/transloco';

export class CustomTranspiler implements TranslocoTranspiler {
transpile(value: any, params, translation: Translation, key: string) {
return ...;
}
}
- + \ No newline at end of file diff --git a/docs/unit-testing.html b/docs/unit-testing.html index b86f83c1d..839a6e45b 100644 --- a/docs/unit-testing.html +++ b/docs/unit-testing.html @@ -4,13 +4,13 @@ Unit Testing | Transloco Angular i18n - +

Unit Testing

When running specs, we want to have the languages available immediately, in a synchronous fashion. Transloco provides you with a TranslocoTestingModule, where you can pass the languages you need in your specs, and the config.

We recommend to be DRY and create a module factory function that we can use in each spec, For example:

transloco-testing.module.ts

import { TranslocoTestingModule, TranslocoTestingOptions } from '@jsverse/transloco';
import en from '../assets/i18n/en.json';
import es from '../assets/i18n/es.json';

export function getTranslocoModule(options: TranslocoTestingOptions = {}) {
return TranslocoTestingModule.forRoot({
langs: { en, es },
translocoConfig: {
availableLangs: ['en', 'es'],
defaultLang: 'en',
},
preloadLangs: true,
...options
});
}

Now we can use it in each spec file:

app.component.spec.ts
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [getTranslocoModule()],
declarations: [AppComponent]
}).compileComponents();
}));

it('should work', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
expect(fixture.debugElement.query(By.css('h1'))
.nativeElement.innerText).toBe('hello');
});
});

You can find an example here.

If you need to test scopes, you should add them as languages, for example:

transloco-testing.module.ts
export function getTranslocoModule(options: TranslocoTestingOptions = {}) {
return TranslocoTestingModule.forRoot({
langs: {
en,
es,
'admin-page/en': admin,
'admin-page/es': adminSpanish,
},
translocoConfig: {
availableLangs: ['en', 'es'],
defaultLang: 'en',
},
preloadLangs: true,
...options
});
}

You can find an example here.

Note that in order to import JSON files, you need to configure the TypeScript compiler by adding the following properties in tsconfig.json:

{
"resolveJsonModule": true,
"esModuleInterop": true
}
- + \ No newline at end of file diff --git a/index.html b/index.html index 33d9640e1..9d3e9c122 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,13 @@ Transloco Angular i18n - +
{}TRANSLOCO

🚀 The internationalization (i18n) library for Angular 😍

Transloco allows you to define translations for your content in different languages and switch between them easily in runtime. It exposes a rich API to manage translations efficiently and cleanly. It provides multiple plugins that will improve your development experience.
Here is a small taste of the features it offers:
[object Object]

Clean and DRY templates

Keep your templates clean and DRY using the Transloco structural directive

[object Object]

Support for Lazy Load

Load translation files on-demand using Transloco's built-in scope feature

[object Object]

Rich Plugins

Transloco has a rich plugins ecosystem that provides the tools you need for both development and production environments

[object Object]

Support for Multiple Fallbacks

Extensive support for fallbacks. Multiple fallbacks for failed requests and missing keys replacement

[object Object]

Support for SSR

Pre-render your translations with Angular SSR and Transloco!

[object Object]

L10N

Localize your app with Transloco. Transloco provides the transloco-locale package which provides pipes such as Date,Number,Currency and more!

We've got you covered

We've got you covered

To help you get started, we made the Transloco Guide! watch the videos, follow the docs, and you will master Transloco in no time!

- + \ No newline at end of file diff --git a/live-app.html b/live-app.html index cdfa20022..08bbd7702 100644 --- a/live-app.html +++ b/live-app.html @@ -4,13 +4,13 @@ Transloco Angular i18n - + - + \ No newline at end of file diff --git a/search.html b/search.html index f31756129..8a2d0a83a 100644 --- a/search.html +++ b/search.html @@ -4,13 +4,13 @@ Search the documentation | Transloco Angular i18n - +

Search the documentation

- + \ No newline at end of file diff --git a/transloco-playground/76.a77738d5ecb6deb5.js b/transloco-playground/76.a77738d5ecb6deb5.js new file mode 100644 index 000000000..f342e29db --- /dev/null +++ b/transloco-playground/76.a77738d5ecb6deb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktransloco_playground=self.webpackChunktransloco_playground||[]).push([[76],{1076:(d,o,i)=>{i.r(o),i.d(o,{default:()=>m});var s=i(6671),a=i(9212),p=i(3750),c=i(654);function _(t,n){if(1&t&&(a.ynx(0),a._uU(1," admin-page:"),a._UZ(2,"br"),a.TgZ(3,"p",5),a._uU(4),a.qZA(),a.BQk()),2&t){const e=n.$implicit;a.xp6(4),a.Oqu(e("AdminPageAlias.title"))}}function u(t,n){if(1&t&&(a.ynx(0),a._uU(1," lazy-page:"),a._UZ(2,"br"),a.TgZ(3,"p",5),a._uU(4),a.qZA(),a.BQk()),2&t){const e=n.$implicit;a.xp6(4),a.Oqu(e("LazyPageAlias.title"))}}function r(t,n){if(1&t&&(a.ynx(0),a._uU(1," admin-page: "),a.TgZ(2,"p",6),a._uU(3),a.qZA(),a.BQk()),2&t){const e=n.$implicit;a.xp6(3),a.Oqu(e("prefix"))}}function g(t,n){if(1&t&&(a.ynx(0),a._uU(1," lazy-page: "),a.TgZ(2,"p",7),a._uU(3),a.qZA(),a.BQk()),2&t){const e=n.$implicit;a.xp6(3),a.Oqu(e("title"))}}let m=(()=>{class t{static#a=this.\u0275fac=function(l){return new(l||t)};static#t=this.\u0275cmp=a.Xpm({type:t,selectors:[["app-lazy-multiple-scopes"]],standalone:!0,features:[a._Bn([(0,s.iX)({scope:"admin-page",alias:"AdminPageAlias"},{scope:"lazy-page",alias:"LazyPageAlias"})]),a.jDz],decls:20,vars:8,consts:[["data-cy","multiple-scopes"],[1,"admin-page-title"],[1,"lazy-page-title"],[4,"transloco"],[4,"transloco","translocoPrefix"],["data-cy","regular"],["data-cy","prefix",1,"admin-prefix"],["data-cy","lazy-page",1,"admin-prefix"]],template:function(l,y){1&l&&(a.TgZ(0,"h4"),a._uU(1,"Two scopes are defined in this module:"),a.qZA(),a.TgZ(2,"p",0),a._uU(3," admin-page: "),a.TgZ(4,"span",1),a._uU(5),a.ALo(6,"transloco"),a.qZA(),a._UZ(7,"br"),a._uU(8," lazy-page: "),a.TgZ(9,"span",2),a._uU(10),a.ALo(11,"transloco"),a.qZA()(),a.TgZ(12,"h4"),a._uU(13,"Two scopes using structural directives:"),a.qZA(),a.YNc(14,_,5,1,"ng-container",3)(15,u,5,1,"ng-container",3),a.TgZ(16,"h4"),a._uU(17,"Two scopes using structural directives (using prefix):"),a.qZA(),a.YNc(18,r,4,1,"ng-container",4)(19,g,4,1,"ng-container",4)),2&l&&(a.xp6(5),a.Oqu(a.lcZ(6,4,"AdminPageAlias.title")),a.xp6(5),a.Oqu(a.lcZ(11,6,"LazyPageAlias.title")),a.xp6(8),a.Q6J("translocoPrefix","AdminPageAlias"),a.xp6(),a.Q6J("translocoPrefix","LazyPageAlias"))},dependencies:[s.y4,p.K,c.O]})}return t})()}}]); \ No newline at end of file diff --git a/transloco-playground/index.html b/transloco-playground/index.html index 9f93d7f71..a50dd95a0 100644 --- a/transloco-playground/index.html +++ b/transloco-playground/index.html @@ -9,6 +9,6 @@ - + \ No newline at end of file diff --git a/transloco-playground/main.87964fc4105893a0.js b/transloco-playground/main.87964fc4105893a0.js new file mode 100644 index 000000000..6cec94063 --- /dev/null +++ b/transloco-playground/main.87964fc4105893a0.js @@ -0,0 +1 @@ +(self.webpackChunktransloco_playground=self.webpackChunktransloco_playground||[]).push([[179],{9872:(Fe,W,b)=>{var p={"./en.json":[5848,848],"./es.json":[8930,930]};function P(B){if(!b.o(p,B))return Promise.resolve().then(()=>{var H=new Error("Cannot find module '"+B+"'");throw H.code="MODULE_NOT_FOUND",H});var k=p[B],j=k[0];return b.e(k[1]).then(()=>b.t(j,19))}P.keys=()=>Object.keys(p),P.id=9872,Fe.exports=P},6156:function(Fe){Fe.exports=function(){"use strict";function W(f){return(W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(m){return typeof m}:function(m){return m&&"function"==typeof Symbol&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m})(f)}function b(f,m){if(!(f instanceof m))throw new TypeError("Cannot call a class as a function")}function p(f,m){for(var v=0;v"u"||!Reflect.construct||Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function z(f,m,v){return(z=H()?Reflect.construct:function(w,M,A){var N=[null];N.push.apply(N,M);var se=new(Function.bind.apply(w,N));return A&&j(se,A.prototype),se}).apply(null,arguments)}function $(f){var m="function"==typeof Map?new Map:void 0;return $=function(D){if(null===D||!function le(f){return-1!==Function.toString.call(f).indexOf("[native code]")}(D))return D;if("function"!=typeof D)throw new TypeError("Super expression must either be null or a function");if(typeof m<"u"){if(m.has(D))return m.get(D);m.set(D,w)}function w(){return z(D,arguments,k(this).constructor)}return w.prototype=Object.create(D.prototype,{constructor:{value:w,enumerable:!1,writable:!0,configurable:!0}}),j(w,D)},$(f)}function O(f,m){return!m||"object"!=typeof m&&"function"!=typeof m?function J(f){if(void 0===f)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return f}(f):m}function V(f){var m=H();return function(){var w,D=k(f);if(m){var M=k(this).constructor;w=Reflect.construct(D,arguments,M)}else w=D.apply(this,arguments);return O(this,w)}}function ie(f,m){return function X(f){if(Array.isArray(f))return f}(f)||function ce(f,m){var v=f&&(typeof Symbol<"u"&&f[Symbol.iterator]||f["@@iterator"]);if(null!=v){var A,N,D=[],w=!0,M=!1;try{for(v=v.call(f);!(w=(A=v.next()).done)&&(D.push(A.value),!m||D.length!==m);w=!0);}catch(U){M=!0,N=U}finally{try{!w&&null!=v.return&&v.return()}finally{if(M)throw N}}return D}}(f,m)||Le(f,m)||function Ee(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(f,m){if(f){if("string"==typeof f)return Re(f,m);var v=Object.prototype.toString.call(f).slice(8,-1);if("Object"===v&&f.constructor&&(v=f.constructor.name),"Map"===v||"Set"===v)return Array.from(f);if("Arguments"===v||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v))return Re(f,m)}}function Re(f,m){(null==m||m>f.length)&&(m=f.length);for(var v=0,D=new Array(m);v=f.length?{done:!0}:{done:!1,value:f[D++]}},e:function(U){throw U},f:w}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var N,M=!0,A=!1;return{s:function(){v=v.call(f)},n:function(){var U=v.next();return M=U.done,U},e:function(U){A=!0,N=U},f:function(){try{!M&&null!=v.return&&v.return()}finally{if(A)throw N}}}}var Ve=function(){return Ve=Object.assign||function(v){for(var D,w=1,M=arguments.length;w=f.length&&(f=void 0),{value:f&&f[D++],done:!f}}};throw new TypeError(m?"Object is not iterable.":"Symbol.iterator is not defined.")}function de(f,m){var v="function"==typeof Symbol&&f[Symbol.iterator];if(!v)return f;var w,A,D=v.call(f),M=[];try{for(;(void 0===m||m-- >0)&&!(w=D.next()).done;)M.push(w.value)}catch(N){A={error:N}}finally{try{w&&!w.done&&(v=D.return)&&v.call(D)}finally{if(A)throw A.error}}return M}function We(f,m){for(var v=0,D=m.length,w=f.length;v1&&void 0!==arguments[1]?arguments[1]:function(N){throw N},v={},D=[],w=Ne(f);try{var A=function(){var U=M.value,se=U.error,ke=U.field,Te=U.str;if(se){var Ae=new ee(se.message,U);Ae.stack=se.stack,m(Ae)}if(Te){var ve="Ignoring string part: ".concat(Te);m(new ee(ve,U,ee.WARNING))}ke&&(-1===D.indexOf(ke)?D.push(ke):m(new ee("Duplicate ".concat(ke," token"),U)));var He=Ye(U,function(ze,ht){return m(new ee(ze,U,ht))});He&&Object.assign(v,He)};for(w.s();!(M=w.n()).done;)A()}catch(N){w.e(N)}finally{w.f()}return v}var ut={G:{field:"era",desc:"Era"},y:{field:"year",desc:"Year"},Y:{field:"year",desc:'Year of "Week of Year"'},u:{field:"year",desc:"Extended year"},U:{field:"year",desc:"Cyclic year name"},r:{field:"year",desc:"Related Gregorian year"},Q:{field:"quarter",desc:"Quarter"},q:{field:"quarter",desc:"Stand-alone quarter"},M:{field:"month",desc:"Month in year"},L:{field:"month",desc:"Stand-alone month in year"},w:{field:"week",desc:"Week of year"},W:{field:"week",desc:"Week of month"},d:{field:"day",desc:"Day in month"},D:{field:"day",desc:"Day of year"},F:{field:"day",desc:"Day of week in month"},g:{field:"day",desc:"Modified julian day"},E:{field:"weekday",desc:"Day of week"},e:{field:"weekday",desc:"Local day of week"},c:{field:"weekday",desc:"Stand-alone local day of week"},a:{field:"period",desc:"AM/PM marker"},b:{field:"period",desc:"AM/PM/noon/midnight marker"},B:{field:"period",desc:"Flexible day period"},h:{field:"hour",desc:"Hour in AM/PM (1~12)"},H:{field:"hour",desc:"Hour in day (0~23)"},k:{field:"hour",desc:"Hour in day (1~24)"},K:{field:"hour",desc:"Hour in AM/PM (0~11)"},j:{field:"hour",desc:"Hour in preferred cycle"},J:{field:"hour",desc:"Hour in preferred cycle without marker"},C:{field:"hour",desc:"Hour in preferred cycle with flexible marker"},m:{field:"min",desc:"Minute in hour"},s:{field:"sec",desc:"Second in minute"},S:{field:"sec-frac",desc:"Fractional second"},A:{field:"ms",desc:"Milliseconds in day"},z:{field:"tz",desc:"Time Zone: specific non-location"},Z:{field:"tz",desc:"Time Zone"},O:{field:"tz",desc:"Time Zone: localized"},v:{field:"tz",desc:"Time Zone: generic non-location"},V:{field:"tz",desc:"Time Zone: ID"},X:{field:"tz",desc:"Time Zone: ISO8601 with Z"},x:{field:"tz",desc:"Time Zone: ISO8601"}},qe=function(m){return m>="A"&&m<="Z"||m>="a"&&m<="z"};function kt(f,m){var v=f[m];if(!v)return null;if(qe(v))return function Tt(f,m){for(var v=f[m],D=1;f[++m]===v;)++D;var w=ut[v];if(!w){var M="The letter ".concat(v," is not a valid field identifier");return{char:v,error:new Error(M),width:D}}return{char:v,field:w.field,desc:w.desc,width:D}}(f,m);if("'"===v)return function wt(f,m){var v=f[++m],D=2;if("'"===v)return{char:"'",str:v,width:D};for(;;){var w=f[++m];if(++D,void 0===w){var M="Unterminated quoted literal in pattern: ".concat(v||f);return{char:"'",error:new Error(M),str:v,width:D}}if("'"===w){if("'"!==f[++m])return{char:"'",str:v,width:D};++D}v+=w}}(f,m);for(var D=v,w=1;;){var M=f[++m];if(!M||qe(M)||"'"===M)return{char:v,str:D,width:w};D+=M,w+=1}}function Ut(f){for(var m=[],v=0;;){var D=kt(f,v);if(!D)return m;m.push(D),v+=D.width}}var Zt=function(f){B(v,f);var m=V(v);function v(D,w){var M;return b(this,v),(M=m.call(this,w)).code=D,M}return v}($(Error)),Io=function(f){B(v,f);var m=V(v);function v(D,w){var M;return b(this,v),(M=m.call(this,"BAD_OPTION","Unknown ".concat(D," option: ").concat(w))).stem=D,M.option=w,M}return v}(Zt),Rs=function(f){B(v,f);var m=V(v);function v(D){var w;return b(this,v),(w=m.call(this,"BAD_STEM","Unknown stem: ".concat(D))).stem=D,w}return v}(Zt),Qn=function(f){B(v,f);var m=V(v);function v(D,w){var M;return b(this,v),(M=m.call(this,"MASKED_VALUE","Value for ".concat(D," is set multiple times"))).type=D,M.prev=w,M}return v}(Zt),So=function(f){B(v,f);var m=V(v);function v(D){var w;return b(this,v),(w=m.call(this,"MISSING_OPTION","Required option missing for ".concat(D))).stem=D,w}return v}(Zt),Hr=function(f){B(v,f);var m=V(v);function v(D,w){var M;return b(this,v),(M=m.call(this,"BAD_PATTERN",w)).char=D,M}return v}(Zt),Os=function(f){B(v,f);var m=V(v);function v(D,w,M){var A;b(this,v);var N=M>1?"".concat(M," options"):"one option";return(A=m.call(this,"TOO_MANY_OPTIONS","Token ".concat(D," only supports ").concat(N," (got ").concat(w.length,")"))).stem=D,A.options=w,A}return v}(Zt),kc=function(f){B(v,f);var m=V(v);function v(D,w){var M;return b(this,v),(M=m.call(this,"UNSUPPORTED","The stem ".concat(D," is not supported"))).stem=D,w&&(M.message+=" with value ".concat(w),M.source=w),M}return v}(Zt);function Xe(f,m){var v=m.numberingSystem;return Array.isArray(f)||(f=[f]),v?f.map(function(D){var w=-1===D.indexOf("-u-")?"u-nu":"nu";return"".concat(D,"-").concat(w,"-").concat(v)}).concat(f):f}function F(f){var m=f.scale,v=f.unit,D="number"==typeof m&&m>=0?m:1;return v&&"percent"===v.style&&(D*=.01),D}function Je(f,m){var v=f.decimal,D=f.group,w=f.integerWidth,M=f.notation,A=f.precision,N=f.roundingMode,U=f.sign,se=f.unit,ke=f.unitPer,Te=f.unitWidth,Ae=function(K,Z){m&&m(new kc(K,Z))},ve={};if(se)switch(se.style){case"base-unit":ve.style="decimal";break;case"currency":ve.style="currency",ve.currency=se.currency;break;case"measure-unit":ve.style="unit",ve.unit=se.unit.replace(/.*-/,""),ke&&(ve.unit+="-per-"+ke.replace(/.*-/,""));break;case"percent":ve.style="percent";break;case"permille":Ae("permille")}switch(Te){case"unit-width-full-name":ve.currencyDisplay="name",ve.unitDisplay="long";break;case"unit-width-hidden":Ae(Te);break;case"unit-width-iso-code":ve.currencyDisplay="code";break;case"unit-width-narrow":ve.currencyDisplay="narrowSymbol",ve.unitDisplay="narrow";break;case"unit-width-short":ve.currencyDisplay="symbol",ve.unitDisplay="short"}switch(D){case"group-off":ve.useGrouping=!1;break;case"group-auto":ve.useGrouping=!0;break;case"group-min2":case"group-on-aligned":case"group-thousands":Ae(D),ve.useGrouping=!0}if(A)switch(A.style){case"precision-fraction":var He=A.minFraction,ze=A.maxFraction,ht=A.minSignificant,mt=A.maxSignificant,i=A.source;"number"==typeof He&&(ve.minimumFractionDigits=He,"number"==typeof ht&&Ae("precision-fraction",i)),"number"==typeof ze&&(ve.maximumFractionDigits=ze),"number"==typeof ht&&(ve.minimumSignificantDigits=ht),"number"==typeof mt&&(ve.maximumSignificantDigits=mt);break;case"precision-integer":ve.maximumFractionDigits=0;break;case"precision-unlimited":ve.maximumFractionDigits=20;break;case"precision-increment":case"precision-currency-standard":break;case"precision-currency-cash":Ae(A.style)}if(M)switch(M.style){case"compact-short":ve.notation="compact",ve.compactDisplay="short";break;case"compact-long":ve.notation="compact",ve.compactDisplay="long";break;case"notation-simple":ve.notation="standard";break;case"scientific":case"engineering":var a=M.expDigits,o=M.expSign,u=M.source,d=M.style;ve.notation=d,(a&&a>1||o&&"sign-auto"!==o)&&Ae(d,u)}if(w){var y=w.min,C=w.max,I=w.source;y>0&&(ve.minimumIntegerDigits=y),Number(C)>0&&(3!==C||"engineering"!==ve.notation&&"scientific"!==ve.notation?Ae("integer-width",I):ve.notation="engineering")}switch(U){case"sign-auto":ve.signDisplay="auto";break;case"sign-always":ve.signDisplay="always";break;case"sign-except-zero":ve.signDisplay="exceptZero";break;case"sign-never":ve.signDisplay="never";break;case"sign-accounting":ve.currencySign="accounting";break;case"sign-accounting-always":ve.currencySign="accounting",ve.signDisplay="always";break;case"sign-accounting-except-zero":ve.currencySign="accounting",ve.signDisplay="exceptZero"}return"decimal-always"===v&&Ae(v),N&&Ae(N),ve}function je(f,m,v){var D=f[m];switch(D){case"%":return{char:"%",style:"percent",width:1};case"\u2030":return{char:"%",style:"permille",width:1};case"\xa4":for(var w=1;"\xa4"===f[++m];)++w;switch(w){case 1:return{char:D,currency:"default",width:w};case 2:return{char:D,currency:"iso-code",width:w};case 3:return{char:D,currency:"full-name",width:w};case 5:return{char:D,currency:"narrow",width:w};default:var M="Invalid number (".concat(w,") of \xa4 chars in pattern");return v(new Hr("\xa4",M)),null}case"*":var A=f[m+1];if(A)return{char:D,pad:A,width:2};break;case"+":case"-":return{char:D,width:1};case"'":var N=f[++m],U=2;if("'"===N)return{char:D,str:N,width:U};for(;;){var se=f[++m];if(++U,void 0===se){var ke="Unterminated quoted literal in pattern: ".concat(N);return v(new Hr("'",ke)),{char:D,str:N,width:U}}if("'"===se){if("'"!==f[++m])return{char:D,str:N,width:U};++U}N+=se}}return null}var rt=function(m){return m>="0"&&m<="9"};function me(f,m){var v=f[m];if(rt(v))for(var D=v;;){var w=f[++m];if(!rt(w))return{char:"0",digits:D,width:D.length};D+=w}switch(v){case"#":for(var M=1;"#"===f[++m];)++M;return{char:v,width:M};case"@":for(var A=1;"@"===f[++m];)++A;var N=A;for(m-=1;"#"===f[++m];)++N;return{char:v,min:A,width:N};case"E":var U="+"===f[m+1];U&&++m;for(var se=0;"0"===f[++m];)++se;if(se)return{char:v,expDigits:se,plus:U,width:(U?2:1)+se};break;case".":case",":return{char:v,width:1}}return null}function $e(f,m,v){for(var D=function(He){return He[He.Prefix=0]="Prefix",He[He.Number=1]="Number",He[He.Suffix=2]="Suffix",He}(D||{}),w=[],M=[],A=[],N=D.Prefix,U="";m2&&void 0!==arguments[2]?arguments[2]:function(Te){throw Te},D=function Qe(f,m){var v=$e(f,0,m),D=v.pattern,w=v.pos;return w1&&(v.notation.expDigits=Te.expDigits),Te.plus&&(v.notation.expSign="sign-always"),w=!0}}D?v.group="group-auto":M+A.length>3&&(v.group="group-off");var ht=Number("".concat(A||"0",".").concat(U));if(ht&&(v.precision={style:"precision-increment",increment:ht}),w)if((!v.precision||ht)&&(v.integerWidth=M?{min:1,max:M+A.length}:{min:Math.max(1,A.length)}),v.precision)ht||(v.integerWidth={min:1,max:1});else{var mt=A.length+U.length;-1===N?mt>0&&(v.precision={style:"precision-fraction",maxSignificant:mt}):(v.precision={style:"precision-fraction",maxSignificant:Math.max(1,mt)+se},mt>1&&(v.precision.minSignificant=mt))}else A.length>1&&(v.integerWidth={min:A.length}),!v.precision&&(U.length||se)&&(v.precision={style:"precision-fraction",minFraction:U.length,maxFraction:U.length+se});return v}(w.number,v),N=hn(w.prefix,A,m,v,!0),U=hn(w.suffix,A,m,v,!1);if(M){var se=Oe(M.prefix,!0),ke=Oe(M.suffix,!1);A.affix={pos:[N,U],neg:[se,ke]},A.sign="sign-never"}else(N||U)&&(A.affix={pos:[N,U]});return A}function fi(f){var D=ie(f.split("-",1),1);return-1!==["acceleration","angle","area","concentr","consumption","digital","duration","electric","energy","force","frequency","graphics","length","light","mass","power","pressure","speed","temperature","torque","volume"].indexOf(D[0])}var $t={"compact-short":0,"compact-long":0,"notation-simple":0,scientific:2,engineering:2,percent:0,permille:0,"base-unit":0,currency:1,"measure-unit":1,"per-measure-unit":1,"unit-width-narrow":0,"unit-width-short":0,"unit-width-full-name":0,"unit-width-iso-code":0,"unit-width-hidden":0,"precision-integer":0,"precision-unlimited":0,"precision-currency-standard":0,"precision-currency-cash":0,"precision-increment":1,"rounding-mode-ceiling":0,"rounding-mode-floor":0,"rounding-mode-down":0,"rounding-mode-up":0,"rounding-mode-half-even":0,"rounding-mode-half-down":0,"rounding-mode-half-up":0,"rounding-mode-unnecessary":0,"integer-width":1,scale:1,"group-off":0,"group-min2":0,"group-auto":0,"group-on-aligned":0,"group-thousands":0,latin:0,"numbering-system":1,"sign-auto":0,"sign-always":0,"sign-never":0,"sign-accounting":0,"sign-accounting-always":0,"sign-except-zero":0,"sign-accounting-except-zero":0,"decimal-auto":0,"decimal-always":0},Vr={currency:1,"integer-width":1,"measure-unit":1,"numbering-system":1,"per-measure-unit":1,"precision-increment":1,scale:1};function _o(f,m,v){if(function It(f){return f in $t}(f)){var D=$t[f];if(m.length>D){if(0===D){var M,w=Ne(m);try{for(w.s();!(M=w.n()).done;)v(new Io(f,M.value))}catch(N){w.e(N)}finally{w.f()}}else v(new Os(f,m,D));return!1}if(function Mo(f){return f in Vr}(f)&&m.length0?(this.assertEmpty("precision"),M.precision={style:v,increment:Ae}):this.badOption(v,w);break;case"rounding-mode-ceiling":case"rounding-mode-floor":case"rounding-mode-down":case"rounding-mode-up":case"rounding-mode-half-even":case"rounding-mode-half-down":case"rounding-mode-half-up":case"rounding-mode-unnecessary":this.assertEmpty("roundingMode"),M.roundingMode=v;break;case"integer-width":if(/^\+0*$/.test(w))this.assertEmpty("integerWidth"),M.integerWidth={source:w,min:w.length-1};else{var ve=w.match(/^#*(0*)$/);ve?(this.assertEmpty("integerWidth"),M.integerWidth={source:w,min:ve[1].length,max:ve[0].length}):this.badOption(v,w)}break;case"scale":var He=Number(w);He>0?(this.assertEmpty("scale"),M.scale=He):this.badOption(v,w);break;case"group-off":case"group-min2":case"group-auto":case"group-on-aligned":case"group-thousands":this.assertEmpty("group"),M.group=v;break;case"latin":this.assertEmpty("numberingSystem"),M.numberingSystem="latn";break;case"numbering-system":!function qt(f){return-1!==["arab","arabext","bali","beng","deva","fullwide","gujr","guru","hanidec","khmr","knda","laoo","latn","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt"].indexOf(f)}(w)?this.badOption(v,w):(this.assertEmpty("numberingSystem"),M.numberingSystem=w);break;case"sign-auto":case"sign-always":case"sign-never":case"sign-accounting":case"sign-accounting-always":case"sign-except-zero":case"sign-accounting-except-zero":this.assertEmpty("sign"),M.sign=v;break;case"decimal-auto":case"decimal-always":this.assertEmpty("decimal"),M.decimal=v;break;default:var ze=function St(f,m,v){var D=ct(f,"fraction");if(D){m.length>1&&v(new Os(f,m,1));var w={style:"precision-fraction",source:f,minFraction:D.min};null!=D.max&&(w.maxFraction=D.max);var M=m[0],A=ct(M,"significant");return A?(w.source="".concat(f,"/").concat(M),w.minSignificant=A.min,null!=A.max&&(w.maxSignificant=A.max)):M&&v(new Io(f,M)),w}var N=ct(f,"significant");if(N){var se,U=Ne(m);try{for(U.s();!(se=U.n()).done;)v(new Io(f,se.value))}catch(Ae){U.e(Ae)}finally{U.f()}var Te={style:"precision-fraction",source:f,minSignificant:N.min};return null!=N.max&&(Te.maxSignificant=N.max),Te}return null}(v,D,this.onError);ze?(this.assertEmpty("precision"),M.precision=ze):this.onError(new Rs(v))}}}}]),f}();function Ua(f){var w,m=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(He){throw He},v=[],D=Ne(f.split(" "));try{for(D.s();!(w=D.n()).done;){var M=w.value;if(M){var A=M.split("/"),N=A.shift()||"";v.push({stem:N,options:A})}}}catch(He){D.e(He)}finally{D.f()}for(var U=new Bp(m),se=0,ke=v;se0)throw new Error("RegExp has capture groups: "+zt+"\nUse (?: \u2026 ) instead");if(!be.lineBreaks&&zt.test("\n"))throw new Error("Rule should declare lineBreaks: "+zt);Ke.push(U(bn))}}var ci=x&&x.fallback,_c=D&&!ci?"ym":"gm",xd=D||ci?"":"|";return!0===fe&&(_c+="u"),{regexp:new RegExp(se(Ke)+xd,_c),groups:Ue,fast:K,error:x||ze}}function i(I,_,x){var K=I&&(I.push||I.next);if(K&&!x[K])throw new Error("Missing state '"+K+"' (in token '"+I.defaultType+"' of state '"+_+"')");if(I&&I.pop&&1!=+I.pop)throw new Error("pop must be 1 (in token '"+I.defaultType+"' of state '"+_+"')")}var u=function(_,x){this.startState=x,this.states=_,this.buffer="",this.stack=[],this.reset()};u.prototype.reset=function(I,_){return this.buffer=I||"",this.index=0,this.line=_?_.line:1,this.col=_?_.col:1,this.queuedToken=_?_.queuedToken:null,this.queuedThrow=_?_.queuedThrow:null,this.setState(_?_.state:this.startState),this.stack=_&&_.stack?_.stack.slice():[],this},u.prototype.save=function(){return{line:this.line,col:this.col,state:this.state,stack:this.stack.slice(),queuedToken:this.queuedToken,queuedThrow:this.queuedThrow}},u.prototype.setState=function(I){if(I&&this.state!==I){this.state=I;var _=this.states[I];this.groups=_.groups,this.error=_.error,this.re=_.regexp,this.fast=_.fast}},u.prototype.popState=function(){this.setState(this.stack.pop())},u.prototype.pushState=function(I){this.stack.push(this.state),this.setState(I)};var d=D?function(I,_){return I.exec(_)}:function(I,_){var x=I.exec(_);return 0===x[0].length?null:x};function y(){return this.value}if(u.prototype._getGroup=function(I){for(var _=this.groups.length,x=0;x<_;x++)if(void 0!==I[x+1])return this.groups[x];throw new Error("Cannot find token type for matched text")},u.prototype.next=function(){var I=this.index;if(this.queuedGroup){var _=this._token(this.queuedGroup,this.queuedText,I);return this.queuedGroup=null,this.queuedText="",_}var x=this.buffer;if(I!==x.length){if(Ue=this.fast[x.charCodeAt(I)])return this._token(Ue,x.charAt(I),I);var K=this.re;K.lastIndex=I;var Z=d(K,x),fe=this.error;if(null==Z)return this._token(fe,x.slice(I,x.length),I);var Ue=this._getGroup(Z),Ke=Z[0];return fe.fallback&&Z.index!==I?(this.queuedGroup=Ue,this.queuedText=Ke,this._token(fe,x.slice(I,Z.index),I)):this._token(Ue,Ke,I)}},u.prototype._token=function(I,_,x){var K=0;if(I.lineBreaks){var Z=/\n/g,fe=1;if("\n"===_)K=1;else for(;Z.exec(_);)K++,fe=Z.lastIndex}var Ue={type:"function"==typeof I.type&&I.type(_)||I.defaultType,value:"function"==typeof I.value?I.value(_):_,text:_,toString:y,offset:x,lineBreaks:K,line:this.line,col:this.col},Ke=_.length;if(this.index+=Ke,this.line+=K,0!==K?this.col=Ke-fe+1:this.col+=Ke,I.shouldThrow)throw new Error(this.formatError(Ue,"invalid syntax"));return I.pop?this.popState():I.push?this.pushState(I.push):I.next&&this.setState(I.next),Ue},typeof Symbol<"u"&&Symbol.iterator){var C=function(_){this.lexer=_};C.prototype.next=function(){var I=this.lexer.next();return{value:I,done:!I}},C.prototype[Symbol.iterator]=function(){return this},u.prototype[Symbol.iterator]=function(){return new C(this)}}return u.prototype.formatError=function(I,_){if(null==I){var x=this.buffer.slice(this.index);I={text:x,offset:this.index,lineBreaks:-1===x.indexOf("\n")?0:1,line:this.line,col:this.col}}var K=Math.max(0,I.offset-I.col+1),Z=I.lineBreaks?I.text.indexOf("\n"):I.text.length,fe=this.buffer.substring(K,I.offset+Z);return _+=" at line "+I.line+" col "+I.col+":\n\n",(_+=" "+fe+"\n")+" "+Array(I.col).join(" ")+"^"},u.prototype.clone=function(){return new u(this.states,this.state)},u.prototype.has=function(I){return!0},{compile:function mt(I){var _=ht(He(I));return new u({start:_},"start")},states:function a(I,_){var x=I.$all?He(I.$all):[];delete I.$all;var K=Object.getOwnPropertyNames(I);_||(_=K[0]);for(var Z=Object.create(null),fe=0;fe0&&!ze.includes(He)){var ht="The ".concat(ve," case ").concat(He," is not valid in this locale");throw new N(Ae,ht)}}}},{key:"parseSelect",value:function(Ae,ve,He,ze){var mt={type:ze,arg:Ae.value,cases:[],ctx:He};"plural"===ze||"selectordinal"===ze?ve=!0:this.strict&&(ve=!1);var a,i=Ne(this.lexer);try{for(i.s();!(a=i.n()).done;){var o=a.value;switch(o.type){case"offset":if("select"===ze)throw new N(o,"Unexpected plural offset for select");if(mt.cases.length>0)throw new N(o,"Plural offset must be set before cases");mt.pluralOffset=Number(o.value),He.text+=o.text,He.lineBreaks+=o.lineBreaks;break;case"case":this.checkSelectKey(o,ze,o.value),mt.cases.push({key:o.value,tokens:this.parseBody(ve),ctx:v(o)});break;case"end":return mt;default:throw new N(o,"Unexpected lexer token: ".concat(o.type))}}}catch(u){i.e(u)}finally{i.f()}throw new N(null,"Unexpected message end")}},{key:"parseArgToken",value:function(Ae,ve){var He=v(Ae),ze=this.lexer.next();if(!ze)throw new N(null,"Unexpected message end");if(He.text+=ze.text,He.lineBreaks+=ze.lineBreaks,this.strict&&("func-simple"===ze.type||"func-args"===ze.type)&&!M.includes(ze.value)){var ht="Invalid strict mode function arg type: ".concat(ze.value);throw new N(Ae,ht)}switch(ze.type){case"end":return{type:"argument",arg:Ae.value,ctx:He};case"func-simple":var mt=this.lexer.next();if(!mt)throw new N(null,"Unexpected message end");if("end"!==mt.type)throw new N(mt,"Unexpected lexer token: ".concat(mt.type));if(He.text+=mt.text,D(ze.value.toLowerCase()))throw new N(ze,"Invalid type identifier: ".concat(ze.value));return{type:"function",arg:Ae.value,key:ze.value,ctx:He};case"func-args":if(D(ze.value.toLowerCase())){var i="Invalid type identifier: ".concat(ze.value);throw new N(ze,i)}var a=this.parseBody(!this.strict&&ve);return this.strict&&a.length>0&&(a=function w(ke,Te){var ze,Ae="",ve="",He=Ne(Te);try{for(He.s();!(ze=He.n()).done;){var ht=ze.value,mt=ht.ctx.text;switch(ve+=mt,ht.type){case"content":Ae+=ht.value;break;case"argument":case"function":case"octothorpe":Ae+=mt;break;default:throw new N(ke,"Unsupported part in strict mode function arg style: ".concat(mt))}}}catch(a){He.e(a)}finally{He.f()}return[{type:"content",value:Ae.trim(),ctx:Object.assign({},Te[0].ctx,{text:ve})}]}(Ae,a)),{type:"function",arg:Ae.value,key:ze.value,param:a,ctx:He};case"select":if(D(ze.value))return this.parseSelect(Ae,ve,He,ze.value);throw new N(ze,"Unexpected select type ".concat(ze.value));default:throw new N(ze,"Unexpected lexer token: ".concat(ze.type))}}},{key:"parseBody",value:function(Ae,ve){var mt,He=[],ze=null,ht=Ne(this.lexer);try{for(ht.s();!(mt=ht.n()).done;){var i=mt.value;if("argument"===i.type)ze&&(ze=null),He.push(this.parseArgToken(i,Ae));else if("octothorpe"===i.type&&Ae)ze&&(ze=null),He.push({type:"octothorpe",ctx:v(i)});else{if("end"===i.type&&!ve)return He;var a=i.value;if(!Ae&&"quoted"===i.type&&"#"===a[0]){if(a.includes("{")){var o="Unsupported escape pattern: ".concat(a);throw new N(i,o)}a=i.text}ze?(ze.value+=a,ze.ctx.text+=i.text,ze.ctx.lineBreaks+=i.lineBreaks):(ze={type:"content",value:a,ctx:v(i)},He.push(ze))}}}catch(u){ht.e(u)}finally{ht.f()}if(ve)return He;throw new N(null,"Unexpected message end")}}]),ke}();m.parse=function se(ke){return new U(ke,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).parse()}});function Ns(f){return Ns[f]||(Ns[f]=new Intl.NumberFormat(f))}var Ro=Object.freeze({__proto__:null,_nf:Ns,number:function zr(f,m,v){return Ns(f).format(m-v)},strictNumber:function df(f,m,v,D){var w=m-v;if(isNaN(w))throw new Error("`"+D+"` or its offset is not a number");return Ns(f).format(w)},plural:function Hp(f,m,v,D,w){if({}.hasOwnProperty.call(D,f))return D[f];m&&(f-=m);var M=v(f,w);return M in D?D[M]:D.other},select:function ff(f,m){return{}.hasOwnProperty.call(m,f)?m[f]:m.other},reqArgs:function Ha(f,m){for(var v=0;v=60&&(f=Math.round((f-Number(D[0]))/60),D.unshift(f))),m+D.shift()+":"+D.map(function(M){return M<10?"0"+String(M):String(M)}).join(":")},numberCurrency:function(m,v,D){return on(v,{style:"currency",currency:D,minimumFractionDigits:2,maximumFractionDigits:2}).format(m)},numberFmt:function ot(f,m,v,D){var w=v&&v.split(":")||[],M=w[0],A=w[1];return on(m,{integer:{maximumFractionDigits:0},percent:{style:"percent"},currency:{style:"currency",currency:A&&A.trim()||D,minimumFractionDigits:2,maximumFractionDigits:2}}[M]||{}).format(f)},numberInteger:function(m,v){return on(v,{maximumFractionDigits:0}).format(m)},numberPercent:function(m,v){return on(v,{style:"percent"}).format(m)},time:function Wp(f,m,v){var D={second:"numeric",minute:"numeric",hour:"numeric"};switch(v){case"full":case"long":D.timeZoneName="short";break;case"short":delete D.second}return new Date(f).toLocaleTimeString(m,D)}}),Fi={ES3:{break:!0,continue:!0,delete:!0,else:!0,for:!0,function:!0,if:!0,in:!0,new:!0,return:!0,this:!0,typeof:!0,var:!0,void:!0,while:!0,with:!0,case:!0,catch:!0,default:!0,do:!0,finally:!0,instanceof:!0,switch:!0,throw:!0,try:!0},ESnext:{await:!0,debugger:!0,class:!0,enum:!0,extends:!0,super:!0,const:!0,export:!0,import:!0,null:!0,true:!0,false:!0,implements:!0,let:!0,private:!0,public:!0,yield:!0,interface:!0,package:!0,protected:!0,static:!0}};function sr(f,m){m&&(f+=" "+function Va(f){for(var m=0,v=0;v0,ze=this.concatenate(ve,!0);return this.options.requireAllArguments&&He?(this.setRuntimeFn("reqArgs"),"(d) => { reqArgs("+JSON.stringify(this.arguments)+", d); return "+ze+"; }"):"("+(He?"d":"")+") => "+ze},f.prototype.cases=function(m,v){var D=this,w=!0,M=m.cases.map(function(ke){var Te=ke.key;"other"===Te&&(w=!1);var ve=ke.tokens.map(function(He){return D.token(He,v)});return Ls(null,Te.replace(/^=/,""))+": "+D.concatenate(ve,!1)});if(w){var A=m.type,N=this.plural,se=N.ordinals;if("select"===A||"plural"===A&&N.cardinals.includes("other")||"selectordinal"===A&&se.includes("other"))throw new Error("No 'other' form found in "+JSON.stringify(m))}return"{ "+M.join(", ")+" }"},f.prototype.concatenate=function(m,v){return"values"===this.options.returnType&&(v||m.length>1)?"["+m.join(", ")+"]":m.join(" + ")||'""'},f.prototype.token=function(m,v){if("content"===m.type)return JSON.stringify(m.value);var A,N,D=this.plural,w=D.id,M=D.lc;switch("arg"in m?(this.arguments.push(m.arg),A=[Ls("d",m.arg)]):A=[],m.type){case"argument":return this.options.biDiSupport?function ks(f,m){var v=za.test(m),D=JSON.stringify(v?"\u200f":"\u200e");return D+" + "+f+" + "+D}(String(A[0]),M):String(A[0]);case"select":N="select",v&&this.options.strict&&(v=null),A.push(this.cases(m,v)),this.setRuntimeFn("select");break;case"selectordinal":N="plural",A.push(m.pluralOffset||0,w,this.cases(m,m),1),this.setLocale(w,!0),this.setRuntimeFn("plural");break;case"plural":N="plural",A.push(m.pluralOffset||0,w,this.cases(m,m)),this.setLocale(w,!1),this.setRuntimeFn("plural");break;case"function":if(!this.options.customFormatters[m.key]){if("date"===m.key){N=this.setDateFormatter(m,A,v);break}if("number"===m.key){N=this.setNumberFormatter(m,A,v);break}}if(A.push(JSON.stringify(this.plural.locale)),m.param){v&&this.options.strict&&(v=null);var U=this.getFormatterArg(m,v);U&&A.push(U)}this.setFormatter(N=m.key);break;case"octothorpe":if(!v)return'"#"';A=[JSON.stringify(this.plural.locale),Ls("d",v.arg),v.pluralOffset||0],this.options.strict?(N="strictNumber",A.push(JSON.stringify(v.arg)),this.setRuntimeFn("strictNumber")):(N="number",this.setRuntimeFn("number"))}if(!N)throw new Error("Parser error for token "+JSON.stringify(m));return N+"("+A.join(", ")+")"},f.prototype.runtimeIncludes=function(m,v){if(sr(m)!==m)throw new SyntaxError("Reserved word used as "+v+" identifier: "+m);var D=this.runtime[m];if(!D||D.type===v)return D;throw new TypeError("Cannot override "+D.type+" runtime function as "+v+": "+m)},f.prototype.setLocale=function(m,v){var U,se,ke,D=this.runtimeIncludes(m,"locale"),w=this.plural,M=w.getCardinal,A=w.getPlural,N=w.isDefault;if(!v&&N&&M){if(D)return;U=function(Te){return M(Te)},se="@messageformat/runtime/lib/cardinals",ke=function(){return String(M)}}else{if(D&&(!N||D.module===Ct))return;U=function(Te,Ae){return A(Te,Ae)},se=N?Ct:A.module||null,ke=function(){return String(A)}}this.runtime[m]=Object.assign(U,{id:m,module:se,toString:ke,type:"locale"})},f.prototype.setRuntimeFn=function(m){this.runtimeIncludes(m,"runtime")||(this.runtime[m]=Object.assign(Ro[m],{id:m,module:"@messageformat/runtime",type:"runtime"}))},f.prototype.getFormatterArg=function(m,v){var D,w,M,A,N=this,U=m.key,se=m.param,ke=this.options.customFormatters[U]||Mn(U)&&Nt[U];if(!ke||!se)return null;var Te="arg"in ke&&ke.arg||"string";if("options"===Te){var Ae="";try{for(var ve=we(se),He=ve.next();!He.done;He=ve.next()){var ze=He.value;if("content"!==ze.type)throw new SyntaxError("Expected literal options for "+U+" formatter");Ae+=ze.value}}catch(_){D={error:_}}finally{try{He&&!He.done&&(w=ve.return)&&w.call(ve)}finally{if(D)throw D.error}}var ht={};try{for(var mt=we(Ae.split(",")),i=mt.next();!i.done;i=mt.next()){var a=i.value,o=a.indexOf(":");if(-1===o)ht[a.trim()]=null;else{var u=a.substring(0,o).trim(),d=a.substring(o+1).trim();if("true"===d)ht[u]=!0;else if("false"===d)ht[u]=!1;else if("null"===d)ht[u]=null;else{var y=Number(d);ht[u]=Number.isFinite(y)?y:d}}}}catch(_){M={error:_}}finally{try{i&&!i.done&&(A=mt.return)&&A.call(mt)}finally{if(M)throw M.error}}return JSON.stringify(ht)}var C=se.map(function(_){return N.token(_,v)});if("raw"===Te)return"["+C.join(", ")+"]";var I=C.join(" + ");return I?"("+I+").trim()":'""'},f.prototype.setFormatter=function(m){if(!this.runtimeIncludes(m,"formatter")){var v=this.options.customFormatters[m];if(v)"function"==typeof v&&(v={formatter:v}),this.runtime[m]=Object.assign(v.formatter,{type:"formatter"},"module"in v&&v.module&&v.id?{id:sr(v.id),module:v.module}:{id:null,module:null});else{if(!Mn(m))throw new Error("Formatting function not found: "+m);this.runtime[m]=Object.assign(Nt[m],{type:"formatter"},{id:m,module:"@messageformat/runtime/lib/formatters"})}}},f.prototype.setDateFormatter=function(m,v,D){var w=this,M=m.param,A=this.plural.locale,N=M&&1===M.length&&M[0];if(N&&"content"===N.type&&/^\s*::/.test(N.value)){var U=N.value.trim().substr(2),se=sr("date_"+A+"_"+U,!0);if(!this.runtimeIncludes(se,"formatter")){var ke=function Br(f,m,v){"string"==typeof m&&(m=Ut(m));var D=tt(m,v),w=new Intl.DateTimeFormat(f,D);return function(M){return w.format(M)}}(A,U);this.runtime[se]=Object.assign(ke,{id:se,module:null,toString:function(){return function As(f,m,v){"string"==typeof m&&(m=Ut(m));var D=tt(m,v);return["(function() {","var opt = ".concat(JSON.stringify(D),";"),"var dtf = new Intl.DateTimeFormat(".concat(JSON.stringify(f),", opt);"),"return function(value) { return dtf.format(value); }"].join("\n ")+"\n})()"}(A,U)},type:"formatter"})}return se}if(v.push(JSON.stringify(A)),M&&M.length>0){D&&this.options.strict&&(D=null);var Te=M.map(function(Ae){return w.token(Ae,D)});v.push("("+(Te.join(" + ")||'""')+").trim()")}return this.setFormatter("date"),"date"},f.prototype.setNumberFormatter=function(m,v,D){var w=this,M=m.param,A=this.plural.locale;if(!M||0===M.length)return v.unshift(JSON.stringify(A)),v.push("0"),this.setRuntimeFn("number"),"number";if(v.push(JSON.stringify(A)),1===M.length&&"content"===M[0].type){var N=M[0].value.trim();switch(N){case"currency":return v.push(JSON.stringify(this.options.currency)),this.setFormatter("numberCurrency"),"numberCurrency";case"integer":return this.setFormatter("numberInteger"),"numberInteger";case"percent":return this.setFormatter("numberPercent"),"numberPercent"}var U=N.match(/^currency:([A-Z]+)$/);if(U)return v.push(JSON.stringify(U[1])),this.setFormatter("numberCurrency"),"numberCurrency";var se=sr("number_"+A+"_"+N,!0);if(!this.runtimeIncludes(se,"formatter")){var ke=this.options.currency,Te=ja(A,N,ke);this.runtime[se]=Object.assign(Te,{id:null,module:null,toString:function(){return Ba(A,N,ke)},type:"formatter"})}return se}D&&this.options.strict&&(D=null);var Ae=M.map(function(ve){return w.token(ve,D)});return v.push("("+(Ae.join(" + ")||'""')+").trim()"),v.push(JSON.stringify(this.options.currency)),this.setFormatter("numberFmt"),"numberFmt"},f}();function Mn(f){return f in Nt}function Ce(f){return 1==f?"one":"other"}function Ir(f){return 0==f||1==f?"one":"other"}function Ht(f){return f>=0&&f<=1?"one":"other"}function en(f){var m=String(f).split(".");return 1!=f||m[1]?"other":"one"}function At(f){return"other"}function pt(f){return 1==f?"one":2==f?"two":"other"}var gi=Object.freeze({__proto__:null,_in:At,af:Ce,ak:Ir,am:Ht,an:Ce,ar:function jc(f){var m=String(f).split("."),D=Number(m[0])==f&&m[0].slice(-2);return 0==f?"zero":1==f?"one":2==f?"two":D>=3&&D<=10?"few":D>=11&&D<=99?"many":"other"},ars:function Ym(f){var m=String(f).split("."),D=Number(m[0])==f&&m[0].slice(-2);return 0==f?"zero":1==f?"one":2==f?"two":D>=3&&D<=10?"few":D>=11&&D<=99?"many":"other"},as:Ht,asa:Ce,ast:en,az:Ce,be:function js(f){var m=String(f).split("."),v=Number(m[0])==f,D=v&&m[0].slice(-1),w=v&&m[0].slice(-2);return 1==D&&11!=w?"one":D>=2&&D<=4&&(w<12||w>14)?"few":v&&0==D||D>=5&&D<=9||w>=11&&w<=14?"many":"other"},bem:Ce,bez:Ce,bg:Ce,bho:Ir,bm:At,bn:Ht,bo:At,br:function Df(f){var m=String(f).split("."),v=Number(m[0])==f,D=v&&m[0].slice(-1),w=v&&m[0].slice(-2),M=v&&m[0].slice(-6);return 1==D&&11!=w&&71!=w&&91!=w?"one":2==D&&12!=w&&72!=w&&92!=w?"two":(3==D||4==D||9==D)&&(w<10||w>19)&&(w<70||w>79)&&(w<90||w>99)?"few":0!=f&&v&&0==M?"many":"other"},brx:Ce,bs:function Ef(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=v.slice(-2),N=D.slice(-1),U=D.slice(-2);return w&&1==M&&11!=A||1==N&&11!=U?"one":w&&M>=2&&M<=4&&(A<12||A>14)||N>=2&&N<=4&&(U<12||U>14)?"few":"other"},ca:en,ce:Ce,ceb:function bt(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=D.slice(-1);return w&&(1==v||2==v||3==v)||w&&4!=M&&6!=M&&9!=M||!w&&4!=A&&6!=A&&9!=A?"one":"other"},cgg:Ce,chr:Ce,ckb:Ce,cs:function wf(f){var m=String(f).split("."),v=m[0],D=!m[1];return 1==f&&D?"one":v>=2&&v<=4&&D?"few":D?"other":"many"},cy:function Cf(f){return 0==f?"zero":1==f?"one":2==f?"two":3==f?"few":6==f?"many":"other"},da:function bf(f){var m=String(f).split("."),v=m[0],D=Number(m[0])==f;return 1!=f&&(D||0!=v&&1!=v)?"other":"one"},de:en,dsb:function xo(f){var m=String(f).split("."),D=m[1]||"",w=!m[1],M=m[0].slice(-2),A=D.slice(-2);return w&&1==M||1==A?"one":w&&2==M||2==A?"two":w&&(3==M||4==M)||3==A||4==A?"few":"other"},dv:Ce,dz:At,ee:Ce,el:Ce,en,eo:Ce,es:Ce,et:en,eu:Ce,fa:Ht,ff:function Mf(f){return f>=0&&f<2?"one":"other"},fi:en,fil:function _f(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=D.slice(-1);return w&&(1==v||2==v||3==v)||w&&4!=M&&6!=M&&9!=M||!w&&4!=A&&6!=A&&9!=A?"one":"other"},fo:Ce,fr:function ur(f){return f>=0&&f<2?"one":"other"},fur:Ce,fy:en,ga:function Af(f){var m=String(f).split("."),v=Number(m[0])==f;return 1==f?"one":2==f?"two":v&&f>=3&&f<=6?"few":v&&f>=7&&f<=10?"many":"other"},gd:function Rf(f){var m=String(f).split("."),v=Number(m[0])==f;return 1==f||11==f?"one":2==f||12==f?"two":v&&f>=3&&f<=10||v&&f>=13&&f<=19?"few":"other"},gl:en,gsw:Ce,gu:Ht,guw:Ir,gv:function Qa(f){var m=String(f).split("."),v=m[0],D=!m[1],w=v.slice(-1),M=v.slice(-2);return D&&1==w?"one":D&&2==w?"two":!D||0!=M&&20!=M&&40!=M&&60!=M&&80!=M?D?"other":"many":"few"},ha:Ce,haw:Ce,he:function xf(f){var m=String(f).split("."),v=m[0],D=!m[1],w=Number(m[0])==f,M=w&&m[0].slice(-1);return 1==f&&D?"one":2==v&&D?"two":D&&(f<0||f>10)&&w&&0==M?"many":"other"},hi:Ht,hr:function $i(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=v.slice(-2),N=D.slice(-1),U=D.slice(-2);return w&&1==M&&11!=A||1==N&&11!=U?"one":w&&M>=2&&M<=4&&(A<12||A>14)||N>=2&&N<=4&&(U<12||U>14)?"few":"other"},hsb:function Kc(f){var m=String(f).split("."),D=m[1]||"",w=!m[1],M=m[0].slice(-2),A=D.slice(-2);return w&&1==M||1==A?"one":w&&2==M||2==A?"two":w&&(3==M||4==M)||3==A||4==A?"few":"other"},hu:Ce,hy:function Zc(f){return f>=0&&f<2?"one":"other"},ia:en,id:At,ig:At,ii:At,io:en,is:function Yc(f){var m=String(f).split("."),v=m[0],D=Number(m[0])==f,w=v.slice(-1),M=v.slice(-2);return D&&1==w&&11!=M||!D?"one":"other"},it:en,iu:pt,iw:function kf(f){var m=String(f).split("."),v=m[0],D=!m[1],w=Number(m[0])==f,M=w&&m[0].slice(-1);return 1==f&&D?"one":2==v&&D?"two":D&&(f<0||f>10)&&w&&0==M?"many":"other"},ja:At,jbo:At,jgo:Ce,ji:en,jmc:Ce,jv:At,jw:At,ka:Ce,kab:function Fo(f){return f>=0&&f<2?"one":"other"},kaj:Ce,kcg:Ce,kde:At,kea:At,kk:Ce,kkj:Ce,kl:Ce,km:At,kn:Ht,ko:At,ks:Ce,ksb:Ce,ksh:function eu(f){return 0==f?"zero":1==f?"one":"other"},ku:Ce,kw:function Ws(f){var m=String(f).split("."),v=Number(m[0])==f,D=v&&m[0].slice(-2),w=v&&m[0].slice(-3),M=v&&m[0].slice(-5),A=v&&m[0].slice(-6);return 0==f?"zero":1==f?"one":2==D||22==D||42==D||62==D||82==D||v&&0==w&&(M>=1e3&&M<=2e4||4e4==M||6e4==M||8e4==M)||0!=f&&1e5==A?"two":3==D||23==D||43==D||63==D||83==D?"few":1==f||1!=D&&21!=D&&41!=D&&61!=D&&81!=D?"other":"many"},ky:Ce,lag:function st(f){var v=String(f).split(".")[0];return 0==f?"zero":0!=v&&1!=v||0==f?"other":"one"},lb:Ce,lg:Ce,lkt:At,ln:Ir,lo:At,lt:function Qt(f){var m=String(f).split("."),v=m[1]||"",D=Number(m[0])==f,w=D&&m[0].slice(-1),M=D&&m[0].slice(-2);return 1==w&&(M<11||M>19)?"one":w>=2&&w<=9&&(M<11||M>19)?"few":0!=v?"many":"other"},lv:function tu(f){var m=String(f).split("."),v=m[1]||"",D=v.length,w=Number(m[0])==f,M=w&&m[0].slice(-1),A=w&&m[0].slice(-2),N=v.slice(-2),U=v.slice(-1);return w&&0==M||A>=11&&A<=19||2==D&&N>=11&&N<=19?"zero":1==M&&11!=A||2==D&&1==U&&11!=N||2!=D&&1==U?"one":"other"},mas:Ce,mg:Ir,mgo:Ce,mk:function Ui(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=v.slice(-2),N=D.slice(-1),U=D.slice(-2);return w&&1==M&&11!=A||1==N&&11!=U?"one":"other"},ml:Ce,mn:Ce,mo:function Qc(f){var m=String(f).split("."),v=!m[1],w=Number(m[0])==f&&m[0].slice(-2);return 1==f&&v?"one":!v||0==f||w>=2&&w<=19?"few":"other"},mr:Ce,ms:At,mt:function ru(f){var m=String(f).split("."),D=Number(m[0])==f&&m[0].slice(-2);return 1==f?"one":0==f||D>=2&&D<=10?"few":D>=11&&D<=19?"many":"other"},my:At,nah:Ce,naq:pt,nb:Ce,nd:Ce,ne:Ce,nl:en,nn:Ce,nnh:Ce,no:Ce,nqo:At,nr:Ce,nso:Ir,ny:Ce,nyn:Ce,om:Ce,or:Ce,os:Ce,osa:At,pa:Ir,pap:Ce,pl:function Yr(f){var m=String(f).split("."),v=m[0],D=!m[1],w=v.slice(-1),M=v.slice(-2);return 1==f&&D?"one":D&&w>=2&&w<=4&&(M<12||M>14)?"few":D&&1!=v&&(0==w||1==w)||D&&w>=5&&w<=9||D&&M>=12&&M<=14?"many":"other"},prg:function il(f){var m=String(f).split("."),v=m[1]||"",D=v.length,w=Number(m[0])==f,M=w&&m[0].slice(-1),A=w&&m[0].slice(-2),N=v.slice(-2),U=v.slice(-1);return w&&0==M||A>=11&&A<=19||2==D&&N>=11&&N<=19?"zero":1==M&&11!=A||2==D&&1==U&&11!=N||2!=D&&1==U?"one":"other"},ps:Ce,pt:function ou(f){var v=String(f).split(".")[0];return 0==v||1==v?"one":"other"},pt_PT:en,rm:Ce,ro:function uu(f){var m=String(f).split("."),v=!m[1],w=Number(m[0])==f&&m[0].slice(-2);return 1==f&&v?"one":!v||0==f||w>=2&&w<=19?"few":"other"},rof:Ce,root:At,ru:function cu(f){var m=String(f).split("."),v=m[0],D=!m[1],w=v.slice(-1),M=v.slice(-2);return D&&1==w&&11!=M?"one":D&&w>=2&&w<=4&&(M<12||M>14)?"few":D&&0==w||D&&w>=5&&w<=9||D&&M>=11&&M<=14?"many":"other"},rwk:Ce,sah:At,saq:Ce,sc:en,scn:en,sd:Ce,sdh:Ce,se:pt,seh:Ce,ses:At,sg:At,sh:function al(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=v.slice(-2),N=D.slice(-1),U=D.slice(-2);return w&&1==M&&11!=A||1==N&&11!=U?"one":w&&M>=2&&M<=4&&(A<12||A>14)||N>=2&&N<=4&&(U<12||U>14)?"few":"other"},shi:function zo(f){var m=String(f).split("."),v=Number(m[0])==f;return f>=0&&f<=1?"one":v&&f>=2&&f<=10?"few":"other"},si:function hi(f){var m=String(f).split(".");return 0==f||1==f||0==m[0]&&1==(m[1]||"")?"one":"other"},sk:function Un(f){var m=String(f).split("."),v=m[0],D=!m[1];return 1==f&&D?"one":v>=2&&v<=4&&D?"few":D?"other":"many"},sl:function Vf(f){var m=String(f).split("."),D=!m[1],w=m[0].slice(-2);return D&&1==w?"one":D&&2==w?"two":D&&(3==w||4==w)||!D?"few":"other"},sma:pt,smi:pt,smj:pt,smn:pt,sms:pt,sn:Ce,so:Ce,sq:Ce,sr:function Go(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=v.slice(-2),N=D.slice(-1),U=D.slice(-2);return w&&1==M&&11!=A||1==N&&11!=U?"one":w&&M>=2&&M<=4&&(A<12||A>14)||N>=2&&N<=4&&(U<12||U>14)?"few":"other"},ss:Ce,ssy:Ce,st:Ce,su:At,sv:en,sw:en,syr:Ce,ta:Ce,te:Ce,teo:Ce,th:At,ti:Ir,tig:Ce,tk:Ce,tl:function Du(f){var m=String(f).split("."),v=m[0],D=m[1]||"",w=!m[1],M=v.slice(-1),A=D.slice(-1);return w&&(1==v||2==v||3==v)||w&&4!=M&&6!=M&&9!=M||!w&&4!=A&&6!=A&&9!=A?"one":"other"},tn:Ce,to:At,tr:Ce,ts:Ce,tzm:function fl(f){var m=String(f).split("."),v=Number(m[0])==f;return 0==f||1==f||v&&f>=11&&f<=99?"one":"other"},ug:Ce,uk:function qf(f){var m=String(f).split("."),v=m[0],D=!m[1],w=v.slice(-1),M=v.slice(-2);return D&&1==w&&11!=M?"one":D&&w>=2&&w<=4&&(M<12||M>14)?"few":D&&0==w||D&&w>=5&&w<=9||D&&M>=11&&M<=14?"many":"other"},ur:en,uz:Ce,ve:Ce,vi:At,vo:Ce,vun:Ce,wa:Ir,wae:Ce,wo:At,xh:Ce,xog:Ce,yi:en,yo:At,yue:At,zh:At,zu:Ht}),tr="zero",_e="one",Be="two",dt="few",xt="many",pe="other",oe={cardinal:[_e,pe],ordinal:[pe]},et={cardinal:[pe],ordinal:[pe]},fr={cardinal:[_e,dt,xt,pe],ordinal:[pe]},un={cardinal:[_e,pe],ordinal:[_e,pe]},hr={cardinal:[_e,Be,pe],ordinal:[pe]},Xu=Object.freeze({__proto__:null,_in:et,af:oe,ak:oe,am:oe,an:oe,ar:{cardinal:[tr,_e,Be,dt,xt,pe],ordinal:[pe]},ars:{cardinal:[tr,_e,Be,dt,xt,pe],ordinal:[pe]},as:{cardinal:[_e,pe],ordinal:[_e,Be,dt,xt,pe]},asa:oe,ast:oe,az:{cardinal:[_e,pe],ordinal:[_e,dt,xt,pe]},be:{cardinal:[_e,dt,xt,pe],ordinal:[dt,pe]},bem:oe,bez:oe,bg:oe,bho:oe,bm:et,bn:{cardinal:[_e,pe],ordinal:[_e,Be,dt,xt,pe]},bo:et,br:{cardinal:[_e,Be,dt,xt,pe],ordinal:[pe]},brx:oe,bs:{cardinal:[_e,dt,pe],ordinal:[pe]},ca:{cardinal:[_e,pe],ordinal:[_e,Be,dt,pe]},ce:oe,ceb:oe,cgg:oe,chr:oe,ckb:oe,cs:fr,cy:{cardinal:[tr,_e,Be,dt,xt,pe],ordinal:[tr,_e,Be,dt,xt,pe]},da:oe,de:oe,dsb:{cardinal:[_e,Be,dt,pe],ordinal:[pe]},dv:oe,dz:et,ee:oe,el:oe,en:{cardinal:[_e,pe],ordinal:[_e,Be,dt,pe]},eo:oe,es:oe,et:oe,eu:oe,fa:oe,ff:oe,fi:oe,fil:un,fo:oe,fr:un,fur:oe,fy:oe,ga:{cardinal:[_e,Be,dt,xt,pe],ordinal:[_e,pe]},gd:{cardinal:[_e,Be,dt,pe],ordinal:[_e,Be,dt,pe]},gl:oe,gsw:oe,gu:{cardinal:[_e,pe],ordinal:[_e,Be,dt,xt,pe]},guw:oe,gv:{cardinal:[_e,Be,dt,xt,pe],ordinal:[pe]},ha:oe,haw:oe,he:{cardinal:[_e,Be,xt,pe],ordinal:[pe]},hi:{cardinal:[_e,pe],ordinal:[_e,Be,dt,xt,pe]},hr:{cardinal:[_e,dt,pe],ordinal:[pe]},hsb:{cardinal:[_e,Be,dt,pe],ordinal:[pe]},hu:un,hy:un,ia:oe,id:et,ig:et,ii:et,io:oe,is:oe,it:{cardinal:[_e,pe],ordinal:[xt,pe]},iu:hr,iw:{cardinal:[_e,Be,xt,pe],ordinal:[pe]},ja:et,jbo:et,jgo:oe,ji:oe,jmc:oe,jv:et,jw:et,ka:{cardinal:[_e,pe],ordinal:[_e,xt,pe]},kab:oe,kaj:oe,kcg:oe,kde:et,kea:et,kk:{cardinal:[_e,pe],ordinal:[xt,pe]},kkj:oe,kl:oe,km:et,kn:oe,ko:et,ks:oe,ksb:oe,ksh:{cardinal:[tr,_e,pe],ordinal:[pe]},ku:oe,kw:{cardinal:[tr,_e,Be,dt,xt,pe],ordinal:[_e,xt,pe]},ky:oe,lag:{cardinal:[tr,_e,pe],ordinal:[pe]},lb:oe,lg:oe,lkt:et,ln:oe,lo:{cardinal:[pe],ordinal:[_e,pe]},lt:fr,lv:{cardinal:[tr,_e,pe],ordinal:[pe]},mas:oe,mg:oe,mgo:oe,mk:{cardinal:[_e,pe],ordinal:[_e,Be,xt,pe]},ml:oe,mn:oe,mo:{cardinal:[_e,dt,pe],ordinal:[_e,pe]},mr:{cardinal:[_e,pe],ordinal:[_e,Be,dt,pe]},ms:{cardinal:[pe],ordinal:[_e,pe]},mt:fr,my:et,nah:oe,naq:hr,nb:oe,nd:oe,ne:un,nl:oe,nn:oe,nnh:oe,no:oe,nqo:et,nr:oe,nso:oe,ny:oe,nyn:oe,om:oe,or:{cardinal:[_e,pe],ordinal:[_e,Be,dt,xt,pe]},os:oe,osa:et,pa:oe,pap:oe,pl:fr,prg:{cardinal:[tr,_e,pe],ordinal:[pe]},ps:oe,pt:oe,pt_PT:oe,rm:oe,ro:{cardinal:[_e,dt,pe],ordinal:[_e,pe]},rof:oe,root:et,ru:fr,rwk:oe,sah:et,saq:oe,sc:{cardinal:[_e,pe],ordinal:[xt,pe]},scn:{cardinal:[_e,pe],ordinal:[xt,pe]},sd:oe,sdh:oe,se:hr,seh:oe,ses:et,sg:et,sh:{cardinal:[_e,dt,pe],ordinal:[pe]},shi:{cardinal:[_e,dt,pe],ordinal:[pe]},si:oe,sk:fr,sl:{cardinal:[_e,Be,dt,pe],ordinal:[pe]},sma:hr,smi:hr,smj:hr,smn:hr,sms:hr,sn:oe,so:oe,sq:{cardinal:[_e,pe],ordinal:[_e,xt,pe]},sr:{cardinal:[_e,dt,pe],ordinal:[pe]},ss:oe,ssy:oe,st:oe,su:et,sv:un,sw:oe,syr:oe,ta:oe,te:oe,teo:oe,th:et,ti:oe,tig:oe,tk:{cardinal:[_e,pe],ordinal:[dt,pe]},tl:un,tn:oe,to:et,tr:oe,ts:oe,tzm:oe,ug:oe,uk:{cardinal:[_e,dt,xt,pe],ordinal:[dt,pe]},ur:oe,uz:oe,ve:oe,vi:{cardinal:[pe],ordinal:[_e,pe]},vo:oe,vun:oe,wa:oe,wae:oe,wo:et,xh:oe,xog:oe,yi:oe,yo:et,yue:et,zh:et,zu:oe});function Me(f,m){return m?"other":1==f?"one":"other"}function Mi(f,m){return m?"other":0==f||1==f?"one":"other"}function Fn(f,m){var v=String(f).split(".");return m||1!=f||v[1]?"other":"one"}function Pt(f,m){return"other"}function Er(f,m){return m?"other":1==f?"one":2==f?"two":"other"}var Pa=Object.freeze({__proto__:null,_in:Pt,af:Me,ak:Mi,am:function Ag(f,m){return m?"other":f>=0&&f<=1?"one":"other"},an:Me,ar:function Rg(f,m){var v=String(f).split("."),w=Number(v[0])==f&&v[0].slice(-2);return m?"other":0==f?"zero":1==f?"one":2==f?"two":w>=3&&w<=10?"few":w>=11&&w<=99?"many":"other"},ars:function Og(f,m){var v=String(f).split("."),w=Number(v[0])==f&&v[0].slice(-2);return m?"other":0==f?"zero":1==f?"one":2==f?"two":w>=3&&w<=10?"few":w>=11&&w<=99?"many":"other"},as:function Ng(f,m){return m?1==f||5==f||7==f||8==f||9==f||10==f?"one":2==f||3==f?"two":4==f?"few":6==f?"many":"other":f>=0&&f<=1?"one":"other"},asa:Me,ast:Fn,az:function da(f,m){var D=String(f).split(".")[0],w=D.slice(-1),M=D.slice(-2),A=D.slice(-3);return m?1==w||2==w||5==w||7==w||8==w||20==M||50==M||70==M||80==M?"one":3==w||4==w||100==A||200==A||300==A||400==A||500==A||600==A||700==A||800==A||900==A?"few":0==D||6==w||40==M||60==M||90==M?"many":"other":1==f?"one":"other"},be:function ec(f,m){var v=String(f).split("."),D=Number(v[0])==f,w=D&&v[0].slice(-1),M=D&&v[0].slice(-2);return m?2!=w&&3!=w||12==M||13==M?"other":"few":1==w&&11!=M?"one":w>=2&&w<=4&&(M<12||M>14)?"few":D&&0==w||w>=5&&w<=9||M>=11&&M<=14?"many":"other"},bem:Me,bez:Me,bg:Me,bho:Mi,bm:Pt,bn:function zl(f,m){return m?1==f||5==f||7==f||8==f||9==f||10==f?"one":2==f||3==f?"two":4==f?"few":6==f?"many":"other":f>=0&&f<=1?"one":"other"},bo:Pt,br:function tc(f,m){var v=String(f).split("."),D=Number(v[0])==f,w=D&&v[0].slice(-1),M=D&&v[0].slice(-2),A=D&&v[0].slice(-6);return m?"other":1==w&&11!=M&&71!=M&&91!=M?"one":2==w&&12!=M&&72!=M&&92!=M?"two":(3==w||4==w||9==w)&&(M<10||M>19)&&(M<70||M>79)&&(M<90||M>99)?"few":0!=f&&D&&0==A?"many":"other"},brx:Me,bs:function Ah(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=D.slice(-2),U=w.slice(-1),se=w.slice(-2);return m?"other":M&&1==A&&11!=N||1==U&&11!=se?"one":M&&A>=2&&A<=4&&(N<12||N>14)||U>=2&&U<=4&&(se<12||se>14)?"few":"other"},ca:function Rh(f,m){var v=String(f).split(".");return m?1==f||3==f?"one":2==f?"two":4==f?"few":"other":1!=f||v[1]?"other":"one"},ce:Me,ceb:function nc(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=w.slice(-1);return m?"other":M&&(1==D||2==D||3==D)||M&&4!=A&&6!=A&&9!=A||!M&&4!=N&&6!=N&&9!=N?"one":"other"},cgg:Me,chr:Me,ckb:Me,cs:function ic(f,m){var v=String(f).split("."),D=v[0],w=!v[1];return m?"other":1==f&&w?"one":D>=2&&D<=4&&w?"few":w?"other":"many"},cy:function oc(f,m){return m?0==f||7==f||8==f||9==f?"zero":1==f?"one":2==f?"two":3==f||4==f?"few":5==f||6==f?"many":"other":0==f?"zero":1==f?"one":2==f?"two":3==f?"few":6==f?"many":"other"},da:function Ph(f,m){var v=String(f).split("."),D=v[0],w=Number(v[0])==f;return m||1!=f&&(w||0!=D&&1!=D)?"other":"one"},de:Fn,dsb:function nn(f,m){var v=String(f).split("."),w=v[1]||"",M=!v[1],A=v[0].slice(-2),N=w.slice(-2);return m?"other":M&&1==A||1==N?"one":M&&2==A||2==N?"two":M&&(3==A||4==A)||3==N||4==N?"few":"other"},dv:Me,dz:Pt,ee:Me,el:Me,en:function Ti(f,m){var v=String(f).split("."),D=!v[1],w=Number(v[0])==f,M=w&&v[0].slice(-1),A=w&&v[0].slice(-2);return m?1==M&&11!=A?"one":2==M&&12!=A?"two":3==M&&13!=A?"few":"other":1==f&&D?"one":"other"},eo:Me,es:Me,et:Fn,eu:Me,fa:function Lh(f,m){return m?"other":f>=0&&f<=1?"one":"other"},ff:function gs(f,m){return m?"other":f>=0&&f<2?"one":"other"},fi:Fn,fil:function Yl(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=w.slice(-1);return m?1==f?"one":"other":M&&(1==D||2==D||3==D)||M&&4!=A&&6!=A&&9!=A||!M&&4!=N&&6!=N&&9!=N?"one":"other"},fo:Me,fr:function $h(f,m){return m?1==f?"one":"other":f>=0&&f<2?"one":"other"},fur:Me,fy:Fn,ga:function ms(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?1==f?"one":"other":1==f?"one":2==f?"two":D&&f>=3&&f<=6?"few":D&&f>=7&&f<=10?"many":"other"},gd:function Ai(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?1==f||11==f?"one":2==f||12==f?"two":3==f||13==f?"few":"other":1==f||11==f?"one":2==f||12==f?"two":D&&f>=3&&f<=10||D&&f>=13&&f<=19?"few":"other"},gl:Fn,gsw:Me,gu:function cc(f,m){return m?1==f?"one":2==f||3==f?"two":4==f?"few":6==f?"many":"other":f>=0&&f<=1?"one":"other"},guw:Mi,gv:function Uh(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=D.slice(-1),A=D.slice(-2);return m?"other":w&&1==M?"one":w&&2==M?"two":!w||0!=A&&20!=A&&40!=A&&60!=A&&80!=A?w?"other":"many":"few"},ha:Me,haw:Me,he:function Jl(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=Number(v[0])==f,A=M&&v[0].slice(-1);return m?"other":1==f&&w?"one":2==D&&w?"two":w&&(f<0||f>10)&&M&&0==A?"many":"other"},hi:function Bh(f,m){return m?1==f?"one":2==f||3==f?"two":4==f?"few":6==f?"many":"other":f>=0&&f<=1?"one":"other"},hr:function Ql(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=D.slice(-2),U=w.slice(-1),se=w.slice(-2);return m?"other":M&&1==A&&11!=N||1==U&&11!=se?"one":M&&A>=2&&A<=4&&(N<12||N>14)||U>=2&&U<=4&&(se<12||se>14)?"few":"other"},hsb:function Hh(f,m){var v=String(f).split("."),w=v[1]||"",M=!v[1],A=v[0].slice(-2),N=w.slice(-2);return m?"other":M&&1==A||1==N?"one":M&&2==A||2==N?"two":M&&(3==A||4==A)||3==N||4==N?"few":"other"},hu:function ga(f,m){return m?1==f||5==f?"one":"other":1==f?"one":"other"},hy:function ma(f,m){return m?1==f?"one":"other":f>=0&&f<2?"one":"other"},ia:Fn,id:Pt,ig:Pt,ii:Pt,io:Fn,is:function Ri(f,m){var v=String(f).split("."),D=v[0],w=Number(v[0])==f,M=D.slice(-1),A=D.slice(-2);return m?"other":w&&1==M&&11!=A||!w?"one":"other"},it:function zh(f,m){var v=String(f).split(".");return m?11==f||8==f||80==f||800==f?"many":"other":1!=f||v[1]?"other":"one"},iu:Er,iw:function xg(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=Number(v[0])==f,A=M&&v[0].slice(-1);return m?"other":1==f&&w?"one":2==D&&w?"two":w&&(f<0||f>10)&&M&&0==A?"many":"other"},ja:Pt,jbo:Pt,jgo:Me,ji:Fn,jmc:Me,jv:Pt,jw:Pt,ka:function nd(f,m){var D=String(f).split(".")[0],w=D.slice(-2);return m?1==D?"one":0==D||w>=2&&w<=20||40==w||60==w||80==w?"many":"other":1==f?"one":"other"},kab:function dc(f,m){return m?"other":f>=0&&f<2?"one":"other"},kaj:Me,kcg:Me,kde:Pt,kea:Pt,kk:function Yh(f,m){var v=String(f).split("."),D=Number(v[0])==f,w=D&&v[0].slice(-1);return m?6==w||9==w||D&&0==w&&0!=f?"many":"other":1==f?"one":"other"},kkj:Me,kl:Me,km:Pt,kn:function rd(f,m){return m?"other":f>=0&&f<=1?"one":"other"},ko:Pt,ks:Me,ksb:Me,ksh:function id(f,m){return m?"other":0==f?"zero":1==f?"one":"other"},ku:Me,kw:function ba(f,m){var v=String(f).split("."),D=Number(v[0])==f,w=D&&v[0].slice(-2),M=D&&v[0].slice(-3),A=D&&v[0].slice(-5),N=D&&v[0].slice(-6);return m?D&&f>=1&&f<=4||w>=1&&w<=4||w>=21&&w<=24||w>=41&&w<=44||w>=61&&w<=64||w>=81&&w<=84?"one":5==f||5==w?"many":"other":0==f?"zero":1==f?"one":2==w||22==w||42==w||62==w||82==w||D&&0==M&&(A>=1e3&&A<=2e4||4e4==A||6e4==A||8e4==A)||0!=f&&1e5==N?"two":3==w||23==w||43==w||63==w||83==w?"few":1==f||1!=w&&21!=w&&41!=w&&61!=w&&81!=w?"other":"many"},ky:Me,lag:function Es(f,m){var D=String(f).split(".")[0];return m?"other":0==f?"zero":0!=D&&1!=D||0==f?"other":"one"},lb:Me,lg:Me,lkt:Pt,ln:Mi,lo:function rn(f,m){return m&&1==f?"one":"other"},lt:function ws(f,m){var v=String(f).split("."),D=v[1]||"",w=Number(v[0])==f,M=w&&v[0].slice(-1),A=w&&v[0].slice(-2);return m?"other":1==M&&(A<11||A>19)?"one":M>=2&&M<=9&&(A<11||A>19)?"few":0!=D?"many":"other"},lv:function sd(f,m){var v=String(f).split("."),D=v[1]||"",w=D.length,M=Number(v[0])==f,A=M&&v[0].slice(-1),N=M&&v[0].slice(-2),U=D.slice(-2),se=D.slice(-1);return m?"other":M&&0==A||N>=11&&N<=19||2==w&&U>=11&&U<=19?"zero":1==A&&11!=N||2==w&&1==se&&11!=U||2!=w&&1==se?"one":"other"},mas:Me,mg:Mi,mgo:Me,mk:function cd(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=D.slice(-2),U=w.slice(-1),se=w.slice(-2);return m?1==A&&11!=N?"one":2==A&&12!=N?"two":7!=A&&8!=A||17==N||18==N?"other":"many":M&&1==A&&11!=N||1==U&&11!=se?"one":"other"},ml:Me,mn:Me,mo:function Yn(f,m){var v=String(f).split("."),D=!v[1],M=Number(v[0])==f&&v[0].slice(-2);return m?1==f?"one":"other":1==f&&D?"one":!D||0==f||M>=2&&M<=19?"few":"other"},mr:function kg(f,m){return m?1==f?"one":2==f||3==f?"two":4==f?"few":"other":1==f?"one":"other"},ms:function si(f,m){return m&&1==f?"one":"other"},mt:function Cs(f,m){var v=String(f).split("."),w=Number(v[0])==f&&v[0].slice(-2);return m?"other":1==f?"one":0==f||w>=2&&w<=10?"few":w>=11&&w<=19?"many":"other"},my:Pt,nah:Me,naq:Er,nb:Me,nd:Me,ne:function dv(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?D&&f>=1&&f<=4?"one":"other":1==f?"one":"other"},nl:Fn,nn:Me,nnh:Me,no:Me,nqo:Pt,nr:Me,nso:Mi,ny:Me,nyn:Me,om:Me,or:function ai(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?1==f||5==f||D&&f>=7&&f<=9?"one":2==f||3==f?"two":4==f?"few":6==f?"many":"other":1==f?"one":"other"},os:Me,osa:Pt,pa:Mi,pap:Me,pl:function yc(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=D.slice(-1),A=D.slice(-2);return m?"other":1==f&&w?"one":w&&M>=2&&M<=4&&(A<12||A>14)?"few":w&&1!=D&&(0==M||1==M)||w&&M>=5&&M<=9||w&&A>=12&&A<=14?"many":"other"},prg:function ip(f,m){var v=String(f).split("."),D=v[1]||"",w=D.length,M=Number(v[0])==f,A=M&&v[0].slice(-1),N=M&&v[0].slice(-2),U=D.slice(-2),se=D.slice(-1);return m?"other":M&&0==A||N>=11&&N<=19||2==w&&U>=11&&U<=19?"zero":1==A&&11!=N||2==w&&1==se&&11!=U||2!=w&&1==se?"one":"other"},ps:Me,pt:function md(f,m){var D=String(f).split(".")[0];return m?"other":0==D||1==D?"one":"other"},pt_PT:Fn,rm:Me,ro:function vd(f,m){var v=String(f).split("."),D=!v[1],M=Number(v[0])==f&&v[0].slice(-2);return m?1==f?"one":"other":1==f&&D?"one":!D||0==f||M>=2&&M<=19?"few":"other"},rof:Me,root:Pt,ru:function _a(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=D.slice(-1),A=D.slice(-2);return m?"other":w&&1==M&&11!=A?"one":w&&M>=2&&M<=4&&(A<12||A>14)?"few":w&&0==M||w&&M>=5&&M<=9||w&&A>=11&&A<=14?"many":"other"},rwk:Me,sah:Pt,saq:Me,sc:function fo(f,m){var v=String(f).split(".");return m?11==f||8==f||80==f||800==f?"many":"other":1!=f||v[1]?"other":"one"},scn:function Ed(f,m){var v=String(f).split(".");return m?11==f||8==f||80==f||800==f?"many":"other":1!=f||v[1]?"other":"one"},sd:Me,sdh:Me,se:Er,seh:Me,ses:Pt,sg:Pt,sh:function Vg(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=D.slice(-2),U=w.slice(-1),se=w.slice(-2);return m?"other":M&&1==A&&11!=N||1==U&&11!=se?"one":M&&A>=2&&A<=4&&(N<12||N>14)||U>=2&&U<=4&&(se<12||se>14)?"few":"other"},shi:function up(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?"other":f>=0&&f<=1?"one":D&&f>=2&&f<=10?"few":"other"},si:function zg(f,m){var v=String(f).split(".");return m?"other":0==f||1==f||0==v[0]&&1==(v[1]||"")?"one":"other"},sk:function Gg(f,m){var v=String(f).split("."),D=v[0],w=!v[1];return m?"other":1==f&&w?"one":D>=2&&D<=4&&w?"few":w?"other":"many"},sl:function ho(f,m){var v=String(f).split("."),w=!v[1],M=v[0].slice(-2);return m?"other":w&&1==M?"one":w&&2==M?"two":w&&(3==M||4==M)||!w?"few":"other"},sma:Er,smi:Er,smj:Er,smn:Er,sms:Er,sn:Me,so:Me,sq:function Ni(f,m){var v=String(f).split("."),D=Number(v[0])==f,w=D&&v[0].slice(-1),M=D&&v[0].slice(-2);return m?1==f?"one":4==w&&14!=M?"many":"other":1==f?"one":"other"},sr:function Cc(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=D.slice(-2),U=w.slice(-1),se=w.slice(-2);return m?"other":M&&1==A&&11!=N||1==U&&11!=se?"one":M&&A>=2&&A<=4&&(N<12||N>14)||U>=2&&U<=4&&(se<12||se>14)?"few":"other"},ss:Me,ssy:Me,st:Me,su:Pt,sv:function bd(f,m){var v=String(f).split("."),D=!v[1],w=Number(v[0])==f,M=w&&v[0].slice(-1),A=w&&v[0].slice(-2);return m?1!=M&&2!=M||11==A||12==A?"other":"one":1==f&&D?"one":"other"},sw:Fn,syr:Me,ta:Me,te:Me,teo:Me,th:Pt,ti:Mi,tig:Me,tk:function qg(f,m){var v=String(f).split("."),w=Number(v[0])==f&&v[0].slice(-1);return m?6==w||9==w||10==f?"few":"other":1==f?"one":"other"},tl:function Sd(f,m){var v=String(f).split("."),D=v[0],w=v[1]||"",M=!v[1],A=D.slice(-1),N=w.slice(-1);return m?1==f?"one":"other":M&&(1==D||2==D||3==D)||M&&4!=A&&6!=A&&9!=A||!M&&4!=N&&6!=N&&9!=N?"one":"other"},tn:Me,to:Pt,tr:Me,ts:Me,tzm:function Md(f,m){var v=String(f).split("."),D=Number(v[0])==f;return m?"other":0==f||1==f||D&&f>=11&&f<=99?"one":"other"},ug:Me,uk:function Na(f,m){var v=String(f).split("."),D=v[0],w=!v[1],M=Number(v[0])==f,A=M&&v[0].slice(-1),N=M&&v[0].slice(-2),U=D.slice(-1),se=D.slice(-2);return m?3==A&&13!=N?"few":"other":w&&1==U&&11!=se?"one":w&&U>=2&&U<=4&&(se<12||se>14)?"few":w&&0==U||w&&U>=5&&U<=9||w&&se>=11&&se<=14?"many":"other"},ur:Fn,uz:Me,ve:Me,vi:function xi(f,m){return m&&1==f?"one":"other"},vo:Me,vun:Me,wa:Mi,wae:Me,wo:Pt,xh:Me,xog:Me,yi:Fn,yo:Pt,yue:Pt,zh:Pt,zu:function Nd(f,m){return m?"other":f>=0&&f<=1?"one":"other"}});function Sc(f){if("string"!=typeof f||f.length<2)throw new RangeError("Invalid language tag: "+f);if(f.startsWith("pt-PT"))return"pt-PT";var m=f.match(/.+?(?=[-_])/);return m?m[0]:f}function La(f){if("function"==typeof f){var m=Sc(f.name);return{isDefault:!1,id:sr(m),lc:m,locale:f.name,getPlural:f,cardinals:f.cardinals||[],ordinals:f.ordinals||[]}}var v=Sc(f),D=sr(v);return function nm(f){return f in Pa}(D)?{isDefault:!0,id:D,lc:v,locale:f,getCardinal:gi[D],getPlural:Pa[D],cardinals:Xu[D].cardinal,ordinals:Xu[D].ordinal}:null}function tm(f){return sr(Sc(f))in Pa}return function(){function f(m,v){if(this.plurals=[],this.options=Object.assign({biDiSupport:!1,currency:"USD",customFormatters:{},requireAllArguments:!1,returnType:"string",strict:v&&v.strictNumberSign||!1},v),"*"===m?this.plurals=function Mc(f){var m=Object.keys(Pa).filter(function(v){return v!==f});return m.unshift(f),m.map(La)}(f.defaultLocale):Array.isArray(m)?this.plurals=m.map(La).filter(Boolean):m&&(D=La(m))&&(this.plurals=[D]),0===this.plurals.length){var D=La(f.defaultLocale);this.plurals=[D]}}return f.escape=function(m,v){var D=v?/[#{}]/g:/[{}]/g;return String(m).replace(D,"'$&'")},f.supportedLocalesOf=function(m){return(Array.isArray(m)?m:[m]).filter(tm)},f.prototype.resolvedOptions=function(){return Ve(Ve({},this.options),{locale:this.plurals[0].locale,plurals:this.plurals})},f.prototype.compile=function(m){var v,D,w=new Wa(this.options),M="return "+w.compile(m,this.plurals[0]),A=[],N=[];try{for(var U=we(Object.entries(w.runtime)),se=U.next();!se.done;se=U.next()){var ke=de(se.value,2),Ae=ke[1];A.push(ke[0]),N.push(Ae)}}catch(He){v={error:He}}finally{try{se&&!se.done&&(D=U.return)&&D.call(U)}finally{if(v)throw v.error}}return(new(Function.bind.apply(Function,We(We([void 0],de(A)),[M])))).apply(void 0,We([],de(N)))},f.defaultLocale="en",f}()}()},7707:(Fe,W,b)=>{"use strict";var p=b(9212);let P=null;function B(){return P}class j{}const H=new p.OlP("DocumentToken");let z=(()=>{class i{historyGo(o){throw new Error("Not implemented")}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)($),providedIn:"platform"})}return i})();const le=new p.OlP("Location Initialized");let $=(()=>{class i extends z{constructor(){super(),this._doc=(0,p.f3M)(H),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return B().getBaseHref(this._doc)}onPopState(o){const u=B().getGlobalEventTarget(this._doc,"window");return u.addEventListener("popstate",o,!1),()=>u.removeEventListener("popstate",o)}onHashChange(o){const u=B().getGlobalEventTarget(this._doc,"window");return u.addEventListener("hashchange",o,!1),()=>u.removeEventListener("hashchange",o)}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(o){this._location.pathname=o}pushState(o,u,d){this._history.pushState(o,u,d)}replaceState(o,u,d){this._history.replaceState(o,u,d)}forward(){this._history.forward()}back(){this._history.back()}historyGo(o=0){this._history.go(o)}getState(){return this._history.state}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>new i,providedIn:"platform"})}return i})();function J(i,a){if(0==i.length)return a;if(0==a.length)return i;let o=0;return i.endsWith("/")&&o++,a.startsWith("/")&&o++,2==o?i+a.substring(1):1==o?i+a:i+"/"+a}function O(i){const a=i.match(/#|\?|$/),o=a&&a.index||i.length;return i.slice(0,o-("/"===i[o-1]?1:0))+i.slice(o)}function V(i){return i&&"?"!==i[0]?"?"+i:i}let ie=(()=>{class i{historyGo(o){throw new Error("Not implemented")}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)(ce),providedIn:"root"})}return i})();const X=new p.OlP("appBaseHref");let ce=(()=>{class i extends ie{constructor(o,u){super(),this._platformLocation=o,this._removeListenerFns=[],this._baseHref=u??this._platformLocation.getBaseHrefFromDOM()??(0,p.f3M)(H).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(o){this._removeListenerFns.push(this._platformLocation.onPopState(o),this._platformLocation.onHashChange(o))}getBaseHref(){return this._baseHref}prepareExternalUrl(o){return J(this._baseHref,o)}path(o=!1){const u=this._platformLocation.pathname+V(this._platformLocation.search),d=this._platformLocation.hash;return d&&o?`${u}${d}`:u}pushState(o,u,d,y){const C=this.prepareExternalUrl(d+V(y));this._platformLocation.pushState(o,u,C)}replaceState(o,u,d,y){const C=this.prepareExternalUrl(d+V(y));this._platformLocation.replaceState(o,u,C)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(o=0){this._platformLocation.historyGo?.(o)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(z),p.LFG(X,8))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),Le=(()=>{class i extends ie{constructor(o,u){super(),this._platformLocation=o,this._baseHref="",this._removeListenerFns=[],null!=u&&(this._baseHref=u)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(o){this._removeListenerFns.push(this._platformLocation.onPopState(o),this._platformLocation.onHashChange(o))}getBaseHref(){return this._baseHref}path(o=!1){let u=this._platformLocation.hash;return null==u&&(u="#"),u.length>0?u.substring(1):u}prepareExternalUrl(o){const u=J(this._baseHref,o);return u.length>0?"#"+u:u}pushState(o,u,d,y){let C=this.prepareExternalUrl(d+V(y));0==C.length&&(C=this._platformLocation.pathname),this._platformLocation.pushState(o,u,C)}replaceState(o,u,d,y){let C=this.prepareExternalUrl(d+V(y));0==C.length&&(C=this._platformLocation.pathname),this._platformLocation.replaceState(o,u,C)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(o=0){this._platformLocation.historyGo?.(o)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(z),p.LFG(X,8))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})(),Re=(()=>{class i{constructor(o){this._subject=new p.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=o;const u=this._locationStrategy.getBaseHref();this._basePath=function we(i){if(new RegExp("^(https?:)?//").test(i)){const[,o]=i.split(/\/\/[^\/]+/);return o}return i}(O(Ve(u))),this._locationStrategy.onPopState(d=>{this._subject.emit({url:this.path(!0),pop:!0,state:d.state,type:d.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(o=!1){return this.normalize(this._locationStrategy.path(o))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(o,u=""){return this.path()==this.normalize(o+V(u))}normalize(o){return i.stripTrailingSlash(function Ne(i,a){if(!i||!a.startsWith(i))return a;const o=a.substring(i.length);return""===o||["/",";","?","#"].includes(o[0])?o:a}(this._basePath,Ve(o)))}prepareExternalUrl(o){return o&&"/"!==o[0]&&(o="/"+o),this._locationStrategy.prepareExternalUrl(o)}go(o,u="",d=null){this._locationStrategy.pushState(d,"",o,u),this._notifyUrlChangeListeners(this.prepareExternalUrl(o+V(u)),d)}replaceState(o,u="",d=null){this._locationStrategy.replaceState(d,"",o,u),this._notifyUrlChangeListeners(this.prepareExternalUrl(o+V(u)),d)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(o=0){this._locationStrategy.historyGo?.(o)}onUrlChange(o){return this._urlChangeListeners.push(o),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(u=>{this._notifyUrlChangeListeners(u.url,u.state)})),()=>{const u=this._urlChangeListeners.indexOf(o);this._urlChangeListeners.splice(u,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(o="",u){this._urlChangeListeners.forEach(d=>d(o,u))}subscribe(o,u,d){return this._subject.subscribe({next:o,error:u,complete:d})}static#e=this.normalizeQueryParams=V;static#t=this.joinWithSlash=J;static#n=this.stripTrailingSlash=O;static#r=this.\u0275fac=function(u){return new(u||i)(p.LFG(ie))};static#i=this.\u0275prov=p.Yz7({token:i,factory:()=>function Ee(){return new Re((0,p.LFG)(ie))}(),providedIn:"root"})}return i})();function Ve(i){return i.replace(/\/index.html$/,"")}function ks(i,a){a=encodeURIComponent(a);for(const o of i.split(";")){const u=o.indexOf("="),[d,y]=-1==u?[o,""]:[o.slice(0,u),o.slice(u+1)];if(d.trim()===a)return decodeURIComponent(y)}return null}let Lo=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275mod=p.oAB({type:i});static#n=this.\u0275inj=p.cJS({})}return i})();const qa="browser";function Gc(i){return"server"===i}let Af=(()=>{class i{static#e=this.\u0275prov=(0,p.Yz7)({token:i,providedIn:"root",factory:()=>function _f(i){return i===qa}((0,p.f3M)(p.Lbi))?new Rf((0,p.f3M)(H),window):new Nf})}return i})();class Rf{constructor(a,o){this.document=a,this.window=o,this.offset=()=>[0,0]}setOffset(a){this.offset=Array.isArray(a)?()=>a:a}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(a){this.window.scrollTo(a[0],a[1])}scrollToAnchor(a){const o=function Of(i,a){const o=i.getElementById(a)||i.getElementsByName(a)[0];if(o)return o;if("function"==typeof i.createTreeWalker&&i.body&&"function"==typeof i.body.attachShadow){const u=i.createTreeWalker(i.body,NodeFilter.SHOW_ELEMENT);let d=u.currentNode;for(;d;){const y=d.shadowRoot;if(y){const C=y.getElementById(a)||y.querySelector(`[name="${a}"]`);if(C)return C}d=u.nextNode()}}return null}(this.document,a);o&&(this.scrollToElement(o),o.focus())}setHistoryScrollRestoration(a){this.window.history.scrollRestoration=a}scrollToElement(a){const o=a.getBoundingClientRect(),u=o.left+this.window.pageXOffset,d=o.top+this.window.pageYOffset,y=this.offset();this.window.scrollTo(u-y[0],d-y[1])}}class Nf{setOffset(a){}getScrollPosition(){return[0,0]}scrollToPosition(a){}scrollToAnchor(a){}setHistoryScrollRestoration(a){}}class Ja{}class Xp extends j{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class tl extends Xp{static makeCurrent(){!function k(i){P||(P=i)}(new tl)}onAndCancel(a,o,u){return a.addEventListener(o,u),()=>{a.removeEventListener(o,u)}}dispatchEvent(a,o){a.dispatchEvent(o)}remove(a){a.parentNode&&a.parentNode.removeChild(a)}createElement(a,o){return(o=o||this.getDefaultDocument()).createElement(a)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(a){return a.nodeType===Node.ELEMENT_NODE}isShadowRoot(a){return a instanceof DocumentFragment}getGlobalEventTarget(a,o){return"window"===o?window:"document"===o?a:"body"===o?a.body:null}getBaseHref(a){const o=function nl(){return ji=ji||document.querySelector("base"),ji?ji.getAttribute("href"):null}();return null==o?null:function eg(i){return new URL(i,document.baseURI).pathname}(o)}resetBaseElement(){ji=null}getUserAgent(){return window.navigator.userAgent}getCookie(a){return ks(document.cookie,a)}}let ji=null,ng=(()=>{class i{build(){return new XMLHttpRequest}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();const rl=new p.OlP("EventManagerPlugins");let Yr=(()=>{class i{constructor(o,u){this._zone=u,this._eventNameToPlugin=new Map,o.forEach(d=>{d.manager=this}),this._plugins=o.slice().reverse()}addEventListener(o,u,d){return this._findPluginFor(u).addEventListener(o,u,d)}getZone(){return this._zone}_findPluginFor(o){let u=this._eventNameToPlugin.get(o);if(u)return u;if(u=this._plugins.find(y=>y.supports(o)),!u)throw new p.vHH(5101,!1);return this._eventNameToPlugin.set(o,u),u}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(rl),p.LFG(p.R0b))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();class il{constructor(a){this._doc=a}}const Ho="ng-app-id";let ou=(()=>{class i{constructor(o,u,d,y={}){this.doc=o,this.appId=u,this.nonce=d,this.platformId=y,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=Gc(y),this.resetHostNodes()}addStyles(o){for(const u of o)1===this.changeUsageCount(u,1)&&this.onStyleAdded(u)}removeStyles(o){for(const u of o)this.changeUsageCount(u,-1)<=0&&this.onStyleRemoved(u)}ngOnDestroy(){const o=this.styleNodesInDOM;o&&(o.forEach(u=>u.remove()),o.clear());for(const u of this.getAllStyles())this.onStyleRemoved(u);this.resetHostNodes()}addHost(o){this.hostNodes.add(o);for(const u of this.getAllStyles())this.addStyleToHost(o,u)}removeHost(o){this.hostNodes.delete(o)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(o){for(const u of this.hostNodes)this.addStyleToHost(u,o)}onStyleRemoved(o){const u=this.styleRef;u.get(o)?.elements?.forEach(d=>d.remove()),u.delete(o)}collectServerRenderedStyles(){const o=this.doc.head?.querySelectorAll(`style[${Ho}="${this.appId}"]`);if(o?.length){const u=new Map;return o.forEach(d=>{null!=d.textContent&&u.set(d.textContent,d)}),u}return null}changeUsageCount(o,u){const d=this.styleRef;if(d.has(o)){const y=d.get(o);return y.usage+=u,y.usage}return d.set(o,{usage:u,elements:[]}),u}getStyleElement(o,u){const d=this.styleNodesInDOM,y=d?.get(u);if(y?.parentNode===o)return d.delete(u),y.removeAttribute(Ho),y;{const C=this.doc.createElement("style");return this.nonce&&C.setAttribute("nonce",this.nonce),C.textContent=u,this.platformIsServer&&C.setAttribute(Ho,this.appId),o.appendChild(C),C}}addStyleToHost(o,u){const d=this.getStyleElement(o,u),y=this.styleRef,C=y.get(u)?.elements;C?C.push(d):y.set(u,{elements:[d],usage:1})}resetHostNodes(){const o=this.hostNodes;o.clear(),o.add(this.doc.head)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(H),p.LFG(p.AFp),p.LFG(p.Ojb,8),p.LFG(p.Lbi))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();const su={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/"},au=/%COMP%/g,Hf=new p.OlP("RemoveStylesOnCompDestroy",{providedIn:"root",factory:()=>!0});function lu(i,a){return a.map(o=>o.replace(au,i))}let du=(()=>{class i{constructor(o,u,d,y,C,I,_,x=null){this.eventManager=o,this.sharedStylesHost=u,this.appId=d,this.removeStylesOnCompDestroy=y,this.doc=C,this.platformId=I,this.ngZone=_,this.nonce=x,this.rendererByCompId=new Map,this.platformIsServer=Gc(I),this.defaultRenderer=new fu(o,C,_,this.platformIsServer)}createRenderer(o,u){if(!o||!u)return this.defaultRenderer;this.platformIsServer&&u.encapsulation===p.ifc.ShadowDom&&(u={...u,encapsulation:p.ifc.Emulated});const d=this.getOrCreateRenderer(o,u);return d instanceof al?d.applyToHost(o):d instanceof an&&d.applyStyles(),d}getOrCreateRenderer(o,u){const d=this.rendererByCompId;let y=d.get(u.id);if(!y){const C=this.doc,I=this.ngZone,_=this.eventManager,x=this.sharedStylesHost,K=this.removeStylesOnCompDestroy,Z=this.platformIsServer;switch(u.encapsulation){case p.ifc.Emulated:y=new al(_,x,u,this.appId,K,C,I,Z);break;case p.ifc.ShadowDom:return new Vo(_,x,o,u,C,I,this.nonce,Z);default:y=new an(_,x,u,K,C,I,Z)}d.set(u.id,y)}return y}ngOnDestroy(){this.rendererByCompId.clear()}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(Yr),p.LFG(ou),p.LFG(p.AFp),p.LFG(Hf),p.LFG(H),p.LFG(p.Lbi),p.LFG(p.R0b),p.LFG(p.Ojb))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();class fu{constructor(a,o,u,d){this.eventManager=a,this.doc=o,this.ngZone=u,this.platformIsServer=d,this.data=Object.create(null),this.throwOnSyntheticProps=!0,this.destroyNode=null}destroy(){}createElement(a,o){return o?this.doc.createElementNS(su[o]||o,a):this.doc.createElement(a)}createComment(a){return this.doc.createComment(a)}createText(a){return this.doc.createTextNode(a)}appendChild(a,o){(Zs(a)?a.content:a).appendChild(o)}insertBefore(a,o,u){a&&(Zs(a)?a.content:a).insertBefore(o,u)}removeChild(a,o){a&&a.removeChild(o)}selectRootElement(a,o){let u="string"==typeof a?this.doc.querySelector(a):a;if(!u)throw new p.vHH(-5104,!1);return o||(u.textContent=""),u}parentNode(a){return a.parentNode}nextSibling(a){return a.nextSibling}setAttribute(a,o,u,d){if(d){o=d+":"+o;const y=su[d];y?a.setAttributeNS(y,o,u):a.setAttribute(o,u)}else a.setAttribute(o,u)}removeAttribute(a,o,u){if(u){const d=su[u];d?a.removeAttributeNS(d,o):a.removeAttribute(`${u}:${o}`)}else a.removeAttribute(o)}addClass(a,o){a.classList.add(o)}removeClass(a,o){a.classList.remove(o)}setStyle(a,o,u,d){d&(p.JOm.DashCase|p.JOm.Important)?a.style.setProperty(o,u,d&p.JOm.Important?"important":""):a.style[o]=u}removeStyle(a,o,u){u&p.JOm.DashCase?a.style.removeProperty(o):a.style[o]=""}setProperty(a,o,u){null!=a&&(a[o]=u)}setValue(a,o){a.nodeValue=o}listen(a,o,u){if("string"==typeof a&&!(a=B().getGlobalEventTarget(this.doc,a)))throw new Error(`Unsupported event target ${a} for event ${o}`);return this.eventManager.addEventListener(a,o,this.decoratePreventDefault(u))}decoratePreventDefault(a){return o=>{if("__ngUnwrap__"===o)return a;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>a(o)):a(o))&&o.preventDefault()}}}function Zs(i){return"TEMPLATE"===i.tagName&&void 0!==i.content}class Vo extends fu{constructor(a,o,u,d,y,C,I,_){super(a,y,C,_),this.sharedStylesHost=o,this.hostEl=u,this.shadowRoot=u.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const x=lu(d.id,d.styles);for(const K of x){const Z=document.createElement("style");I&&Z.setAttribute("nonce",I),Z.textContent=K,this.shadowRoot.appendChild(Z)}}nodeOrShadowRoot(a){return a===this.hostEl?this.shadowRoot:a}appendChild(a,o){return super.appendChild(this.nodeOrShadowRoot(a),o)}insertBefore(a,o,u){return super.insertBefore(this.nodeOrShadowRoot(a),o,u)}removeChild(a,o){return super.removeChild(this.nodeOrShadowRoot(a),o)}parentNode(a){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(a)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class an extends fu{constructor(a,o,u,d,y,C,I,_){super(a,y,C,I),this.sharedStylesHost=o,this.removeStylesOnCompDestroy=d,this.styles=_?lu(_,u.styles):u.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class al extends an{constructor(a,o,u,d,y,C,I,_){const x=d+"-"+u.id;super(a,o,u,y,C,I,_,x),this.contentAttr=function dr(i){return"_ngcontent-%COMP%".replace(au,i)}(x),this.hostAttr=function sl(i){return"_nghost-%COMP%".replace(au,i)}(x)}applyToHost(a){this.applyStyles(),this.setAttribute(a,this.hostAttr,"")}createElement(a,o){const u=super.createElement(a,o);return super.setAttribute(u,this.contentAttr,""),u}}let zo=(()=>{class i extends il{constructor(o){super(o)}supports(o){return!0}addEventListener(o,u,d){return o.addEventListener(u,d,!1),()=>this.removeEventListener(o,u,d)}removeEventListener(o,u,d){return o.removeEventListener(u,d)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(H))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();const hi=["alt","control","meta","shift"],Un={"\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"},Vf={alt:i=>i.altKey,control:i=>i.ctrlKey,meta:i=>i.metaKey,shift:i=>i.shiftKey};let hu=(()=>{class i extends il{constructor(o){super(o)}supports(o){return null!=i.parseEventName(o)}addEventListener(o,u,d){const y=i.parseEventName(u),C=i.eventCallback(y.fullKey,d,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>B().onAndCancel(o,y.domEventName,C))}static parseEventName(o){const u=o.toLowerCase().split("."),d=u.shift();if(0===u.length||"keydown"!==d&&"keyup"!==d)return null;const y=i._normalizeKey(u.pop());let C="",I=u.indexOf("code");if(I>-1&&(u.splice(I,1),C="code."),hi.forEach(x=>{const K=u.indexOf(x);K>-1&&(u.splice(K,1),C+=x+".")}),C+=y,0!=u.length||0===y.length)return null;const _={};return _.domEventName=d,_.fullKey=C,_}static matchEventFullKeyCode(o,u){let d=Un[o.key]||o.key,y="";return u.indexOf("code.")>-1&&(d=o.code,y="code."),!(null==d||!d)&&(d=d.toLowerCase()," "===d?d="space":"."===d&&(d="dot"),hi.forEach(C=>{C!==d&&(0,Vf[C])(o)&&(y+=C+".")}),y+=d,y===u)}static eventCallback(o,u,d){return y=>{i.matchEventFullKeyCode(y,o)&&d.runGuarded(()=>u(y))}}static _normalizeKey(o){return"esc"===o?"escape":o}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(H))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();function pu(i){return{appProviders:[...at,...i?.providers??[]],platformProviders:Go}}const Go=[{provide:p.Lbi,useValue:qa},{provide:p.g9A,useValue:function ul(){tl.makeCurrent()},multi:!0},{provide:H,useFactory:function gu(){return(0,p.RDi)(document),document},deps:[]}],vu=new p.OlP(""),qr=[{provide:p.rWj,useClass:class tg{addToWindow(a){p.dqk.getAngularTestability=(u,d=!0)=>{const y=a.findTestabilityInTree(u,d);if(null==y)throw new p.vHH(5103,!1);return y},p.dqk.getAllAngularTestabilities=()=>a.getAllTestabilities(),p.dqk.getAllAngularRootElements=()=>a.getAllRootElements(),p.dqk.frameworkStabilizers||(p.dqk.frameworkStabilizers=[]),p.dqk.frameworkStabilizers.push(u=>{const d=p.dqk.getAllAngularTestabilities();let y=d.length,C=!1;const I=function(_){C=C||_,y--,0==y&&u(C)};d.forEach(_=>{_.whenStable(I)})})}findTestabilityInTree(a,o,u){return null==o?null:a.getTestability(o)??(u?B().isShadowRoot(o)?this.findTestabilityInTree(a,o.host,!0):this.findTestabilityInTree(a,o.parentElement,!0):null)}},deps:[]},{provide:p.lri,useClass:p.dDg,deps:[p.R0b,p.eoX,p.rWj]},{provide:p.dDg,useClass:p.dDg,deps:[p.R0b,p.eoX,p.rWj]}],at=[{provide:p.zSh,useValue:"root"},{provide:p.qLn,useFactory:function cl(){return new p.qLn},deps:[]},{provide:rl,useClass:zo,multi:!0,deps:[H,p.R0b,p.Lbi]},{provide:rl,useClass:hu,multi:!0,deps:[H]},du,ou,Yr,{provide:p.FYo,useExisting:du},{provide:Ja,useClass:ng,deps:[]},[]];let ll=(()=>{class i{constructor(o){}static withServerTransition(o){return{ngModule:i,providers:[{provide:p.AFp,useValue:o.appId}]}}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(vu,12))};static#t=this.\u0275mod=p.oAB({type:i});static#n=this.\u0275inj=p.cJS({providers:[...at,...qr],imports:[Lo,p.hGG]})}return i})(),yu=(()=>{class i{constructor(o){this._doc=o}getTitle(){return this._doc.title}setTitle(o){this._doc.title=o||""}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(H))};static#t=this.\u0275prov=p.Yz7({token:i,factory:function(u){let d=null;return d=u?new u:function Wf(){return new yu((0,p.LFG)(H))}(),d},providedIn:"root"})}return i})();typeof window<"u"&&window;var Bi=b(5592),gi=b(4674),_e=b(7715),Be=b(2096),dt=b(5619),xt=b(2572);const oe=(0,b(2306).d)(i=>function(){i(this),this.name="EmptyError",this.message="no elements in sequence"});var et=b(7398),fr=b(4829),un=b(9360),hr=b(7103),Nr=b(8251);function Kt(i,a,o=1/0){return(0,gi.m)(a)?Kt((u,d)=>(0,et.U)((y,C)=>a(u,y,d,C))((0,fr.Xf)(i(u,d))),o):("number"==typeof a&&(o=a),(0,un.e)((u,d)=>function En(i,a,o,u,d,y,C,I){const _=[];let x=0,K=0,Z=!1;const fe=()=>{Z&&!_.length&&!x&&a.complete()},Ue=Ge=>x{y&&a.next(Ge),x++;let be=!1;(0,fr.Xf)(o(Ge,K++)).subscribe((0,Nr.x)(a,nt=>{d?.(nt),y?Ue(nt):a.next(nt)},()=>{be=!0},void 0,()=>{if(be)try{for(x--;_.length&&xKe(nt)):Ke(nt)}fe()}catch(nt){a.error(nt)}}))};return i.subscribe((0,Nr.x)(a,Ue,()=>{Z=!0,fe()})),()=>{I?.()}}(u,d,i,o)))}var Bt=b(2737);function Wo(i=1/0){return Kt(Bt.y,i)}var ml=b(9940);function Eu(...i){return function Xf(){return Wo(1)}()((0,_e.D)(i,(0,ml.yG)(i)))}function wu(i){return new Bi.y(a=>{(0,fr.Xf)(i()).subscribe(a)})}var vl=b(8407);function mi(i,a){const o=(0,gi.m)(i)?i:()=>i,u=d=>d.error(o());return new Bi.y(a?d=>a.schedule(u,0,d):u)}var xn=b(6232),Cu=b(7394);function Hi(){return(0,un.e)((i,a)=>{let o=null;i._refCount++;const u=(0,Nr.x)(a,void 0,void 0,void 0,()=>{if(!i||i._refCount<=0||0<--i._refCount)return void(o=null);const d=i._connection,y=o;o=null,d&&(!y||d===y)&&d.unsubscribe(),a.unsubscribe()});i.subscribe(u),u.closed||(o=i.connect())})}class Ko extends Bi.y{constructor(a,o){super(),this.source=a,this.subjectFactory=o,this._subject=null,this._refCount=0,this._connection=null,(0,un.A)(a)&&(this.lift=a.lift)}_subscribe(a){return this.getSubject().subscribe(a)}getSubject(){const a=this._subject;return(!a||a.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:a}=this;this._subject=this._connection=null,a?.unsubscribe()}connect(){let a=this._connection;if(!a){a=this._connection=new Cu.w0;const o=this.getSubject();a.add(this.source.subscribe((0,Nr.x)(o,void 0,()=>{this._teardown(),o.complete()},u=>{this._teardown(),o.error(u)},()=>this._teardown()))),a.closed&&(this._connection=null,a=Cu.w0.EMPTY)}return a}refCount(){return Hi()(this)}}var pr=b(8645),jn=b(4664),ei=b(8180),xr=b(2181);function Pr(i){return(0,un.e)((a,o)=>{let u=!1;a.subscribe((0,Nr.x)(o,d=>{u=!0,o.next(d)},()=>{u||o.next(i),o.complete()}))})}function Vi(i=eh){return(0,un.e)((a,o)=>{let u=!1;a.subscribe((0,Nr.x)(o,d=>{u=!0,o.next(d)},()=>u?o.complete():o.error(i())))})}function eh(){return new oe}function Lr(i,a){const o=arguments.length>=2;return u=>u.pipe(i?(0,xr.h)((d,y)=>i(d,y,u)):Bt.y,(0,ei.q)(1),o?Pr(a):Vi(()=>new oe))}function zi(i,a){return(0,gi.m)(a)?Kt(i,a,1):Kt(i,1)}var wn=b(9397),Zo=b(6306);function Yo(i){return i<=0?()=>xn.E:(0,un.e)((a,o)=>{let u=[];a.subscribe((0,Nr.x)(o,d=>{u.push(d),i{for(const d of u)o.next(d);o.complete()},void 0,()=>{u=null}))})}function ti(i){return(0,un.e)((a,o)=>{try{a.subscribe(o)}finally{o.add(i)}})}var bu=b(2420);const yt="primary",Gi=Symbol("RouteTitle");class Dl{constructor(a){this.params=a||{}}has(a){return Object.prototype.hasOwnProperty.call(this.params,a)}get(a){if(this.has(a)){const o=this.params[a];return Array.isArray(o)?o[0]:o}return null}getAll(a){if(this.has(a)){const o=this.params[a];return Array.isArray(o)?o:[o]}return[]}get keys(){return Object.keys(this.params)}}function Wi(i){return new Dl(i)}function gr(i,a,o){const u=o.path.split("/");if(u.length>i.length||"full"===o.pathMatch&&(a.hasChildren()||u.lengthu[y]===d)}return i===a}function nr(i){return function tr(i){return!!i&&(i instanceof Bi.y||(0,gi.m)(i.lift)&&(0,gi.m)(i.subscribe))}(i)?i:(0,p.QGY)(i)?(0,_e.D)(Promise.resolve(i)):(0,Be.of)(i)}const Su={exact:function _u(i,a,o){if(!Gn(i.segments,a.segments)||!mr(i.segments,a.segments,o)||i.numberOfChildren!==a.numberOfChildren)return!1;for(const u in a.children)if(!i.children[u]||!_u(i.children[u],a.children[u],o))return!1;return!0},subset:bl},El={exact:function wl(i,a){return Bn(i,a)},subset:function Cl(i,a){return Object.keys(a).length<=Object.keys(i).length&&Object.keys(a).every(o=>Iu(i[o],a[o]))},ignored:()=>!0};function Mu(i,a,o){return Su[o.paths](i.root,a.root,o.matrixParams)&&El[o.queryParams](i.queryParams,a.queryParams)&&!("exact"===o.fragment&&i.fragment!==a.fragment)}function bl(i,a,o){return Qo(i,a,a.segments,o)}function Qo(i,a,o,u){if(i.segments.length>o.length){const d=i.segments.slice(0,o.length);return!(!Gn(d,o)||a.hasChildren()||!mr(d,o,u))}if(i.segments.length===o.length){if(!Gn(i.segments,o)||!mr(i.segments,o,u))return!1;for(const d in a.children)if(!i.children[d]||!bl(i.children[d],a.children[d],u))return!1;return!0}{const d=o.slice(0,i.segments.length),y=o.slice(i.segments.length);return!!(Gn(i.segments,d)&&mr(i.segments,d,u)&&i.children[yt])&&Qo(i.children[yt],a,y,u)}}function mr(i,a,o){return a.every((u,d)=>El[o](i[d].parameters,u.parameters))}class Ki{constructor(a=new Ft([],{}),o={},u=null){this.root=a,this.queryParams=o,this.fragment=u}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Wi(this.queryParams)),this._queryParamMap}toString(){return Tu.serialize(this)}}class Ft{constructor(a,o){this.segments=a,this.children=o,this.parent=null,Object.values(o).forEach(u=>u.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return Qs(this)}}class Zi{constructor(a,o){this.path=a,this.parameters=o}get parameterMap(){return this._parameterMap||(this._parameterMap=Wi(this.parameters)),this._parameterMap}toString(){return vi(this)}}function Gn(i,a){return i.length===a.length&&i.every((o,u)=>o.path===a[u].path)}let qi=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>new Js,providedIn:"root"})}return i})();class Js{parse(a){const o=new oh(a);return new Ki(o.parseRootSegment(),o.parseQueryParams(),o.parseFragment())}serialize(a){const o=`/${Ji(a.root,!0)}`,u=function rh(i){const a=Object.entries(i).map(([o,u])=>Array.isArray(u)?u.map(d=>`${Fr(o)}=${Fr(d)}`).join("&"):`${Fr(o)}=${Fr(u)}`).filter(o=>o);return a.length?`?${a.join("&")}`:""}(a.queryParams);return`${o}${u}${"string"==typeof a.fragment?`#${function Qi(i){return encodeURI(i)}(a.fragment)}`:""}`}}const Tu=new Js;function Qs(i){return i.segments.map(a=>vi(a)).join("/")}function Ji(i,a){if(!i.hasChildren())return Qs(i);if(a){const o=i.children[yt]?Ji(i.children[yt],!1):"",u=[];return Object.entries(i.children).forEach(([d,y])=>{d!==yt&&u.push(`${d}:${Ji(y,!1)}`)}),u.length>0?`${o}(${u.join("//")})`:o}{const o=function tn(i,a){let o=[];return Object.entries(i.children).forEach(([u,d])=>{u===yt&&(o=o.concat(a(d,u)))}),Object.entries(i.children).forEach(([u,d])=>{u!==yt&&(o=o.concat(a(d,u)))}),o}(i,(u,d)=>d===yt?[Ji(i.children[yt],!1)]:[`${d}:${Ji(u,!1)}`]);return 1===Object.keys(i.children).length&&null!=i.children[yt]?`${Qs(i)}/${o[0]}`:`${Qs(i)}/(${o.join("//")})`}}function Xs(i){return encodeURIComponent(i).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Fr(i){return Xs(i).replace(/%3B/gi,";")}function ni(i){return Xs(i).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Xo(i){return decodeURIComponent(i)}function ea(i){return Xo(i.replace(/\+/g,"%20"))}function vi(i){return`${ni(i.path)}${function dg(i){return Object.entries(i).map(([a,o])=>`;${ni(a)}=${ni(o)}`).join("")}(i.parameters)}`}const fg=/^[^\/()?;#]+/;function Il(i){const a=i.match(fg);return a?a[0]:""}const hg=/^[^\/()?;=#]+/,gg=/^[^=?&#]+/,Xi=/^[^&#]+/;class oh{constructor(a){this.url=a,this.remaining=a}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Ft([],{}):new Ft([],this.parseChildren())}parseQueryParams(){const a={};if(this.consumeOptional("?"))do{this.parseQueryParam(a)}while(this.consumeOptional("&"));return a}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const a=[];for(this.peekStartsWith("(")||a.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),a.push(this.parseSegment());let o={};this.peekStartsWith("/(")&&(this.capture("/"),o=this.parseParens(!0));let u={};return this.peekStartsWith("(")&&(u=this.parseParens(!1)),(a.length>0||Object.keys(o).length>0)&&(u[yt]=new Ft(a,o)),u}parseSegment(){const a=Il(this.remaining);if(""===a&&this.peekStartsWith(";"))throw new p.vHH(4009,!1);return this.capture(a),new Zi(Xo(a),this.parseMatrixParams())}parseMatrixParams(){const a={};for(;this.consumeOptional(";");)this.parseParam(a);return a}parseParam(a){const o=function pg(i){const a=i.match(hg);return a?a[0]:""}(this.remaining);if(!o)return;this.capture(o);let u="";if(this.consumeOptional("=")){const d=Il(this.remaining);d&&(u=d,this.capture(u))}a[Xo(o)]=Xo(u)}parseQueryParam(a){const o=function mg(i){const a=i.match(gg);return a?a[0]:""}(this.remaining);if(!o)return;this.capture(o);let u="";if(this.consumeOptional("=")){const C=function ih(i){const a=i.match(Xi);return a?a[0]:""}(this.remaining);C&&(u=C,this.capture(u))}const d=ea(o),y=ea(u);if(a.hasOwnProperty(d)){let C=a[d];Array.isArray(C)||(C=[C],a[d]=C),C.push(y)}else a[d]=y}parseParens(a){const o={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const u=Il(this.remaining),d=this.remaining[u.length];if("/"!==d&&")"!==d&&";"!==d)throw new p.vHH(4010,!1);let y;u.indexOf(":")>-1?(y=u.slice(0,u.indexOf(":")),this.capture(y),this.capture(":")):a&&(y=yt);const C=this.parseChildren();o[y]=1===Object.keys(C).length?C[yt]:new Ft([],C),this.consumeOptional("//")}return o}peekStartsWith(a){return this.remaining.startsWith(a)}consumeOptional(a){return!!this.peekStartsWith(a)&&(this.remaining=this.remaining.substring(a.length),!0)}capture(a){if(!this.consumeOptional(a))throw new p.vHH(4011,!1)}}function Xt(i){return i.segments.length>0?new Ft([],{[yt]:i}):i}function Sl(i){const a={};for(const[u,d]of Object.entries(i.children)){const y=Sl(d);if(u===yt&&0===y.segments.length&&y.hasChildren())for(const[C,I]of Object.entries(y.children))a[C]=I;else(y.segments.length>0||y.hasChildren())&&(a[u]=y)}return function es(i){if(1===i.numberOfChildren&&i.children[yt]){const a=i.children[yt];return new Ft(i.segments.concat(a.segments),a.children)}return i}(new Ft(i.segments,a))}function yi(i){return i instanceof Ki}function Di(i){let a;const d=Xt(function o(y){const C={};for(const _ of y.children){const x=o(_);C[_.outlet]=x}const I=new Ft(y.url,C);return y===i&&(a=I),I}(i.root));return a??d}function Au(i,a,o,u){let d=i;for(;d.parent;)d=d.parent;if(0===a.length)return ts(d,d,d,o,u);const y=function vg(i){if("string"==typeof i[0]&&1===i.length&&"/"===i[0])return new Ru(!0,0,i);let a=0,o=!1;const u=i.reduce((d,y,C)=>{if("object"==typeof y&&null!=y){if(y.outlets){const I={};return Object.entries(y.outlets).forEach(([_,x])=>{I[_]="string"==typeof x?x.split("/"):x}),[...d,{outlets:I}]}if(y.segmentPath)return[...d,y.segmentPath]}return"string"!=typeof y?[...d,y]:0===C?(y.split("/").forEach((I,_)=>{0==_&&"."===I||(0==_&&""===I?o=!0:".."===I?a++:""!=I&&d.push(I))}),d):[...d,y]},[]);return new Ru(o,a,u)}(a);if(y.toRoot())return ts(d,d,new Ft([],{}),o,u);const C=function Ou(i,a,o){if(i.isAbsolute)return new Cn(a,!0,0);if(!o)return new Cn(a,!1,NaN);if(null===o.parent)return new Cn(o,!0,0);const u=Ei(i.commands[0])?0:1;return function eo(i,a,o){let u=i,d=a,y=o;for(;y>d;){if(y-=d,u=u.parent,!u)throw new p.vHH(4005,!1);d=u.segments.length}return new Cn(u,!1,d-y)}(o,o.segments.length-1+u,i.numberOfDoubleDots)}(y,d,i),I=C.processChildren?ns(C.segmentGroup,C.index,y.commands):Nu(C.segmentGroup,C.index,y.commands);return ts(d,C.segmentGroup,I,o,u)}function Ei(i){return"object"==typeof i&&null!=i&&!i.outlets&&!i.segmentPath}function ri(i){return"object"==typeof i&&null!=i&&i.outlets}function ts(i,a,o,u,d){let C,y={};u&&Object.entries(u).forEach(([_,x])=>{y[_]=Array.isArray(x)?x.map(K=>`${K}`):`${x}`}),C=i===a?o:sh(i,a,o);const I=Xt(Sl(C));return new Ki(I,y,d)}function sh(i,a,o){const u={};return Object.entries(i.children).forEach(([d,y])=>{u[d]=y===a?o:sh(y,a,o)}),new Ft(i.segments,u)}class Ru{constructor(a,o,u){if(this.isAbsolute=a,this.numberOfDoubleDots=o,this.commands=u,a&&u.length>0&&Ei(u[0]))throw new p.vHH(4003,!1);const d=u.find(ri);if(d&&d!==u.at(-1))throw new p.vHH(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class Cn{constructor(a,o,u){this.segmentGroup=a,this.processChildren=o,this.index=u}}function Nu(i,a,o){if(i||(i=new Ft([],{})),0===i.segments.length&&i.hasChildren())return ns(i,a,o);const u=function ah(i,a,o){let u=0,d=a;const y={match:!1,pathIndex:0,commandIndex:0};for(;d=o.length)return y;const C=i.segments[d],I=o[u];if(ri(I))break;const _=`${I}`,x=u0&&void 0===_)break;if(_&&x&&"object"==typeof x&&void 0===x.outlets){if(!_l(_,x,C))return y;u+=2}else{if(!_l(_,{},C))return y;u++}d++}return{match:!0,pathIndex:d,commandIndex:u}}(i,a,o),d=o.slice(u.commandIndex);if(u.match&&u.pathIndexy!==yt)&&i.children[yt]&&1===i.numberOfChildren&&0===i.children[yt].segments.length){const y=ns(i.children[yt],a,o);return new Ft(i.segments,y.children)}return Object.entries(u).forEach(([y,C])=>{"string"==typeof C&&(C=[C]),null!==C&&(d[y]=Nu(i.children[y],a,C))}),Object.entries(i.children).forEach(([y,C])=>{void 0===u[y]&&(d[y]=C)}),new Ft(i.segments,d)}}function xu(i,a,o){const u=i.segments.slice(0,a);let d=0;for(;d{"string"==typeof u&&(u=[u]),null!==u&&(a[o]=xu(new Ft([],{}),0,u))}),a}function Ml(i){const a={};return Object.entries(i).forEach(([o,u])=>a[o]=`${u}`),a}function _l(i,a,o){return i==o.path&&Bn(a,o.parameters)}const wi="imperative";class Hn{constructor(a,o){this.id=a,this.url=o}}class ta extends Hn{constructor(a,o,u="imperative",d=null){super(a,o),this.type=0,this.navigationTrigger=u,this.restoredState=d}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Wn extends Hn{constructor(a,o,u){super(a,o),this.urlAfterRedirects=u,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class to extends Hn{constructor(a,o,u,d){super(a,o),this.reason=u,this.code=d,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class kr extends Hn{constructor(a,o,u,d){super(a,o),this.reason=u,this.code=d,this.type=16}}class na extends Hn{constructor(a,o,u,d){super(a,o),this.error=u,this.target=d,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Pu extends Hn{constructor(a,o,u,d){super(a,o),this.urlAfterRedirects=u,this.state=d,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Lu extends Hn{constructor(a,o,u,d){super(a,o),this.urlAfterRedirects=u,this.state=d,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ra extends Hn{constructor(a,o,u,d,y){super(a,o),this.urlAfterRedirects=u,this.state=d,this.shouldActivate=y,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class Tl extends Hn{constructor(a,o,u,d){super(a,o),this.urlAfterRedirects=u,this.state=d,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ch extends Hn{constructor(a,o,u,d){super(a,o),this.urlAfterRedirects=u,this.state=d,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class lh{constructor(a){this.route=a,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class no{constructor(a){this.route=a,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class rs{constructor(a){this.snapshot=a,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class dh{constructor(a){this.snapshot=a,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Dg{constructor(a){this.snapshot=a,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Al{constructor(a){this.snapshot=a,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Rl{constructor(a,o,u){this.routerEvent=a,this.position=o,this.anchor=u,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class Ol{}class Fu{constructor(a){this.url=a}}class fh{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new rr,this.attachRef=null}}let rr=(()=>{class i{constructor(){this.contexts=new Map}onChildOutletCreated(o,u){const d=this.getOrCreateContext(o);d.outlet=u,this.contexts.set(o,d)}onChildOutletDestroyed(o){const u=this.getContext(o);u&&(u.outlet=null,u.attachRef=null)}onOutletDeactivated(){const o=this.contexts;return this.contexts=new Map,o}onOutletReAttached(o){this.contexts=o}getOrCreateContext(o){let u=this.getContext(o);return u||(u=new fh,this.contexts.set(o,u)),u}getContext(o){return this.contexts.get(o)||null}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();class ku{constructor(a){this._root=a}get root(){return this._root.value}parent(a){const o=this.pathFromRoot(a);return o.length>1?o[o.length-2]:null}children(a){const o=is(a,this._root);return o?o.children.map(u=>u.value):[]}firstChild(a){const o=is(a,this._root);return o&&o.children.length>0?o.children[0].value:null}siblings(a){const o=ro(a,this._root);return o.length<2?[]:o[o.length-2].children.map(d=>d.value).filter(d=>d!==a)}pathFromRoot(a){return ro(a,this._root).map(o=>o.value)}}function is(i,a){if(i===a.value)return a;for(const o of a.children){const u=is(i,o);if(u)return u}return null}function ro(i,a){if(i===a.value)return[a];for(const o of a.children){const u=ro(i,o);if(u.length)return u.unshift(a),u}return[]}class Ln{constructor(a,o){this.value=a,this.children=o}toString(){return`TreeNode(${this.value})`}}function Ci(i){const a={};return i&&i.children.forEach(o=>a[o.value.outlet]=o),a}class $u extends ku{constructor(a,o){super(a),this.snapshot=o,sa(this,a)}toString(){return this.snapshot.toString()}}function Uu(i){const a=function ia(i){const y=new ju([],{},{},"",{},yt,i,null,{});return new oa("",new Ln(y,[]))}(i),o=new dt.X([new Zi("",{})]),u=new dt.X({}),d=new dt.X({}),y=new dt.X({}),C=new dt.X(""),I=new os(o,u,y,C,d,yt,i,a.root);return I.snapshot=a.root,new $u(new Ln(I,[]),a)}class os{constructor(a,o,u,d,y,C,I,_){this.urlSubject=a,this.paramsSubject=o,this.queryParamsSubject=u,this.fragmentSubject=d,this.dataSubject=y,this.outlet=C,this.component=I,this._futureSnapshot=_,this.title=this.dataSubject?.pipe((0,et.U)(x=>x[Gi]))??(0,Be.of)(void 0),this.url=a,this.params=o,this.queryParams=u,this.fragment=d,this.data=y}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((0,et.U)(a=>Wi(a)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,et.U)(a=>Wi(a)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function ss(i,a,o="emptyOnly"){let u;const{routeConfig:d}=i;return u=null===a||"always"!==o&&""!==d?.path&&(a.component||a.routeConfig?.loadComponent)?{params:{...i.params},data:{...i.data},resolve:{...i.data,...i._resolvedData??{}}}:{params:{...a.params,...i.params},data:{...a.data,...i.data},resolve:{...i.data,...a.data,...d?.data,...i._resolvedData}},d&&aa(d)&&(u.resolve[Gi]=d.title),u}class ju{get title(){return this.data?.[Gi]}constructor(a,o,u,d,y,C,I,_,x){this.url=a,this.params=o,this.queryParams=u,this.fragment=d,this.data=y,this.outlet=C,this.component=I,this.routeConfig=_,this._resolve=x}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=Wi(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Wi(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(u=>u.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class oa extends ku{constructor(a,o){super(o),this.url=a,sa(this,o)}toString(){return Bu(this._root)}}function sa(i,a){a.value._routerState=i,a.children.forEach(o=>sa(i,o))}function Bu(i){const a=i.children.length>0?` { ${i.children.map(Bu).join(", ")} } `:"";return`${i.value}${a}`}function $r(i){if(i.snapshot){const a=i.snapshot,o=i._futureSnapshot;i.snapshot=o,Bn(a.queryParams,o.queryParams)||i.queryParamsSubject.next(o.queryParams),a.fragment!==o.fragment&&i.fragmentSubject.next(o.fragment),Bn(a.params,o.params)||i.paramsSubject.next(o.params),function nh(i,a){if(i.length!==a.length)return!1;for(let o=0;oBn(o.parameters,a[u].parameters))}(i.url,a.url);return o&&!(!i.parent!=!a.parent)&&(!i.parent||Hu(i.parent,a.parent))}function aa(i){return"string"==typeof i.title||null===i.title}let io=(()=>{class i{constructor(){this.activated=null,this._activatedRoute=null,this.name=yt,this.activateEvents=new p.vpe,this.deactivateEvents=new p.vpe,this.attachEvents=new p.vpe,this.detachEvents=new p.vpe,this.parentContexts=(0,p.f3M)(rr),this.location=(0,p.f3M)(p.s_b),this.changeDetector=(0,p.f3M)(p.sBO),this.environmentInjector=(0,p.f3M)(p.lqb),this.inputBinder=(0,p.f3M)(oo,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(o){if(o.name){const{firstChange:u,previousValue:d}=o.name;if(u)return;this.isTrackedInParentContexts(d)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(d)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(o){return this.parentContexts.getContext(o)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const o=this.parentContexts.getContext(this.name);o?.route&&(o.attachRef?this.attach(o.attachRef,o.route):this.activateWith(o.route,o.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new p.vHH(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new p.vHH(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new p.vHH(4012,!1);this.location.detach();const o=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(o.instance),o}attach(o,u){this.activated=o,this._activatedRoute=u,this.location.insert(o.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(o.instance)}deactivate(){if(this.activated){const o=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(o)}}activateWith(o,u){if(this.isActivated)throw new p.vHH(4013,!1);this._activatedRoute=o;const d=this.location,C=o.snapshot.component,I=this.parentContexts.getOrCreateContext(this.name).children,_=new hh(o,I,d.injector);this.activated=d.createComponent(C,{index:d.length,injector:_,environmentInjector:u??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275dir=p.lG2({type:i,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[p.TTD]})}return i})();class hh{constructor(a,o,u){this.route=a,this.childContexts=o,this.parent=u}get(a,o){return a===os?this.route:a===rr?this.childContexts:this.parent.get(a,o)}}const oo=new p.OlP("");let as=(()=>{class i{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(o){this.unsubscribeFromRouteData(o),this.subscribeToRouteData(o)}unsubscribeFromRouteData(o){this.outletDataSubscriptions.get(o)?.unsubscribe(),this.outletDataSubscriptions.delete(o)}subscribeToRouteData(o){const{activatedRoute:u}=o,d=(0,xt.a)([u.queryParams,u.params,u.data]).pipe((0,jn.w)(([y,C,I],_)=>(I={...y,...C,...I},0===_?(0,Be.of)(I):Promise.resolve(I)))).subscribe(y=>{if(!o.isActivated||!o.activatedComponentRef||o.activatedRoute!==u||null===u.component)return void this.unsubscribeFromRouteData(o);const C=(0,p.qFp)(u.component);if(C)for(const{templateName:I}of C.inputs)o.activatedComponentRef.setInput(I,y[I]);else this.unsubscribeFromRouteData(o)});this.outletDataSubscriptions.set(o,d)}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();function yr(i,a,o){if(o&&i.shouldReuseRoute(a.value,o.value.snapshot)){const u=o.value;u._futureSnapshot=a.value;const d=function Vu(i,a,o){return a.children.map(u=>{for(const d of o.children)if(i.shouldReuseRoute(u.value,d.value.snapshot))return yr(i,u,d);return yr(i,u)})}(i,a,o);return new Ln(u,d)}{if(i.shouldAttach(a.value)){const y=i.retrieve(a.value);if(null!==y){const C=y.route;return C.value._futureSnapshot=a.value,C.children=a.children.map(I=>yr(i,I)),C}}const u=function ph(i){return new os(new dt.X(i.url),new dt.X(i.params),new dt.X(i.queryParams),new dt.X(i.fragment),new dt.X(i.data),i.outlet,i.component,i)}(a.value),d=a.children.map(y=>yr(i,y));return new Ln(u,d)}}const zu="ngNavigationCancelingError";function Gu(i,a){const{redirectTo:o,navigationBehaviorOptions:u}=yi(a)?{redirectTo:a,navigationBehaviorOptions:void 0}:a,d=bi(!1,0,a);return d.url=o,d.navigationBehaviorOptions=u,d}function bi(i,a,o){const u=new Error("NavigationCancelingError: "+(i||""));return u[zu]=!0,u.cancellationCode=a,o&&(u.url=o),u}function Nl(i){return i&&i[zu]}let xl=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275cmp=p.Xpm({type:i,selectors:[["ng-component"]],standalone:!0,features:[p.jDz],decls:1,vars:0,template:function(u,d){1&u&&p._UZ(0,"router-outlet")},dependencies:[io],encapsulation:2})}return i})();function Ku(i){const a=i.children&&i.children.map(Ku),o=a?{...i,children:a}:{...i};return!o.component&&!o.loadComponent&&(a||o.loadChildren)&&o.outlet&&o.outlet!==yt&&(o.component=xl),o}function Dr(i){return i.outlet||yt}function so(i){if(!i)return null;if(i.routeConfig?._injector)return i.routeConfig._injector;for(let a=i.parent;a;a=a.parent){const o=a.routeConfig;if(o?._loadedInjector)return o._loadedInjector;if(o?._injector)return o._injector}return null}class Zu{constructor(a,o,u,d,y){this.routeReuseStrategy=a,this.futureState=o,this.currState=u,this.forwardEvent=d,this.inputBindingEnabled=y}activate(a){const o=this.futureState._root,u=this.currState?this.currState._root:null;this.deactivateChildRoutes(o,u,a),$r(this.futureState.root),this.activateChildRoutes(o,u,a)}deactivateChildRoutes(a,o,u){const d=Ci(o);a.children.forEach(y=>{const C=y.value.outlet;this.deactivateRoutes(y,d[C],u),delete d[C]}),Object.values(d).forEach(y=>{this.deactivateRouteAndItsChildren(y,u)})}deactivateRoutes(a,o,u){const d=a.value,y=o?o.value:null;if(d===y)if(d.component){const C=u.getContext(d.outlet);C&&this.deactivateChildRoutes(a,o,C.children)}else this.deactivateChildRoutes(a,o,u);else y&&this.deactivateRouteAndItsChildren(o,u)}deactivateRouteAndItsChildren(a,o){a.value.component&&this.routeReuseStrategy.shouldDetach(a.value.snapshot)?this.detachAndStoreRouteSubtree(a,o):this.deactivateRouteAndOutlet(a,o)}detachAndStoreRouteSubtree(a,o){const u=o.getContext(a.value.outlet),d=u&&a.value.component?u.children:o,y=Ci(a);for(const C of Object.values(y))this.deactivateRouteAndItsChildren(C,d);if(u&&u.outlet){const C=u.outlet.detach(),I=u.children.onOutletDeactivated();this.routeReuseStrategy.store(a.value.snapshot,{componentRef:C,route:a,contexts:I})}}deactivateRouteAndOutlet(a,o){const u=o.getContext(a.value.outlet),d=u&&a.value.component?u.children:o,y=Ci(a);for(const C of Object.values(y))this.deactivateRouteAndItsChildren(C,d);u&&(u.outlet&&(u.outlet.deactivate(),u.children.onOutletDeactivated()),u.attachRef=null,u.route=null)}activateChildRoutes(a,o,u){const d=Ci(o);a.children.forEach(y=>{this.activateRoutes(y,d[y.value.outlet],u),this.forwardEvent(new Al(y.value.snapshot))}),a.children.length&&this.forwardEvent(new dh(a.value.snapshot))}activateRoutes(a,o,u){const d=a.value,y=o?o.value:null;if($r(d),d===y)if(d.component){const C=u.getOrCreateContext(d.outlet);this.activateChildRoutes(a,o,C.children)}else this.activateChildRoutes(a,o,u);else if(d.component){const C=u.getOrCreateContext(d.outlet);if(this.routeReuseStrategy.shouldAttach(d.snapshot)){const I=this.routeReuseStrategy.retrieve(d.snapshot);this.routeReuseStrategy.store(d.snapshot,null),C.children.onOutletReAttached(I.contexts),C.attachRef=I.componentRef,C.route=I.route.value,C.outlet&&C.outlet.attach(I.componentRef,I.route.value),$r(I.route.value),this.activateChildRoutes(a,null,C.children)}else{const I=so(d.snapshot);C.attachRef=null,C.route=d,C.injector=I,C.outlet&&C.outlet.activateWith(d,C.injector),this.activateChildRoutes(a,null,C.children)}}else this.activateChildRoutes(a,null,u)}}class Ur{constructor(a){this.path=a,this.route=this.path[this.path.length-1]}}class Ii{constructor(a,o){this.component=a,this.route=o}}function Fl(i,a,o){const u=i._root;return cs(u,a?a._root:null,o,[u.value])}function ao(i,a){const o=Symbol(),u=a.get(i,o);return u===o?"function"!=typeof i||(0,p.Z0I)(i)?a.get(i):i:u}function cs(i,a,o,u,d={canDeactivateChecks:[],canActivateChecks:[]}){const y=Ci(a);return i.children.forEach(C=>{(function Yu(i,a,o,u,d={canDeactivateChecks:[],canActivateChecks:[]}){const y=i.value,C=a?a.value:null,I=o?o.getContext(i.value.outlet):null;if(C&&y.routeConfig===C.routeConfig){const _=function wh(i,a,o){if("function"==typeof o)return o(i,a);switch(o){case"pathParamsChange":return!Gn(i.url,a.url);case"pathParamsOrQueryParamsChange":return!Gn(i.url,a.url)||!Bn(i.queryParams,a.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Hu(i,a)||!Bn(i.queryParams,a.queryParams);default:return!Hu(i,a)}}(C,y,y.routeConfig.runGuardsAndResolvers);_?d.canActivateChecks.push(new Ur(u)):(y.data=C.data,y._resolvedData=C._resolvedData),cs(i,a,y.component?I?I.children:null:o,u,d),_&&I&&I.outlet&&I.outlet.isActivated&&d.canDeactivateChecks.push(new Ii(I.outlet.component,C))}else C&&Zn(a,I,d),d.canActivateChecks.push(new Ur(u)),cs(i,null,y.component?I?I.children:null:o,u,d)})(C,y[C.value.outlet],o,u.concat([C.value]),d),delete y[C.value.outlet]}),Object.entries(y).forEach(([C,I])=>Zn(I,o.getContext(C),d)),d}function Zn(i,a,o){const u=Ci(i),d=i.value;Object.entries(u).forEach(([y,C])=>{Zn(C,d.component?a?a.children.getContext(y):null:a,o)}),o.canDeactivateChecks.push(new Ii(d.component&&a&&a.outlet&&a.outlet.isActivated?a.outlet.component:null,d))}function uo(i){return"function"==typeof i}function $l(i){return i instanceof oe||"EmptyError"===i?.name}const ua=Symbol("INITIAL_VALUE");function Si(){return(0,jn.w)(i=>(0,xt.a)(i.map(a=>a.pipe((0,ei.q)(1),function yl(...i){const a=(0,ml.yG)(i);return(0,un.e)((o,u)=>{(a?Eu(i,o,a):Eu(i,o)).subscribe(u)})}(ua)))).pipe((0,et.U)(a=>{for(const o of a)if(!0!==o){if(o===ua)return ua;if(!1===o||o instanceof Ki)return o}return!0}),(0,xr.h)(a=>a!==ua),(0,ei.q)(1)))}function Qu(i){return(0,vl.z)((0,wn.b)(a=>{if(yi(a))throw Gu(0,a)}),(0,et.U)(a=>!0===a))}class la{constructor(a){this.segmentGroup=a||null}}class Xu extends Error{constructor(a){super(),this.urlTree=a}}function Me(i){return mi(new la(i))}class Er{constructor(a,o){this.urlSerializer=a,this.urlTree=o}lineralizeSegments(a,o){let u=[],d=o.root;for(;;){if(u=u.concat(d.segments),0===d.numberOfChildren)return(0,Be.of)(u);if(d.numberOfChildren>1||!d.children[yt])return mi(new p.vHH(4e3,!1));d=d.children[yt]}}applyRedirectCommands(a,o,u){const d=this.applyRedirectCreateUrlTree(o,this.urlSerializer.parse(o),a,u);if(o.startsWith("/"))throw new Xu(d);return d}applyRedirectCreateUrlTree(a,o,u,d){const y=this.createSegmentGroup(a,o.root,u,d);return new Ki(y,this.createQueryParams(o.queryParams,this.urlTree.queryParams),o.fragment)}createQueryParams(a,o){const u={};return Object.entries(a).forEach(([d,y])=>{if("string"==typeof y&&y.startsWith(":")){const I=y.substring(1);u[d]=o[I]}else u[d]=y}),u}createSegmentGroup(a,o,u,d){const y=this.createSegments(a,o.segments,u,d);let C={};return Object.entries(o.children).forEach(([I,_])=>{C[I]=this.createSegmentGroup(a,_,u,d)}),new Ft(y,C)}createSegments(a,o,u,d){return o.map(y=>y.path.startsWith(":")?this.findPosParam(a,y,d):this.findOrReturn(y,u))}findPosParam(a,o,u){const d=u[o.path.substring(1)];if(!d)throw new p.vHH(4001,!1);return d}findOrReturn(a,o){let u=0;for(const d of o){if(d.path===a.path)return o.splice(u),d;u++}return a}}const jl={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function Tg(i,a,o,u,d){const y=ds(i,a,o);return y.matched?(u=function Wu(i,a){return i.providers&&!i._injector&&(i._injector=(0,p.MMx)(i.providers,a,`Route: ${i.path}`)),i._injector??a}(a,u),function Sh(i,a,o,u){const d=a.canMatch;if(!d||0===d.length)return(0,Be.of)(!0);const y=d.map(C=>{const I=ao(C,i);return nr(function bh(i){return i&&uo(i.canMatch)}(I)?I.canMatch(a,o):(0,p.r_H)(i,()=>I(a,o)))});return(0,Be.of)(y).pipe(Si(),Qu())}(u,a,o).pipe((0,et.U)(C=>!0===C?y:{...jl}))):(0,Be.of)(y)}function ds(i,a,o){if("**"===a.path)return function Ag(i){return{matched:!0,parameters:i.at(-1)?.parameters??{},consumedSegments:i,remainingSegments:[],positionalParamSegments:{}}}(o);if(""===a.path)return"full"===a.pathMatch&&(i.hasChildren()||o.length>0)?{...jl}:{matched:!0,consumedSegments:[],remainingSegments:o,parameters:{},positionalParamSegments:{}};const d=(a.matcher||gr)(o,i,a);if(!d)return{...jl};const y={};Object.entries(d.posParams??{}).forEach(([I,_])=>{y[I]=_.path});const C=d.consumed.length>0?{...y,...d.consumed[d.consumed.length-1].parameters}:y;return{matched:!0,consumedSegments:d.consumed,remainingSegments:o.slice(d.consumed.length),parameters:C,positionalParamSegments:d.posParams??{}}}function Mh(i,a,o,u){return o.length>0&&function Ng(i,a,o){return o.some(u=>_i(i,a,u)&&Dr(u)!==yt)}(i,o,u)?{segmentGroup:new Ft(a,Og(u,new Ft(o,i.children))),slicedSegments:[]}:0===o.length&&function _h(i,a,o){return o.some(u=>_i(i,a,u))}(i,o,u)?{segmentGroup:new Ft(i.segments,Rg(i,o,u,i.children)),slicedSegments:o}:{segmentGroup:new Ft(i.segments,i.children),slicedSegments:o}}function Rg(i,a,o,u){const d={};for(const y of o)if(_i(i,a,y)&&!u[Dr(y)]){const C=new Ft([],{});d[Dr(y)]=C}return{...u,...d}}function Og(i,a){const o={};o[yt]=a;for(const u of i)if(""===u.path&&Dr(u)!==yt){const d=new Ft([],{});o[Dr(u)]=d}return o}function _i(i,a,o){return(!(i.hasChildren()||a.length>0)||"full"!==o.pathMatch)&&""===o.path}class Bl{}class Th{constructor(a,o,u,d,y,C,I){this.injector=a,this.configLoader=o,this.rootComponentType=u,this.config=d,this.urlTree=y,this.paramsInheritanceStrategy=C,this.urlSerializer=I,this.applyRedirects=new Er(this.urlSerializer,this.urlTree),this.absoluteRedirectCount=0,this.allowRedirects=!0}noMatchError(a){return new p.vHH(4002,`'${a.segmentGroup}'`)}recognize(){const a=Mh(this.urlTree.root,[],[],this.config).segmentGroup;return this.match(a).pipe((0,et.U)(o=>{const u=new ju([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},yt,this.rootComponentType,null,{}),d=new Ln(u,o),y=new oa("",d),C=function Pn(i,a,o=null,u=null){return Au(Di(i),a,o,u)}(u,[],this.urlTree.queryParams,this.urlTree.fragment);return C.queryParams=this.urlTree.queryParams,y.url=this.urlSerializer.serialize(C),this.inheritParamsAndData(y._root,null),{state:y,tree:C}}))}match(a){return this.processSegmentGroup(this.injector,this.config,a,yt).pipe((0,Zo.K)(u=>{if(u instanceof Xu)return this.urlTree=u.urlTree,this.match(u.urlTree.root);throw u instanceof la?this.noMatchError(u):u}))}inheritParamsAndData(a,o){const u=a.value,d=ss(u,o,this.paramsInheritanceStrategy);u.params=Object.freeze(d.params),u.data=Object.freeze(d.data),a.children.forEach(y=>this.inheritParamsAndData(y,u))}processSegmentGroup(a,o,u,d){return 0===u.segments.length&&u.hasChildren()?this.processChildren(a,o,u):this.processSegment(a,o,u,u.segments,d,!0).pipe((0,et.U)(y=>y instanceof Ln?[y]:[]))}processChildren(a,o,u){const d=[];for(const y of Object.keys(u.children))"primary"===y?d.unshift(y):d.push(y);return(0,_e.D)(d).pipe(zi(y=>{const C=u.children[y],I=function bg(i,a){const o=i.filter(u=>Dr(u)===a);return o.push(...i.filter(u=>Dr(u)!==a)),o}(o,y);return this.processSegmentGroup(a,I,C,y)}),function lg(i,a){return(0,un.e)(function cg(i,a,o,u,d){return(y,C)=>{let I=o,_=a,x=0;y.subscribe((0,Nr.x)(C,K=>{const Z=x++;_=I?i(_,K,Z):(I=!0,K),u&&C.next(_)},d&&(()=>{I&&C.next(_),C.complete()})))}}(i,a,arguments.length>=2,!0))}((y,C)=>(y.push(...C),y)),Pr(null),function qo(i,a){const o=arguments.length>=2;return u=>u.pipe(i?(0,xr.h)((d,y)=>i(d,y,u)):Bt.y,Yo(1),o?Pr(a):Vi(()=>new oe))}(),Kt(y=>{if(null===y)return Me(u);const C=hs(y);return function Vl(i){i.sort((a,o)=>a.value.outlet===yt?-1:o.value.outlet===yt?1:a.value.outlet.localeCompare(o.value.outlet))}(C),(0,Be.of)(C)}))}processSegment(a,o,u,d,y,C){return(0,_e.D)(o).pipe(zi(I=>this.processSegmentAgainstRoute(I._injector??a,o,I,u,d,y,C).pipe((0,Zo.K)(_=>{if(_ instanceof la)return(0,Be.of)(null);throw _}))),Lr(I=>!!I),(0,Zo.K)(I=>{if($l(I))return function ec(i,a,o){return 0===a.length&&!i.children[o]}(u,d,y)?(0,Be.of)(new Bl):Me(u);throw I}))}processSegmentAgainstRoute(a,o,u,d,y,C,I){return function da(i,a,o,u){return!!(Dr(i)===u||u!==yt&&_i(a,o,i))&&ds(a,i,o).matched}(u,d,y,C)?void 0===u.redirectTo?this.matchSegmentAgainstRoute(a,d,u,y,C):this.allowRedirects&&I?this.expandSegmentAgainstRouteUsingRedirect(a,d,o,u,y,C):Me(d):Me(d)}expandSegmentAgainstRouteUsingRedirect(a,o,u,d,y,C){const{matched:I,consumedSegments:_,positionalParamSegments:x,remainingSegments:K}=ds(o,d,y);if(!I)return Me(o);d.redirectTo.startsWith("/")&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>31&&(this.allowRedirects=!1));const Z=this.applyRedirects.applyRedirectCommands(_,d.redirectTo,x);return this.applyRedirects.lineralizeSegments(d,Z).pipe(Kt(fe=>this.processSegment(a,u,o,fe.concat(K),C,!1)))}matchSegmentAgainstRoute(a,o,u,d,y){const C=Tg(o,u,d,a);return"**"===u.path&&(o.children={}),C.pipe((0,jn.w)(I=>I.matched?this.getChildConfig(a=u._injector??a,u,d).pipe((0,jn.w)(({routes:_})=>{const x=u._loadedInjector??a,{consumedSegments:K,remainingSegments:Z,parameters:fe}=I,Ue=new ju(K,fe,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,function fa(i){return i.data||{}}(u),Dr(u),u.component??u._loadedComponent??null,u,function Ah(i){return i.resolve||{}}(u)),{segmentGroup:Ke,slicedSegments:Ge}=Mh(o,K,Z,_);if(0===Ge.length&&Ke.hasChildren())return this.processChildren(x,_,Ke).pipe((0,et.U)(nt=>null===nt?null:new Ln(Ue,nt)));if(0===_.length&&0===Ge.length)return(0,Be.of)(new Ln(Ue,[]));const be=Dr(u)===y;return this.processSegment(x,_,Ke,Ge,be?yt:y,!0).pipe((0,et.U)(nt=>new Ln(Ue,nt instanceof Ln?[nt]:[])))})):Me(o)))}getChildConfig(a,o,u){return o.children?(0,Be.of)({routes:o.children,injector:a}):o.loadChildren?void 0!==o._loadedRoutes?(0,Be.of)({routes:o._loadedRoutes,injector:o._loadedInjector}):function ca(i,a,o,u){const d=a.canLoad;if(void 0===d||0===d.length)return(0,Be.of)(!0);const y=d.map(C=>{const I=ao(C,i);return nr(function kl(i){return i&&uo(i.canLoad)}(I)?I.canLoad(a,o):(0,p.r_H)(i,()=>I(a,o)))});return(0,Be.of)(y).pipe(Si(),Qu())}(a,o,u).pipe(Kt(d=>d?this.configLoader.loadChildren(a,o).pipe((0,wn.b)(y=>{o._loadedRoutes=y.routes,o._loadedInjector=y.injector})):function Pt(i){return mi(bi(!1,3))}())):(0,Be.of)({routes:[],injector:a})}}function zl(i){const a=i.value.routeConfig;return a&&""===a.path}function hs(i){const a=[],o=new Set;for(const u of i){if(!zl(u)){a.push(u);continue}const d=a.find(y=>u.value.routeConfig===y.value.routeConfig);void 0!==d?(d.children.push(...u.children),o.add(d)):a.push(u)}for(const u of o){const d=hs(u.children);a.push(new Ln(u.value,d))}return a.filter(u=>!o.has(u))}function nc(i){const a=i.children.map(o=>nc(o)).flat();return[i,...a]}function ic(i){return(0,jn.w)(a=>{const o=i(a);return o?(0,_e.D)(o).pipe((0,et.U)(()=>a)):(0,Be.of)(a)})}let oc=(()=>{class i{buildTitle(o){let u,d=o.root;for(;void 0!==d;)u=this.getResolvedTitleForRoute(d)??u,d=d.children.find(y=>y.outlet===yt);return u}getResolvedTitleForRoute(o){return o.data[Gi]}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)(Ph),providedIn:"root"})}return i})(),Ph=(()=>{class i extends oc{constructor(o){super(),this.title=o}updateTitle(o){const u=this.buildTitle(o);void 0!==u&&this.title.setTitle(u)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(yu))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();const lo=new p.OlP("",{providedIn:"root",factory:()=>({})}),nn=new p.OlP("ROUTES");let ps=(()=>{class i{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=(0,p.f3M)(p.Sil)}loadComponent(o){if(this.componentLoaders.get(o))return this.componentLoaders.get(o);if(o._loadedComponent)return(0,Be.of)(o._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(o);const u=nr(o.loadComponent()).pipe((0,et.U)(cn),(0,wn.b)(y=>{this.onLoadEndListener&&this.onLoadEndListener(o),o._loadedComponent=y}),ti(()=>{this.componentLoaders.delete(o)})),d=new Ko(u,()=>new pr.x).pipe(Hi());return this.componentLoaders.set(o,d),d}loadChildren(o,u){if(this.childrenLoaders.get(u))return this.childrenLoaders.get(u);if(u._loadedRoutes)return(0,Be.of)({routes:u._loadedRoutes,injector:u._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(u);const y=function Gl(i,a,o,u){return nr(i.loadChildren()).pipe((0,et.U)(cn),Kt(d=>d instanceof p.YKP||Array.isArray(d)?(0,Be.of)(d):(0,_e.D)(a.compileModuleAsync(d))),(0,et.U)(d=>{u&&u(i);let y,C,I=!1;return Array.isArray(d)?(C=d,!0):(y=d.create(o).injector,C=y.get(nn,[],{optional:!0,self:!0}).flat()),{routes:C.map(Ku),injector:y}}))}(u,this.compiler,o,this.onLoadEndListener).pipe(ti(()=>{this.childrenLoaders.delete(u)})),C=new Ko(y,()=>new pr.x).pipe(Hi());return this.childrenLoaders.set(u,C),C}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();function cn(i){return function sc(i){return i&&"object"==typeof i&&"default"in i}(i)?i.default:i}let Ti=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)(Wl),providedIn:"root"})}return i})(),Wl=(()=>{class i{shouldProcessUrl(o){return!0}extract(o){return o}merge(o,u){return o}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();const ac=new p.OlP(""),Kl=new p.OlP("");function Zl(i,a,o){const u=i.get(Kl),d=i.get(H);return i.get(p.R0b).runOutsideAngular(()=>{if(!d.startViewTransition||u.skipNextTransition)return u.skipNextTransition=!1,Promise.resolve();let y;const C=new Promise(x=>{y=x}),I=d.startViewTransition(()=>(y(),function Lh(i){return new Promise(a=>{(0,p.T8G)(a,{injector:i})})}(i))),{onViewTransitionCreated:_}=u;return _&&(0,p.r_H)(i,()=>_({transition:I,from:a,to:o})),C})}let gs=(()=>{class i{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new pr.x,this.transitionAbortSubject=new pr.x,this.configLoader=(0,p.f3M)(ps),this.environmentInjector=(0,p.f3M)(p.lqb),this.urlSerializer=(0,p.f3M)(qi),this.rootContexts=(0,p.f3M)(rr),this.location=(0,p.f3M)(Re),this.inputBindingEnabled=null!==(0,p.f3M)(oo,{optional:!0}),this.titleStrategy=(0,p.f3M)(oc),this.options=(0,p.f3M)(lo,{optional:!0})||{},this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlHandlingStrategy=(0,p.f3M)(Ti),this.createViewTransition=(0,p.f3M)(ac,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>(0,Be.of)(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=d=>this.events.next(new no(d)),this.configLoader.onLoadStartListener=d=>this.events.next(new lh(d))}complete(){this.transitions?.complete()}handleNavigationRequest(o){const u=++this.navigationId;this.transitions?.next({...this.transitions.value,...o,id:u})}setupNavigations(o,u,d){return this.transitions=new dt.X({id:0,currentUrlTree:u,currentRawUrl:u,extractedUrl:this.urlHandlingStrategy.extract(u),urlAfterRedirects:this.urlHandlingStrategy.extract(u),rawUrl:u,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:wi,restoredState:null,currentSnapshot:d.snapshot,targetSnapshot:null,currentRouterState:d,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe((0,xr.h)(y=>0!==y.id),(0,et.U)(y=>({...y,extractedUrl:this.urlHandlingStrategy.extract(y.rawUrl)})),(0,jn.w)(y=>{this.currentTransition=y;let C=!1,I=!1;return(0,Be.of)(y).pipe((0,wn.b)(_=>{this.currentNavigation={id:_.id,initialUrl:_.rawUrl,extractedUrl:_.extractedUrl,trigger:_.source,extras:_.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,jn.w)(_=>{const x=!o.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl();if(!x&&"reload"!==(_.extras.onSameUrlNavigation??o.onSameUrlNavigation)){const Z="";return this.events.next(new kr(_.id,this.urlSerializer.serialize(_.rawUrl),Z,0)),_.resolve(null),xn.E}if(this.urlHandlingStrategy.shouldProcessUrl(_.rawUrl))return(0,Be.of)(_).pipe((0,jn.w)(Z=>{const fe=this.transitions?.getValue();return this.events.next(new ta(Z.id,this.urlSerializer.serialize(Z.extractedUrl),Z.source,Z.restoredState)),fe!==this.transitions?.getValue()?xn.E:Promise.resolve(Z)}),function Rh(i,a,o,u,d,y){return Kt(C=>function Hl(i,a,o,u,d,y,C="emptyOnly"){return new Th(i,a,o,u,d,C,y).recognize()}(i,a,o,u,C.extractedUrl,d,y).pipe((0,et.U)(({state:I,tree:_})=>({...C,targetSnapshot:I,urlAfterRedirects:_}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,o.config,this.urlSerializer,this.paramsInheritanceStrategy),(0,wn.b)(Z=>{y.targetSnapshot=Z.targetSnapshot,y.urlAfterRedirects=Z.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:Z.urlAfterRedirects};const fe=new Pu(Z.id,this.urlSerializer.serialize(Z.extractedUrl),this.urlSerializer.serialize(Z.urlAfterRedirects),Z.targetSnapshot);this.events.next(fe)}));if(x&&this.urlHandlingStrategy.shouldProcessUrl(_.currentRawUrl)){const{id:Z,extractedUrl:fe,source:Ue,restoredState:Ke,extras:Ge}=_,be=new ta(Z,this.urlSerializer.serialize(fe),Ue,Ke);this.events.next(be);const nt=Uu(this.rootComponentType).snapshot;return this.currentTransition=y={..._,targetSnapshot:nt,urlAfterRedirects:fe,extras:{...Ge,skipLocationChange:!1,replaceUrl:!1}},this.currentNavigation.finalUrl=fe,(0,Be.of)(y)}{const Z="";return this.events.next(new kr(_.id,this.urlSerializer.serialize(_.extractedUrl),Z,1)),_.resolve(null),xn.E}}),(0,wn.b)(_=>{const x=new Lu(_.id,this.urlSerializer.serialize(_.extractedUrl),this.urlSerializer.serialize(_.urlAfterRedirects),_.targetSnapshot);this.events.next(x)}),(0,et.U)(_=>(this.currentTransition=y={..._,guards:Fl(_.targetSnapshot,_.currentSnapshot,this.rootContexts)},y)),function co(i,a){return Kt(o=>{const{targetSnapshot:u,currentSnapshot:d,guards:{canActivateChecks:y,canDeactivateChecks:C}}=o;return 0===C.length&&0===y.length?(0,Be.of)({...o,guardsResult:!0}):function Vn(i,a,o,u){return(0,_e.D)(i).pipe(Kt(d=>function _g(i,a,o,u,d){const y=a&&a.routeConfig?a.routeConfig.canDeactivate:null;if(!y||0===y.length)return(0,Be.of)(!0);const C=y.map(I=>{const _=so(a)??d,x=ao(I,_);return nr(function Sg(i){return i&&uo(i.canDeactivate)}(x)?x.canDeactivate(i,a,o,u):(0,p.r_H)(_,()=>x(i,a,o,u))).pipe(Lr())});return(0,Be.of)(C).pipe(Si())}(d.component,d.route,o,a,u)),Lr(d=>!0!==d,!0))}(C,u,d,i).pipe(Kt(I=>I&&function Ch(i){return"boolean"==typeof i}(I)?function ii(i,a,o,u){return(0,_e.D)(a).pipe(zi(d=>Eu(function Ul(i,a){return null!==i&&a&&a(new rs(i)),(0,Be.of)(!0)}(d.route.parent,u),function Ju(i,a){return null!==i&&a&&a(new Dg(i)),(0,Be.of)(!0)}(d.route,u),function ls(i,a,o){const u=a[a.length-1],y=a.slice(0,a.length-1).reverse().map(C=>function us(i){const a=i.routeConfig?i.routeConfig.canActivateChild:null;return a&&0!==a.length?{node:i,guards:a}:null}(C)).filter(C=>null!==C).map(C=>wu(()=>{const I=C.guards.map(_=>{const x=so(C.node)??o,K=ao(_,x);return nr(function Ig(i){return i&&uo(i.canActivateChild)}(K)?K.canActivateChild(u,i):(0,p.r_H)(x,()=>K(u,i))).pipe(Lr())});return(0,Be.of)(I).pipe(Si())}));return(0,Be.of)(y).pipe(Si())}(i,d.path,o),function oi(i,a,o){const u=a.routeConfig?a.routeConfig.canActivate:null;if(!u||0===u.length)return(0,Be.of)(!0);const d=u.map(y=>wu(()=>{const C=so(a)??o,I=ao(y,C);return nr(function qu(i){return i&&uo(i.canActivate)}(I)?I.canActivate(a,i):(0,p.r_H)(C,()=>I(a,i))).pipe(Lr())}));return(0,Be.of)(d).pipe(Si())}(i,d.route,o))),Lr(d=>!0!==d,!0))}(u,y,i,a):(0,Be.of)(I)),(0,et.U)(I=>({...o,guardsResult:I})))})}(this.environmentInjector,_=>this.events.next(_)),(0,wn.b)(_=>{if(y.guardsResult=_.guardsResult,yi(_.guardsResult))throw Gu(0,_.guardsResult);const x=new ra(_.id,this.urlSerializer.serialize(_.extractedUrl),this.urlSerializer.serialize(_.urlAfterRedirects),_.targetSnapshot,!!_.guardsResult);this.events.next(x)}),(0,xr.h)(_=>!!_.guardsResult||(this.cancelNavigationTransition(_,"",3),!1)),ic(_=>{if(_.guards.canActivateChecks.length)return(0,Be.of)(_).pipe((0,wn.b)(x=>{const K=new Tl(x.id,this.urlSerializer.serialize(x.extractedUrl),this.urlSerializer.serialize(x.urlAfterRedirects),x.targetSnapshot);this.events.next(K)}),(0,jn.w)(x=>{let K=!1;return(0,Be.of)(x).pipe(function Oh(i,a){return Kt(o=>{const{targetSnapshot:u,guards:{canActivateChecks:d}}=o;if(!d.length)return(0,Be.of)(o);const y=new Set(d.map(_=>_.route)),C=new Set;for(const _ of y)if(!C.has(_))for(const x of nc(_))C.add(x);let I=0;return(0,_e.D)(C).pipe(zi(_=>y.has(_)?function rc(i,a,o,u){const d=i.routeConfig,y=i._resolve;return void 0!==d?.title&&!aa(d)&&(y[Gi]=d.title),function Nh(i,a,o,u){const d=Jo(i);if(0===d.length)return(0,Be.of)({});const y={};return(0,_e.D)(d).pipe(Kt(C=>function xh(i,a,o,u){const d=so(a)??u,y=ao(i,d);return nr(y.resolve?y.resolve(a,o):(0,p.r_H)(d,()=>y(a,o)))}(i[C],a,o,u).pipe(Lr(),(0,wn.b)(I=>{y[C]=I}))),Yo(1),function th(i){return(0,et.U)(()=>i)}(y),(0,Zo.K)(C=>$l(C)?xn.E:mi(C)))}(y,i,a,u).pipe((0,et.U)(C=>(i._resolvedData=C,i.data=ss(i,i.parent,o).resolve,null)))}(_,u,i,a):(_.data=ss(_,_.parent,i).resolve,(0,Be.of)(void 0))),(0,wn.b)(()=>I++),Yo(1),Kt(_=>I===C.size?(0,Be.of)(o):xn.E))})}(this.paramsInheritanceStrategy,this.environmentInjector),(0,wn.b)({next:()=>K=!0,complete:()=>{K||this.cancelNavigationTransition(x,"",2)}}))}),(0,wn.b)(x=>{const K=new ch(x.id,this.urlSerializer.serialize(x.extractedUrl),this.urlSerializer.serialize(x.urlAfterRedirects),x.targetSnapshot);this.events.next(K)}))}),ic(_=>{const x=K=>{const Z=[];K.routeConfig?.loadComponent&&!K.routeConfig._loadedComponent&&Z.push(this.configLoader.loadComponent(K.routeConfig).pipe((0,wn.b)(fe=>{K.component=fe}),(0,et.U)(()=>{})));for(const fe of K.children)Z.push(...x(fe));return Z};return(0,xt.a)(x(_.targetSnapshot.root)).pipe(Pr(null),(0,ei.q)(1))}),ic(()=>this.afterPreactivation()),(0,jn.w)(()=>{const{currentSnapshot:_,targetSnapshot:x}=y,K=this.createViewTransition?.(this.environmentInjector,_.root,x.root);return K?(0,_e.D)(K).pipe((0,et.U)(()=>y)):(0,Be.of)(y)}),(0,et.U)(_=>{const x=function vr(i,a,o){const u=yr(i,a._root,o?o._root:void 0);return new $u(u,a)}(o.routeReuseStrategy,_.targetSnapshot,_.currentRouterState);return this.currentTransition=y={..._,targetRouterState:x},this.currentNavigation.targetRouterState=x,y}),(0,wn.b)(()=>{this.events.next(new Ol)}),((i,a,o,u)=>(0,et.U)(d=>(new Zu(a,d.targetRouterState,d.currentRouterState,o,u).activate(i),d)))(this.rootContexts,o.routeReuseStrategy,_=>this.events.next(_),this.inputBindingEnabled),(0,ei.q)(1),(0,wn.b)({next:_=>{C=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new Wn(_.id,this.urlSerializer.serialize(_.extractedUrl),this.urlSerializer.serialize(_.urlAfterRedirects))),this.titleStrategy?.updateTitle(_.targetRouterState.snapshot),_.resolve(!0)},complete:()=>{C=!0}}),function qs(i){return(0,un.e)((a,o)=>{(0,fr.Xf)(i).subscribe((0,Nr.x)(o,()=>o.complete(),bu.Z)),!o.closed&&a.subscribe(o)})}(this.transitionAbortSubject.pipe((0,wn.b)(_=>{throw _}))),ti(()=>{C||I||this.cancelNavigationTransition(y,"",1),this.currentNavigation?.id===y.id&&(this.currentNavigation=null)}),(0,Zo.K)(_=>{if(I=!0,Nl(_))this.events.next(new to(y.id,this.urlSerializer.serialize(y.extractedUrl),_.message,_.cancellationCode)),function gh(i){return Nl(i)&&yi(i.url)}(_)?this.events.next(new Fu(_.url)):y.resolve(!1);else{this.events.next(new na(y.id,this.urlSerializer.serialize(y.extractedUrl),_,y.targetSnapshot??void 0));try{y.resolve(o.errorHandler(_))}catch(x){y.reject(x)}}return xn.E}))}))}cancelNavigationTransition(o,u,d){const y=new to(o.id,this.urlSerializer.serialize(o.extractedUrl),u,d);this.events.next(y),o.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){return this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))).toString()!==this.currentTransition?.extractedUrl.toString()&&!this.currentTransition?.extras.skipLocationChange}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();function Fh(i){return i!==wi}let Yl=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)($h),providedIn:"root"})}return i})();class kh{shouldDetach(a){return!1}store(a,o){}shouldAttach(a){return!1}retrieve(a){return null}shouldReuseRoute(a,o){return a.routeConfig===o.routeConfig}}let $h=(()=>{class i extends kh{static#e=this.\u0275fac=(()=>{let o;return function(d){return(o||(o=p.n5z(i)))(d||i)}})();static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),ha=(()=>{class i{static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:()=>(0,p.f3M)(uc),providedIn:"root"})}return i})(),uc=(()=>{class i extends ha{constructor(){super(...arguments),this.location=(0,p.f3M)(Re),this.urlSerializer=(0,p.f3M)(qi),this.options=(0,p.f3M)(lo,{optional:!0})||{},this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.urlHandlingStrategy=(0,p.f3M)(Ti),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.currentUrlTree=new Ki,this.rawUrlTree=this.currentUrlTree,this.currentPageId=0,this.lastSuccessfulId=-1,this.routerState=Uu(null),this.stateMemento=this.createStateMemento()}getCurrentUrlTree(){return this.currentUrlTree}getRawUrlTree(){return this.rawUrlTree}restoredState(){return this.location.getState()}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}getRouterState(){return this.routerState}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}registerNonRouterCurrentEntryChangeListener(o){return this.location.subscribe(u=>{"popstate"===u.type&&o(u.url,u.state)})}handleRouterEvent(o,u){if(o instanceof ta)this.stateMemento=this.createStateMemento();else if(o instanceof kr)this.rawUrlTree=u.initialUrl;else if(o instanceof Pu){if("eager"===this.urlUpdateStrategy&&!u.extras.skipLocationChange){const d=this.urlHandlingStrategy.merge(u.finalUrl,u.initialUrl);this.setBrowserUrl(d,u)}}else o instanceof Ol?(this.currentUrlTree=u.finalUrl,this.rawUrlTree=this.urlHandlingStrategy.merge(u.finalUrl,u.initialUrl),this.routerState=u.targetRouterState,"deferred"===this.urlUpdateStrategy&&(u.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,u))):o instanceof to&&(3===o.code||2===o.code)?this.restoreHistory(u):o instanceof na?this.restoreHistory(u,!0):o instanceof Wn&&(this.lastSuccessfulId=o.id,this.currentPageId=this.browserPageId)}setBrowserUrl(o,u){const d=this.urlSerializer.serialize(o);if(this.location.isCurrentPathEqualTo(d)||u.extras.replaceUrl){const C={...u.extras.state,...this.generateNgRouterState(u.id,this.browserPageId)};this.location.replaceState(d,"",C)}else{const y={...u.extras.state,...this.generateNgRouterState(u.id,this.browserPageId+1)};this.location.go(d,"",y)}}restoreHistory(o,u=!1){if("computed"===this.canceledNavigationResolution){const y=this.currentPageId-this.browserPageId;0!==y?this.location.historyGo(y):this.currentUrlTree===o.finalUrl&&0===y&&(this.resetState(o),this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(u&&this.resetState(o),this.resetUrlToCurrentUrlTree())}resetState(o){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,o.finalUrl??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(o,u){return"computed"===this.canceledNavigationResolution?{navigationId:o,\u0275routerPageId:u}:{navigationId:o}}static#e=this.\u0275fac=(()=>{let o;return function(d){return(o||(o=p.n5z(i)))(d||i)}})();static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var ms=function(i){return i[i.COMPLETE=0]="COMPLETE",i[i.FAILED=1]="FAILED",i[i.REDIRECTING=2]="REDIRECTING",i}(ms||{});function Ai(i,a){i.events.pipe((0,xr.h)(o=>o instanceof Wn||o instanceof to||o instanceof na||o instanceof kr),(0,et.U)(o=>o instanceof Wn||o instanceof kr?ms.COMPLETE:o instanceof to&&(0===o.code||1===o.code)?ms.REDIRECTING:ms.FAILED),(0,xr.h)(o=>o!==ms.REDIRECTING),(0,ei.q)(1)).subscribe(()=>{a()})}function pa(i){throw i}const ql={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},cc={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let kn=(()=>{class i{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}constructor(){this.disposed=!1,this.isNgZoneEnabled=!1,this.console=(0,p.f3M)(p.c2e),this.stateManager=(0,p.f3M)(ha),this.options=(0,p.f3M)(lo,{optional:!0})||{},this.pendingTasks=(0,p.f3M)(p.I6F),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.navigationTransitions=(0,p.f3M)(gs),this.urlSerializer=(0,p.f3M)(qi),this.location=(0,p.f3M)(Re),this.urlHandlingStrategy=(0,p.f3M)(Ti),this._events=new pr.x,this.errorHandler=this.options.errorHandler||pa,this.navigated=!1,this.routeReuseStrategy=(0,p.f3M)(Yl),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.config=(0,p.f3M)(nn,{optional:!0})?.flat()??[],this.componentInputBindingEnabled=!!(0,p.f3M)(oo,{optional:!0}),this.eventsSubscription=new Cu.w0,this.isNgZoneEnabled=(0,p.f3M)(p.R0b)instanceof p.R0b&&p.R0b.isInAngularZone(),this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe({error:o=>{this.console.warn(o)}}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const o=this.navigationTransitions.events.subscribe(u=>{try{const d=this.navigationTransitions.currentTransition,y=this.navigationTransitions.currentNavigation;if(null!==d&&null!==y)if(this.stateManager.handleRouterEvent(u,y),u instanceof to&&0!==u.code&&1!==u.code)this.navigated=!0;else if(u instanceof Wn)this.navigated=!0;else if(u instanceof Fu){const C=this.urlHandlingStrategy.merge(u.url,d.currentRawUrl),I={skipLocationChange:d.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||Fh(d.source)};this.scheduleNavigation(C,wi,null,I,{resolve:d.resolve,reject:d.reject,promise:d.promise})}(function jh(i){return!(i instanceof Ol||i instanceof Fu)})(u)&&this._events.next(u)}catch(d){this.navigationTransitions.transitionAbortSubject.next(d)}});this.eventsSubscription.add(o)}resetRootComponentType(o){this.routerState.root.component=o,this.navigationTransitions.rootComponentType=o}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),wi,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription||(this.nonRouterCurrentEntryChangeSubscription=this.stateManager.registerNonRouterCurrentEntryChangeListener((o,u)=>{setTimeout(()=>{this.navigateToSyncWithBrowser(o,"popstate",u)},0)}))}navigateToSyncWithBrowser(o,u,d){const y={replaceUrl:!0},C=d?.navigationId?d:null;if(d){const _={...d};delete _.navigationId,delete _.\u0275routerPageId,0!==Object.keys(_).length&&(y.state=_)}const I=this.parseUrl(o);this.scheduleNavigation(I,u,C,y)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(o){this.config=o.map(Ku),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription&&(this.nonRouterCurrentEntryChangeSubscription.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(o,u={}){const{relativeTo:d,queryParams:y,fragment:C,queryParamsHandling:I,preserveFragment:_}=u,x=_?this.currentUrlTree.fragment:C;let Z,K=null;switch(I){case"merge":K={...this.currentUrlTree.queryParams,...y};break;case"preserve":K=this.currentUrlTree.queryParams;break;default:K=y||null}null!==K&&(K=this.removeEmptyProps(K));try{Z=Di(d?d.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof o[0]||!o[0].startsWith("/"))&&(o=[]),Z=this.currentUrlTree.root}return Au(Z,o,K,x??null)}navigateByUrl(o,u={skipLocationChange:!1}){const d=yi(o)?o:this.parseUrl(o),y=this.urlHandlingStrategy.merge(d,this.rawUrlTree);return this.scheduleNavigation(y,wi,null,u)}navigate(o,u={skipLocationChange:!1}){return function Uh(i){for(let a=0;a(null!=y&&(u[d]=y),u),{})}scheduleNavigation(o,u,d,y,C){if(this.disposed)return Promise.resolve(!1);let I,_,x;C?(I=C.resolve,_=C.reject,x=C.promise):x=new Promise((Z,fe)=>{I=Z,_=fe});const K=this.pendingTasks.add();return Ai(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(K))}),this.navigationTransitions.handleNavigationRequest({source:u,restoredState:d,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:o,extras:y,resolve:I,reject:_,promise:x,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),x.catch(Z=>Promise.reject(Z))}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),vs=(()=>{class i{constructor(o,u,d,y,C,I){this.router=o,this.route=u,this.tabIndexAttribute=d,this.renderer=y,this.el=C,this.locationStrategy=I,this.href=null,this.commands=null,this.onChanges=new pr.x,this.preserveFragment=!1,this.skipLocationChange=!1,this.replaceUrl=!1;const _=C.nativeElement.tagName?.toLowerCase();this.isAnchorElement="a"===_||"area"===_,this.isAnchorElement?this.subscription=o.events.subscribe(x=>{x instanceof Wn&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}setTabIndexIfNotOnNativeEl(o){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",o)}ngOnChanges(o){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(o){null!=o?(this.commands=Array.isArray(o)?o:[o],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(o,u,d,y,C){return!!(null===this.urlTree||this.isAnchorElement&&(0!==o||u||d||y||C||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const o=null===this.href?null:(0,p.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",o)}applyAttributeValue(o,u){const d=this.renderer,y=this.el.nativeElement;null!==u?d.setAttribute(y,o,u):d.removeAttribute(y,o)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static#e=this.\u0275fac=function(u){return new(u||i)(p.Y36(kn),p.Y36(os),p.$8M("tabindex"),p.Y36(p.Qsj),p.Y36(p.SBq),p.Y36(ie))};static#t=this.\u0275dir=p.lG2({type:i,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(u,d){1&u&&p.NdJ("click",function(C){return d.onClick(C.button,C.ctrlKey,C.shiftKey,C.altKey,C.metaKey)}),2&u&&p.uIk("target",d.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:["preserveFragment","preserveFragment",p.VuI],skipLocationChange:["skipLocationChange","skipLocationChange",p.VuI],replaceUrl:["replaceUrl","replaceUrl",p.VuI],routerLink:"routerLink"},standalone:!0,features:[p.Xq5,p.TTD]})}return i})(),Jl=(()=>{class i{get isActive(){return this._isActive}constructor(o,u,d,y,C){this.router=o,this.element=u,this.renderer=d,this.cdr=y,this.link=C,this.classes=[],this._isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new p.vpe,this.routerEventsSubscription=o.events.subscribe(I=>{I instanceof Wn&&this.update()})}ngAfterContentInit(){(0,Be.of)(this.links.changes,(0,Be.of)(null)).pipe(Wo()).subscribe(o=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();const o=[...this.links.toArray(),this.link].filter(u=>!!u).map(u=>u.onChanges);this.linkInputChangesSubscription=(0,_e.D)(o).pipe(Wo()).subscribe(u=>{this._isActive!==this.isLinkActive(this.router)(u)&&this.update()})}set routerLinkActive(o){const u=Array.isArray(o)?o:o.split(" ");this.classes=u.filter(d=>!!d)}ngOnChanges(o){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{const o=this.hasActiveLinks();this._isActive!==o&&(this._isActive=o,this.cdr.markForCheck(),this.classes.forEach(u=>{o?this.renderer.addClass(this.element.nativeElement,u):this.renderer.removeClass(this.element.nativeElement,u)}),o&&void 0!==this.ariaCurrentWhenActive?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this.isActiveChange.emit(o))})}isLinkActive(o){const u=function Bh(i){return!!i.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return d=>!!d.urlTree&&o.isActive(d.urlTree,u)}hasActiveLinks(){const o=this.isLinkActive(this.router);return this.link&&o(this.link)||this.links.some(o)}static#e=this.\u0275fac=function(u){return new(u||i)(p.Y36(kn),p.Y36(p.SBq),p.Y36(p.Qsj),p.Y36(p.sBO),p.Y36(vs,8))};static#t=this.\u0275dir=p.lG2({type:i,selectors:[["","routerLinkActive",""]],contentQueries:function(u,d,y){if(1&u&&p.Suo(y,vs,5),2&u){let C;p.iGM(C=p.CRH())&&(d.links=C)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],standalone:!0,features:[p.TTD]})}return i})();class Ql{}let ma=(()=>{class i{constructor(o,u,d,y,C){this.router=o,this.injector=d,this.preloadingStrategy=y,this.loader=C}setUpPreloading(){this.subscription=this.router.events.pipe((0,xr.h)(o=>o instanceof Wn),zi(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(o,u){const d=[];for(const y of u){y.providers&&!y._injector&&(y._injector=(0,p.MMx)(y.providers,o,`Route: ${y.path}`));const C=y._injector??o,I=y._loadedInjector??C;(y.loadChildren&&!y._loadedRoutes&&void 0===y.canLoad||y.loadComponent&&!y._loadedComponent)&&d.push(this.preloadConfig(C,y)),(y.children||y._loadedRoutes)&&d.push(this.processRoutes(I,y.children??y._loadedRoutes))}return(0,_e.D)(d).pipe(Wo())}preloadConfig(o,u){return this.preloadingStrategy.preload(u,()=>{let d;d=u.loadChildren&&void 0===u.canLoad?this.loader.loadChildren(o,u):(0,Be.of)(null);const y=d.pipe(Kt(C=>null===C?(0,Be.of)(void 0):(u._loadedRoutes=C.routes,u._loadedInjector=C.injector,this.processRoutes(C.injector??o,C.routes))));if(u.loadComponent&&!u._loadedComponent){const C=this.loader.loadComponent(u);return(0,_e.D)([y,C]).pipe(Wo())}return y})}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(kn),p.LFG(p.Sil),p.LFG(p.lqb),p.LFG(Ql),p.LFG(ps))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();const ys=new p.OlP("");let Xl=(()=>{class i{constructor(o,u,d,y,C={}){this.urlSerializer=o,this.transitions=u,this.viewportScroller=d,this.zone=y,this.options=C,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},C.scrollPositionRestoration=C.scrollPositionRestoration||"disabled",C.anchorScrolling=C.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(o=>{o instanceof ta?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=o.navigationTrigger,this.restoredId=o.restoredState?o.restoredState.navigationId:0):o instanceof Wn?(this.lastId=o.id,this.scheduleScrollEvent(o,this.urlSerializer.parse(o.urlAfterRedirects).fragment)):o instanceof kr&&0===o.code&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(o,this.urlSerializer.parse(o.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(o=>{o instanceof Rl&&(o.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(o.position):o.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(o.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(o,u){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new Rl(o,"popstate"===this.lastSource?this.store[this.restoredId]:null,u))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static#e=this.\u0275fac=function(u){p.$Z()};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();function va(i){return i.routerState.root}function ir(i,a){return{\u0275kind:i,\u0275providers:a}}function Wh(){const i=(0,p.f3M)(p.zs3);return a=>{const o=i.get(p.z2F);if(a!==o.components[0])return;const u=i.get(kn),d=i.get(Ds);1===i.get(lc)&&u.initialNavigation(),i.get(ya,null,p.XFs.Optional)?.setUpPreloading(),i.get(ys,null,p.XFs.Optional)?.init(),u.resetRootComponentType(o.componentTypes[0]),d.closed||(d.next(),d.complete(),d.unsubscribe())}}const Ds=new p.OlP("",{factory:()=>new pr.x}),lc=new p.OlP("",{providedIn:"root",factory:()=>1}),ya=new p.OlP("");function nd(i){return ir(0,[{provide:ya,useExisting:ma},{provide:Ql,useExisting:i}])}function Ea(i){return ir(9,[{provide:ac,useValue:Zl},{provide:Kl,useValue:{skipNextTransition:!!i?.skipInitialTransition,...i}}])}const wa=new p.OlP("ROUTER_FORROOT_GUARD"),Ca=[Re,{provide:qi,useClass:Js},kn,rr,{provide:os,useFactory:va,deps:[kn]},ps,[]];let qh=(()=>{class i{constructor(o){}static forRoot(o,u){return{ngModule:i,providers:[Ca,[],{provide:nn,multi:!0,useValue:o},{provide:wa,useFactory:Xh,deps:[[kn,new p.FiY,new p.tp0]]},{provide:lo,useValue:u||{}},u?.useHash?{provide:ie,useClass:Le}:{provide:ie,useClass:ce},{provide:ys,useFactory:()=>{const i=(0,p.f3M)(Af),a=(0,p.f3M)(p.R0b),o=(0,p.f3M)(lo),u=(0,p.f3M)(gs),d=(0,p.f3M)(qi);return o.scrollOffset&&i.setOffset(o.scrollOffset),new Xl(d,u,i,a,o)}},u?.preloadingStrategy?nd(u.preloadingStrategy).\u0275providers:[],u?.initialNavigation?id(u):[],u?.bindToComponentInputs?ir(8,[as,{provide:oo,useExisting:as}]).\u0275providers:[],u?.enableViewTransitions?Ea().\u0275providers:[],[{provide:hc,useFactory:Wh},{provide:p.tb,multi:!0,useExisting:hc}]]}}static forChild(o){return{ngModule:i,providers:[{provide:nn,multi:!0,useValue:o}]}}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(wa,8))};static#t=this.\u0275mod=p.oAB({type:i});static#n=this.\u0275inj=p.cJS({})}return i})();function Xh(i){return"guarded"}function id(i){return["disabled"===i.initialNavigation?ir(3,[{provide:p.ip1,multi:!0,useFactory:()=>{const a=(0,p.f3M)(kn);return()=>{a.setUpLocationChangeListener()}}},{provide:lc,useValue:2}]).\u0275providers:[],"enabledBlocking"===i.initialNavigation?ir(2,[{provide:lc,useValue:0},{provide:p.ip1,multi:!0,deps:[p.zs3],useFactory:a=>{const o=a.get(le,Promise.resolve());return()=>o.then(()=>new Promise(u=>{const d=a.get(kn),y=a.get(Ds);Ai(d,()=>{u(!0)}),a.get(gs).afterPreactivation=()=>(u(!0),y.closed?(0,Be.of)(void 0):y),d.initialNavigation()}))}}]).\u0275providers:[]]}const hc=new p.OlP("");var rn=b(6671);const ws_baseUrl=`${location.origin}/transloco/transloco-playground`;function sd(i,a){1&i&&p._UZ(0,"img",2)}function ad(i,a){if(1&i){const o=p.EpF();p.TgZ(0,"button",18),p.NdJ("click",function(){const y=p.CHM(o).$implicit,C=p.oxw();return p.KtG(C.changeLang(y.id))}),p._uU(1),p.qZA()}if(2&i){const o=a.$implicit,u=a.$index,d=a.$count,y=p.oxw();p.ekj("mr-10",u!==d-1)("btn-primary",y.activeLang===o.id)("btn-secondary",y.activeLang!==o.id),p.uIk("data-cy",o.id),p.xp6(),p.hij(" ",o.label," ")}}let ud=(()=>{class i{constructor(){this.isDocs=true,this.service=(0,p.f3M)(rn.Vn),this.availableLangs=this.service.getAvailableLangs()}get activeLang(){return this.service.getActiveLang()}changeLang(o){this.subscription?.unsubscribe(),this.subscription=this.service.load(o).pipe((0,ei.q)(1)).subscribe(()=>{this.service.setActiveLang(o)})}ngOnDestroy(){this.subscription?.unsubscribe(),this.subscription=null}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275cmp=p.Xpm({type:i,selectors:[["app-root"]],standalone:!0,features:[p.jDz],decls:37,vars:1,consts:[[1,"navbar","navbar-expand-lg","navbar-light","bg-light"],["target","_blank","href","https://github.com/jsverse/transloco",1,"navbar-brand"],["height","50px","src","/assets/images/logo.svg"],["type","button","data-bs-target","#navbarSupportedContent","aria-controls","navbarSupportedContent","aria-expanded","false","aria-label","Toggle navigation",1,"navbar-toggler"],[1,"navbar-toggler-icon"],["id","navbarSupportedContent",1,"collapse","navbar-collapse",2,"padding-right","180px"],[1,"navbar-nav","mr-auto"],["routerLinkActive","active",1,"nav-item"],["routerLink","home","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","lazy","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","scope-sharing","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","inline-loaders","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","dynamic-translation","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","multi-langs","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","transpilers","data-bs-target","#navbarSupportedContent",1,"nav-link"],["routerLink","locale","data-bs-target","#navbarSupportedContent",1,"nav-link"],[1,"lang-btns"],[1,"container"],[1,"btn","my-2","my-sm-0",3,"click"],["class","btn my-2 my-sm-0",3,"mr-10","btn-primary","btn-secondary"]],template:function(u,d){1&u&&(p.TgZ(0,"nav",0)(1,"div")(2,"a",1),p.YNc(3,sd,1,0,"img",2),p.qZA(),p.TgZ(4,"button",3),p._UZ(5,"span",4),p.qZA()(),p.TgZ(6,"div",5)(7,"ul",6)(8,"li",7)(9,"a",8),p._uU(10,"Home"),p.qZA()(),p.TgZ(11,"li",7)(12,"a",9),p._uU(13,"Lazy"),p.qZA()(),p.TgZ(14,"li",7)(15,"a",10),p._uU(16,"Scope Sharing"),p.qZA()(),p.TgZ(17,"li",7)(18,"a",11),p._uU(19,"Inline Loaders"),p.qZA()(),p.TgZ(20,"li",7)(21,"a",12),p._uU(22,"Dynamic Translation"),p.qZA()(),p.TgZ(23,"li",7)(24,"a",13),p._uU(25,"Multi Langs"),p.qZA()(),p.TgZ(26,"li",7)(27,"a",14),p._uU(28,"Transpilers"),p.qZA()(),p.TgZ(29,"li",7)(30,"a",15),p._uU(31,"Locale"),p.qZA()()()(),p.TgZ(32,"div",16),p.SjG(33,ad,2,8,"button",19,p.x6l),p.qZA()(),p.TgZ(35,"div",17),p._UZ(36,"router-outlet"),p.qZA()),2&u&&(p.xp6(3),p.um2(3,d.isDocs?-1:3),p.xp6(30),p.wJu(d.availableLangs))},dependencies:[qh,io,vs,Jl],styles:["#logo[_ngcontent-%COMP%]{height:50px}.navbar[_ngcontent-%COMP%]{box-shadow:0 0 2px;position:fixed;top:0;width:100%;z-index:1;padding-inline:1rem;height:66px}.container[_ngcontent-%COMP%]{margin-top:130px;z-index:0}.btn[_ngcontent-%COMP%]:focus{box-shadow:none!important}.nav-item.active[_ngcontent-%COMP%] .nav-link[_ngcontent-%COMP%]{color:#e83e8c}.nav-item[_ngcontent-%COMP%]:hover:not(.active) .nav-link[_ngcontent-%COMP%]{color:#cd298d}.btn-primary[_ngcontent-%COMP%]{background-color:#e83e8c;border-color:#e83e8c}.btn-primary[_ngcontent-%COMP%]:not(:disabled):not(.disabled):active{background-color:#cd298d;border-color:#cd298d}.lang-btns[_ngcontent-%COMP%]{right:10px;top:15px;position:fixed}.mr-10[_ngcontent-%COMP%]{margin-right:10px}"]})}return i})();class Ia{}class Sa{}class Yn{constructor(a){this.normalizedNames=new Map,this.lazyUpdate=null,a?"string"==typeof a?this.lazyInit=()=>{this.headers=new Map,a.split("\n").forEach(o=>{const u=o.indexOf(":");if(u>0){const d=o.slice(0,u),y=d.toLowerCase(),C=o.slice(u+1).trim();this.maybeSetNormalizedName(d,y),this.headers.has(y)?this.headers.get(y).push(C):this.headers.set(y,[C])}})}:typeof Headers<"u"&&a instanceof Headers?(this.headers=new Map,a.forEach((o,u)=>{this.setHeaderEntries(u,o)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(a).forEach(([o,u])=>{this.setHeaderEntries(o,u)})}:this.headers=new Map}has(a){return this.init(),this.headers.has(a.toLowerCase())}get(a){this.init();const o=this.headers.get(a.toLowerCase());return o&&o.length>0?o[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(a){return this.init(),this.headers.get(a.toLowerCase())||null}append(a,o){return this.clone({name:a,value:o,op:"a"})}set(a,o){return this.clone({name:a,value:o,op:"s"})}delete(a,o){return this.clone({name:a,value:o,op:"d"})}maybeSetNormalizedName(a,o){this.normalizedNames.has(o)||this.normalizedNames.set(o,a)}init(){this.lazyInit&&(this.lazyInit instanceof Yn?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(a=>this.applyUpdate(a)),this.lazyUpdate=null))}copyFrom(a){a.init(),Array.from(a.headers.keys()).forEach(o=>{this.headers.set(o,a.headers.get(o)),this.normalizedNames.set(o,a.normalizedNames.get(o))})}clone(a){const o=new Yn;return o.lazyInit=this.lazyInit&&this.lazyInit instanceof Yn?this.lazyInit:this,o.lazyUpdate=(this.lazyUpdate||[]).concat([a]),o}applyUpdate(a){const o=a.name.toLowerCase();switch(a.op){case"a":case"s":let u=a.value;if("string"==typeof u&&(u=[u]),0===u.length)return;this.maybeSetNormalizedName(a.name,o);const d=("a"===a.op?this.headers.get(o):void 0)||[];d.push(...u),this.headers.set(o,d);break;case"d":const y=a.value;if(y){let C=this.headers.get(o);if(!C)return;C=C.filter(I=>-1===y.indexOf(I)),0===C.length?(this.headers.delete(o),this.normalizedNames.delete(o)):this.headers.set(o,C)}else this.headers.delete(o),this.normalizedNames.delete(o)}}setHeaderEntries(a,o){const u=(Array.isArray(o)?o:[o]).map(y=>y.toString()),d=a.toLowerCase();this.headers.set(d,u),this.maybeSetNormalizedName(a,d)}forEach(a){this.init(),Array.from(this.normalizedNames.keys()).forEach(o=>a(this.normalizedNames.get(o),this.headers.get(o)))}}class si{encodeKey(a){return tp(a)}encodeValue(a){return tp(a)}decodeKey(a){return decodeURIComponent(a)}decodeValue(a){return decodeURIComponent(a)}}const ep=/%(\d[a-f0-9])/gi,$g={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function tp(i){return encodeURIComponent(i).replace(ep,(a,o)=>$g[o]??a)}function gc(i){return`${i}`}class Oi{constructor(a={}){if(this.updates=null,this.cloneFrom=null,this.encoder=a.encoder||new si,a.fromString){if(a.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function Cs(i,a){const o=new Map;return i.length>0&&i.replace(/^\?/,"").split("&").forEach(d=>{const y=d.indexOf("="),[C,I]=-1==y?[a.decodeKey(d),""]:[a.decodeKey(d.slice(0,y)),a.decodeValue(d.slice(y+1))],_=o.get(C)||[];_.push(I),o.set(C,_)}),o}(a.fromString,this.encoder)}else a.fromObject?(this.map=new Map,Object.keys(a.fromObject).forEach(o=>{const u=a.fromObject[o],d=Array.isArray(u)?u.map(gc):[gc(u)];this.map.set(o,d)})):this.map=null}has(a){return this.init(),this.map.has(a)}get(a){this.init();const o=this.map.get(a);return o?o[0]:null}getAll(a){return this.init(),this.map.get(a)||null}keys(){return this.init(),Array.from(this.map.keys())}append(a,o){return this.clone({param:a,value:o,op:"a"})}appendAll(a){const o=[];return Object.keys(a).forEach(u=>{const d=a[u];Array.isArray(d)?d.forEach(y=>{o.push({param:u,value:y,op:"a"})}):o.push({param:u,value:d,op:"a"})}),this.clone(o)}set(a,o){return this.clone({param:a,value:o,op:"s"})}delete(a,o){return this.clone({param:a,value:o,op:"d"})}toString(){return this.init(),this.keys().map(a=>{const o=this.encoder.encodeKey(a);return this.map.get(a).map(u=>o+"="+this.encoder.encodeValue(u)).join("&")}).filter(a=>""!==a).join("&")}clone(a){const o=new Oi({encoder:this.encoder});return o.cloneFrom=this.cloneFrom||this,o.updates=(this.updates||[]).concat(a),o}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(a=>this.map.set(a,this.cloneFrom.map.get(a))),this.updates.forEach(a=>{switch(a.op){case"a":case"s":const o=("a"===a.op?this.map.get(a.param):void 0)||[];o.push(gc(a.value)),this.map.set(a.param,o);break;case"d":if(void 0===a.value){this.map.delete(a.param);break}{let u=this.map.get(a.param)||[];const d=u.indexOf(gc(a.value));-1!==d&&u.splice(d,1),u.length>0?this.map.set(a.param,u):this.map.delete(a.param)}}}),this.cloneFrom=this.updates=null)}}class ld{constructor(){this.map=new Map}set(a,o){return this.map.set(a,o),this}get(a){return this.map.has(a)||this.map.set(a,a.defaultValue()),this.map.get(a)}delete(a){return this.map.delete(a),this}has(a){return this.map.has(a)}keys(){return this.map.keys()}}function dd(i){return typeof ArrayBuffer<"u"&&i instanceof ArrayBuffer}function fd(i){return typeof Blob<"u"&&i instanceof Blob}function hd(i){return typeof FormData<"u"&&i instanceof FormData}class zn{constructor(a,o,u,d){let y;if(this.url=o,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=a.toUpperCase(),function np(i){switch(i){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||d?(this.body=void 0!==u?u:null,y=d):y=u,y&&(this.reportProgress=!!y.reportProgress,this.withCredentials=!!y.withCredentials,y.responseType&&(this.responseType=y.responseType),y.headers&&(this.headers=y.headers),y.context&&(this.context=y.context),y.params&&(this.params=y.params),this.transferCache=y.transferCache),this.headers||(this.headers=new Yn),this.context||(this.context=new ld),this.params){const C=this.params.toString();if(0===C.length)this.urlWithParams=o;else{const I=o.indexOf("?");this.urlWithParams=o+(-1===I?"?":IZ.set(fe,a.setHeaders[fe]),_)),a.setParams&&(x=Object.keys(a.setParams).reduce((Z,fe)=>Z.set(fe,a.setParams[fe]),x)),new zn(o,u,y,{params:x,headers:_,context:K,reportProgress:I,responseType:d,withCredentials:C})}}var qn=function(i){return i[i.Sent=0]="Sent",i[i.UploadProgress=1]="UploadProgress",i[i.ResponseHeader=2]="ResponseHeader",i[i.DownloadProgress=3]="DownloadProgress",i[i.Response=4]="Response",i[i.User=5]="User",i}(qn||{});class Ma{constructor(a,o=200,u="OK"){this.headers=a.headers||new Yn,this.status=void 0!==a.status?a.status:o,this.statusText=a.statusText||u,this.url=a.url||null,this.ok=this.status>=200&&this.status<300}}class bs extends Ma{constructor(a={}){super(a),this.type=qn.ResponseHeader}clone(a={}){return new bs({headers:a.headers||this.headers,status:void 0!==a.status?a.status:this.status,statusText:a.statusText||this.statusText,url:a.url||this.url||void 0})}}class ai extends Ma{constructor(a={}){super(a),this.type=qn.Response,this.body=void 0!==a.body?a.body:null}clone(a={}){return new ai({body:void 0!==a.body?a.body:this.body,headers:a.headers||this.headers,status:void 0!==a.status?a.status:this.status,statusText:a.statusText||this.statusText,url:a.url||this.url||void 0})}}class Is extends Ma{constructor(a){super(a,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${a.url||"(unknown url)"}`:`Http failure response for ${a.url||"(unknown url)"}: ${a.status} ${a.statusText}`,this.error=a.error||null}}function pd(i,a){return{body:a,headers:i.headers,context:i.context,observe:i.observe,params:i.params,reportProgress:i.reportProgress,responseType:i.responseType,withCredentials:i.withCredentials,transferCache:i.transferCache}}let rp=(()=>{class i{constructor(o){this.handler=o}request(o,u,d={}){let y;if(o instanceof zn)y=o;else{let _,x;_=d.headers instanceof Yn?d.headers:new Yn(d.headers),d.params&&(x=d.params instanceof Oi?d.params:new Oi({fromObject:d.params})),y=new zn(o,u,void 0!==d.body?d.body:null,{headers:_,context:d.context,params:x,reportProgress:d.reportProgress,responseType:d.responseType||"json",withCredentials:d.withCredentials,transferCache:d.transferCache})}const C=(0,Be.of)(y).pipe(zi(_=>this.handler.handle(_)));if(o instanceof zn||"events"===d.observe)return C;const I=C.pipe((0,xr.h)(_=>_ instanceof ai));switch(d.observe||"body"){case"body":switch(y.responseType){case"arraybuffer":return I.pipe((0,et.U)(_=>{if(null!==_.body&&!(_.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _.body}));case"blob":return I.pipe((0,et.U)(_=>{if(null!==_.body&&!(_.body instanceof Blob))throw new Error("Response is not a Blob.");return _.body}));case"text":return I.pipe((0,et.U)(_=>{if(null!==_.body&&"string"!=typeof _.body)throw new Error("Response is not a string.");return _.body}));default:return I.pipe((0,et.U)(_=>_.body))}case"response":return I;default:throw new Error(`Unreachable: unhandled observe type ${d.observe}}`)}}delete(o,u={}){return this.request("DELETE",o,u)}get(o,u={}){return this.request("GET",o,u)}head(o,u={}){return this.request("HEAD",o,u)}jsonp(o,u){return this.request("JSONP",o,{params:(new Oi).append(u,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(o,u={}){return this.request("OPTIONS",o,u)}patch(o,u,d={}){return this.request("PATCH",o,pd(d,u))}post(o,u,d={}){return this.request("POST",o,pd(d,u))}put(o,u,d={}){return this.request("PUT",o,pd(d,u))}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(Ia))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();function vd(i,a){return a(i)}const Ss=new p.OlP(""),Ta=new p.OlP(""),Dd=new p.OlP("");let Ec=(()=>{class i extends Ia{constructor(o,u){super(),this.backend=o,this.injector=u,this.chain=null,this.pendingTasks=(0,p.f3M)(p.I6F);const d=(0,p.f3M)(Dd,{optional:!0});this.backend=d??o}handle(o){if(null===this.chain){const d=Array.from(new Set([...this.injector.get(Ss),...this.injector.get(Ta,[])]));this.chain=d.reduceRight((y,C)=>function yd(i,a,o){return(u,d)=>(0,p.r_H)(o,()=>a(u,y=>i(y,d)))}(y,C,this.injector),vd)}const u=this.pendingTasks.add();return this.chain(o,d=>this.backend.handle(d)).pipe(ti(()=>this.pendingTasks.remove(u)))}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(Sa),p.LFG(p.lqb))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();const Wg=/^\)\]\}',?\n/;let Cd=(()=>{class i{constructor(o){this.xhrFactory=o}handle(o){if("JSONP"===o.method)throw new p.vHH(-2800,!1);const u=this.xhrFactory;return(u.\u0275loadImpl?(0,_e.D)(u.\u0275loadImpl()):(0,Be.of)(null)).pipe((0,jn.w)(()=>new Bi.y(y=>{const C=u.build();if(C.open(o.method,o.urlWithParams),o.withCredentials&&(C.withCredentials=!0),o.headers.forEach((Ge,be)=>C.setRequestHeader(Ge,be.join(","))),o.headers.has("Accept")||C.setRequestHeader("Accept","application/json, text/plain, */*"),!o.headers.has("Content-Type")){const Ge=o.detectContentTypeHeader();null!==Ge&&C.setRequestHeader("Content-Type",Ge)}if(o.responseType){const Ge=o.responseType.toLowerCase();C.responseType="json"!==Ge?Ge:"text"}const I=o.serializeBody();let _=null;const x=()=>{if(null!==_)return _;const Ge=C.statusText||"OK",be=new Yn(C.getAllResponseHeaders()),nt=function Aa(i){return"responseURL"in i&&i.responseURL?i.responseURL:/^X-Request-URL:/m.test(i.getAllResponseHeaders())?i.getResponseHeader("X-Request-URL"):null}(C)||o.url;return _=new bs({headers:be,status:C.status,statusText:Ge,url:nt}),_},K=()=>{let{headers:Ge,status:be,statusText:nt,url:ln}=x(),ft=null;204!==be&&(ft=typeof C.response>"u"?C.responseText:C.response),0===be&&(be=ft?200:0);let Lt=be>=200&&be<300;if("json"===o.responseType&&"string"==typeof ft){const bn=ft;ft=ft.replace(Wg,"");try{ft=""!==ft?JSON.parse(ft):null}catch(zt){ft=bn,Lt&&(Lt=!1,ft={error:zt,text:ft})}}Lt?(y.next(new ai({body:ft,headers:Ge,status:be,statusText:nt,url:ln||void 0})),y.complete()):y.error(new Is({error:ft,headers:Ge,status:be,statusText:nt,url:ln||void 0}))},Z=Ge=>{const{url:be}=x(),nt=new Is({error:Ge,status:C.status||0,statusText:C.statusText||"Unknown Error",url:be||void 0});y.error(nt)};let fe=!1;const Ue=Ge=>{fe||(y.next(x()),fe=!0);let be={type:qn.DownloadProgress,loaded:Ge.loaded};Ge.lengthComputable&&(be.total=Ge.total),"text"===o.responseType&&C.responseText&&(be.partialText=C.responseText),y.next(be)},Ke=Ge=>{let be={type:qn.UploadProgress,loaded:Ge.loaded};Ge.lengthComputable&&(be.total=Ge.total),y.next(be)};return C.addEventListener("load",K),C.addEventListener("error",Z),C.addEventListener("timeout",Z),C.addEventListener("abort",Z),o.reportProgress&&(C.addEventListener("progress",Ue),null!==I&&C.upload&&C.upload.addEventListener("progress",Ke)),C.send(I),y.next({type:qn.Sent}),()=>{C.removeEventListener("error",Z),C.removeEventListener("abort",Z),C.removeEventListener("load",K),C.removeEventListener("timeout",Z),o.reportProgress&&(C.removeEventListener("progress",Ue),null!==I&&C.upload&&C.upload.removeEventListener("progress",Ke)),C.readyState!==C.DONE&&C.abort()}})))}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(Ja))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();const Ms=new p.OlP("XSRF_ENABLED"),Ni=new p.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>"XSRF-TOKEN"}),Ra=new p.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>"X-XSRF-TOKEN"});class po{}let Oa=(()=>{class i{constructor(o,u,d){this.doc=o,this.platform=u,this.cookieName=d,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const o=this.doc.cookie||"";return o!==this.lastCookieString&&(this.parseCount++,this.lastToken=ks(o,this.cookieName),this.lastCookieString=o),this.lastToken}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(H),p.LFG(p.Lbi),p.LFG(Ni))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();function go(i,a){const o=i.url.toLowerCase();if(!(0,p.f3M)(Ms)||"GET"===i.method||"HEAD"===i.method||o.startsWith("http://")||o.startsWith("https://"))return a(i);const u=(0,p.f3M)(po).getToken(),d=(0,p.f3M)(Ra);return null!=u&&!i.headers.has(d)&&(i=i.clone({headers:i.headers.set(d,u)})),a(i)}const Rd=new p.OlP("TRANSLOCO_MESSAGE_FORMAT_CONFIG");var vo=b(6156),yo=b.n(vo);function Od(i,a){return new(yo())(i,a)}function Nd(i,a){const o=Od(i,a),u=o.compile,d=new Map,y=`__${i?.toString()||yo().defaultLocale}__`;return o.compile=function(C){const I=`${y}${C}`,_=d.get(I);if(_)return _;const x=u.call(this,C);return d.set(I,x),x},o}let Pa=(()=>{class i extends rn.rO{constructor(o){super();const{locales:u,enableCache:d=!0,...y}={locales:null,...o};this.messageConfig=y,this.mfFactory=d?Nd:Od,this.messageFormat=this.mfFactory(u,y)}transpile({value:o,params:u={},translation:d,key:y}){if(!o)return o;if((0,rn.Kn)(o)&&u)Object.keys(u).forEach(C=>{const I=super.transpile({value:(0,rn.NA)(o,C),params:(0,rn.NA)(u,C),translation:d,key:y}),_=this.messageFormat.compile(I);o=(0,rn.sO)(o,C,_(u[C]))});else if(!Array.isArray(o)){const C=super.transpile({value:o,params:u,translation:d,key:y});return this.messageFormat.compile(C)(u)}return o}onLangChanged(o){this.setLocale(o)}setLocale(o){this.messageFormat=this.mfFactory(o,this.messageConfig)}static#e=this.\u0275fac=function(u){return new(u||i)(p.LFG(Rd,8))};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac})}return i})();var La=b(6111);let Mc=(()=>{class i{constructor(){this.http=(0,p.f3M)(rp)}getTranslation(o){return this.http.get(`${ws_baseUrl}/assets/i18n/${o}.json`)}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275prov=p.Yz7({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();const tm={path:"dynamic-translation",loadComponent:()=>b.e(42).then(b.bind(b,3830)).then(i=>i)},nm=["en","es"].reduce((i,a)=>(i[a]=()=>b(9872)(`./${a}.json`),i),{}),rm={path:"inline-loaders",loadComponent:()=>b.e(326).then(b.bind(b,6326)).then(i=>i),providers:[(0,rn.iX)({scope:"inline",loader:nm})]},f={path:"lazy-multiple-scopes",loadComponent:()=>b.e(76).then(b.bind(b,1076)).then(i=>i),providers:[(0,rn.IF)('Loading template...')]},m={path:"lazy-scope-alias",loadComponent:()=>b.e(386).then(b.bind(b,8386)).then(i=>i),providers:[(0,rn.IF)('Loading template...')]},v={path:"lazy",loadComponent:()=>b.e(72).then(b.bind(b,9072)).then(i=>i),providers:[(0,rn.iX)("admin-page"),(0,rn.IF)('Loading template...')]};var D=b(3750),w=b(654);function M(i,a){1&i&&(p.TgZ(0,"h6",1),p._uU(1," You can find the source code for this app in the "),p.TgZ(2,"a",21),p._uU(3,"transloco repo"),p.qZA(),p._uU(4,". "),p.qZA())}function A(i,a){if(1&i&&(p.ynx(0),p.TgZ(1,"li",27)(2,"b"),p._uU(3,"Static lang 'en': "),p.qZA(),p._uU(4),p.qZA(),p.BQk()),2&i){const o=a.$implicit;p.xp6(4),p.hij(" ",o("home")," ")}}const N=i=>({value:i});function U(i,a){if(1&i&&(p.ynx(0),p.TgZ(1,"li",22)(2,"b"),p._uU(3,"Regular: "),p.qZA(),p._uU(4),p.qZA(),p.TgZ(5,"li",23)(6,"b"),p._uU(7,"With params: "),p.qZA(),p._uU(8),p.qZA(),p.TgZ(9,"li",24)(10,"b"),p._uU(11,"With translation reuse: "),p.qZA(),p._uU(12),p.qZA(),p.YNc(13,A,5,1,"ng-container",25),p.TgZ(14,"li",26)(15,"b"),p._uU(16,"Current Lang: "),p.qZA(),p._uU(17),p.qZA(),p.BQk()),2&i){const o=a.$implicit,u=a.currentLang,d=p.oxw();p.xp6(4),p.hij("",o("home")," "),p.xp6(4),p.hij("",o("alert",p.VKq(5,N,d.dynamic))," "),p.xp6(4),p.hij(" ",o("a.b.c")," "),p.xp6(),p.Q6J("translocoLang","en|static"),p.xp6(4),p.hij("",u," ")}}function se(i,a){if(1&i&&(p.TgZ(0,"li",28),p._uU(1),p.ALo(2,"transloco"),p.qZA()),2&i){const o=a.$implicit;p.xp6(),p.hij(" ",p.lcZ(2,1,o)," ")}}const ke=()=>({}),ht=[{path:"",redirectTo:"home",pathMatch:"full"},{path:"home",component:(()=>{class i{constructor(){this.isDocs=true,this.dynamic="\u{1f984}",this.key="home",this.translateList=["b","c"]}changeKey(){this.key="home"===this.key?"fromList":"home"}changeParam(){this.dynamic="\u{1f984}"===this.dynamic?"\u{1f984}\u{1f984}\u{1f984}":"\u{1f984}"}static#e=this.\u0275fac=function(u){return new(u||i)};static#t=this.\u0275cmp=p.Xpm({type:i,selectors:[["app-on-push"]],standalone:!0,features:[p.jDz],decls:57,vars:23,consts:[["class","mb"],[1,"mb"],[1,"list-group","structural"],[4,"transloco"],[1,"mtb"],[1,"list-group"],["data-cy","d-regular",1,"list-group-item"],["transloco","home"],["data-cy","d-with-params",1,"list-group-item",3,"click"],["transloco","alert",3,"translocoParams"],["data-cy","d-with-translation-reuse",1,"list-group-item"],["transloco","a.b.c"],["data-cy","d-dynamic-key",1,"list-group-item",3,"click"],[3,"transloco"],["data-cy","d-static-lang-es",1,"list-group-item"],["transloco","home","translocoLang","es|static"],[1,"list-group","pipe"],["data-cy","p-regular",1,"list-group-item"],["data-cy","p-with-params",1,"list-group-item"],["data-cy","p-with-translation-reuse",1,"list-group-item"],["data-cy","p-static-lang-en",1,"list-group-item"],["target","_blank","href","https://github.com/jsverse/transloco/tree/master/apps/transloco-playground"],["data-cy","regular",1,"list-group-item"],["data-cy","with-params",1,"list-group-item"],["data-cy","with-translation-reuse",1,"list-group-item"],[4,"transloco","translocoLang"],["data-cy","current-lang",1,"list-group-item"],["data-cy","static-lang-en",1,"list-group-item"],["data-cy","translation-loop",1,"list-group-item"],["class","list-group-item","data-cy","translation-loop"]],template:function(u,d){1&u&&(p.YNc(0,M,5,0,"h6",0),p.TgZ(1,"h3",1),p._uU(2,"Structural Directive"),p.qZA(),p.TgZ(3,"ul",2),p.YNc(4,U,18,7,"ng-container",3),p.qZA(),p.TgZ(5,"h3",4),p._uU(6,"Directive"),p.qZA(),p.TgZ(7,"ul",5)(8,"li",6)(9,"b"),p._uU(10,"Regular: "),p.qZA(),p._UZ(11,"span",7),p.qZA(),p.TgZ(12,"li",8),p.NdJ("click",function(){return d.changeParam()}),p.TgZ(13,"b"),p._uU(14,"(click) With params: "),p.qZA(),p._UZ(15,"span",9),p.qZA(),p.TgZ(16,"li",10)(17,"b"),p._uU(18,"With translation reuse: "),p.qZA(),p._UZ(19,"span",11),p.qZA(),p.TgZ(20,"li",12),p.NdJ("click",function(){return d.changeKey()}),p._uU(21," (click) "),p.TgZ(22,"b"),p._uU(23,"Dynamic key: "),p.qZA(),p._UZ(24,"span",13),p.qZA(),p.TgZ(25,"li",14)(26,"b"),p._uU(27,"Static lang 'es': "),p.qZA(),p._UZ(28,"span",15),p.qZA()(),p.TgZ(29,"h3",4),p._uU(30,"Pipe"),p.qZA(),p.TgZ(31,"ul",16)(32,"li",17)(33,"b"),p._uU(34,"Regular: "),p.qZA(),p._uU(35),p.ALo(36,"transloco"),p.qZA(),p.TgZ(37,"li",18)(38,"b"),p._uU(39,"With params: "),p.qZA(),p._uU(40),p.ALo(41,"transloco"),p.qZA(),p.TgZ(42,"li",19)(43,"b"),p._uU(44,"With translation reuse: "),p.qZA(),p._uU(45),p.ALo(46,"transloco"),p.qZA(),p.TgZ(47,"li",20)(48,"b"),p._uU(49,"Static lang 'en': "),p.qZA(),p._uU(50),p.ALo(51,"transloco"),p.qZA()(),p.TgZ(52,"h3",4),p._uU(53,"Translation in ngFor"),p.qZA(),p.TgZ(54,"ul",5),p.SjG(55,se,3,3,"li",29,p.x6l),p.qZA()),2&u&&(p.um2(0,d.isDocs?0:-1),p.xp6(15),p.Q6J("translocoParams",p.VKq(18,N,d.dynamic)),p.xp6(9),p.Q6J("transloco",d.key),p.xp6(11),p.hij("",p.lcZ(36,7,"home")," "),p.xp6(5),p.hij("",p.xi3(41,9,"alert",p.VKq(20,N,d.dynamic))," "),p.xp6(5),p.hij(" ",p.lcZ(46,12,"a.b.c")," "),p.xp6(5),p.hij("",p.Dn7(51,14,"home",p.DdM(22,ke),"en|static")," "),p.xp6(5),p.wJu(d.translateList))},dependencies:[rn.y4,D.K,w.O],changeDetection:0})}return i})()},v,{path:"transpilers",loadComponent:()=>b.e(494).then(b.bind(b,2494)).then(i=>i)},tm,rm,m,f,{path:"scope-sharing",loadComponent:()=>b.e(867).then(b.bind(b,7867)).then(i=>i),providers:[(0,rn.iX)({scope:"todos-page",alias:"todos"}),(0,rn.IF)('Loading template...')]},{path:"multi-langs",loadComponent:()=>b.e(830).then(b.bind(b,2830)).then(i=>i)},{path:"locale",loadComponent:()=>b.e(332).then(b.bind(b,3332)).then(i=>i)}];(function zf(i,a){return(0,p.iPO)({rootComponent:i,...pu(a)})})(ud,{providers:[(0,p.RIp)(ll),function Kg(...i){const a=[rp,Cd,Ec,{provide:Ia,useExisting:Ec},{provide:Sa,useExisting:Cd},{provide:Ss,useValue:go,multi:!0},{provide:Ms,useValue:!0},{provide:po,useClass:Oa}];for(const o of i)a.push(...o.\u0275providers);return(0,p.MR2)(a)}(),(0,rn.h7)({config:{prodMode:!(0,p.X6Q)(),availableLangs:[{id:"en",label:"English"},{id:"es",label:"Spanish"}],reRenderOnLangChange:!0,fallbackLang:"es",defaultLang:"en",missingHandler:{useFallbackTranslation:!1}},loader:Mc}),(0,La.mi)({langToLocaleMapping:{en:"en-US",es:"es-ES"}}),function Sc(i){return(0,p.MR2)([{provide:Rd,useValue:i},{provide:rn.Fs,useClass:Pa}])}(),function Vh(i,...a){return(0,p.MR2)([{provide:nn,multi:!0,useValue:i},[],{provide:os,useFactory:va,deps:[kn]},{provide:p.tb,multi:!0,useFactory:Wh},a.map(o=>o.\u0275providers)])}(ht)]}).catch(i=>console.error(i))},6111:(Fe,W,b)=>{"use strict";b.d(W,{tz:()=>P.tz,ED:()=>J,Z_:()=>p.Z,mi:()=>V});var p=b(3784),P=b(5833),le=(b(475),b(1337),b(2132),b(921),b(2440),b(9212));let J=(()=>{class Ve{static#e=this.\u0275fac=function(We){return new(We||Ve)};static#t=this.\u0275mod=le.oAB({type:Ve});static#n=this.\u0275inj=le.cJS({})}return Ve})();var O=b(8798);function V(Ve){const we={...P.u_,...Ve};return[ie(we.localeConfig),Le(we.defaultLocale),Re(we.defaultCurrency),X(we.langToLocaleMapping),ce(we.localeToCurrencyMapping),Ee(O.CX),Ne(O.LZ)]}function ie(Ve){return(0,le.MR2)([{provide:P.pL,useValue:Ve}])}function X(Ve){return(0,le.MR2)([{provide:P.NC,useValue:Ve}])}function ce(Ve){return(0,le.MR2)([{provide:P.tz,useValue:Ve}])}function Le(Ve){return(0,le.MR2)([{provide:P.oV,useValue:Ve}])}function Re(Ve){return(0,le.MR2)([{provide:P.fB,useValue:Ve}])}function Ee(Ve){return(0,le.MR2)([{provide:O.or,useClass:Ve}])}function Ne(Ve){return(0,le.MR2)([{provide:O.um,useClass:Ve}])}},3199:(Fe,W,b)=>{"use strict";b.d(W,{ZU:()=>z,cw:()=>B,nq:()=>j,wn:()=>k});var p=b(6671);const P=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;function B($){return"string"==typeof $&&!!$.match(RegExp("(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE|art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang|es-419)|([a-z]{2}-[A-Z]{2})|([a-z]{2}-[A-Za-z]{4})"))}function k($,J,O){const V=(0,p.He)($);return null!==V?new Intl.NumberFormat(J,O).format(V):""}function j($,J,O){return H($)?new Intl.DateTimeFormat(J,O).format($):""}function H($){return $ instanceof Date&&!isNaN($)}function z($){let J;if("string"==typeof $&&($=$.trim()),H($))return $;if(!isNaN($-parseFloat($)))return new Date(parseFloat($));if("string"==typeof $&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test($)){const[O,V,ie]=$.split("-").map(X=>parseInt(X,10));return new Date(O,V-1,ie)}return"string"==typeof $&&(J=$.match(P))?function le($){const J=new Date(0);let O=0,V=0;const X=$[8]?J.setUTCHours:J.setHours;$[9]&&(O=+($[9]+$[10]),V=+($[9]+$[11])),($[8]?J.setUTCFullYear:J.setFullYear).call(J,+$[1],+$[2]-1,+$[3]);const ce=+($[4]||"0")-O,Le=+($[5]||"0")-V,Re=+($[6]||"0"),Ee=Math.round(1e3*parseFloat("0."+($[7]||0)));return X.call(J,ce,Le,Re,Ee),J}(J):new Date($)}},921:(Fe,W,b)=>{"use strict";b.d(W,{K:()=>B});var p=b(9212),P=b(3784);let B=(()=>{class k{constructor(){this.localeService=(0,p.f3M)(P.Z),this.cdr=(0,p.f3M)(p.sBO),this.localeChangeSub=this.localeService.localeChanges$.subscribe(()=>this.cdr.markForCheck())}getLocale(H){return H||this.localeService.getLocale()}ngOnDestroy(){this.localeChangeSub?.unsubscribe(),this.localeChangeSub=null}static#e=this.\u0275fac=function(z){return new(z||k)};static#t=this.\u0275prov=p.Yz7({token:k,factory:k.\u0275fac})}return k})()},475:(Fe,W,b)=>{"use strict";b.d(W,{n:()=>H});var p=b(9212),P=b(6671),B=b(808),k=b(5833),j=b(921);let H=(()=>{class z extends j.K{constructor(){super(...arguments),this.localeConfig=(0,p.f3M)(k.pL)}transform($,J="symbol",O={},V,ie){if((0,P.kK)($))return"";ie=this.getLocale(ie);const X={...(0,B.j)(ie,"currency",this.localeConfig),...O,currencyDisplay:J,currency:V||this.localeService._resolveCurrencyCode()};return this.localeService.localizeNumber($,"currency",ie,X)}static#e=this.\u0275fac=(()=>{let $;return function(O){return($||($=p.n5z(z)))(O||z)}})();static#t=this.\u0275pipe=p.Yjl({name:"translocoCurrency",type:z,pure:!1,standalone:!0})}return z})()},1337:(Fe,W,b)=>{"use strict";b.d(W,{v:()=>H});var p=b(9212),P=b(6671),B=b(808),k=b(5833),j=b(921);let H=(()=>{class z extends j.K{constructor(){super(...arguments),this.localeConfig=(0,p.f3M)(k.pL)}transform($,J={},O){return(0,P.kK)($)?"":(O=this.getLocale(O),this.localeService.localizeDate($,O,{...(0,B.j)(O,"date",this.localeConfig),...J}))}static#e=this.\u0275fac=(()=>{let $;return function(O){return($||($=p.n5z(z)))(O||z)}})();static#t=this.\u0275pipe=p.Yjl({name:"translocoDate",type:z,pure:!1,standalone:!0})}return z})()},2132:(Fe,W,b)=>{"use strict";b.d(W,{q:()=>H});var p=b(9212),P=b(6671),B=b(808),k=b(5833),j=b(921);let H=(()=>{class z extends j.K{constructor(){super(...arguments),this.localeConfig=(0,p.f3M)(k.pL)}transform($,J={},O){if((0,P.kK)($))return"";O=this.getLocale(O);const V={...(0,B.j)(O,"decimal",this.localeConfig),...J};return this.localeService.localizeNumber($,"decimal",O,V)}static#e=this.\u0275fac=(()=>{let $;return function(O){return($||($=p.n5z(z)))(O||z)}})();static#t=this.\u0275pipe=p.Yjl({name:"translocoDecimal",type:z,pure:!1,standalone:!0})}return z})()},2440:(Fe,W,b)=>{"use strict";b.d(W,{X:()=>H});var p=b(9212),P=b(6671),B=b(808),k=b(5833),j=b(921);let H=(()=>{class z extends j.K{constructor(){super(...arguments),this.localeConfig=(0,p.f3M)(k.pL)}transform($,J={},O){if((0,P.kK)($))return"";O=this.getLocale(O);const V={...(0,B.j)(O,"percent",this.localeConfig),...J};return this.localeService.localizeNumber($,"percent",O,V)}static#e=this.\u0275fac=(()=>{let $;return function(O){return($||($=p.n5z(z)))(O||z)}})();static#t=this.\u0275pipe=p.Yjl({name:"translocoPercent",type:z,pure:!1,standalone:!0})}return z})()},808:(Fe,W,b)=>{"use strict";function p(P,B,k){const j=k.global?.[B]??{},H=k.localeBased?.[P]??{};return Reflect.has(H,B)?{...j,...H[B]}:j}b.d(W,{j:()=>p})},5833:(Fe,W,b)=>{"use strict";b.d(W,{pL:()=>z,tz:()=>le,fB:()=>j,oV:()=>k,NC:()=>H,u_:()=>B});var p=b(9212);const B={localeConfig:{global:{},localeBased:{}},defaultLocale:"en-US",defaultCurrency:"USD",localeToCurrencyMapping:{"aa-DJ":"DJF","aa-ER":"ERN","aa-ET":"ETB","ab-GE":"ETB","ab-TR":"ETB","af-BW":"ETB","af-NA":"ETB","af-ZA":"ZAR","ak-GH":"ZAR","am-ET":"ETB","am-IL":"ETB","ar-AE":"AED","ar-AR":"AED","ar-BH":"BHD","ar-CM":"BHD","ar-CY":"BHD","ar-DJ":"BHD","ar-DZ":"DZD","ar-EG":"EGP","ar-EH":"EGP","ar-ER":"EGP","ar-IL":"EGP","ar-IQ":"IQD","ar-IR":"IQD","ar-JO":"JOD","ar-KE":"JOD","ar-KM":"JOD","ar-KW":"KWD","ar-LB":"LBP","ar-LY":"LYD","ar-MA":"MAD","ar-ML":"MAD","ar-MR":"MAD","ar-NE":"MAD","ar-NG":"MAD","ar-OM":"OMR","ar-PS":"OMR","ar-QA":"QAR","ar-SA":"SAR","ar-SD":"SDD","ar-SS":"SDD","ar-SY":"SYP","ar-TD":"SYP","ar-TJ":"SYP","ar-TN":"TND","ar-TR":"TND","ar-YE":"YER","as-IN":"INR","av-RU":"INR","ay-BO":"INR","ay-PE":"INR","az-AZ":"AZM","ba-RU":"AZM","be-BY":"BYR","be-PL":"BYR","be-UA":"BYR","bg-BG":"BGN","bg-GR":"BGN","bg-MD":"BGN","bg-RO":"BGN","bg-TR":"BGN","bg-UA":"BGN","bi-VU":"BGN","bm-ML":"BGN","bn-BD":"BDT","bn-GB":"BDT","bn-IN":"INR","bn-NP":"INR","bo-CN":"CNY","bo-IN":"INR","bo-NP":"INR","br-FR":"EUR","bs-BA":"BAM","ca-AD":"EUR","ca-ES":"EUR","ca-FR":"EUR","ca-IT":"EUR","ce-RU":"EUR","ch-GU":"EUR","ch-MP":"EUR","co-FR":"EUR","cs-CZ":"CZK","cv-RU":"RUB","cy-AR":"RUB","cy-GB":"GBP","da-DE":"GBP","da-DK":"DKK","da-GL":"DKK","da-IS":"DKK","de-AT":"EUR","de-BE":"EUR","de-BR":"EUR","de-CA":"EUR","de-CH":"CHF","de-CZ":"CHF","de-DE":"EUR","de-DK":"EUR","de-HU":"EUR","de-IT":"EUR","de-KZ":"EUR","de-LI":"EUR","de-LU":"EUR","de-NA":"EUR","de-PL":"EUR","de-PY":"EUR","de-RO":"EUR","de-SK":"EUR","de-US":"EUR","dv-IN":"EUR","dv-MV":"MVR","dz-BT":"BTN","dz-IN":"BTN","ee-GH":"BTN","ee-TG":"BTN","el-AL":"BTN","el-CY":"EUR","el-DE":"EUR","el-EG":"EUR","el-GB":"EUR","el-GR":"EUR","el-IT":"EUR","el-RO":"EUR","el-TR":"EUR","el-UA":"EUR","en-AC":"EUR","en-AG":"XCD","en-AI":"XCD","en-AS":"XCD","en-AU":"AUD","en-AW":"AUD","en-BB":"AUD","en-BE":"AUD","en-BM":"AUD","en-BN":"AUD","en-BS":"AUD","en-BW":"BWP","en-BZ":"BWP","en-CA":"CAD","en-CC":"CAD","en-CK":"CAD","en-CM":"CAD","en-CN":"CAD","en-CX":"CAD","en-DE":"CAD","en-DG":"CAD","en-DM":"CAD","en-DO":"CAD","en-ES":"CAD","en-ET":"CAD","en-FI":"CAD","en-FJ":"CAD","en-FK":"CAD","en-FM":"CAD","en-FR":"CAD","en-GB":"GBP","en-GD":"GBP","en-GG":"GBP","en-GH":"GBP","en-GI":"GBP","en-GM":"GBP","en-GU":"GBP","en-GY":"GBP","en-HK":"HKD","en-HN":"HKD","en-IE":"EUR","en-IL":"EUR","en-IM":"EUR","en-IN":"INR","en-IO":"INR","en-IT":"INR","en-JE":"INR","en-JM":"INR","en-KE":"INR","en-KI":"INR","en-KN":"INR","en-KY":"INR","en-LB":"INR","en-LC":"INR","en-LK":"INR","en-LR":"INR","en-LS":"INR","en-MG":"INR","en-MH":"INR","en-MP":"INR","en-MS":"INR","en-MT":"INR","en-MU":"INR","en-MW":"INR","en-MY":"INR","en-NA":"INR","en-NF":"INR","en-NG":"NGN","en-NL":"NGN","en-NR":"NGN","en-NU":"NGN","en-NZ":"NZD","en-PA":"NZD","en-PG":"NZD","en-PH":"PHP","en-PI":"PHP","en-PK":"PHP","en-PM":"PHP","en-PN":"PHP","en-PR":"PHP","en-PW":"PHP","en-RW":"PHP","en-SB":"PHP","en-SC":"PHP","en-SG":"SGD","en-SH":"SGD","en-SL":"SGD","en-SS":"SGD","en-SZ":"SGD","en-TA":"SGD","en-TC":"SGD","en-TK":"SGD","en-TO":"SGD","en-TT":"SGD","en-TV":"SGD","en-TZ":"SGD","en-UD":"SGD","en-UG":"SGD","en-UM":"SGD","en-US":"USD","en-VC":"USD","en-VG":"USD","en-VI":"USD","en-VU":"USD","en-WS":"USD","en-ZA":"ZAR","en-ZM":"ZAR","en-ZW":"ZWD","eo-EO":"ZWD","eo-SM":"ZWD","es-AD":"ZWD","es-AR":"ARS","es-BO":"BOB","es-BZ":"BOB","es-CL":"CLP","es-CO":"COP","es-CR":"CRC","es-CU":"CRC","es-DE":"CRC","es-DO":"DOP","es-EA":"DOP","es-EC":"USD","es-ES":"EUR","es-GQ":"EUR","es-GT":"GTQ","es-HN":"HNL","es-IC":"HNL","es-LA":"HNL","es-MA":"HNL","es-MX":"MXN","es-NI":"NIO","es-PA":"PAB","es-PE":"PEN","es-PH":"PEN","es-PR":"USD","es-PY":"PYG","es-SV":"SVC","es-TT":"SVC","es-US":"USD","es-UY":"UYU","es-VE":"VEB","et-EE":"EEK","et-FI":"EEK","eu-ES":"EUR","eu-FR":"EUR","fa-AE":"EUR","fa-AF":"EUR","fa-IQ":"EUR","fa-IR":"IRR","fa-OM":"IRR","fa-PK":"IRR","fa-QA":"IRR","fa-TJ":"IRR","fb-LT":"IRR","ff-GN":"IRR","ff-MR":"IRR","ff-SN":"IRR","fi-FI":"EUR","fi-RU":"EUR","fi-SE":"EUR","fj-FJ":"EUR","fo-FO":"DKK","fr-AD":"DKK","fr-BE":"EUR","fr-BF":"EUR","fr-BI":"EUR","fr-BJ":"EUR","fr-BL":"EUR","fr-CA":"CAD","fr-CD":"CAD","fr-CF":"CAD","fr-CG":"CAD","fr-CH":"CHF","fr-CI":"CHF","fr-CM":"CHF","fr-CP":"CHF","fr-DJ":"CHF","fr-DZ":"CHF","fr-FR":"EUR","fr-GA":"EUR","fr-GB":"EUR","fr-GF":"EUR","fr-GN":"EUR","fr-GP":"EUR","fr-GQ":"EUR","fr-HT":"EUR","fr-IT":"EUR","fr-KM":"EUR","fr-LB":"EUR","fr-LU":"EUR","fr-MA":"EUR","fr-MC":"EUR","fr-MF":"EUR","fr-MG":"EUR","fr-ML":"EUR","fr-MQ":"EUR","fr-MR":"EUR","fr-MU":"EUR","fr-NC":"EUR","fr-NE":"EUR","fr-PF":"EUR","fr-PM":"EUR","fr-RE":"EUR","fr-RW":"EUR","fr-SC":"EUR","fr-SN":"EUR","fr-SY":"EUR","fr-TD":"EUR","fr-TF":"EUR","fr-TG":"EUR","fr-TN":"EUR","fr-US":"EUR","fr-VU":"EUR","fr-WF":"EUR","fr-YT":"EUR","fy-NL":"EUR","ga-GB":"EUR","ga-IE":"EUR","gd-GB":"GBP","gl-ES":"EUR","gl-PT":"EUR","gn-AR":"EUR","gn-BO":"EUR","gn-PY":"EUR","gu-IN":"INR","gu-KE":"INR","gv-IM":"INR","he-IL":"ILS","hi-FJ":"ILS","hi-IN":"INR","hi-NP":"INR","hi-UG":"INR","hi-ZA":"INR","ho-PG":"INR","hr-AT":"INR","hr-BA":"INR","hr-DE":"INR","hr-HR":"HRK","hr-HU":"HRK","hr-IT":"HRK","ht-HT":"HTG","hu-AT":"HTG","hu-HU":"HUF","hu-IL":"HUF","hu-RO":"HUF","hu-RS":"HUF","hu-SI":"HUF","hu-SK":"HUF","hu-UA":"HUF","hy-AM":"AMD","hy-CY":"AMD","hy-GE":"AMD","hy-IR":"AMD","hy-LB":"AMD","hy-SY":"AMD","hy-TR":"AMD","ia-SE":"AMD","id-ID":"IDR","id-NL":"IDR","ig-NG":"NGN","ii-CN":"NGN","ik-US":"NGN","is-IS":"ISK","it-AU":"ISK","it-BR":"ISK","it-CA":"ISK","it-CH":"CHF","it-DE":"CHF","it-FR":"CHF","it-GB":"CHF","it-HR":"CHF","it-IT":"EUR","it-SI":"EUR","it-SM":"EUR","it-US":"EUR","it-VA":"EUR","iu-GL":"EUR","ja-BR":"EUR","ja-JP":"JPY","jv-ID":"JPY","jv-MY":"JPY","ka-GE":"GEL","ka-IR":"GEL","ka-TR":"GEL","kg-CD":"GEL","ki-KE":"GEL","kj-NA":"GEL","kl-DK":"GEL","kl-GL":"DKK","km-KH":"KHR","kn-IN":"INR","ko-BR":"INR","ko-CN":"INR","ko-JP":"INR","ko-KP":"INR","ko-KR":"KRW","ko-US":"KRW","ks-GB":"KRW","ks-IN":"INR","ks-PK":"INR","ku-TR":"TRY","kw-GB":"GBP","la-VA":"GBP","lb-LU":"GBP","lg-UG":"UGX","li-NL":"EUR","ln-CD":"EUR","ln-CG":"EUR","lo-LA":"LAK","lt-LT":"LTL","lu-CD":"LTL","lv-LV":"LVL","mg-MG":"MGA","mh-MH":"MGA","mi-NZ":"NZD","mk-AL":"NZD","mk-GR":"NZD","mk-MK":"MKD","ml-AE":"MKD","ml-BH":"MKD","ml-GB":"MKD","ml-IL":"MKD","ml-IN":"INR","ml-MY":"INR","ml-QA":"INR","ml-SG":"INR","mr-IN":"INR","ms-BN":"INR","ms-CC":"INR","ms-ID":"INR","ms-MY":"MYR","ms-SG":"MYR","mt-MT":"EUR","my-BD":"EUR","my-MM":"MMK","na-NR":"MMK","nb-NO":"NOK","nb-SJ":"NOK","nd-ZW":"NOK","ne-BT":"NOK","ne-IN":"NOK","ne-NP":"INR","ng-NA":"INR","nl-AW":"AWG","nl-BE":"EUR","nl-DE":"EUR","nl-FR":"EUR","nl-NL":"EUR","nl-SR":"EUR","nn-NO":"NOK","nr-ZA":"ZAR","nv-US":"ZAR","ny-MW":"ZAR","ny-MZ":"ZAR","ny-ZM":"ZAR","ny-ZW":"ZAR","oc-FR":"EUR","om-ET":"ETB","om-KE":"KES","om-SO":"KES","or-IN":"INR","os-GE":"INR","pa-IN":"INR","pl-CZ":"INR","pl-DE":"INR","pl-IL":"INR","pl-PL":"PLN","pl-RO":"PLN","pl-SK":"PLN","pl-UA":"PLN","ps-AE":"PLN","ps-AF":"AFN","ps-IR":"AFN","ps-PK":"AFN","pt-AG":"AFN","pt-AO":"AFN","pt-BR":"BRL","pt-CV":"BRL","pt-FR":"BRL","pt-GW":"BRL","pt-MO":"BRL","pt-MZ":"BRL","pt-PT":"EUR","pt-ST":"EUR","pt-TL":"EUR","qu-BO":"EUR","qu-PE":"EUR","rm-CH":"EUR","rn-BI":"EUR","ro-HU":"EUR","ro-IL":"EUR","ro-MD":"EUR","ro-RO":"RON","ro-RS":"RON","ro-UA":"RON","ru-BY":"RON","ru-CN":"RON","ru-DE":"RON","ru-EE":"RON","ru-FI":"RON","ru-GE":"RON","ru-IL":"RON","ru-KG":"RON","ru-KZ":"RON","ru-LT":"RON","ru-LV":"RON","ru-MD":"RON","ru-MN":"RON","ru-RU":"RUB","ru-SJ":"RUB","ru-TM":"RUB","ru-UA":"UAH","ru-US":"UAH","ru-UZ":"UAH","rw-CD":"UAH","rw-RW":"RWF","rw-UG":"RWF","sa-IN":"INR","se-FI":"INR","se-NO":"NOK","se-SE":"NOK","sg-CF":"NOK","si-LK":"LKR","sk-HU":"LKR","sk-RS":"LKR","sk-SK":"EUR","sl-AT":"EUR","sl-HU":"EUR","sl-IT":"EUR","sl-SI":"EUR","sm-AS":"EUR","sm-WS":"EUR","sn-ZW":"EUR","so-DJ":"DJF","so-ET":"ETB","so-KE":"ETB","so-SO":"SOS","sq-AL":"ALL","sq-GR":"ALL","sq-ME":"ALL","sq-MK":"MKD","sq-RS":"MKD","sq-TR":"MKD","sr-RS":"RSD","ss-LS":"RSD","ss-SZ":"RSD","ss-ZA":"ZAR","st-LS":"ZAR","st-ZA":"ZAR","su-ID":"ZAR","sv-AX":"ZAR","sv-FI":"EUR","sv-SE":"SEK","sw-BI":"SEK","sw-CD":"SEK","sw-KE":"SEK","sw-MZ":"SEK","sw-SO":"SEK","sw-TZ":"SEK","sw-UG":"SEK","sw-YT":"SEK","sw-ZA":"SEK","ta-IN":"INR","ta-LK":"INR","ta-MU":"INR","ta-MY":"INR","ta-RE":"INR","ta-SG":"INR","te-IN":"INR","th-TH":"THB","ti-ER":"ERN","ti-ET":"ETB","ti-IL":"ETB","tk-AF":"ETB","tk-IR":"ETB","tk-TM":"TMM","tl-PH":"PHP","tl-US":"PHP","tn-BW":"PHP","tn-NA":"PHP","tn-ZA":"ZAR","tn-ZW":"ZAR","to-TO":"ZAR","tr-BG":"ZAR","tr-CY":"TRY","tr-DE":"TRY","tr-GR":"TRY","tr-MK":"TRY","tr-NL":"TRY","tr-RO":"TRY","tr-TR":"TRY","tr-UA":"TRY","tr-UZ":"TRY","ts-MZ":"TRY","ts-SZ":"TRY","ts-ZA":"ZAR","tt-RU":"RUB","ty-PF":"RUB","uk-PL":"RUB","uk-SK":"RUB","uk-UA":"UAH","ur-IN":"UAH","ur-MU":"UAH","ur-PK":"PKR","ve-ZA":"ZAR","ve-ZW":"ZAR","vi-CN":"ZAR","vi-US":"ZAR","vi-VN":"VND","wa-BE":"EUR","xh-LS":"EUR","xh-ZA":"ZAR","yi-UA":"ZAR","yo-BJ":"ZAR","yo-NG":"NGN","za-CN":"NGN","zh-CN":"CNY","zh-HK":"HKD","zh-TW":"TWD","zu-LS":"TWD","zu-MW":"TWD","zu-MZ":"TWD","zu-SZ":"TWD","zu-ZA":"ZAR"},langToLocaleMapping:{}},k=new p.OlP("TRANSLOCO_LOCALE_DEFAULT_LOCALE"),j=new p.OlP("TRANSLOCO_LOCALE_DEFAULT_CURRENCY"),H=new p.OlP("TRANSLOCO_LOCALE_LANG_MAPPING"),z=new p.OlP("TRANSLOCO_LOCALE_CONFIG"),le=new p.OlP("TRANSLOCO_LOCALE_CURRENCY_MAPPING")},3784:(Fe,W,b)=>{"use strict";b.d(W,{Z:()=>ce});var p=b(9212),P=b(6671),B=b(5619),k=b(7398),j=b(2181),H=b(2737),z=b(9360),le=b(8251);function J(Le,Re){return Le===Re}var O=b(3199),V=b(808),ie=b(5833),X=b(8798);let ce=(()=>{class Le{constructor(){this.translocoService=(0,p.f3M)(P.Vn),this.langLocaleMapping=(0,p.f3M)(ie.NC),this.defaultLocale=(0,p.f3M)(ie.oV),this.defaultCurrency=(0,p.f3M)(ie.fB),this.localeCurrencyMapping=(0,p.f3M)(ie.tz),this.numberTransformer=(0,p.f3M)(X.um),this.dateTransformer=(0,p.f3M)(X.or),this.localeConfig=(0,p.f3M)(ie.pL),this._locale=this.defaultLocale||this.toLocale(this.translocoService.getActiveLang()),this.locale=new B.X(this._locale),this.subscription=this.translocoService.langChanges$.pipe((0,k.U)(Ee=>this.toLocale(Ee)),(0,j.h)(Boolean)).subscribe(Ee=>this.setLocale(Ee)),this.localeChanges$=this.locale.asObservable().pipe(function $(Le,Re=H.y){return Le=Le??J,(0,z.e)((Ee,Ne)=>{let Ve,we=!0;Ee.subscribe((0,le.x)(Ne,de=>{const We=Re(de);(we||!Le(Ve,We))&&(we=!1,Ve=We,Ne.next(de))}))})}())}getLocale(){return this._locale}setLocale(Ee){(0,O.cw)(Ee)?(this.locale.next(Ee),this._locale=Ee):console.error(`${Ee} isn't a valid locale format`)}getCurrencySymbol(Ee=this.getLocale()){return new Intl.NumberFormat(Ee,{style:"currency",currencyDisplay:"symbol",currency:this.localeCurrencyMapping[Ee],minimumFractionDigits:0,maximumFractionDigits:0}).format(0).split((0).toString()).map(de=>de.trim()).find(de=>!!de)}localizeDate(Ee,Ne=this.getLocale(),Ve={}){const we=Ve??(0,V.j)(Ne,"date",this.localeConfig);return this.dateTransformer.transform((0,O.ZU)(Ee),Ne,we)}localizeNumber(Ee,Ne,Ve=this.getLocale(),we){let de=we??(0,V.j)(Ve,Ne,this.localeConfig);return"currency"===Ne&&(de={...de,currency:de.currency||this._resolveCurrencyCode(Ve)}),this.numberTransformer.transform(Ee,Ne,Ve,de)}_resolveCurrencyCode(Ee=this.getLocale()){return this.localeCurrencyMapping[Ee]||this.defaultCurrency}ngOnDestroy(){this.subscription?.unsubscribe(),this.subscription=null}toLocale(Ee){return this.langLocaleMapping[Ee]?this.langLocaleMapping[Ee]:(0,O.cw)(Ee)?Ee:""}static#e=this.\u0275fac=function(Ne){return new(Ne||Le)};static#t=this.\u0275prov=p.Yz7({token:Le,factory:Le.\u0275fac,providedIn:"root"})}return Le})()},8798:(Fe,W,b)=>{"use strict";b.d(W,{CX:()=>j,LZ:()=>H,or:()=>B,um:()=>k});var p=b(9212),P=b(3199);const B=new p.OlP("TRANSLOCO_DATE_TRANSFORMER"),k=new p.OlP("TRANSLOCO_NUMBER_TRANSFORMER");class j{transform(le,$,J){return(0,P.nq)(le,$,J)}}class H{transform(le,$,J,O){return(0,P.wn)(le,J,{...O,style:$})}}},6671:(Fe,W,b)=>{"use strict";b.d(W,{rO:()=>$.rO,Hn:()=>J.H,Fs:()=>$.Fs,KI:()=>P.K,y4:()=>H,Vn:()=>p.Vn,NA:()=>xe.NA,kK:()=>xe.kK,Kn:()=>xe.Kn,h7:()=>Le,_1:()=>ye,IF:()=>Ve,iX:()=>Ne,sO:()=>xe.sO,He:()=>xe.He});var p=b(9412),P=b(3750),k=(b(654),b(9212));let H=(()=>{class ne{static#e=this.\u0275fac=function(ut){return new(ut||ne)};static#t=this.\u0275mod=k.oAB({type:ne});static#n=this.\u0275inj=k.cJS({})}return ne})();var z=b(450),le=b(4747),$=b(1433),J=b(2666),O=b(6149),V=b(6004),ie=b(7247),X=b(146),ce=b(9752);function Le(ne){const Ye=[we($.rO),We(ie.E),ee(X.p),de(ce.i)];return ne.config&&Ye.push(function Re(ne){return(0,k.MR2)([{provide:le.hG,useValue:(0,le.$Z)(ne)}])}(ne.config)),ne.loader&&Ye.push(function Ee(ne){return(0,k.MR2)([{provide:z.K,useClass:ne}])}(ne.loader)),Ye}function Ne(...ne){return ne.map(Ye=>({provide:J.H,useValue:Ye,multi:!0}))}function Ve(ne){return{provide:O.d,useValue:ne}}function we(ne){return(0,k.MR2)([{provide:$.Fs,useClass:ne,deps:[le.hG]}])}function de(ne){return(0,k.MR2)([{provide:ce.L,useClass:ne,deps:[le.hG]}])}function We(ne){return(0,k.MR2)([{provide:ie.A,useClass:ne}])}function ee(ne){return(0,k.MR2)([{provide:X.e,useClass:ne}])}function ye(ne){return{provide:V.v,useValue:ne}}new k.OlP("TRANSLOCO_TEST_LANGS - Available testing languages"),new k.OlP("TRANSLOCO_TEST_OPTIONS - Testing options");var xe=b(312)},312:(Fe,W,b)=>{"use strict";function p(ee){return ee&&ee.constructor&&"function"==typeof ee.constructor.isBuffer&&ee.constructor.isBuffer(ee)}function P(ee){return ee}function B(ee,ye){const Se=(ye=ye||{}).delimiter||".",G=ye.maxDepth,Y=ye.transformKey||P,re={};return function he(xe,ne,Ye){Ye=Ye||1,Object.keys(xe).forEach(function(tt){const ut=xe[tt],qe=ye.safe&&Array.isArray(ut),Tt=Object.prototype.toString.call(ut),wt=p(ut),kt="[object Object]"===Tt||"[object Array]"===Tt,Ut=ne?ne+Se+Y(tt):Y(tt);if(!qe&&!wt&&kt&&Object.keys(ut).length&&(!ye.maxDepth||Ye0&&(qe=xe(ut.shift()),Tt=xe(ut[0]))}wt[qe]=k(ee[tt],ye)}),re}function j(ee,ye){return ee&&(Object.prototype.hasOwnProperty.call(ee,ye)?ee[ye]:ye.split(".").reduce((Se,G)=>Se?.[G],ee))}function H(ee,ye,Se){ee={...ee};const G=ye.split("."),Y=G.length-1;return G.reduce((re,he,xe)=>(re[he]=xe===Y?Se:Array.isArray(re[he])?re[he].slice():{...re[he]},re&&re[he]),ee),ee}function z(ee){return ee?Array.isArray(ee)?ee.length:V(ee)?Object.keys(ee).length:ee?ee.length:0:0}function le(ee){return 0===z(ee)}function $(ee){return"function"==typeof ee}function J(ee){return"string"==typeof ee}function V(ee){return!!ee&&"object"==typeof ee&&!Array.isArray(ee)}function X(ee){return ee.replace(/(?:^\w|[A-Z]|\b\w)/g,(ye,Se)=>0==Se?ye.toLowerCase():ye.toUpperCase()).replace(/\s+|_|-|\//g,"")}function Le(ee){return null==ee}function Re(ee){return!1===Le(ee)}function Ee(ee){return function O(ee){return"number"==typeof ee}(ee)?ee:J(ee)&&!isNaN(Number(ee)-parseFloat(ee))?Number(ee):null}function Ne(ee){return ee&&"string"==typeof ee.scope}function Ve(ee){return Array.isArray(ee)&&ee.every(Ne)}function we(ee){return ee&&V(ee.loader)}function de(ee){return k(ee)}function We(ee){return B(ee,{safe:!0})}b.d(W,{xH:()=>We,NA:()=>j,E4:()=>we,$K:()=>Re,xb:()=>le,mf:()=>$,kK:()=>Le,Kn:()=>V,Nd:()=>Ve,hl:()=>Ne,HD:()=>J,sO:()=>H,dp:()=>z,zW:()=>X,He:()=>Ee,T6:()=>de})},7276:(Fe,W,b)=>{"use strict";b.d(W,{M:()=>P});var p=b(2359);class P{constructor(){this.initialized=!1}resolve({inline:k,provider:j,active:H}){let z=H;if(this.initialized)return z=H,z;if(j){const[,le]=(0,p.T0)(j,"static");z=le}if(k){const[,le]=(0,p.T0)(k,"static");z=le}return this.initialized=!0,z}resolveLangBasedOnScope(k){return(0,p.nw)(k)?(0,p.hz)(k):k}resolveLangPath(k,j){return j?`${j}/${k}`:k}}},7843:(Fe,W,b)=>{"use strict";b.d(W,{P:()=>P});var p=b(312);class P{constructor(k){this.service=k}resolve(k){const{inline:j,provider:H}=k;if(j)return j;if(H){if((0,p.hl)(H)){const{scope:z,alias:le=(0,p.zW)(z)}=H;return this.service._setScopeAlias(z,le),z}return H}}}},2359:(Fe,W,b)=>{"use strict";b.d(W,{DS:()=>$,EV:()=>z,Em:()=>H,T0:()=>j,hz:()=>k,nw:()=>B,p3:()=>J});var p=b(8180),P=b(312);function B(O){if(!O)return"";const V=O.split("/");return V.pop(),V.join("/")}function k(O){return O?O.split("/").pop():""}function j(O,V,ie="|"){if((0,P.HD)(O)){const X=O.split(ie),ce=X.pop();return ce===V?[!0,X.toString()]:[!1,ce]}return[!1,""]}function H(O,V){const[ie]=j(V,"static");return!ie&&!!O.config.reRenderOnLangChange}function z(O){return O?V=>V:(0,p.q)(1)}function $(O,V){return(0,P.E4)(O)?function le(O,V){return Object.keys(O).reduce((ie,X)=>(ie[`${V}/${X}`]=O[X],ie),{})}(O.loader,V):void 0}function J(O){return{scope:B(O)||null,langName:k(O)}}},9752:(Fe,W,b)=>{"use strict";b.d(W,{L:()=>B,i:()=>k});var p=b(9212),P=b(4747);const B=new p.OlP("TRANSLOCO_FALLBACK_STRATEGY");let k=(()=>{class j{constructor(z){this.userConfig=z}getNextLangs(){const z=this.userConfig.fallbackLang;if(!z)throw new Error("When using the default fallback, a fallback language must be provided in the config!");return Array.isArray(z)?z:[z]}static#e=this.\u0275fac=function(le){return new(le||j)(p.LFG(P.hG))};static#t=this.\u0275prov=p.Yz7({token:j,factory:j.\u0275fac})}return j})()},6004:(Fe,W,b)=>{"use strict";b.d(W,{v:()=>P});const P=new(b(9212).OlP)("TRANSLOCO_LANG")},6149:(Fe,W,b)=>{"use strict";b.d(W,{d:()=>P});const P=new(b(9212).OlP)("TRANSLOCO_LOADING_TEMPLATE")},7247:(Fe,W,b)=>{"use strict";b.d(W,{A:()=>P,E:()=>B});var p=b(9212);const P=new p.OlP("TRANSLOCO_MISSING_HANDLER");let B=(()=>{class k{handle(H,z){return z.missingHandler.logMissingKey&&!z.prodMode&&console.warn(`%c Missing translation for '${H}'`,"font-size: 12px; color: red"),H}static#e=this.\u0275fac=function(z){return new(z||k)};static#t=this.\u0275prov=p.Yz7({token:k,factory:k.\u0275fac})}return k})()},2666:(Fe,W,b)=>{"use strict";b.d(W,{H:()=>P});const P=new(b(9212).OlP)("TRANSLOCO_SCOPE")},4747:(Fe,W,b)=>{"use strict";b.d(W,{$Z:()=>k,hG:()=>P,u_:()=>B});const P=new(b(9212).OlP)("TRANSLOCO_CONFIG",{providedIn:"root",factory:()=>B}),B={defaultLang:"en",reRenderOnLangChange:!1,prodMode:!1,failedRetries:2,fallbackLang:[],availableLangs:[],missingHandler:{logMissingKey:!0,useFallbackTranslation:!1,allowEmpty:!1},flatten:{aot:!1},interpolation:["{{","}}"]};function k(j={}){return{...B,...j,missingHandler:{...B.missingHandler,...j.missingHandler},flatten:{...B.flatten,...j.flatten}}}},3750:(Fe,W,b)=>{"use strict";b.d(W,{K:()=>X});var p=b(9212),P=b(4664),B=b(9315),k=b(312);let j=(()=>{class ce{static#e=this.\u0275fac=function(Ee){return new(Ee||ce)};static#t=this.\u0275cmp=p.Xpm({type:ce,selectors:[["ng-component"]],inputs:{html:"html"},standalone:!0,features:[p.jDz],decls:1,vars:1,consts:[[1,"transloco-loader-template",3,"innerHTML"]],template:function(Ee,Ne){1&Ee&&p._UZ(0,"div",0),2&Ee&&p.Q6J("innerHTML",Ne.html,p.oJD)},encapsulation:2})}return ce})();class H{constructor(Le,Re){this.view=Le,this.vcr=Re}attachView(){if(this.view instanceof p.Rgc)this.vcr.createEmbeddedView(this.view);else if((0,k.HD)(this.view)){const Le=this.vcr.createComponent(j);Le.instance.html=this.view,Le.hostView.detectChanges()}else this.vcr.createComponent(this.view)}detachView(){this.vcr.clear()}}var z=b(6004),le=b(6149),$=b(2666),J=b(9412),O=b(2359),V=b(7276),ie=b(7843);let X=(()=>{class ce{constructor(){this.service=(0,p.f3M)(J.Vn),this.tpl=(0,p.f3M)(p.Rgc,{optional:!0}),this.providerLang=(0,p.f3M)(z.v,{optional:!0}),this.providerScope=(0,p.f3M)($.H,{optional:!0}),this.providedLoadingTpl=(0,p.f3M)(le.d,{optional:!0}),this.cdr=(0,p.f3M)(p.sBO),this.host=(0,p.f3M)(p.SBq),this.vcr=(0,p.f3M)(p.s_b),this.renderer=(0,p.f3M)(p.Qsj),this.subscription=null,this.memo=new Map,this.params={},this.initialized=!1,this.langResolver=new V.M,this.scopeResolver=new ie.P(this.service),this.strategy=null===this.tpl?"attribute":"structural"}static ngTemplateContextGuard(Re,Ee){return!0}ngOnInit(){const Re=(0,O.Em)(this.service,this.providerLang||this.inlineLang);if(this.subscription=this.service.langChanges$.pipe((0,P.w)(Ee=>{const Ne=this.langResolver.resolve({inline:this.inlineLang,provider:this.providerLang,active:Ee});return Array.isArray(this.providerScope)?(0,B.D)(this.providerScope.map(Ve=>this.resolveScope(Ne,Ve))):this.resolveScope(Ne,this.providerScope)}),(0,O.EV)(Re)).subscribe(()=>{this.currentLang=this.langResolver.resolveLangBasedOnScope(this.path),"attribute"===this.strategy?this.attributeStrategy():this.structuralStrategy(this.currentLang,this.prefix||this.inlineRead),this.cdr.markForCheck(),this.initialized=!0}),!this.initialized){const Ee=this.resolveLoadingContent();Ee&&(this.loaderTplHandler=new H(Ee,this.vcr),this.loaderTplHandler.attachView())}}ngOnChanges(Re){"attribute"===this.strategy&&Object.keys(Re).some(Ne=>!Re[Ne].firstChange)&&this.attributeStrategy()}attributeStrategy(){this.detachLoader(),this.renderer.setProperty(this.host.nativeElement,"innerText",this.service.translate(this.key,this.params,this.currentLang))}structuralStrategy(Re,Ee){this.memo.clear();const Ne=this.getTranslateFn(Re,Ee);this.view?(this.view.context.$implicit=Ne,this.view.context.currentLang=this.currentLang):(this.detachLoader(),this.view=this.vcr.createEmbeddedView(this.tpl,{$implicit:Ne,currentLang:this.currentLang}))}getTranslateFn(Re,Ee){return(Ne,Ve)=>{const we=Ee?`${Ee}.${Ne}`:Ne,de=Ve?`${we}${JSON.stringify(Ve)}`:we;return this.memo.has(de)||this.memo.set(de,this.service.translate(we,Ve,Re)),this.memo.get(de)}}resolveLoadingContent(){return this.inlineTpl||this.providedLoadingTpl}ngOnDestroy(){this.memo.clear(),this.subscription&&(this.subscription.unsubscribe(),this.subscription=null)}detachLoader(){this.loaderTplHandler?.detachView()}resolveScope(Re,Ee){const Ne=this.scopeResolver.resolve({inline:this.inlineScope,provider:Ee});this.path=this.langResolver.resolveLangPath(Re,Ne);const Ve=(0,O.DS)(Ee,Ne);return this.service._loadDependencies(this.path,Ve)}static#e=this.\u0275fac=function(Ee){return new(Ee||ce)};static#t=this.\u0275dir=p.lG2({type:ce,selectors:[["","transloco",""]],inputs:{key:["transloco","key"],params:["translocoParams","params"],inlineScope:["translocoScope","inlineScope"],inlineRead:["translocoRead","inlineRead"],prefix:["translocoPrefix","prefix"],inlineLang:["translocoLang","inlineLang"],inlineTpl:["translocoLoadingTpl","inlineTpl"]},standalone:!0,features:[p.TTD]})}return ce})()},146:(Fe,W,b)=>{"use strict";b.d(W,{e:()=>P,p:()=>B});var p=b(9212);const P=new p.OlP("TRANSLOCO_INTERCEPTOR");let B=(()=>{class k{preSaveTranslation(H){return H}preSaveTranslationKey(H,z){return z}static#e=this.\u0275fac=function(z){return new(z||k)};static#t=this.\u0275prov=p.Yz7({token:k,factory:k.\u0275fac})}return k})()},450:(Fe,W,b)=>{"use strict";b.d(W,{K:()=>k,x:()=>B});var p=b(9212),P=b(2096);class B{constructor(H){this.translations=H}getTranslation(H){return(0,P.of)(this.translations.get(H)||{})}}const k=new p.OlP("TRANSLOCO_LOADER")},654:(Fe,W,b)=>{"use strict";b.d(W,{O:()=>J});var p=b(4664),P=b(9315),B=b(9412),k=b(2666),j=b(6004),H=b(2359),z=b(7276),le=b(7843),$=b(9212);let J=(()=>{class O{constructor(ie,X,ce,Le){this.service=ie,this.providerScope=X,this.providerLang=ce,this.cdr=Le,this.subscription=null,this.lastValue="",this.langResolver=new z.M,this.scopeResolver=new le.P(this.service)}transform(ie,X,ce){if(!ie)return ie;const Le=X?`${ie}${JSON.stringify(X)}`:ie;if(Le===this.lastKey)return this.lastValue;this.lastKey=Le,this.subscription?.unsubscribe();const Re=(0,H.Em)(this.service,this.providerLang||ce);return this.subscription=this.service.langChanges$.pipe((0,p.w)(Ee=>{const Ne=this.langResolver.resolve({inline:ce,provider:this.providerLang,active:Ee});return Array.isArray(this.providerScope)?(0,P.D)(this.providerScope.map(Ve=>this.resolveScope(Ne,Ve))):this.resolveScope(Ne,this.providerScope)}),(0,H.EV)(Re)).subscribe(()=>this.updateValue(ie,X)),this.lastValue}ngOnDestroy(){this.subscription?.unsubscribe(),this.subscription=null}updateValue(ie,X){const ce=this.langResolver.resolveLangBasedOnScope(this.path);this.lastValue=this.service.translate(ie,X,ce),this.cdr.markForCheck()}resolveScope(ie,X){const ce=this.scopeResolver.resolve({inline:void 0,provider:X});this.path=this.langResolver.resolveLangPath(ie,ce);const Le=(0,H.DS)(X,ce);return this.service._loadDependencies(this.path,Le)}static#e=this.\u0275fac=function(X){return new(X||O)($.Y36(B.Vn,16),$.Y36(k.H,24),$.Y36(j.v,24),$.Y36($.sBO,16))};static#t=this.\u0275pipe=$.Yjl({name:"transloco",type:O,pure:!1,standalone:!0})}return O})()},9412:(Fe,W,b)=>{"use strict";b.d(W,{Vn:()=>kc});var p=b(8645),P=b(5619),B=b(9315),k=b(7715),j=b(9360),H=b(8251),z=b(2737),le=b(5592),$=b(7394);class J extends $.w0{constructor(ae,F){super()}schedule(ae,F=0){return this}}const O={setInterval(Xe,ae,...F){const{delegate:q}=O;return q?.setInterval?q.setInterval(Xe,ae,...F):setInterval(Xe,ae,...F)},clearInterval(Xe){const{delegate:ae}=O;return(ae?.clearInterval||clearInterval)(Xe)},delegate:void 0};var V=b(9039);const X={now:()=>(X.delegate||Date).now(),delegate:void 0};class ce{constructor(ae,F=ce.now){this.schedulerActionCtor=ae,this.now=F}schedule(ae,F=0,q){return new this.schedulerActionCtor(this,ae).schedule(q,F)}}ce.now=X.now;const Ee=new class Le extends ce{constructor(ae,F=ce.now){super(ae,F),this.actions=[],this._active=!1}flush(ae){const{actions:F}=this;if(this._active)return void F.push(ae);let q;this._active=!0;do{if(q=ae.execute(ae.state,ae.delay))break}while(ae=F.shift());if(this._active=!1,q){for(;ae=F.shift();)ae.unsubscribe();throw q}}}(class ie extends J{constructor(ae,F){super(ae,F),this.scheduler=ae,this.work=F,this.pending=!1}schedule(ae,F=0){var q;if(this.closed)return this;this.state=ae;const De=this.id,Je=this.scheduler;return null!=De&&(this.id=this.recycleAsyncId(Je,De,F)),this.pending=!0,this.delay=F,this.id=null!==(q=this.id)&&void 0!==q?q:this.requestAsyncId(Je,this.id,F),this}requestAsyncId(ae,F,q=0){return O.setInterval(ae.flush.bind(ae,this),q)}recycleAsyncId(ae,F,q=0){if(null!=q&&this.delay===q&&!1===this.pending)return F;null!=F&&O.clearInterval(F)}execute(ae,F){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const q=this._execute(ae,F);if(q)return q;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(ae,F){let De,q=!1;try{this.work(ae)}catch(Je){q=!0,De=Je||new Error("Scheduled action threw falsy error")}if(q)return this.unsubscribe(),De}unsubscribe(){if(!this.closed){const{id:ae,scheduler:F}=this,{actions:q}=F;this.work=this.state=this.scheduler=null,this.pending=!1,(0,V.P)(q,this),null!=ae&&(this.id=this.recycleAsyncId(F,ae,null)),this.delay=null,super.unsubscribe()}}});var Ne=b(671);var de=b(4829),ee=b(9397),ye=b(2096),Se=b(6306);class G extends p.x{constructor(ae=1/0,F=1/0,q=X){super(),this._bufferSize=ae,this._windowTime=F,this._timestampProvider=q,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=F===1/0,this._bufferSize=Math.max(1,ae),this._windowTime=Math.max(1,F)}next(ae){const{isStopped:F,_buffer:q,_infiniteTimeWindow:De,_timestampProvider:Je,_windowTime:je}=this;F||(q.push(ae),!De&&q.push(Je.now()+je)),this._trimBuffer(),super.next(ae)}_subscribe(ae){this._throwIfClosed(),this._trimBuffer();const F=this._innerSubscribe(ae),{_infiniteTimeWindow:q,_buffer:De}=this,Je=De.slice();for(let je=0;je{q.unsubscribe(),Xe()}});return(0,de.Xf)(ae(...F)).subscribe(q)}var ne=b(7398),Ye=b(4664),tt=b(2572),ut=b(6232),qe=b(450),Tt=b(1433),wt=b(312),kt=b(4747),Ut=b(7247),Br=b(146),As=b(9752),Zt=b(2359);function Io(Xe){const{path:ae,inlineLoader:F,mainLoader:q,data:De}=Xe;if(F){if(!1===(0,wt.mf)(F[ae]))throw`You're using an inline loader but didn't provide a loader for ${ae}`;return F[ae]().then(je=>je.default?je.default:je)}return q.getTranslation(ae,De)}var Qn=b(9212);let So,kc=(()=>{class Xe{constructor(F,q,De,Je,je,rt){this.loader=F,this.parser=q,this.missingHandler=De,this.interceptor=Je,this.fallbackStrategy=rt,this.subscription=null,this.translations=new Map,this.cache=new Map,this.defaultLang="",this.availableLangs=[],this.isResolvedMissingOnce=!1,this.failedLangs=new Set,this.events=new p.x,this.events$=this.events.asObservable(),this.loader||(this.loader=new qe.x(this.translations)),So=this,this.config=JSON.parse(JSON.stringify(je)),this.setAvailableLangs(this.config.availableLangs||[]),this.setFallbackLangForMissingTranslation(this.config),this.setDefaultLang(this.config.defaultLang),this.lang=new P.X(this.getDefaultLang()),this.langChanges$=this.lang.asObservable(),this.subscription=this.events$.subscribe(me=>{"translationLoadSuccess"===me.type&&me.wasFailure&&this.setActiveLang(me.payload.langName)})}getDefaultLang(){return this.defaultLang}setDefaultLang(F){this.defaultLang=F}getActiveLang(){return this.lang.getValue()}setActiveLang(F){return this.parser.onLangChanged?.(F),this.lang.next(F),this.events.next({type:"langChanged",payload:(0,Zt.p3)(F)}),this}setAvailableLangs(F){this.availableLangs=F}getAvailableLangs(){return this.availableLangs}load(F,q={}){const De=this.cache.get(F);if(De)return De;let Je;const je=this._isLangScoped(F);let rt;je&&(rt=(0,Zt.nw)(F));const me={path:F,mainLoader:this.loader,inlineLoader:q.inlineLoader,data:je?{scope:rt}:void 0};if(this.useFallbackTranslation(F)){const Qe=je?`${rt}/${this.firstFallbackLang}`:this.firstFallbackLang,Yt=function Rs({mainLoader:Xe,path:ae,data:F,fallbackPath:q,inlineLoader:De}){return(q?[ae,q]:[ae]).map(je=>{const rt=Io({path:je,mainLoader:Xe,inlineLoader:De,data:F});return(0,k.D)(rt).pipe((0,ne.U)(me=>({translation:me,lang:je})))})}({...me,fallbackPath:Qe});Je=(0,B.D)(Yt)}else{const Qe=Io(me);Je=(0,k.D)(Qe)}const $e=Je.pipe(function We(Xe=1/0){let ae;ae=Xe&&"object"==typeof Xe?Xe:{count:Xe};const{count:F=1/0,delay:q,resetOnSuccess:De=!1}=ae;return F<=0?z.y:(0,j.e)((Je,je)=>{let me,rt=0;const $e=()=>{let Qe=!1;me=Je.subscribe((0,H.x)(je,Yt=>{De&&(rt=0),je.next(Yt)},void 0,Yt=>{if(rt++{me?(me.unsubscribe(),me=null,$e()):Qe=!0};if(null!=q){const Oe="number"==typeof q?function we(Xe=0,ae,F=Ee){let q=-1;return null!=ae&&((0,Ne.K)(ae)?F=ae:q=ae),new le.y(De=>{let Je=function Ve(Xe){return Xe instanceof Date&&!isNaN(Xe)}(Xe)?+Xe-F.now():Xe;Je<0&&(Je=0);let je=0;return F.schedule(function(){De.closed||(De.next(je++),0<=q?this.schedule(void 0,q):De.complete())},Je)})}(q):(0,de.Xf)(q(Yt,rt)),pn=(0,H.x)(je,()=>{pn.unsubscribe(),hn()},()=>{je.complete()});Oe.subscribe(pn)}else hn()}else je.error(Yt)})),Qe&&(me.unsubscribe(),me=null,$e())};$e()})}(this.config.failedRetries),(0,ee.b)(Qe=>{Array.isArray(Qe)?Qe.forEach(Yt=>{this.handleSuccess(Yt.lang,Yt.translation),Yt.lang!==F&&this.cache.set(Yt.lang,(0,ye.of)({}))}):this.handleSuccess(F,Qe)}),(0,Se.K)(Qe=>(this.config.prodMode||console.error(`Error while trying to load "${F}"`,Qe),this.handleFailure(F,q))),function xe(Xe,ae,F){let q,De=!1;return Xe&&"object"==typeof Xe?({bufferSize:q=1/0,windowTime:ae=1/0,refCount:De=!1,scheduler:F}=Xe):q=Xe??1/0,function re(Xe={}){const{connector:ae=(()=>new p.x),resetOnError:F=!0,resetOnComplete:q=!0,resetOnRefCountZero:De=!0}=Xe;return Je=>{let je,rt,me,$e=0,Qe=!1,Yt=!1;const hn=()=>{rt?.unsubscribe(),rt=void 0},Oe=()=>{hn(),je=me=void 0,Qe=Yt=!1},pn=()=>{const qt=je;Oe(),qt?.unsubscribe()};return(0,j.e)((qt,fi)=>{$e++,!Yt&&!Qe&&hn();const $t=me=me??ae();fi.add(()=>{$e--,0===$e&&!Yt&&!Qe&&(rt=he(pn,De))}),$t.subscribe(fi),!je&&$e>0&&(je=new Y.Hp({next:Vr=>$t.next(Vr),error:Vr=>{Yt=!0,hn(),rt=he(Oe,F,Vr),$t.error(Vr)},complete:()=>{Qe=!0,hn(),rt=he(Oe,q),$t.complete()}}),(0,de.Xf)(qt).subscribe(je))})(Je)}}({connector:()=>new G(q,ae,F),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:De})}(1));return this.cache.set(F,$e),$e}translate(F,q={},De=this.getActiveLang()){if(!F)return F;const{scope:Je,resolveLang:je}=this.resolveLangAndScope(De);if(Array.isArray(F))return F.map($e=>this.translate(Je?`${Je}.${$e}`:$e,q,je));F=Je?`${Je}.${F}`:F;const rt=this.getTranslation(je),me=rt[F];return me?this.parser.transpile({value:me,params:q,translation:rt,key:F}):this._handleMissingKey(F,me,q)}selectTranslate(F,q,De,Je=!1){let je;const rt=($e,Qe)=>this.load($e,Qe).pipe((0,ne.U)(()=>Je?this.translateObject(F,q,$e):this.translate(F,q,$e)));if((0,wt.kK)(De))return this.langChanges$.pipe((0,Ye.w)($e=>rt($e)));if((0,wt.Nd)(De)||(0,wt.hl)(De)){const $e=Array.isArray(De)?De[0]:De;De=$e.scope,je=(0,Zt.DS)($e,$e.scope)}if(this.isLang(De)||this.isScopeWithLang(De))return rt(De);const me=De;return this.langChanges$.pipe((0,Ye.w)($e=>rt(`${me}/${$e}`,{inlineLoader:je})))}isScopeWithLang(F){return this.isLang((0,Zt.hz)(F))}translateObject(F,q={},De=this.getActiveLang()){if((0,wt.HD)(F)||Array.isArray(F)){const{resolveLang:je,scope:rt}=this.resolveLangAndScope(De);if(Array.isArray(F))return F.map(Qe=>this.translateObject(rt?`${rt}.${Qe}`:Qe,q,je));const me=this.getTranslation(je),$e=(0,wt.T6)(this.getObjectByKey(me,F=rt?`${rt}.${F}`:F));return(0,wt.xb)($e)?this.translate(F,q,De):this.parser.transpile({value:$e,params:q,translation:me,key:F})}const Je=[];for(const[je,rt]of this.getEntries(F))Je.push(this.translateObject(je,rt,De));return Je}selectTranslateObject(F,q,De){if((0,wt.HD)(F)||Array.isArray(F))return this.selectTranslate(F,q,De,!0);const[[Je,je],...rt]=this.getEntries(F);return this.selectTranslateObject(Je,je,De).pipe((0,ne.U)(me=>{const $e=[me];for(const[Qe,Yt]of rt)$e.push(this.translateObject(Qe,Yt,De));return $e}))}getTranslation(F){if(F){if(this.isLang(F))return this.translations.get(F)||{};{const{scope:q,resolveLang:De}=this.resolveLangAndScope(F),Je=this.translations.get(De)||{};return this.getObjectByKey(Je,q)}}return this.translations}selectTranslation(F){let q=this.langChanges$;if(F){const De=(0,Zt.hz)(F)!==F;q=this.isLang(F)||De?(0,ye.of)(F):this.langChanges$.pipe((0,ne.U)(Je=>`${F}/${Je}`))}return q.pipe((0,Ye.w)(De=>this.load(De).pipe((0,ne.U)(()=>this.getTranslation(De)))))}setTranslation(F,q=this.getActiveLang(),De={}){const je={merge:!0,emitChange:!0,...De},rt=(0,Zt.nw)(q);let me=F;if(rt){const Oe=this.getMappedScope(rt);me=(0,wt.xH)({[Oe]:F})}const $e=rt?(0,Zt.hz)(q):q,Qe={...je.merge&&this.getTranslation($e),...me},Yt=this.config.flatten.aot?Qe:(0,wt.xH)(Qe),hn=this.interceptor.preSaveTranslation(Yt,$e);this.translations.set($e,hn),je.emitChange&&this.setActiveLang(this.getActiveLang())}setTranslationKey(F,q,De={}){const Je=De.lang||this.getActiveLang(),je=this.interceptor.preSaveTranslationKey(F,q,Je);this.setTranslation({[F]:je},Je,{...De,merge:!0})}setFallbackLangForMissingTranslation({fallbackLang:F}){const q=Array.isArray(F)?F[0]:F;F&&this.useFallbackTranslation(q)&&(this.firstFallbackLang=q)}_handleMissingKey(F,q,De){if(this.config.missingHandler.allowEmpty&&""===q)return"";if(!this.isResolvedMissingOnce&&this.useFallbackTranslation()){this.isResolvedMissingOnce=!0;const Je=this.translate(F,De,this.firstFallbackLang);return this.isResolvedMissingOnce=!1,Je}return this.missingHandler.handle(F,this.getMissingHandlerData(),De)}_isLangScoped(F){return-1===this.getAvailableLangsIds().indexOf(F)}isLang(F){return-1!==this.getAvailableLangsIds().indexOf(F)}_loadDependencies(F,q){const De=(0,Zt.hz)(F);return this._isLangScoped(F)&&!this.isLoadedTranslation(De)?(0,tt.a)([this.load(De),this.load(F,{inlineLoader:q})]):this.load(F,{inlineLoader:q})}_completeScopeWithLang(F){return this._isLangScoped(F)&&!this.isLang((0,Zt.hz)(F))?`${F}/${this.getActiveLang()}`:F}_setScopeAlias(F,q){this.config.scopeMapping||(this.config.scopeMapping={}),this.config.scopeMapping[F]=q}ngOnDestroy(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=null),this.cache.clear()}isLoadedTranslation(F){return(0,wt.dp)(this.getTranslation(F))}getAvailableLangsIds(){const F=this.getAvailableLangs()[0];return(0,wt.HD)(F)?this.getAvailableLangs():this.getAvailableLangs().map(q=>q.id)}getMissingHandlerData(){return{...this.config,activeLang:this.getActiveLang(),availableLangs:this.availableLangs,defaultLang:this.defaultLang}}useFallbackTranslation(F){return this.config.missingHandler.useFallbackTranslation&&F!==this.firstFallbackLang}handleSuccess(F,q){this.setTranslation(q,F,{emitChange:!1}),this.events.next({wasFailure:!!this.failedLangs.size,type:"translationLoadSuccess",payload:(0,Zt.p3)(F)}),this.failedLangs.forEach(De=>this.cache.delete(De)),this.failedLangs.clear()}handleFailure(F,q){(0,wt.kK)(q.failedCounter)&&(q.failedCounter=0,q.fallbackLangs||(q.fallbackLangs=this.fallbackStrategy.getNextLangs(F)));const De=F.split("/"),je=q.fallbackLangs[q.failedCounter];if(this.failedLangs.add(F),this.cache.has(je))return this.handleSuccess(je,this.getTranslation(je)),ut.E;if(!je||je===De[De.length-1]){let $e="Unable to load translation and all the fallback languages";throw De.length>1&&($e+=", did you misspelled the scope name?"),new Error($e)}let me=je;return De.length>1&&(De[De.length-1]=je,me=De.join("/")),q.failedCounter++,this.events.next({type:"translationLoadFailure",payload:(0,Zt.p3)(F)}),this.load(me,q)}getMappedScope(F){const{scopeMapping:q={}}=this.config;return q[F]||(0,wt.zW)(F)}resolveLangAndScope(F){let De,q=F;if(this._isLangScoped(F)){const Je=(0,Zt.hz)(F),je=this.isLang(Je);q=je?Je:this.getActiveLang(),De=this.getMappedScope(je?(0,Zt.nw)(F):F)}return{scope:De,resolveLang:q}}getObjectByKey(F,q){const De={},Je=`${q}.`;for(const je in F)je.startsWith(Je)&&(De[je.replace(Je,"")]=F[je]);return De}getEntries(F){return F instanceof Map?F.entries():Object.entries(F)}static#e=this.\u0275fac=function(q){return new(q||Xe)(Qn.LFG(qe.K,8),Qn.LFG(Tt.Fs),Qn.LFG(Ut.A),Qn.LFG(Br.e),Qn.LFG(kt.hG),Qn.LFG(As.L))};static#t=this.\u0275prov=Qn.Yz7({token:Xe,factory:Xe.\u0275fac,providedIn:"root"})}return Xe})()},1433:(Fe,W,b)=>{"use strict";b.d(W,{Fs:()=>k,rO:()=>j});var p=b(9212),P=b(312),B=b(4747);const k=new p.OlP("TRANSLOCO_TRANSPILER");let j=(()=>{class ${constructor(){this.config=(0,p.f3M)(B.hG,{optional:!0})??B.u_}get interpolationMatcher(){return function H($){const[J,O]=$.interpolation;return new RegExp(`${J}([^${J}${O}]*?)${O}`,"g")}(this.config)}transpile({value:O,params:V={},translation:ie,key:X}){if((0,P.HD)(O)){let ce,Le=O;for(;null!==(ce=this.interpolationMatcher.exec(Le));){const[Re,Ee]=ce;Le=Le.replace(Re,()=>{const Ne=Ee.trim();return(0,P.$K)(V[Ne])?V[Ne]:(0,P.$K)(ie[Ne])?this.transpile({params:V,translation:ie,key:X,value:ie[Ne]}):""})}return Le}return V&&((0,P.Kn)(O)?O=this.handleObject({value:O,params:V,translation:ie,key:X}):Array.isArray(O)&&(O=this.handleArray({value:O,params:V,translation:ie,key:X}))),O}handleObject({value:O,params:V={},translation:ie,key:X}){let ce=O;return Object.keys(V).forEach(Le=>{const Re=this.transpile({value:(0,P.NA)(ce,Le),params:(0,P.NA)(V,Le),translation:ie,key:X});ce=(0,P.sO)(ce,Le,Re)}),ce}handleArray({value:O,...V}){return O.map(ie=>this.transpile({value:ie,...V}))}static#e=this.\u0275fac=function(V){return new(V||$)};static#t=this.\u0275prov=p.Yz7({token:$,factory:$.\u0275fac})}return $})()},5619:(Fe,W,b)=>{"use strict";b.d(W,{X:()=>P});var p=b(8645);class P extends p.x{constructor(k){super(),this._value=k}get value(){return this.getValue()}_subscribe(k){const j=super._subscribe(k);return!j.closed&&k.next(this._value),j}getValue(){const{hasError:k,thrownError:j,_value:H}=this;if(k)throw j;return this._throwIfClosed(),H}next(k){super.next(this._value=k)}}},5592:(Fe,W,b)=>{"use strict";b.d(W,{y:()=>le});var p=b(305),P=b(7394),B=b(4850),k=b(8407),j=b(2653),H=b(4674),z=b(1441);let le=(()=>{class V{constructor(X){X&&(this._subscribe=X)}lift(X){const ce=new V;return ce.source=this,ce.operator=X,ce}subscribe(X,ce,Le){const Re=function O(V){return V&&V instanceof p.Lv||function J(V){return V&&(0,H.m)(V.next)&&(0,H.m)(V.error)&&(0,H.m)(V.complete)}(V)&&(0,P.Nn)(V)}(X)?X:new p.Hp(X,ce,Le);return(0,z.x)(()=>{const{operator:Ee,source:Ne}=this;Re.add(Ee?Ee.call(Re,Ne):Ne?this._subscribe(Re):this._trySubscribe(Re))}),Re}_trySubscribe(X){try{return this._subscribe(X)}catch(ce){X.error(ce)}}forEach(X,ce){return new(ce=$(ce))((Le,Re)=>{const Ee=new p.Hp({next:Ne=>{try{X(Ne)}catch(Ve){Re(Ve),Ee.unsubscribe()}},error:Re,complete:Le});this.subscribe(Ee)})}_subscribe(X){var ce;return null===(ce=this.source)||void 0===ce?void 0:ce.subscribe(X)}[B.L](){return this}pipe(...X){return(0,k.U)(X)(this)}toPromise(X){return new(X=$(X))((ce,Le)=>{let Re;this.subscribe(Ee=>Re=Ee,Ee=>Le(Ee),()=>ce(Re))})}}return V.create=ie=>new V(ie),V})();function $(V){var ie;return null!==(ie=V??j.config.Promise)&&void 0!==ie?ie:Promise}},8645:(Fe,W,b)=>{"use strict";b.d(W,{x:()=>z});var p=b(5592),P=b(7394);const k=(0,b(2306).d)($=>function(){$(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var j=b(9039),H=b(1441);let z=(()=>{class $ extends p.y{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(O){const V=new le(this,this);return V.operator=O,V}_throwIfClosed(){if(this.closed)throw new k}next(O){(0,H.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const V of this.currentObservers)V.next(O)}})}error(O){(0,H.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=O;const{observers:V}=this;for(;V.length;)V.shift().error(O)}})}complete(){(0,H.x)(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:O}=this;for(;O.length;)O.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var O;return(null===(O=this.observers)||void 0===O?void 0:O.length)>0}_trySubscribe(O){return this._throwIfClosed(),super._trySubscribe(O)}_subscribe(O){return this._throwIfClosed(),this._checkFinalizedStatuses(O),this._innerSubscribe(O)}_innerSubscribe(O){const{hasError:V,isStopped:ie,observers:X}=this;return V||ie?P.Lc:(this.currentObservers=null,X.push(O),new P.w0(()=>{this.currentObservers=null,(0,j.P)(X,O)}))}_checkFinalizedStatuses(O){const{hasError:V,thrownError:ie,isStopped:X}=this;V?O.error(ie):X&&O.complete()}asObservable(){const O=new p.y;return O.source=this,O}}return $.create=(J,O)=>new le(J,O),$})();class le extends z{constructor(J,O){super(),this.destination=J,this.source=O}next(J){var O,V;null===(V=null===(O=this.destination)||void 0===O?void 0:O.next)||void 0===V||V.call(O,J)}error(J){var O,V;null===(V=null===(O=this.destination)||void 0===O?void 0:O.error)||void 0===V||V.call(O,J)}complete(){var J,O;null===(O=null===(J=this.destination)||void 0===J?void 0:J.complete)||void 0===O||O.call(J)}_subscribe(J){var O,V;return null!==(V=null===(O=this.source)||void 0===O?void 0:O.subscribe(J))&&void 0!==V?V:P.Lc}}},305:(Fe,W,b)=>{"use strict";b.d(W,{Hp:()=>Le,Lv:()=>V});var p=b(4674),P=b(7394),B=b(2653),k=b(3894),j=b(2420);const H=$("C",void 0,void 0);function $(we,de,We){return{kind:we,value:de,error:We}}var J=b(7599),O=b(1441);class V extends P.w0{constructor(de){super(),this.isStopped=!1,de?(this.destination=de,(0,P.Nn)(de)&&de.add(this)):this.destination=Ve}static create(de,We,ee){return new Le(de,We,ee)}next(de){this.isStopped?Ne(function le(we){return $("N",we,void 0)}(de),this):this._next(de)}error(de){this.isStopped?Ne(function z(we){return $("E",void 0,we)}(de),this):(this.isStopped=!0,this._error(de))}complete(){this.isStopped?Ne(H,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(de){this.destination.next(de)}_error(de){try{this.destination.error(de)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const ie=Function.prototype.bind;function X(we,de){return ie.call(we,de)}class ce{constructor(de){this.partialObserver=de}next(de){const{partialObserver:We}=this;if(We.next)try{We.next(de)}catch(ee){Re(ee)}}error(de){const{partialObserver:We}=this;if(We.error)try{We.error(de)}catch(ee){Re(ee)}else Re(de)}complete(){const{partialObserver:de}=this;if(de.complete)try{de.complete()}catch(We){Re(We)}}}class Le extends V{constructor(de,We,ee){let ye;if(super(),(0,p.m)(de)||!de)ye={next:de??void 0,error:We??void 0,complete:ee??void 0};else{let Se;this&&B.config.useDeprecatedNextContext?(Se=Object.create(de),Se.unsubscribe=()=>this.unsubscribe(),ye={next:de.next&&X(de.next,Se),error:de.error&&X(de.error,Se),complete:de.complete&&X(de.complete,Se)}):ye=de}this.destination=new ce(ye)}}function Re(we){B.config.useDeprecatedSynchronousErrorHandling?(0,O.O)(we):(0,k.h)(we)}function Ne(we,de){const{onStoppedNotification:We}=B.config;We&&J.z.setTimeout(()=>We(we,de))}const Ve={closed:!0,next:j.Z,error:function Ee(we){throw we},complete:j.Z}},7394:(Fe,W,b)=>{"use strict";b.d(W,{Lc:()=>H,w0:()=>j,Nn:()=>z});var p=b(4674);const B=(0,b(2306).d)($=>function(O){$(this),this.message=O?`${O.length} errors occurred during unsubscription:\n${O.map((V,ie)=>`${ie+1}) ${V.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=O});var k=b(9039);class j{constructor(J){this.initialTeardown=J,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let J;if(!this.closed){this.closed=!0;const{_parentage:O}=this;if(O)if(this._parentage=null,Array.isArray(O))for(const X of O)X.remove(this);else O.remove(this);const{initialTeardown:V}=this;if((0,p.m)(V))try{V()}catch(X){J=X instanceof B?X.errors:[X]}const{_finalizers:ie}=this;if(ie){this._finalizers=null;for(const X of ie)try{le(X)}catch(ce){J=J??[],ce instanceof B?J=[...J,...ce.errors]:J.push(ce)}}if(J)throw new B(J)}}add(J){var O;if(J&&J!==this)if(this.closed)le(J);else{if(J instanceof j){if(J.closed||J._hasParent(this))return;J._addParent(this)}(this._finalizers=null!==(O=this._finalizers)&&void 0!==O?O:[]).push(J)}}_hasParent(J){const{_parentage:O}=this;return O===J||Array.isArray(O)&&O.includes(J)}_addParent(J){const{_parentage:O}=this;this._parentage=Array.isArray(O)?(O.push(J),O):O?[O,J]:J}_removeParent(J){const{_parentage:O}=this;O===J?this._parentage=null:Array.isArray(O)&&(0,k.P)(O,J)}remove(J){const{_finalizers:O}=this;O&&(0,k.P)(O,J),J instanceof j&&J._removeParent(this)}}j.EMPTY=(()=>{const $=new j;return $.closed=!0,$})();const H=j.EMPTY;function z($){return $ instanceof j||$&&"closed"in $&&(0,p.m)($.remove)&&(0,p.m)($.add)&&(0,p.m)($.unsubscribe)}function le($){(0,p.m)($)?$():$.unsubscribe()}},2653:(Fe,W,b)=>{"use strict";b.d(W,{config:()=>p});const p={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},2572:(Fe,W,b)=>{"use strict";b.d(W,{a:()=>J});var p=b(5592),P=b(7453),B=b(7715),k=b(2737),j=b(7400),H=b(9940),z=b(2714),le=b(8251),$=b(7103);function J(...ie){const X=(0,H.yG)(ie),ce=(0,H.jO)(ie),{args:Le,keys:Re}=(0,P.D)(ie);if(0===Le.length)return(0,B.D)([],X);const Ee=new p.y(function O(ie,X,ce=k.y){return Le=>{V(X,()=>{const{length:Re}=ie,Ee=new Array(Re);let Ne=Re,Ve=Re;for(let we=0;we{const de=(0,B.D)(ie[we],X);let We=!1;de.subscribe((0,le.x)(Le,ee=>{Ee[we]=ee,We||(We=!0,Ve--),Ve||Le.next(ce(Ee.slice()))},()=>{--Ne||Le.complete()}))},Le)},Le)}}(Le,X,Re?Ne=>(0,z.n)(Re,Ne):k.y));return ce?Ee.pipe((0,j.Z)(ce)):Ee}function V(ie,X,ce){ie?(0,$.f)(ce,ie,X):X()}},6232:(Fe,W,b)=>{"use strict";b.d(W,{E:()=>P});const P=new(b(5592).y)(j=>j.complete())},9315:(Fe,W,b)=>{"use strict";b.d(W,{D:()=>le});var p=b(5592),P=b(7453),B=b(4829),k=b(9940),j=b(8251),H=b(7400),z=b(2714);function le(...$){const J=(0,k.jO)($),{args:O,keys:V}=(0,P.D)($),ie=new p.y(X=>{const{length:ce}=O;if(!ce)return void X.complete();const Le=new Array(ce);let Re=ce,Ee=ce;for(let Ne=0;Ne{Ve||(Ve=!0,Ee--),Le[Ne]=we},()=>Re--,void 0,()=>{(!Re||!Ve)&&(Ee||X.next(V?(0,z.n)(V,Le):Le),X.complete())}))}});return J?ie.pipe((0,H.Z)(J)):ie}},7715:(Fe,W,b)=>{"use strict";b.d(W,{D:()=>ee});var p=b(4829),P=b(7103),B=b(9360),k=b(8251);function j(ye,Se=0){return(0,B.e)((G,Y)=>{G.subscribe((0,k.x)(Y,re=>(0,P.f)(Y,ye,()=>Y.next(re),Se),()=>(0,P.f)(Y,ye,()=>Y.complete(),Se),re=>(0,P.f)(Y,ye,()=>Y.error(re),Se)))})}function H(ye,Se=0){return(0,B.e)((G,Y)=>{Y.add(ye.schedule(()=>G.subscribe(Y),Se))})}var $=b(5592),O=b(4971),V=b(4674);function X(ye,Se){if(!ye)throw new Error("Iterable cannot be null");return new $.y(G=>{(0,P.f)(G,Se,()=>{const Y=ye[Symbol.asyncIterator]();(0,P.f)(G,Se,()=>{Y.next().then(re=>{re.done?G.complete():G.next(re.value)})},0,!0)})})}var ce=b(8382),Le=b(4026),Re=b(4266),Ee=b(3664),Ne=b(5726),Ve=b(9853),we=b(541);function ee(ye,Se){return Se?function We(ye,Se){if(null!=ye){if((0,ce.c)(ye))return function z(ye,Se){return(0,p.Xf)(ye).pipe(H(Se),j(Se))}(ye,Se);if((0,Re.z)(ye))return function J(ye,Se){return new $.y(G=>{let Y=0;return Se.schedule(function(){Y===ye.length?G.complete():(G.next(ye[Y++]),G.closed||this.schedule())})})}(ye,Se);if((0,Le.t)(ye))return function le(ye,Se){return(0,p.Xf)(ye).pipe(H(Se),j(Se))}(ye,Se);if((0,Ne.D)(ye))return X(ye,Se);if((0,Ee.T)(ye))return function ie(ye,Se){return new $.y(G=>{let Y;return(0,P.f)(G,Se,()=>{Y=ye[O.h](),(0,P.f)(G,Se,()=>{let re,he;try{({value:re,done:he}=Y.next())}catch(xe){return void G.error(xe)}he?G.complete():G.next(re)},0,!0)}),()=>(0,V.m)(Y?.return)&&Y.return()})}(ye,Se);if((0,we.L)(ye))return function de(ye,Se){return X((0,we.Q)(ye),Se)}(ye,Se)}throw(0,Ve.z)(ye)}(ye,Se):(0,p.Xf)(ye)}},4829:(Fe,W,b)=>{"use strict";b.d(W,{Xf:()=>ie});var p=b(655),P=b(4266),B=b(4026),k=b(5592),j=b(8382),H=b(5726),z=b(9853),le=b(3664),$=b(541),J=b(4674),O=b(3894),V=b(4850);function ie(we){if(we instanceof k.y)return we;if(null!=we){if((0,j.c)(we))return function X(we){return new k.y(de=>{const We=we[V.L]();if((0,J.m)(We.subscribe))return We.subscribe(de);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(we);if((0,P.z)(we))return function ce(we){return new k.y(de=>{for(let We=0;We{we.then(We=>{de.closed||(de.next(We),de.complete())},We=>de.error(We)).then(null,O.h)})}(we);if((0,H.D)(we))return Ee(we);if((0,le.T)(we))return function Re(we){return new k.y(de=>{for(const We of we)if(de.next(We),de.closed)return;de.complete()})}(we);if((0,$.L)(we))return function Ne(we){return Ee((0,$.Q)(we))}(we)}throw(0,z.z)(we)}function Ee(we){return new k.y(de=>{(function Ve(we,de){var We,ee,ye,Se;return(0,p.mG)(this,void 0,void 0,function*(){try{for(We=(0,p.KL)(we);!(ee=yield We.next()).done;)if(de.next(ee.value),de.closed)return}catch(G){ye={error:G}}finally{try{ee&&!ee.done&&(Se=We.return)&&(yield Se.call(We))}finally{if(ye)throw ye.error}}de.complete()})})(we,de).catch(We=>de.error(We))})}},2096:(Fe,W,b)=>{"use strict";b.d(W,{of:()=>B});var p=b(9940),P=b(7715);function B(...k){const j=(0,p.yG)(k);return(0,P.D)(k,j)}},8251:(Fe,W,b)=>{"use strict";b.d(W,{x:()=>P});var p=b(305);function P(k,j,H,z,le){return new B(k,j,H,z,le)}class B extends p.Lv{constructor(j,H,z,le,$,J){super(j),this.onFinalize=$,this.shouldUnsubscribe=J,this._next=H?function(O){try{H(O)}catch(V){j.error(V)}}:super._next,this._error=le?function(O){try{le(O)}catch(V){j.error(V)}finally{this.unsubscribe()}}:super._error,this._complete=z?function(){try{z()}catch(O){j.error(O)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var j;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:H}=this;super.unsubscribe(),!H&&(null===(j=this.onFinalize)||void 0===j||j.call(this))}}}},6306:(Fe,W,b)=>{"use strict";b.d(W,{K:()=>k});var p=b(4829),P=b(8251),B=b(9360);function k(j){return(0,B.e)((H,z)=>{let J,le=null,$=!1;le=H.subscribe((0,P.x)(z,void 0,void 0,O=>{J=(0,p.Xf)(j(O,k(j)(H))),le?(le.unsubscribe(),le=null,J.subscribe(z)):$=!0})),$&&(le.unsubscribe(),le=null,J.subscribe(z))})}},2181:(Fe,W,b)=>{"use strict";b.d(W,{h:()=>B});var p=b(9360),P=b(8251);function B(k,j){return(0,p.e)((H,z)=>{let le=0;H.subscribe((0,P.x)(z,$=>k.call(j,$,le++)&&z.next($)))})}},7398:(Fe,W,b)=>{"use strict";b.d(W,{U:()=>B});var p=b(9360),P=b(8251);function B(k,j){return(0,p.e)((H,z)=>{let le=0;H.subscribe((0,P.x)(z,$=>{z.next(k.call(j,$,le++))}))})}},4664:(Fe,W,b)=>{"use strict";b.d(W,{w:()=>k});var p=b(4829),P=b(9360),B=b(8251);function k(j,H){return(0,P.e)((z,le)=>{let $=null,J=0,O=!1;const V=()=>O&&!$&&le.complete();z.subscribe((0,B.x)(le,ie=>{$?.unsubscribe();let X=0;const ce=J++;(0,p.Xf)(j(ie,ce)).subscribe($=(0,B.x)(le,Le=>le.next(H?H(ie,Le,ce,X++):Le),()=>{$=null,V()}))},()=>{O=!0,V()}))})}},8180:(Fe,W,b)=>{"use strict";b.d(W,{q:()=>k});var p=b(6232),P=b(9360),B=b(8251);function k(j){return j<=0?()=>p.E:(0,P.e)((H,z)=>{let le=0;H.subscribe((0,B.x)(z,$=>{++le<=j&&(z.next($),j<=le&&z.complete())}))})}},9397:(Fe,W,b)=>{"use strict";b.d(W,{b:()=>j});var p=b(4674),P=b(9360),B=b(8251),k=b(2737);function j(H,z,le){const $=(0,p.m)(H)||z||le?{next:H,error:z,complete:le}:H;return $?(0,P.e)((J,O)=>{var V;null===(V=$.subscribe)||void 0===V||V.call($);let ie=!0;J.subscribe((0,B.x)(O,X=>{var ce;null===(ce=$.next)||void 0===ce||ce.call($,X),O.next(X)},()=>{var X;ie=!1,null===(X=$.complete)||void 0===X||X.call($),O.complete()},X=>{var ce;ie=!1,null===(ce=$.error)||void 0===ce||ce.call($,X),O.error(X)},()=>{var X,ce;ie&&(null===(X=$.unsubscribe)||void 0===X||X.call($)),null===(ce=$.finalize)||void 0===ce||ce.call($)}))}):k.y}},7599:(Fe,W,b)=>{"use strict";b.d(W,{z:()=>p});const p={setTimeout(P,B,...k){const{delegate:j}=p;return j?.setTimeout?j.setTimeout(P,B,...k):setTimeout(P,B,...k)},clearTimeout(P){const{delegate:B}=p;return(B?.clearTimeout||clearTimeout)(P)},delegate:void 0}},4971:(Fe,W,b)=>{"use strict";b.d(W,{h:()=>P});const P=function p(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},4850:(Fe,W,b)=>{"use strict";b.d(W,{L:()=>p});const p="function"==typeof Symbol&&Symbol.observable||"@@observable"},9940:(Fe,W,b)=>{"use strict";b.d(W,{jO:()=>k,yG:()=>j});var p=b(4674),P=b(671);function B(z){return z[z.length-1]}function k(z){return(0,p.m)(B(z))?z.pop():void 0}function j(z){return(0,P.K)(B(z))?z.pop():void 0}},7453:(Fe,W,b)=>{"use strict";b.d(W,{D:()=>j});const{isArray:p}=Array,{getPrototypeOf:P,prototype:B,keys:k}=Object;function j(z){if(1===z.length){const le=z[0];if(p(le))return{args:le,keys:null};if(function H(z){return z&&"object"==typeof z&&P(z)===B}(le)){const $=k(le);return{args:$.map(J=>le[J]),keys:$}}}return{args:z,keys:null}}},9039:(Fe,W,b)=>{"use strict";function p(P,B){if(P){const k=P.indexOf(B);0<=k&&P.splice(k,1)}}b.d(W,{P:()=>p})},2306:(Fe,W,b)=>{"use strict";function p(P){const k=P(j=>{Error.call(j),j.stack=(new Error).stack});return k.prototype=Object.create(Error.prototype),k.prototype.constructor=k,k}b.d(W,{d:()=>p})},2714:(Fe,W,b)=>{"use strict";function p(P,B){return P.reduce((k,j,H)=>(k[j]=B[H],k),{})}b.d(W,{n:()=>p})},1441:(Fe,W,b)=>{"use strict";b.d(W,{O:()=>k,x:()=>B});var p=b(2653);let P=null;function B(j){if(p.config.useDeprecatedSynchronousErrorHandling){const H=!P;if(H&&(P={errorThrown:!1,error:null}),j(),H){const{errorThrown:z,error:le}=P;if(P=null,z)throw le}}else j()}function k(j){p.config.useDeprecatedSynchronousErrorHandling&&P&&(P.errorThrown=!0,P.error=j)}},7103:(Fe,W,b)=>{"use strict";function p(P,B,k,j=0,H=!1){const z=B.schedule(function(){k(),H?P.add(this.schedule(null,j)):this.unsubscribe()},j);if(P.add(z),!H)return z}b.d(W,{f:()=>p})},2737:(Fe,W,b)=>{"use strict";function p(P){return P}b.d(W,{y:()=>p})},4266:(Fe,W,b)=>{"use strict";b.d(W,{z:()=>p});const p=P=>P&&"number"==typeof P.length&&"function"!=typeof P},5726:(Fe,W,b)=>{"use strict";b.d(W,{D:()=>P});var p=b(4674);function P(B){return Symbol.asyncIterator&&(0,p.m)(B?.[Symbol.asyncIterator])}},4674:(Fe,W,b)=>{"use strict";function p(P){return"function"==typeof P}b.d(W,{m:()=>p})},8382:(Fe,W,b)=>{"use strict";b.d(W,{c:()=>B});var p=b(4850),P=b(4674);function B(k){return(0,P.m)(k[p.L])}},3664:(Fe,W,b)=>{"use strict";b.d(W,{T:()=>B});var p=b(4971),P=b(4674);function B(k){return(0,P.m)(k?.[p.h])}},4026:(Fe,W,b)=>{"use strict";b.d(W,{t:()=>P});var p=b(4674);function P(B){return(0,p.m)(B?.then)}},541:(Fe,W,b)=>{"use strict";b.d(W,{L:()=>k,Q:()=>B});var p=b(655),P=b(4674);function B(j){return(0,p.FC)(this,arguments,function*(){const z=j.getReader();try{for(;;){const{value:le,done:$}=yield(0,p.qq)(z.read());if($)return yield(0,p.qq)(void 0);yield yield(0,p.qq)(le)}}finally{z.releaseLock()}})}function k(j){return(0,P.m)(j?.getReader)}},671:(Fe,W,b)=>{"use strict";b.d(W,{K:()=>P});var p=b(4674);function P(B){return B&&(0,p.m)(B.schedule)}},9360:(Fe,W,b)=>{"use strict";b.d(W,{A:()=>P,e:()=>B});var p=b(4674);function P(k){return(0,p.m)(k?.lift)}function B(k){return j=>{if(P(j))return j.lift(function(H){try{return k(H,this)}catch(z){this.error(z)}});throw new TypeError("Unable to lift unknown Observable type")}}},7400:(Fe,W,b)=>{"use strict";b.d(W,{Z:()=>k});var p=b(7398);const{isArray:P}=Array;function k(j){return(0,p.U)(H=>function B(j,H){return P(H)?j(...H):j(H)}(j,H))}},2420:(Fe,W,b)=>{"use strict";function p(){}b.d(W,{Z:()=>p})},8407:(Fe,W,b)=>{"use strict";b.d(W,{U:()=>B,z:()=>P});var p=b(2737);function P(...k){return B(k)}function B(k){return 0===k.length?p.y:1===k.length?k[0]:function(H){return k.reduce((z,le)=>le(z),H)}}},3894:(Fe,W,b)=>{"use strict";b.d(W,{h:()=>B});var p=b(2653),P=b(7599);function B(k){P.z.setTimeout(()=>{const{onUnhandledError:j}=p.config;if(!j)throw k;j(k)})}},9853:(Fe,W,b)=>{"use strict";function p(P){return new TypeError(`You provided ${null!==P&&"object"==typeof P?"an invalid object":`'${P}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}b.d(W,{z:()=>p})},655:(Fe,W,b)=>{"use strict";function le(G,Y,re,he){return new(re||(re=Promise))(function(ne,Ye){function tt(Tt){try{qe(he.next(Tt))}catch(wt){Ye(wt)}}function ut(Tt){try{qe(he.throw(Tt))}catch(wt){Ye(wt)}}function qe(Tt){Tt.done?ne(Tt.value):function xe(ne){return ne instanceof re?ne:new re(function(Ye){Ye(ne)})}(Tt.value).then(tt,ut)}qe((he=he.apply(G,Y||[])).next())})}function Re(G){return this instanceof Re?(this.v=G,this):new Re(G)}function Ee(G,Y,re){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var xe,he=re.apply(G,Y||[]),ne=[];return xe={},Ye("next"),Ye("throw"),Ye("return"),xe[Symbol.asyncIterator]=function(){return this},xe;function Ye(kt){he[kt]&&(xe[kt]=function(Ut){return new Promise(function(Br,As){ne.push([kt,Ut,Br,As])>1||tt(kt,Ut)})})}function tt(kt,Ut){try{!function ut(kt){kt.value instanceof Re?Promise.resolve(kt.value.v).then(qe,Tt):wt(ne[0][2],kt)}(he[kt](Ut))}catch(Br){wt(ne[0][3],Br)}}function qe(kt){tt("next",kt)}function Tt(kt){tt("throw",kt)}function wt(kt,Ut){kt(Ut),ne.shift(),ne.length&&tt(ne[0][0],ne[0][1])}}function Ve(G){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var re,Y=G[Symbol.asyncIterator];return Y?Y.call(G):(G=function V(G){var Y="function"==typeof Symbol&&Symbol.iterator,re=Y&&G[Y],he=0;if(re)return re.call(G);if(G&&"number"==typeof G.length)return{next:function(){return G&&he>=G.length&&(G=void 0),{value:G&&G[he++],done:!G}}};throw new TypeError(Y?"Object is not iterable.":"Symbol.iterator is not defined.")}(G),re={},he("next"),he("throw"),he("return"),re[Symbol.asyncIterator]=function(){return this},re);function he(ne){re[ne]=G[ne]&&function(Ye){return new Promise(function(tt,ut){!function xe(ne,Ye,tt,ut){Promise.resolve(ut).then(function(qe){ne({value:qe,done:tt})},Ye)}(tt,ut,(Ye=G[ne](Ye)).done,Ye.value)})}}}b.d(W,{FC:()=>Ee,KL:()=>Ve,mG:()=>le,qq:()=>Re})},9212:(Fe,W,b)=>{"use strict";b.d(W,{tb:()=>xy,AFp:()=>uo,ip1:()=>uC,hGG:()=>v1,z2F:()=>Lc,Ojb:()=>bh,sBO:()=>h0,Sil:()=>IT,EJc:()=>a1,Xts:()=>rr,SBq:()=>yo,lqb:()=>vr,qLn:()=>Lt,vpe:()=>Eo,XFs:()=>Ct,OlP:()=>pt,zs3:()=>Kn,ZZ4:()=>i,aQg:()=>u,soG:()=>jm,YKP:()=>aw,h0i:()=>Pc,R0b:()=>dn,FiY:()=>Wn,Lbi:()=>qu,g9A:()=>kl,Qsj:()=>Pa,FYo:()=>Nd,JOm:()=>fa,tp0:()=>kr,Rgc:()=>Fp,dDg:()=>JT,eoX:()=>aC,GfV:()=>Xw,s_b:()=>vm,ifc:()=>Wr,T8G:()=>w0,VuI:()=>z1,MMx:()=>cw,Lck:()=>w_,RIp:()=>Ci,f3M:()=>bt,X6Q:()=>f1,$WT:()=>Kr,MR2:()=>Ln,qFp:()=>W1,r_H:()=>wg,rg0:()=>m,c2e:()=>eC,zSh:()=>aa,wAp:()=>nf,I6F:()=>Fm,vHH:()=>Oe,lri:()=>oC,rWj:()=>sC,cg1:()=>sy,kuF:()=>pn,kL8:()=>JD,dqk:()=>Ht,iPO:()=>O1,Z0I:()=>Va,eJc:()=>Ur,QGY:()=>cy,F4k:()=>IE,RDi:()=>wh,AaK:()=>q,Xq5:()=>O0,TTD:()=>Ho,_Bn:()=>sw,jDz:()=>lw,xp6:()=>Ky,uIk:()=>Ov,ekj:()=>kv,um2:()=>DD,Suo:()=>Nw,Xpm:()=>Wc,lG2:()=>Lf,Yz7:()=>Nt,cJS:()=>Ps,oAB:()=>$i,Yjl:()=>Zc,Y36:()=>Pd,_UZ:()=>oy,BQk:()=>Mm,ynx:()=>Sm,qZA:()=>Im,TgZ:()=>bm,EpF:()=>ZD,n5z:()=>Js,LFG:()=>gn,$8M:()=>Xs,$Z:()=>Yy,NdJ:()=>ly,CRH:()=>xw,oxw:()=>AE,ALo:()=>Sw,lcZ:()=>Mw,xi3:()=>_w,Dn7:()=>Tw,Q6J:()=>Lv,DdM:()=>yw,VKq:()=>Dw,iGM:()=>Ow,MAs:()=>UE,wJu:()=>CD,SjG:()=>wD,x6l:()=>ED,KtG:()=>fl,CHM:()=>Yf,oJD:()=>Ed,P3R:()=>up,YNc:()=>Zd,W1O:()=>kw,_uU:()=>YE,Oqu:()=>fy,hij:()=>Om});let P=null,k=1;function H(e){const t=P;return P=e,t}function ie(e){if((!We(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==k)){if(!e.producerMustRecompute(e)&&!Ne(e))return e.dirty=!1,void(e.lastCleanEpoch=k);e.producerRecomputeValue(e),e.dirty=!1,e.lastCleanEpoch=k}}function Ne(e){ee(e);for(let t=0;t0}function ee(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let ne=null;var Hr=b(8645),Os=b(7394),kc=b(5619),Xe=b(7398);function ae(e){for(let t in e)if(e[t]===ae)return t;throw Error("Could not find renamed property on target object.")}function q(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(q).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function De(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const je=ae({__forward_ref__:ae});function rt(e){return e.__forward_ref__=rt,e.toString=function(){return q(this())},e}function me(e){return $e(e)?e():e}function $e(e){return"function"==typeof e&&e.hasOwnProperty(je)&&e.__forward_ref__===rt}function Qe(e){return e&&!!e.\u0275providers}const hn="https://g.co/ng/security#xss";class Oe extends Error{constructor(t,n){super(pn(t,n)),this.code=t}}function pn(e,t){return`NG0${Math.abs(e)}${t?": "+t:""}`}const qt=ae({\u0275cmp:ae}),fi=ae({\u0275dir:ae}),$t=ae({\u0275pipe:ae}),Vr=ae({\u0275mod:ae}),It=ae({\u0275fac:ae}),Mo=ae({__NG_ELEMENT_ID__:ae}),_o=ae({__NG_ENV_ID__:ae});function ct(e){return"string"==typeof e?e:null==e?"":String(e)}function Ao(e,t){throw new Oe(-201,!1)}function on(e,t){null==e&&function ot(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function Nt(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ps(e){return{providers:e.providers||[],imports:e.imports||[]}}function Fi(e){return sr(e,za)||sr(e,$s)}function Va(e){return null!==Fi(e)}function sr(e,t){return e.hasOwnProperty(t)?e[t]:null}function Fs(e){return e&&(e.hasOwnProperty(ks)||e.hasOwnProperty(Uc))?e[ks]:null}const za=ae({\u0275prov:ae}),ks=ae({\u0275inj:ae}),$s=ae({ngInjectableDef:ae}),Uc=ae({ngInjectorDef:ae});var Ct=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(Ct||{});let Ga;function Wa(){return Ga}function Mn(e){const t=Ga;return Ga=e,t}function Ce(e,t,n){const r=Fi(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&Ct.Optional?null:void 0!==t?t:void Ao()}const Ht=globalThis;class pt{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=Nt({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}const js={},$n="__NG_DI_FLAG__",Bs="ngTempTokenPath",vf=/\n/gm,Bc="__source";let ki;function Gr(e){const t=ki;return ki=e,t}function Ef(e,t=Ct.Default){if(void 0===ki)throw new Oe(-203,!1);return null===ki?Ce(e,void 0,t):ki.get(e,t&Ct.Optional?null:void 0,t)}function gn(e,t=Ct.Default){return(Wa()||Ef)(me(e),t)}function bt(e,t=Ct.Default){return gn(e,Hs(t))}function Hs(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ya(e){const t=[];for(let n=0;nt){l=c-1;break}}}for(;cc?"":s[T+1].toLowerCase();const L=8&r?R:null;if(L&&-1!==Vs(L,E,0)||2&r&&E!==R){if(ur(r))return!1;l=!0}}}}else{if(!l&&!ur(r)&&!ur(g))return!1;if(l&&ur(g))continue;l=!1,r=g|1&r}}return ur(r)||l}function ur(e){return 0==(1&e)}function Zp(e,t,n,r){if(null===t)return-1;let s=0;if(r||!n){let c=!1;for(;s-1)for(n++;n0?'="'+h+'"':"")+"]"}else 8&r?s+="."+l:4&r&&(s+=" "+l);else""!==s&&!ur(l)&&(t+=Ja(c,s),s=""),r=l,c=c||!ur(r);n++}return""!==s&&(t+=Ja(c,s)),t}function Wc(e){return Sr(()=>{const t=Yc(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===xo.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Wr.Emulated,styles:e.styles||Rt,_:null,schemas:e.schemas||null,tView:null,id:""};Ff(n);const r=e.dependencies;return n.directiveDefs=Xa(r,!1),n.pipeDefs=Xa(r,!0),n.id=function $f(e){let t=0;const n=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const s of n)t=Math.imul(31,t)+s.charCodeAt(0)<<0;return t+=2147483648,"c"+t}(n),n})}function xf(e){return Et(e)||sn(e)}function Pf(e){return null!==e}function $i(e){return Sr(()=>({type:e.type,bootstrap:e.bootstrap||Rt,declarations:e.declarations||Rt,imports:e.imports||Rt,exports:e.exports||Rt,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Kc(e,t){if(null==e)return ar;const n={};for(const r in e)if(e.hasOwnProperty(r)){let s=e[r],c=s;Array.isArray(s)&&(c=s[1],s=s[0]),n[s]=r,t&&(t[s]=c)}return n}function Lf(e){return Sr(()=>{const t=Yc(e);return Ff(t),t})}function Zc(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function Et(e){return e[qt]||null}function sn(e){return e[fi]||null}function mn(e){return e[$t]||null}function Kr(e){const t=Et(e)||sn(e)||mn(e);return null!==t&&t.standalone}function vn(e,t){const n=e[Vr]||null;if(!n&&!0===t)throw new Error(`Type ${q(e)} does not have '\u0275mod' property.`);return n}function Yc(e){const t={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputTransforms:null,inputConfig:e.inputs||ar,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||Rt,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:Kc(e.inputs,t),outputs:Kc(e.outputs),debugInfo:null}}function Ff(e){e.features?.forEach(t=>t(e))}function Xa(e,t){if(!e)return null;const n=t?mn:xf;return()=>("function"==typeof e?e():e).map(r=>n(r)).filter(Pf)}const Gt=0,Ie=1,it=2,Jt=3,Xn=4,yn=5,cr=6,Fo=7,lt=8,Nn=9,Mr=10,gt=11,zs=12,Uf=13,ko=14,Wt=15,$o=16,Uo=17,_r=18,Gs=19,eu=20,Zr=21,Ws=22,Tr=23,st=25,qc=1,er=7,Bo=9,Qt=10;var tu=function(e){return e[e.None=0]="None",e[e.HasTransplantedViews=2]="HasTransplantedViews",e}(tu||{});function _n(e){return Array.isArray(e)&&"object"==typeof e[qc]}function Tn(e){return Array.isArray(e)&&!0===e[qc]}function Jc(e){return 0!=(4&e.flags)}function Ui(e){return e.componentOffset>-1}function nu(e){return 1==(1&e.flags)}function lr(e){return!!e.template}function Qc(e){return 0!=(512&e[it])}function Yr(e,t){return e.hasOwnProperty(It)?e[It]:null}class il{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function Ho(){return ou}function ou(e){return e.type.prototype.ngOnChanges&&(e.setInput=au),su}function su(){const e=ol(this),t=e?.current;if(t){const n=e.previous;if(n===ar)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function au(e,t,n,r){const s=this.declaredInputs[n],c=ol(e)||function Bf(e,t){return e[uu]=t}(e,{previous:ar,current:null}),l=c.current||(c.current={}),h=c.previous,g=h[s];l[s]=new il(g&&g.currentValue,t,h===ar),e[r]=t}Ho.ngInherit=!0;const uu="__ngSimpleChanges__";function ol(e){return e[uu]||null}const dr=function(e,t,n){};let du=!1;function Vt(e){for(;Array.isArray(e);)e=e[Gt];return e}function Vo(e,t){return Vt(t[e])}function an(e,t){return Vt(t[e.index])}function zo(e,t){return e.data[t]}function hi(e,t){return e[t]}function Un(e,t){const n=t[e];return _n(n)?n:n[Gt]}function hu(e){return 128==(128&e[it])}function Ar(e,t){return null==t?null:e[t]}function pu(e){e[Uo]=0}function ig(e){1024&e[it]||(e[it]|=1024,hu(e)&&Go(e))}function cl(e){return 9216&e[it]||e[Tr]?.dirty}function gu(e){cl(e)?Go(e):64&e[it]&&(function fu(){return du}()?(e[it]|=1024,Go(e)):e[Mr].changeDetectionScheduler?.notify())}function Go(e){e[Mr].changeDetectionScheduler?.notify();let t=qr(e);for(;null!==t&&!(8192&t[it])&&(t[it]|=8192,hu(t));)t=qr(t)}function mu(e,t){if(256==(256&e[it]))throw new Oe(911,!1);null===e[Zr]&&(e[Zr]=[]),e[Zr].push(t)}function qr(e){const t=e[Jt];return Tn(t)?t[Jt]:t}const at={lFrame:et(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function yu(){return at.bindingsEnabled}function te(){return at.lFrame.lView}function Mt(){return at.lFrame.tView}function Yf(e){return at.lFrame.contextLView=e,e[lt]}function fl(e){return at.lFrame.contextLView=null,e}function jt(){let e=qf();for(;null!==e&&64===e.type;)e=e.parent;return e}function qf(){return at.lFrame.currentTNode}function Rr(e,t){const n=at.lFrame;n.currentTNode=e,n.isParent=t}function hl(){return at.lFrame.isParent}function pl(){at.lFrame.isParent=!1}function Dn(){const e=at.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Or(){return at.lFrame.bindingIndex++}function ug(e,t){const n=at.lFrame;n.bindingIndex=n.bindingRootIndex=e,gi(t)}function gi(e){at.lFrame.currentDirectiveIndex=e}function _e(){return at.lFrame.currentQueryIndex}function Be(e){at.lFrame.currentQueryIndex=e}function dt(e){const t=e[Ie];return 2===t.type?t.declTNode:1===t.type?e[yn]:null}function xt(e,t,n){if(n&Ct.SkipSelf){let s=t,c=e;for(;!(s=s.parent,null!==s||n&Ct.Host||(s=dt(c),null===s||(c=c[ko],10&s.type))););if(null===s)return!1;t=s,e=c}const r=at.lFrame=oe();return r.currentTNode=t,r.lView=e,!0}function pe(e){const t=oe(),n=e[Ie];at.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function oe(){const e=at.lFrame,t=null===e?null:e.child;return null===t?et(e):t}function et(e){const t={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:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function fr(){const e=at.lFrame;return at.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const un=fr;function hr(){const e=fr();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function En(){return at.lFrame.selectedIndex}function Kt(e){at.lFrame.selectedIndex=e}function Bt(){const e=at.lFrame;return zo(e.tView,e.selectedIndex)}let vl=!0;function mi(){return vl}function xn(e){vl=e}function Hi(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[g]<0&&(e[Uo]+=65536),(h>14>16&&(3&e[it])===t&&(e[it]+=16384,yl(h,c)):yl(h,c)}const Pr=-1;class Vi{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function Yo(e){return e!==Pr}function qo(e){return 32767&e}function ti(e,t){let n=function th(e){return e>>16}(e),r=t;for(;n>0;)r=r[ko],n--;return r}let bu=!0;function qs(e){const t=bu;return bu=e,t}const Gi=255,Dl=5;let Wi=0;const gr={};function Bn(e,t){const n=Iu(e,t);if(-1!==n)return n;const r=t[Ie];r.firstCreatePass&&(e.injectorIndex=t.length,Jo(r.data,e),Jo(t,null),Jo(r.blueprint,null));const s=nr(e,t),c=e.injectorIndex;if(Yo(s)){const l=qo(s),h=ti(s,t),g=h[Ie].data;for(let E=0;E<8;E++)t[c+E]=h[l+E]|g[l+E]}return t[c+8]=s,c}function Jo(e,t){e.push(0,0,0,0,0,0,0,0,t)}function Iu(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function nr(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,s=t;for(;null!==s;){if(r=Ji(s),null===r)return Pr;if(n++,s=s[ko],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return Pr}function Su(e,t,n){!function nh(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(Mo)&&(r=n[Mo]),null==r&&(r=n[Mo]=Wi++);const s=r&Gi;t.data[e+(s>>Dl)]|=1<=0?t&Gi:qi:t}(n);if("function"==typeof c){if(!xt(t,e,r))return r&Ct.Host?Mu(s,0,r):wl(t,n,r,s);try{let l;if(l=c(r),null!=l||r&Ct.Optional)return l;Ao()}finally{un()}}else if("number"==typeof c){let l=null,h=Iu(e,t),g=Pr,E=r&Ct.Host?t[Wt][yn]:null;for((-1===h||r&Ct.SkipSelf)&&(g=-1===h?nr(e,t):t[h+8],g!==Pr&&Zi(r,!1)?(l=t[Ie],h=qo(g),t=ti(g,t)):h=-1);-1!==h;){const S=t[Ie];if(Ft(c,h,S.data)){const T=bl(h,t,n,l,r,E);if(T!==gr)return T}g=t[h+8],g!==Pr&&Zi(r,t[Ie].data[h+8]===E)&&Ft(c,h,t)?(l=S,h=qo(g),t=ti(g,t)):h=-1}}return s}function bl(e,t,n,r,s,c){const l=t[Ie],h=l.data[e+8],S=Qo(h,l,n,null==r?Ui(h)&&bu:r!=l&&0!=(3&h.type),s&Ct.Host&&c===h);return null!==S?mr(t,l,S,h):gr}function Qo(e,t,n,r,s){const c=e.providerIndexes,l=t.data,h=1048575&c,g=e.directiveStart,S=c>>20,R=s?h+S:e.directiveEnd;for(let L=r?h:h+S;L=g&&Q.type===n)return L}if(s){const L=l[g];if(L&&lr(L)&&L.type===n)return g}return null}function mr(e,t,n,r){let s=e[n];const c=t.data;if(function eh(e){return e instanceof Vi}(s)){const l=s;l.resolving&&function ja(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new Oe(-200,`Circular dependency in DI detected for ${e}${n}`)}(function St(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():ct(e)}(c[n]));const h=qs(l.canSeeViewProviders);l.resolving=!0;const E=l.injectImpl?Mn(l.injectImpl):null;xt(e,r,Ct.Default);try{s=e[n]=l.factory(void 0,c,e,r),t.firstCreatePass&&n>=r.directiveStart&&function Cu(e,t,n){const{ngOnChanges:r,ngOnInit:s,ngDoCheck:c}=t.type.prototype;if(r){const l=ou(t);(n.preOrderHooks??=[]).push(e,l),(n.preOrderCheckHooks??=[]).push(e,l)}s&&(n.preOrderHooks??=[]).push(0-e,s),c&&((n.preOrderHooks??=[]).push(e,c),(n.preOrderCheckHooks??=[]).push(e,c))}(n,c[n],t)}finally{null!==E&&Mn(E),qs(h),l.resolving=!1,un()}}return s}function Ft(e,t,n){return!!(n[t+(e>>Dl)]&1<{const t=e.prototype.constructor,n=t[It]||Tu(t),r=Object.prototype;let s=Object.getPrototypeOf(e.prototype).constructor;for(;s&&s!==r;){const c=s[It]||Tu(s);if(c&&c!==n)return c;s=Object.getPrototypeOf(s)}return c=>new c})}function Tu(e){return $e(e)?()=>{const t=Tu(me(e));return t&&t()}:Yr(e)}function Ji(e){const t=e[Ie],n=t.type;return 2===n?t.declTNode:1===n?e[yn]:null}function Xs(e){return function El(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let s=0;for(;s{const r=function ea(e){return function(...n){if(e){const r=e(...n);for(const s in r)this[s]=r[s]}}}(t);function s(...c){if(this instanceof s)return r.apply(this,c),this;const l=new s(...c);return h.annotation=l,h;function h(g,E,S){const T=g.hasOwnProperty(Qi)?g[Qi]:Object.defineProperty(g,Qi,{value:[]})[Qi];for(;T.length<=S;)T.push(null);return(T[S]=T[S]||[]).push(l),g}}return n&&(s.prototype=Object.create(n.prototype)),s.prototype.ngMetadataName=e,s.annotationCls=s,s})}function Di(e,t){e.forEach(n=>Array.isArray(n)?Di(n,t):t(n))}function Au(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ei(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function Cn(e,t,n){let r=eo(e,t);return r>=0?e[1|r]=n:(r=~r,function Ru(e,t,n,r){let s=e.length;if(s==t)e.push(n,r);else if(1===s)e.push(r,e[0]),e[0]=n;else{for(s--,e.push(e[s-1],e[s]);s>t;)e[s]=e[s-2],s--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Ou(e,t){const n=eo(e,t);if(n>=0)return e[1|n]}function eo(e,t){return function Nu(e,t,n){let r=0,s=e.length>>n;for(;s!==r;){const c=r+(s-r>>1),l=e[c<t?s=c:r=c+1}return~(s<{n.push(l)};return Di(t,l=>{const h=l;ia(h,c,[],r)&&(s||=[],s.push(h))}),void 0!==s&&Uu(s,c),n}function Uu(e,t){for(let n=0;n{t(c,r)})}}function ia(e,t,n,r){if(!(e=me(e)))return!1;let s=null,c=Fs(e);const l=!c&&Et(e);if(c||l){if(l&&!l.standalone)return!1;s=e}else{const g=e.ngModule;if(c=Fs(g),!c)return!1;s=g}const h=r.has(s);if(l){if(h)return!1;if(r.add(s),l.dependencies){const g="function"==typeof l.dependencies?l.dependencies():l.dependencies;for(const E of g)ia(E,t,n,r)}}else{if(!c)return!1;{if(null!=c.imports&&!h){let E;r.add(s);try{Di(c.imports,S=>{ia(S,t,n,r)&&(E||=[],E.push(S))})}finally{}void 0!==E&&Uu(E,t)}if(!h){const E=Yr(s)||(()=>new s);t({provide:s,useFactory:E,deps:Rt},s),t({provide:is,useValue:s,multi:!0},s),t({provide:rr,useValue:()=>gn(s),multi:!0},s)}const g=c.providers;if(null!=g&&!h){const E=e;ss(g,S=>{t(S,E)})}}}return s!==e&&void 0!==e.providers}function ss(e,t){for(let n of e)Qe(n)&&(n=n.\u0275providers),Array.isArray(n)?ss(n,t):t(n)}const ju=ae({provide:String,useValue:ae});function oa(e){return null!==e&&"object"==typeof e&&ju in e}function $r(e){return"function"==typeof e}const aa=new pt("Set Injector scope."),io={},hh={};let oo;function as(){return void 0===oo&&(oo=new ro),oo}class vr{}class yr extends vr{get destroyed(){return this._destroyed}constructor(t,n,r,s){super(),this.parent=n,this.source=r,this.scopes=s,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Wu(t,l=>this.processProvider(l)),this.records.set(ku,bi(void 0,this)),s.has("environment")&&this.records.set(vr,bi(void 0,this));const c=this.records.get(aa);null!=c&&"string"==typeof c.value&&this.scopes.add(c.value),this.injectorDefTypes=new Set(this.get(is,Rt,Ct.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const n of this._ngOnDestroyHooks)n.ngOnDestroy();const t=this._onDestroyHooks;this._onDestroyHooks=[];for(const n of t)n()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(t){return this.assertNotDestroyed(),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){this.assertNotDestroyed();const n=Gr(this),r=Mn(void 0);try{return t()}finally{Gr(n),Mn(r)}}get(t,n=js,r=Ct.Default){if(this.assertNotDestroyed(),t.hasOwnProperty(_o))return t[_o](this);r=Hs(r);const c=Gr(this),l=Mn(void 0);try{if(!(r&Ct.SkipSelf)){let g=this.records.get(t);if(void 0===g){const E=function xl(e){return"function"==typeof e||"object"==typeof e&&e instanceof pt}(t)&&Fi(t);g=E&&this.injectableDefInScope(E)?bi(Vu(t),io):null,this.records.set(t,g)}if(null!=g)return this.hydrate(t,g)}return(r&Ct.Self?as():this.parent).get(t,n=r&Ct.Optional&&n===js?null:n)}catch(h){if("NullInjectorError"===h.name){if((h[Bs]=h[Bs]||[]).unshift(q(t)),c)throw h;return function Cf(e,t,n,r){const s=e[Bs];throw t[Bc]&&s.unshift(t[Bc]),e.message=function bf(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let s=q(t);if(Array.isArray(t))s=t.map(q).join(" -> ");else if("object"==typeof t){let c=[];for(let l in t)if(t.hasOwnProperty(l)){let h=t[l];c.push(l+":"+("string"==typeof h?JSON.stringify(h):q(h)))}s=`{${c.join(", ")}}`}return`${n}${r?"("+r+")":""}[${s}]: ${e.replace(vf,"\n ")}`}("\n"+e.message,s,n,r),e.ngTokenPath=s,e[Bs]=null,e}(h,t,"R3InjectorError",this.source)}throw h}finally{Mn(l),Gr(c)}}resolveInjectorInitializers(){const t=Gr(this),n=Mn(void 0);try{const s=this.get(rr,Rt,Ct.Self);for(const c of s)c()}finally{Gr(t),Mn(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(q(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Oe(205,!1)}processProvider(t){let n=$r(t=me(t))?t:me(t&&t.provide);const r=function zu(e){return oa(e)?bi(void 0,e.useValue):bi(Gu(e),io)}(t);if(!$r(t)&&!0===t.multi){let s=this.records.get(n);s||(s=bi(void 0,io,!0),s.factory=()=>Ya(s.multi),this.records.set(n,s)),n=t,s.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===io&&(n.value=hh,n.value=n.factory()),"object"==typeof n.value&&n.value&&function Nl(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=me(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){const n=this._onDestroyHooks.indexOf(t);-1!==n&&this._onDestroyHooks.splice(n,1)}}function Vu(e){const t=Fi(e),n=null!==t?t.factory:Yr(e);if(null!==n)return n;if(e instanceof pt)throw new Oe(204,!1);if(e instanceof Function)return function ph(e){if(e.length>0)throw new Oe(204,!1);const n=function Ls(e){return e&&(e[za]||e[$s])||null}(e);return null!==n?()=>n.factory(e):()=>new e}(e);throw new Oe(204,!1)}function Gu(e,t,n){let r;if($r(e)){const s=me(e);return Yr(s)||Vu(s)}if(oa(e))r=()=>me(e.useValue);else if(function Bu(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Ya(e.deps||[]));else if(function sa(e){return!(!e||!e.useExisting)}(e))r=()=>gn(me(e.useExisting));else{const s=me(e&&(e.useClass||e.provide));if(!function gh(e){return!!e.deps}(e))return Yr(s)||Vu(s);r=()=>new s(...Ya(e.deps))}return r}function bi(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Wu(e,t){for(const n of e)Array.isArray(n)?Wu(n,t):n&&Qe(n)?Wu(n.\u0275providers,t):t(n)}function wg(e,t){e instanceof yr&&e.assertNotDestroyed();const r=Gr(e),s=Mn(void 0);try{return t()}finally{Gr(r),Mn(s)}}function so(e,t=null,n=null,r){const s=Eh(e,t,n,r);return s.resolveInjectorInitializers(),s}function Eh(e,t=null,n=null,r,s=new Set){const c=[n||Rt,Ci(e)];return r=r||("object"==typeof e?void 0:q(e)),new yr(c,t||as(),r||null,s)}let Yu,Kn=(()=>{class e{static#e=this.THROW_IF_NOT_FOUND=js;static#t=this.NULL=new ro;static create(n,r){if(Array.isArray(n))return so({name:""},r,n,"");{const s=n.name??"";return so({name:s},n.parent,n.providers,s)}}static#n=this.\u0275prov=Nt({token:e,providedIn:"any",factory:()=>gn(ku)});static#r=this.__NG_ELEMENT_ID__=-1}return e})();function Ur(e){return!!vn(e)}function wh(e){Yu=e}function Zn(){if(void 0!==Yu)return Yu;if(typeof document<"u")return document;throw new Oe(210,!1)}const uo=new pt("AppId",{providedIn:"root",factory:()=>Ch}),Ch="ng",kl=new pt("Platform Initializer"),qu=new pt("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),bh=new pt("CSP nonce",{providedIn:"root",factory:()=>Zn().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});function Vn(e){return e instanceof Function?e():e}function hs(e){return 128==(128&e.flags)}var fa=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}(fa||{});const Ah=/^>|^->||--!>|)/g,Oh="\u200b$1\u200b";const rc=new Map;let Nh=0;const sc="__ngContext__";function cn(e,t){_n(t)?(e[sc]=t[Gs],function ic(e){rc.set(e[Gs],e)}(t)):e[sc]=t}let ha;function uc(e,t){return ha(e,t)}function Ai(e,t,n,r,s){if(null!=r){let c,l=!1;Tn(r)?c=r:_n(r)&&(l=!0,r=r[Gt]);const h=Vt(r);0===e&&null!==n?null==s?zh(t,n,h):Ri(t,n,h,s||null,!0):1===e&&null!==n?Ri(t,n,h,s||null,!0):2===e?function Ea(e,t,n){const r=Ds(e,t);r&&function xg(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,h,l):3===e&&t.destroyNode(h),null!=c&&function Jh(e,t,n,r,s){const c=n[er];c!==Vt(n)&&Ai(t,e,r,c,s);for(let h=Qt;ht.replace(Rh,Oh))}(t))}function kn(e,t,n){return e.createElement(t,n)}function vs(e,t){t[Mr].changeDetectionScheduler?.notify(),Ca(e,t,t[gt],2,null,null)}function Hh(e,t){const n=e[Bo],r=n.indexOf(t);n.splice(r,1)}function ga(e,t){if(e.length<=Qt)return;const n=Qt+t,r=e[n];if(r){const s=r[$o];null!==s&&s!==e&&Hh(s,r),t>0&&(e[n-1][Xn]=r[Xn]);const c=Ei(e,Qt+t);!function Uh(e,t){vs(e,t),t[Gt]=null,t[yn]=null}(r[Ie],r);const l=c[_r];null!==l&&l.detachView(c[Ie]),r[Jt]=null,r[Xn]=null,r[it]&=-129}return r}function ma(e,t){if(!(256&t[it])){const n=t[gt];n.destroyNode&&Ca(e,t,n,3,null,null),function Jl(e){let t=e[zs];if(!t)return ys(e[Ie],e);for(;t;){let n=null;if(_n(t))n=t[zs];else{const r=t[Qt];r&&(n=r)}if(!n){for(;t&&!t[Xn]&&t!==e;)_n(t)&&ys(t[Ie],t),t=t[Jt];null===t&&(t=e),_n(t)&&ys(t[Ie],t),n=t&&t[Xn]}t=n}}(t)}}function ys(e,t){if(!(256&t[it])){t[it]&=-129,t[it]|=256,t[Tr]&&function Ve(e){if(ee(e),We(e))for(let t=0;t=0?r[l]():r[-l].unsubscribe(),c+=2}else n[c].call(r[n[c+1]]);null!==r&&(t[Fo]=null);const s=t[Zr];if(null!==s){t[Zr]=null;for(let c=0;c-1){const{encapsulation:c}=e.data[r.directiveStart+s];if(c===Wr.None||c===Wr.Emulated)return null}return an(r,n)}}(e,t.parent,n)}function Ri(e,t,n,r,s){e.insertBefore(t,n,r,s)}function zh(e,t,n){e.appendChild(t,n)}function Gh(e,t,n,r,s){null!==r?Ri(e,t,n,r,s):zh(e,t,n)}function Ds(e,t){return e.parentNode(t)}let ya,ba,rn,Kh=function td(e,t,n){return 40&e.type?an(e,n):null};function dc(e,t,n,r){const s=va(e,r,t),c=t[gt],h=function ed(e,t,n){return Kh(e,t,n)}(r.parent||t[yn],r,t);if(null!=s)if(Array.isArray(n))for(let g=0;ge,createScript:e=>e,createScriptURL:e=>e})}catch{}return ba}()?.createHTML(e)||e}function ws(){if(void 0===rn&&(rn=null,Ht.trustedTypes))try{rn=Ht.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return rn}function sd(e){return ws()?.createHTML(e)||e}function ud(e){return ws()?.createScriptURL(e)||e}class pc{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${hn})`}}function si(e){return e instanceof pc?e.changingThisBreaksApplicationSecurity:e}function Cs(e,t){const n=function ep(e){return e instanceof pc&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${hn})`)}return n===t}class np{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const n=(new window.DOMParser).parseFromString(Es(t),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(t):(n.removeChild(n.firstChild),n)}catch{return null}}}class dd{constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){const n=this.inertDocument.createElement("template");return n.innerHTML=Es(t),n}}const hd=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function mc(e){return(e=String(e)).match(hd)?e:"unsafe:"+e}function zn(e){const t={};for(const n of e.split(","))t[n]=!0;return t}function qn(...e){const t={};for(const n of e)for(const r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}const Ma=zn("area,br,col,hr,img,wbr"),bs=zn("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),ai=zn("rp,rt"),vc=qn(Ma,qn(bs,zn("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),qn(ai,zn("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),qn(ai,bs)),yc=zn("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),md=qn(yc,zn("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),zn("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),Dc=zn("script,style,template");class op{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(t){let n=t.firstChild,r=!0;for(;n;)if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild)n=n.firstChild;else for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let s=this.checkClobberedElement(n,n.nextSibling);if(s){n=s;break}n=this.checkClobberedElement(n,n.parentNode)}return this.buf.join("")}startElement(t){const n=t.nodeName.toLowerCase();if(!vc.hasOwnProperty(n))return this.sanitizedSomething=!0,!Dc.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);const r=t.attributes;for(let s=0;s"),!0}endElement(t){const n=t.nodeName.toLowerCase();vc.hasOwnProperty(n)&&!Ma.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(yd(t))}checkClobberedElement(t,n){if(n&&(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return n}}const vd=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,sp=/([^\#-~ |!])/g;function yd(e){return e.replace(/&/g,"&").replace(vd,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(sp,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let _a;function Ta(e){return"content"in e&&function Dd(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var fo=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(fo||{});function Ed(e){const t=ho();return t?sd(t.sanitize(fo.HTML,e)||""):Cs(e,"HTML")?sd(si(e)):function Ss(e,t){let n=null;try{_a=_a||function ld(e){const t=new dd(e);return function fd(){try{return!!(new window.DOMParser).parseFromString(Es(""),"text/html")}catch{return!1}}()?new np(t):t}(e);let r=t?String(t):"";n=_a.getInertBodyElement(r);let s=5,c=r;do{if(0===s)throw new Error("Failed to sanitize html because the input is unstable");s--,r=c,c=n.innerHTML,n=_a.getInertBodyElement(r)}while(r!==c);return Es((new op).sanitizeChildren(Ta(n)||n))}finally{if(n){const r=Ta(n)||n;for(;r.firstChild;)r.removeChild(r.firstChild)}}}(Zn(),ct(e))}function Ec(e){const t=ho();return t?t.sanitize(fo.URL,e)||"":Cs(e,"URL")?si(e):mc(ct(e))}function ap(e){const t=ho();if(t)return ud(t.sanitize(fo.RESOURCE_URL,e)||"");if(Cs(e,"ResourceURL"))return ud(si(e));throw new Oe(904,!1)}function up(e,t,n){return function Vg(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?ap:Ec}(t,n)(e)}function ho(){const e=te();return e&&e[Mr].sanitizer}class wd{}let cp=()=>null;function Sd(e,t,n=!1){return cp(e,t,n)}class dp{}class Td{}class em{resolveComponentFactory(t){throw function fp(e){const t=Error(`No component factory found for ${q(e)}.`);return t.ngComponent=e,t}(t)}}let Ic=(()=>{class e{static#e=this.NULL=new em}return e})();function Rd(){return vo(jt(),te())}function vo(e,t){return new yo(an(e,t))}let yo=(()=>{class e{constructor(n){this.nativeElement=n}static#e=this.__NG_ELEMENT_ID__=Rd}return e})();function Od(e){return e instanceof yo?e.nativeElement:e}class Nd{}let Pa=(()=>{class e{constructor(){this.destroyNode=null}static#e=this.__NG_ELEMENT_ID__=()=>function Sc(){const e=te(),n=Un(jt().index,e);return(_n(n)?n:e)[gt]}()}return e})(),La=(()=>{class e{static#e=this.\u0275prov=Nt({token:e,providedIn:"root",factory:()=>null})}return e})();const Mc={};function m(e){const t=H(null);try{return e()}finally{H(t)}}function D(e){return!!A(e)&&(Array.isArray(e)||!(e instanceof Map)&&Symbol.iterator in e)}function A(e){return null!==e&&("function"==typeof e||"object"==typeof e)}class N{constructor(){}supports(t){return D(t)}create(t){return new se(t)}}const U=(e,t)=>t;class se{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||U}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,s=0,c=null;for(;n||r;){const l=!r||n&&n.currentIndex{l=this._trackByFn(s,h),null!==n&&Object.is(n.trackById,l)?(r&&(n=this._verifyReinsertion(n,h,l,s)),Object.is(n.item,h)||this._addIdentityChange(n,h)):(n=this._mismatch(n,h,l,s),r=!0),n=n._next,s++}),this.length=s;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,s){let c;return null===t?c=this._itTail:(c=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,c,s)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,s))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,c,s)):t=this._addAfter(new ke(n,r),c,s),t}_verifyReinsertion(t,n,r,s){let c=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==c?t=this._reinsertAfter(c,t._prev,s):t.currentIndex!=s&&(t.currentIndex=s,this._addToMoves(t,s)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const s=t._prevRemoved,c=t._nextRemoved;return null===s?this._removalsHead=c:s._nextRemoved=c,null===c?this._removalsTail=s:c._prevRemoved=s,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const s=null===n?this._itHead:n._next;return t._next=s,t._prev=n,null===s?this._itTail=t:s._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new Ae),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Ae),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class ke{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Te{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class Ae{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new Te,this.map.set(n,r)),r.add(t)}get(t,n){const s=this.map.get(t);return s?s.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function ve(e,t,n){const r=e.previousIndex;if(null===r)return r;let s=0;return n&&r{if(n&&n.key===s)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const c=this._getOrCreateRecordForKey(s,r);n=this._insertBeforeOrAppend(n,c)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const s=this._records.get(t);this._maybeAddToChanges(s,n);const c=s._prev,l=s._next;return c&&(c._next=l),l&&(l._prev=c),s._next=null,s._prev=null,s}const r=new ht(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class ht{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function mt(){return new i([new N])}let i=(()=>{class e{static#e=this.\u0275prov=Nt({token:e,providedIn:"root",factory:mt});constructor(n){this.factories=n}static create(n,r){if(null!=r){const s=r.factories.slice();n=n.concat(s)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||mt()),deps:[[e,new kr,new Wn]]}}find(n){const r=this.factories.find(s=>s.supports(n));if(null!=r)return r;throw new Oe(901,!1)}}return e})();function o(){return new u([new He])}let u=(()=>{class e{static#e=this.\u0275prov=Nt({token:e,providedIn:"root",factory:o});constructor(n){this.factories=n}static create(n,r){if(r){const s=r.factories.slice();n=n.concat(s)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||o()),deps:[[e,new kr,new Wn]]}}find(n){const r=this.factories.find(s=>s.supports(n));if(r)return r;throw new Oe(901,!1)}}return e})();function y(e,t,n,r,s=!1){for(;null!==n;){const c=t[n.index];null!==c&&r.push(Vt(c)),Tn(c)&&C(c,r);const l=n.type;if(8&l)y(e,t,n.child,r);else if(32&l){const h=uc(n,t);let g;for(;g=h();)r.push(g)}else if(16&l){const h=Zh(t,n);if(Array.isArray(h))r.push(...h);else{const g=qr(t[Wt]);y(g[Ie],g,h,r,!0)}}n=s?n.projectionNext:n.next}return r}function C(e,t){for(let n=Qt;n!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{},consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{Go(e.lView)},consumerOnSignalRead(){this.lView[Tr]=this}};function Ke(e){return be(e[zs])}function Ge(e){return be(e[Xn])}function be(e){for(;null!==e&&!Tn(e);)e=e[Xn];return e}function ft(e){return e.ngOriginalError}class Lt{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&ft(t);for(;n&&ft(n);)n=ft(n);return n||null}}const bn=new pt("",{providedIn:"root",factory:()=>bt(Lt).handleError.bind(void 0)}),ci=new pt("",{providedIn:"root",factory:()=>!1}),Dt={};function Ky(e=1){Zy(Mt(),te(),En()+e,!1)}function Zy(e,t,n,r){if(!r)if(3==(3&t[it])){const c=e.preOrderCheckHooks;null!==c&&Ko(t,c,n)}else{const c=e.preOrderHooks;null!==c&&pr(t,c,0,n)}Kt(n)}function Pd(e,t=Ct.Default){const n=te();return null===n?gn(e,t):_u(jt(),n,me(e),t)}function Yy(){throw new Error("invalid")}function im(e,t,n,r,s,c,l,h,g,E,S){const T=t.blueprint.slice();return T[Gt]=s,T[it]=204|r,(null!==E||e&&2048&e[it])&&(T[it]|=2048),pu(T),T[Jt]=T[ko]=e,T[lt]=n,T[Mr]=l||e&&e[Mr],T[gt]=h||e&&e[gt],T[Nn]=g||e&&e[Nn]||null,T[yn]=c,T[Gs]=function xh(){return Nh++}(),T[cr]=S,T[eu]=E,T[Wt]=2==t.type?e[Wt]:T,T}function Ld(e,t,n,r,s){let c=e.data[t];if(null===c)c=function gv(e,t,n,r,s){const c=qf(),l=hl(),g=e.data[t]=function qC(e,t,n,r,s,c){let l=t?t.injectorIndex:-1,h=0;return function pi(){return null!==at.skipHydrationRootTNode}()&&(h|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:l,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:h,providerIndexes:0,value:s,attrs:c,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,l?c:c&&c.parent,n,t,r,s);return null===e.firstChild&&(e.firstChild=g),null!==c&&(l?null==c.child&&null!==g.parent&&(c.child=g):null===c.next&&(c.next=g,g.prev=c)),g}(e,t,n,r,s),function ag(){return at.lFrame.inI18n}()&&(c.flags|=32);else if(64&c.type){c.type=n,c.value=r,c.attrs=s;const l=function Ys(){const e=at.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}();c.injectorIndex=null===l?-1:l.injectorIndex}return Rr(c,!0),c}function hp(e,t,n,r){if(0===n)return-1;const s=t.length;for(let c=0;cst&&Zy(e,t,st,!1),dr(l?2:0,s),n(r,s)}finally{Kt(c),dr(l?3:1,s)}}function mv(e,t,n){if(Jc(t)){const r=H(null);try{const c=t.directiveEnd;for(let l=t.directiveStart;lnull;function Xy(e,t,n,r){for(let s in e)if(e.hasOwnProperty(s)){n=null===n?{}:n;const c=e[s];null===r?e0(n,t,s,c):r.hasOwnProperty(s)&&e0(n,t,r[s],c)}return n}function e0(e,t,n,r){e.hasOwnProperty(n)?e[n].push(t,r):e[n]=[t,r]}function Ev(e,t,n,r){if(yu()){const s=null===r?null:{"":-1},c=function ob(e,t){const n=e.directiveRegistry;let r=null,s=null;if(n)for(let c=0;c0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(l)!=h&&l.push(h),l.push(n,r,c)}}(e,t,r,hp(e,n,s.hostVars,Dt),s)}function Do(e,t,n,r,s,c){const l=an(e,t);!function Cv(e,t,n,r,s,c,l){if(null==c)e.removeAttribute(t,s,n);else{const h=null==l?ct(c):l(c,r||"",s);e.setAttribute(t,s,h,n)}}(t[gt],l,c,e.value,n,r,s)}function db(e,t,n,r,s,c){const l=c[t];if(null!==l)for(let h=0;he.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}(h,l),function K(e){e.lView[Tr]!==e&&(e.lView=null,I.push(e))}(h)),hr()}}function l0(e,t){for(let n=Ke(e);null!==n;n=Ge(n))for(let r=Qt;r-1&&(ga(t,r),Ei(n,r))}this._attachedToViewContainer=!1}ma(this._lView[Ie],this._lView)}onDestroy(t){mu(this._lView,t)}markForCheck(){pp(this._cdRefInjectingView||this._lView)}detach(){this._lView[it]&=-129}reattach(){gu(this._lView),this._lView[it]|=128}detectChanges(){this._lView[it]|=1024,function Sv(e,t=!0){const n=e[Mr],r=n.rendererFactory;r.begin?.();try{!function pb(e){Mv(e,0);let t=0;for(;cl(e);){if(100===t)throw new Oe(103,!1);t++,Mv(e,1)}}(e)}catch(c){throw t&&sm(e,c),c}finally{r.end?.(),n.inlineEffectRunner?.flush()}}(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new Oe(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,vs(this._lView[Ie],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new Oe(902,!1);this._appRef=t,gu(this._lView)}}let h0=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=Db}return e})();function Db(e){return function Eb(e,t,n){if(Ui(e)&&!n){const r=Un(e.index,t);return new gp(r,r)}return 47&e.type?new gp(t[Wt],t):null}(jt(),te(),16==(16&e))}let am=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=Ib;static#t=this.__NG_ENV_ID__=n=>n}return e})();class bb extends am{constructor(t){super(),this._lView=t}onDestroy(t){return mu(this._lView,t),()=>function vu(e,t){if(null===e[Zr])return;const n=e[Zr].indexOf(t);-1!==n&&e[Zr].splice(n,1)}(this._lView,t)}}function Ib(){return new bb(te())}const p0=new Set;function Tc(e){p0.has(e)||(p0.add(e),performance?.mark?.("mark_feature_usage",{detail:{feature:e}}))}function _v(e){return t=>{setTimeout(e,void 0,t)}}const Eo=class Ob extends Hr.x{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let s=t,c=n||(()=>null),l=r;if(t&&"object"==typeof t){const g=t;s=g.next?.bind(g),c=g.error?.bind(g),l=g.complete?.bind(g)}this.__isAsync&&(c=_v(c),s&&(s=_v(s)),l&&(l=_v(l)));const h=super.subscribe({next:s,error:c,complete:l});return t instanceof Os.w0&&t.add(h),h}};function g0(...e){}class dn{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Eo(!1),this.onMicrotaskEmpty=new Eo(!1),this.onStable=new Eo(!1),this.onError=new Eo(!1),typeof Zone>"u")throw new Oe(908,!1);Zone.assertZonePatched();const s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!r&&n,s.shouldCoalesceRunChangeDetection=r,s.lastRequestAnimationFrameId=-1,s.nativeRequestAnimationFrame=function Nb(){const e="function"==typeof Ht.requestAnimationFrame;let t=Ht[e?"requestAnimationFrame":"setTimeout"],n=Ht[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&t&&n){const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r);const s=n[Zone.__symbol__("OriginalDelegate")];s&&(n=s)}return{nativeRequestAnimationFrame:t,nativeCancelAnimationFrame:n}}().nativeRequestAnimationFrame,function Lb(e){const t=()=>{!function Pb(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Ht,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Av(e),e.isCheckStableRunning=!0,Tv(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Av(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,s,c,l,h)=>{if(function Fb(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(h))return n.invokeTask(s,c,l,h);try{return m0(e),n.invokeTask(s,c,l,h)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===c.type||e.shouldCoalesceRunChangeDetection)&&t(),v0(e)}},onInvoke:(n,r,s,c,l,h,g)=>{try{return m0(e),n.invoke(s,c,l,h,g)}finally{e.shouldCoalesceRunChangeDetection&&t(),v0(e)}},onHasTask:(n,r,s,c)=>{n.hasTask(s,c),r===s&&("microTask"==c.change?(e._hasPendingMicrotasks=c.microTask,Av(e),Tv(e)):"macroTask"==c.change&&(e.hasPendingMacrotasks=c.macroTask))},onHandleError:(n,r,s,c)=>(n.handleError(s,c),e.runOutsideAngular(()=>e.onError.emit(c)),!1)})}(s)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!dn.isInAngularZone())throw new Oe(909,!1)}static assertNotInAngularZone(){if(dn.isInAngularZone())throw new Oe(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,s){const c=this._inner,l=c.scheduleEventTask("NgZoneEvent: "+s,t,xb,g0,g0);try{return c.runTask(l,n,r)}finally{c.cancelTask(l)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const xb={};function Tv(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Av(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function m0(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function v0(e){e._nesting--,Tv(e)}var Ac=function(e){return e[e.EarlyRead=0]="EarlyRead",e[e.Write=1]="Write",e[e.MixedReadWrite=2]="MixedReadWrite",e[e.Read=3]="Read",e}(Ac||{});const D0={destroy(){}};function w0(e,t){!t&&function Pl(e){if(!Wa()&&!function Df(){return ki}())throw new Oe(-203,!1)}();const n=t?.injector??bt(Kn);if(!function ii(e){return"browser"===(e??bt(Kn)).get(qu)}(n))return D0;Tc("NgAfterNextRender");const r=n.get(mp),s=r.handler??=new b0,c=t?.phase??Ac.MixedReadWrite,l=()=>{s.unregister(g),h()},h=n.get(am).onDestroy(l),g=new C0(n,c,()=>{l(),e()});return s.register(g),{destroy:l}}class C0{constructor(t,n,r){this.phase=n,this.callbackFn=r,this.zone=t.get(dn),this.errorHandler=t.get(Lt,null,{optional:!0})}invoke(){try{this.zone.runOutsideAngular(this.callbackFn)}catch(t){this.errorHandler?.handleError(t)}}}class b0{constructor(){this.executingCallbacks=!1,this.buckets={[Ac.EarlyRead]:new Set,[Ac.Write]:new Set,[Ac.MixedReadWrite]:new Set,[Ac.Read]:new Set},this.deferredCallbacks=new Set}register(t){(this.executingCallbacks?this.deferredCallbacks:this.buckets[t.phase]).add(t)}unregister(t){this.buckets[t.phase].delete(t),this.deferredCallbacks.delete(t)}execute(){let t=!1;this.executingCallbacks=!0;for(const n of Object.values(this.buckets))for(const r of n)t=!0,r.invoke();this.executingCallbacks=!1;for(const n of this.deferredCallbacks)this.buckets[n.phase].add(n);return this.deferredCallbacks.clear(),t}destroy(){for(const t of Object.values(this.buckets))t.clear();this.deferredCallbacks.clear()}}let mp=(()=>{class e{constructor(){this.handler=null,this.internalCallbacks=[]}execute(){const n=[...this.internalCallbacks];this.internalCallbacks.length=0;for(const s of n)s();return!!this.handler?.execute()||n.length>0}ngOnDestroy(){this.handler?.destroy(),this.handler=null,this.internalCallbacks.length=0}static#e=this.\u0275prov=Nt({token:e,providedIn:"root",factory:()=>new e})}return e})();function Ub(e,t){const n=Un(t,e),r=n[Ie];!function jb(e,t){for(let n=t.length;n0&&id(e,n,c.join(" "))}}(R,Ot,Q,r),void 0!==n&&function qb(e,t,n){const r=e.projection=[];for(let s=0;s>17&32767}function Nv(e){return 2|e}function Oc(e){return(131068&e)>>2}function xv(e,t){return-131069&e|t<<2}function Pv(e){return 1|e}function B0(e,t,n,r){const s=e[n+1],c=null===t;let l=r?Fa(s):Oc(s),h=!1;for(;0!==l&&(!1===h||c);){const E=e[l+1];fI(e[l],t)&&(h=!0,e[l+1]=r?Pv(E):Nv(E)),l=r?Fa(E):Oc(E)}h&&(e[n+1]=r?Nv(s):Pv(s))}function fI(e,t){return null===e||null==t||(Array.isArray(e)?e[1]:e)===t||!(!Array.isArray(e)||"string"!=typeof t)&&eo(e,t)>=0}function Lv(e,t,n){const r=te();return In(r,Or(),t)&&function jr(e,t,n,r,s,c,l,h){const g=an(t,n);let S,E=t.inputs;!h&&null!=E&&(S=E[r])?(Iv(e,n,S,r,s),Ui(t)&&function XC(e,t){const n=Un(t,e);16&n[it]||(n[it]|=64)}(n,t.index)):3&t.type&&(r=function QC(e){return"class"===e?"className":"for"===e?"htmlFor":"formaction"===e?"formAction":"innerHtml"===e?"innerHTML":"readonly"===e?"readOnly":"tabindex"===e?"tabIndex":e}(r),s=null!=l?l(s,t.value||"",r):s,c.setProperty(g,r,s))}(Mt(),Bt(),r,e,t,r[gt],n,!1),Lv}function Fv(e,t,n,r,s){const l=s?"class":"style";Iv(e,n,t.inputs[l],l,r)}function kv(e,t){return function Pi(e,t,n,r){const s=te(),c=Mt(),l=function Xr(e){const t=at.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}(2);c.firstUpdatePass&&function q0(e,t,n,r){const s=e.data;if(null===s[n+1]){const c=s[En()],l=function Y0(e,t){return t>=e.expandoStartIndex}(e,n);(function eD(e,t){return 0!=(e.flags&(t?8:16))})(c,r)&&null===t&&!l&&(t=!1),t=function wI(e,t,n,r){const s=function tr(e){const t=at.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let c=r?t.residualClasses:t.residualStyles;if(null===s)0===(r?t.classBindings:t.styleBindings)&&(n=Dp(n=$v(null,e,t,n,r),t.attrs,r),c=null);else{const l=t.directiveStylingLast;if(-1===l||e[l]!==s)if(n=$v(s,e,t,n,r),null===c){let g=function CI(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==Oc(r))return e[Fa(r)]}(e,t,r);void 0!==g&&Array.isArray(g)&&(g=$v(null,e,t,g[1],r),g=Dp(g,t.attrs,r),function bI(e,t,n,r){e[Fa(n?t.classBindings:t.styleBindings)]=r}(e,t,r,g))}else c=function II(e,t,n){let r;const s=t.directiveEnd;for(let c=1+t.directiveStylingLast;c0)&&(E=!0)):S=n,s)if(0!==g){const R=Fa(e[h+1]);e[r+1]=dm(R,h),0!==R&&(e[R+1]=xv(e[R+1],r)),e[h+1]=function uI(e,t){return 131071&e|t<<17}(e[h+1],r)}else e[r+1]=dm(h,0),0!==h&&(e[h+1]=xv(e[h+1],r)),h=r;else e[r+1]=dm(g,0),0===h?h=r:e[g+1]=xv(e[g+1],r),g=r;E&&(e[r+1]=Nv(e[r+1])),B0(e,S,r,!0),B0(e,S,r,!1),function dI(e,t,n,r,s){const c=s?e.residualClasses:e.residualStyles;null!=c&&"string"==typeof t&&eo(c,t)>=0&&(n[r+1]=Pv(n[r+1]))}(t,S,e,r,c),l=dm(h,g),c?t.classBindings=l:t.styleBindings=l}(s,c,t,n,l,r)}}(c,e,l,r),t!==Dt&&In(s,l,t)&&function Q0(e,t,n,r,s,c,l,h){if(!(3&t.type))return;const g=e.data,E=g[h+1],S=function cI(e){return 1==(1&e)}(E)?X0(g,t,n,s,Oc(E),l):void 0;fm(S)||(fm(c)||function aI(e){return 2==(2&e)}(E)&&(c=X0(g,null,n,s,h,l)),function Qh(e,t,n,r,s){if(t)s?e.addClass(n,r):e.removeClass(n,r);else{let c=-1===r.indexOf("-")?void 0:fa.DashCase;null==s?e.removeStyle(n,r,c):("string"==typeof s&&s.endsWith("!important")&&(s=s.slice(0,-10),c|=fa.Important),e.setStyle(n,r,s,c))}}(r,l,Vo(En(),n),s,c))}(c,c.data[En()],s,s[gt],e,s[l+1]=function TI(e,t){return null==e||""===e||("string"==typeof t?e+=t:"object"==typeof e&&(e=q(si(e)))),e}(t,n),r,l)}(e,t,null,!0),kv}function $v(e,t,n,r,s){let c=null;const l=n.directiveEnd;let h=n.directiveStylingLast;for(-1===h?h=n.directiveStart:h++;h0;){const g=e[s],E=Array.isArray(g),S=E?g[1]:g,T=null===S;let R=n[s+1];R===Dt&&(R=T?Rt:void 0);let L=T?Ou(R,r):S===r?R:void 0;if(E&&!fm(L)&&(L=Ou(g,r)),fm(L)&&(h=L,l))return h;const Q=e[s+1];s=l?Fa(Q):Oc(Q)}if(null!==t){let g=c?t.residualClasses:t.residualStyles;null!=g&&(h=Ou(g,r))}return h}function fm(e){return void 0!==e}let sD=()=>null;function Wd(e,t){return sD(e,t)}class sS{destroy(t){}updateValue(t,n){}swap(t,n){const r=Math.min(t,n),s=Math.max(t,n),c=this.detach(s);if(s-r>1){const l=this.detach(r);this.attach(r,c),this.attach(s,l)}else this.attach(r,c)}move(t,n){this.attach(n,this.detach(t))}}function zv(e,t,n,r,s){return e===n&&Object.is(t,r)?1:Object.is(s(e,t),s(n,r))?-1:0}function Gv(e,t,n,r){return!(void 0===t||!t.has(r)||(e.attach(n,t.get(r)),t.delete(r),0))}function aD(e,t,n,r,s){if(Gv(e,t,r,n(r,s)))e.updateValue(r,s);else{const c=e.create(r,s);e.attach(r,c)}}function uD(e,t,n,r){const s=new Set;for(let c=t;c<=n;c++)s.add(r(c,e.at(c)));return s}class cD{constructor(){this.kvMap=new Map,this._vMap=void 0}has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;const n=this.kvMap.get(t);return void 0!==this._vMap&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);void 0===this._vMap&&(this._vMap=new Map);const s=this._vMap;for(;s.has(r);)r=s.get(r);s.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),void 0!==this._vMap){const s=this._vMap;for(;s.has(r);)r=s.get(r),t(r,n)}}}function Ip(e,t,n,r){const s=t.tView,h=im(e,s,n,4096&e[it]?4096:16,null,t,null,null,null,r?.injector??null,r?.dehydratedView??null);h[$o]=e[t.index];const E=e[_r];return null!==E&&(h[_r]=E.createEmbeddedView(s)),Rv(s,h,n),h}function lD(e,t){const n=Qt+t;if(n0&&(n[s-1][Xn]=t),r{class e{static#e=this.__NG_ELEMENT_ID__=uS}return e})();function uS(){return hD(jt(),te())}const cS=vm,dD=class extends cS{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return vo(this._hostTNode,this._hostLView)}get injector(){return new tn(this._hostTNode,this._hostLView)}get parentInjector(){const t=nr(this._hostTNode,this._hostLView);if(Yo(t)){const n=ti(t,this._hostLView),r=qo(t);return new tn(n[Ie].data[r+8],n)}return new tn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=fD(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-Qt}createEmbeddedView(t,n,r){let s,c;"number"==typeof r?s=r:null!=r&&(s=r.index,c=r.injector);const l=Wd(this._lContainer,t.ssrId),h=t.createEmbeddedViewImpl(n||{},c,l);return this.insertImpl(h,s,Kd(this._hostTNode,l)),h}createComponent(t,n,r,s,c){const l=t&&!function es(e){return"function"==typeof e}(t);let h;if(l)h=n;else{const Q=n||{};h=Q.index,r=Q.injector,s=Q.projectableNodes,c=Q.environmentInjector||Q.ngModuleRef}const g=l?t:new vp(Et(t)),E=r||this.parentInjector;if(!c&&null==g.ngModule){const ge=(l?E:this.parentInjector).get(vr,null);ge&&(c=ge)}const S=Et(g.componentType??{}),T=Wd(this._lContainer,S?.id??null),L=g.create(E,s,T?.firstChild??null,c);return this.insertImpl(L.hostView,h,Kd(this._hostTNode,T)),L}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){const s=t._lView;if(function zf(e){return Tn(e[Jt])}(s)){const h=this.indexOf(t);if(-1!==h)this.detach(h);else{const g=s[Jt],E=new dD(g,g[yn],g[Jt]);E.detach(E.indexOf(t))}}const c=this._adjustIndex(n),l=this._lContainer;return Sp(l,s,c,r),t.attachToViewContainerRef(),Au(Kv(l),c,t),t}move(t,n){return this.insert(t,n)}indexOf(t){const n=fD(this._lContainer);return null!==n?n.indexOf(t):-1}remove(t){const n=this._adjustIndex(t,-1),r=ga(this._lContainer,n);r&&(Ei(Kv(this._lContainer),n),ma(r[Ie],r))}detach(t){const n=this._adjustIndex(t,-1),r=ga(this._lContainer,n);return r&&null!=Ei(Kv(this._lContainer),n)?new gp(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function fD(e){return e[8]}function Kv(e){return e[8]||(e[8]=[])}function hD(e,t){let n;const r=t[e.index];return Tn(r)?n=r:(n=o0(r,t,null,e),t[e.index]=n,om(t,n)),pD(n,t,e,r),new dD(n,e,t)}let pD=function mD(e,t,n,r){if(e[er])return;let s;s=8&n.type?Vt(r):function lS(e,t){const n=e[gt],r=n.createComment(""),s=an(t,e);return Ri(n,Ds(n,s),r,function lc(e,t){return e.nextSibling(t)}(n,s),!1),r}(t,n),e[er]=s},Zv=()=>!1;function Zd(e,t,n,r,s,c,l,h){const g=te(),E=Mt(),S=e+st,T=E.firstCreatePass?function pS(e,t,n,r,s,c,l,h,g){const E=t.consts,S=Ld(t,e,4,l||null,Ar(E,h));Ev(t,n,S,Ar(E,g)),Hi(t,S);const T=S.tView=Dv(2,S,r,s,c,t.directiveRegistry,t.pipeRegistry,null,t.schemas,E,null);return null!==t.queries&&(t.queries.template(t,S),T.queries=t.queries.embeddedTView(S)),S}(S,E,g,t,n,r,s,c,l):E.data[S];Rr(T,!1);const R=vD(E,g,T,e);mi()&&dc(E,g,R,T),cn(R,g);const L=o0(R,g,R,T);return g[S]=L,om(g,L),function gD(e,t,n){return Zv(e,t,n)}(L,T,g),nu(T)&&vv(E,g,T),null!=l&&yv(g,T,h),Zd}let vD=function yD(e,t,n,r){return xn(!0),t[gt].createComment("")};function DD(e,t,n){Tc("NgControlFlow");const r=te(),s=Or(),c=Yv(r,st+e);if(In(r,s,t)){const h=H(null);try{if(Wv(c,0),-1!==t){const g=qv(r[Ie],st+t),E=Wd(c,g.tView.ssrId);Sp(c,Ip(r,g,n,{dehydratedView:E}),0,Kd(g,E))}}finally{H(h)}}else{const h=lD(c,0);void 0!==h&&(h[lt]=n)}}class vS{constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-Qt}}function ED(e,t){return t}class DS{constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}}function wD(e,t,n,r,s,c,l,h,g,E,S){Tc("NgControlFlow");const T=void 0!==g,R=te(),L=h?l.bind(R[Wt][lt]):l,Q=new DS(T,L);R[st+e]=Q,Zd(e+1,t,n,r,s,c),T&&Zd(e+2,g,E,S)}class ES extends sS{constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r,this.needsIndexUpdate=!1}get length(){return this.lContainer.length-Qt}at(t){return this.getLView(t)[lt].$implicit}attach(t,n){const r=n[cr];this.needsIndexUpdate||=t!==this.length,Sp(this.lContainer,n,t,Kd(this.templateTNode,r))}detach(t){return this.needsIndexUpdate||=t!==this.length-1,function wS(e,t){return ga(e,t)}(this.lContainer,t)}create(t,n){const r=Wd(this.lContainer,this.templateTNode.tView.ssrId);return Ip(this.hostLView,this.templateTNode,new vS(this.lContainer,n,t),{dehydratedView:r})}destroy(t){ma(t[Ie],t)}updateValue(t,n){this.getLView(t)[lt].$implicit=n}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t{e.destroy(h)})}(l,e,c.trackByFn),l.updateIndexes(),c.hasEmptyBlock){const h=Or(),g=0===l.length;if(In(r,h,g)){const E=n+2,S=Yv(r,E);if(g){const T=qv(s,E),R=Wd(S,T.tView.ssrId);Sp(S,Ip(r,T,void 0,{dehydratedView:R}),0,Kd(T,R))}else Wv(S,0)}}}finally{H(t)}}function Yv(e,t){return e[t]}function qv(e,t){return zo(e,t)}function bm(e,t,n,r){const s=te(),c=Mt(),l=st+e,h=s[gt],g=c.firstCreatePass?function XS(e,t,n,r,s,c){const l=t.consts,g=Ld(t,e,2,r,Ar(l,s));return Ev(t,n,g,Ar(l,c)),null!==g.attrs&&um(g,g.attrs,!1),null!==g.mergedAttrs&&um(g,g.mergedAttrs,!0),null!==t.queries&&t.queries.elementStart(t,g),g}(l,c,s,t,n,r):c.data[l],E=GD(c,s,g,h,t,e);s[l]=E;const S=nu(g);return Rr(g,!0),hc(h,E,g),32!=(32&g.flags)&&mi()&&dc(c,s,E,g),0===function Gf(){return at.lFrame.elementDepthCount}()&&cn(E,s),function og(){at.lFrame.elementDepthCount++}(),S&&(vv(c,s,g),mv(c,g,s)),null!==r&&yv(s,g),bm}function Im(){let e=jt();hl()?pl():(e=e.parent,Rr(e,!1));const t=e;(function Jr(e){return at.skipHydrationRootTNode===e})(t)&&function dl(){at.skipHydrationRootTNode=null}(),function Wf(){at.lFrame.elementDepthCount--}();const n=Mt();return n.firstCreatePass&&(Hi(n,e),Jc(e)&&n.queries.elementEnd(e)),null!=t.classesWithoutHost&&function wn(e){return 0!=(8&e.flags)}(t)&&Fv(n,t,te(),t.classesWithoutHost,!0),null!=t.stylesWithoutHost&&function Zo(e){return 0!=(16&e.flags)}(t)&&Fv(n,t,te(),t.stylesWithoutHost,!1),Im}function oy(e,t,n,r){return bm(e,t,n,r),Im(),oy}let GD=(e,t,n,r,s,c)=>(xn(!0),kn(r,s,function wu(){return at.lFrame.currentNamespace}()));function Sm(e,t,n){const r=te(),s=Mt(),c=e+st,l=s.firstCreatePass?function nM(e,t,n,r,s){const c=t.consts,l=Ar(c,r),h=Ld(t,e,8,"ng-container",l);return null!==l&&um(h,l,!0),Ev(t,n,h,Ar(c,s)),null!==t.queries&&t.queries.elementStart(t,h),h}(c,s,r,t,n):s.data[c];Rr(l,!0);const h=KD(s,r,l,e);return r[c]=h,mi()&&dc(s,r,h,l),cn(h,r),nu(l)&&(vv(s,r,l),mv(s,l,r)),null!=n&&yv(r,l),Sm}function Mm(){let e=jt();const t=Mt();return hl()?pl():(e=e.parent,Rr(e,!1)),t.firstCreatePass&&(Hi(t,e),Jc(e)&&t.queries.elementEnd(e)),Mm}let KD=(e,t,n,r)=>(xn(!0),cc(t[gt],""));function ZD(){return te()}const xc=void 0;var sM=["en",[["a","p"],["AM","PM"],xc],[["AM","PM"],xc,xc],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],xc,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],xc,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",xc,"{1} 'at' {0}",xc],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function oM(e){const n=Math.floor(Math.abs(e)),r=e.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===r?1:5}];let tf={};function sy(e){const t=function aM(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=QD(t);if(n)return n;const r=t.split("-")[0];if(n=QD(r),n)return n;if("en"===r)return sM;throw new Oe(701,!1)}function JD(e){return sy(e)[nf.PluralCase]}function QD(e){return e in tf||(tf[e]=Ht.ng&&Ht.ng.common&&Ht.ng.common.locales&&Ht.ng.common.locales[e]),tf[e]}var nf=function(e){return e[e.LocaleId=0]="LocaleId",e[e.DayPeriodsFormat=1]="DayPeriodsFormat",e[e.DayPeriodsStandalone=2]="DayPeriodsStandalone",e[e.DaysFormat=3]="DaysFormat",e[e.DaysStandalone=4]="DaysStandalone",e[e.MonthsFormat=5]="MonthsFormat",e[e.MonthsStandalone=6]="MonthsStandalone",e[e.Eras=7]="Eras",e[e.FirstDayOfWeek=8]="FirstDayOfWeek",e[e.WeekendRange=9]="WeekendRange",e[e.DateFormat=10]="DateFormat",e[e.TimeFormat=11]="TimeFormat",e[e.DateTimeFormat=12]="DateTimeFormat",e[e.NumberSymbols=13]="NumberSymbols",e[e.NumberFormats=14]="NumberFormats",e[e.CurrencyCode=15]="CurrencyCode",e[e.CurrencySymbol=16]="CurrencySymbol",e[e.CurrencyName=17]="CurrencyName",e[e.Currencies=18]="Currencies",e[e.Directionality=19]="Directionality",e[e.PluralCase=20]="PluralCase",e[e.ExtraData=21]="ExtraData",e}(nf||{});const rf="en-US";let XD=rf;function cy(e){return!!e&&"function"==typeof e.then}function IE(e){return!!e&&"function"==typeof e.subscribe}function ly(e,t,n,r){const s=te(),c=Mt(),l=jt();return function ME(e,t,n,r,s,c,l){const h=nu(r),E=e.firstCreatePass&&u0(e),S=t[lt],T=a0(t);let R=!0;if(3&r.type||l){const ge=an(r,t),Pe=l?l(ge):ge,Ze=T.length,ue=l?_t=>l(Vt(_t[r.index])):r.index;let vt=null;if(!l&&h&&(vt=function t_(e,t,n,r){const s=e.cleanup;if(null!=s)for(let c=0;cg?h[g]:null}"string"==typeof l&&(c+=2)}return null}(e,t,s,r.index)),null!==vt)(vt.__ngLastListenerFn__||vt).__ngNextListenerFn__=c,vt.__ngLastListenerFn__=c,R=!1;else{c=TE(r,t,S,c,!1);const _t=n.listen(Pe,s,c);T.push(c,_t),E&&E.push(s,ue,Ze,Ze+1)}}else c=TE(r,t,S,c,!1);const L=r.outputs;let Q;if(R&&null!==L&&(Q=L[s])){const ge=Q.length;if(ge)for(let Pe=0;Pe-1?Un(e.index,t):t);let g=_E(t,n,r,l),E=c.__ngNextListenerFn__;for(;E;)g=_E(t,n,E,l)&&g,E=E.__ngNextListenerFn__;return s&&!1===g&&l.preventDefault(),g}}function AE(e=1){return function Nr(e){return(at.lFrame.contextLView=function ul(e,t){for(;e>0;)t=t[ko],e--;return t}(e,at.lFrame.contextLView))[lt]}(e)}function UE(e){return hi(function sg(){return at.lFrame.contextLView}(),st+e)}function YE(e,t=""){const n=te(),r=Mt(),s=e+st,c=r.firstCreatePass?Ld(r,s,1,t,null):r.data[s],l=qE(r,n,c,t,e);n[s]=l,mi()&&dc(r,n,l,c),Rr(c,!1)}let qE=(e,t,n,r,s)=>(xn(!0),function pa(e,t){return e.createText(t)}(t[gt],r));function fy(e){return Om("",e,""),fy}function Om(e,t,n){const r=te(),s=function kd(e,t,n,r){return In(e,Or(),n)?t+ct(n)+r:Dt}(r,e,t,n);return s!==Dt&&function Ts(e,t,n){const r=Vo(t,e);!function ql(e,t,n){e.setValue(t,n)}(e[gt],r,n)}(r,En(),s),Om}function hy(e,t,n,r,s){if(e=me(e),Array.isArray(e))for(let c=0;c>20;if($r(e)||!e.multi){const L=new Vi(E,s,Pd),Q=gy(g,t,s?S:S+R,T);-1===Q?(Su(Bn(h,l),c,g),py(c,e,t.length),t.push(g),h.directiveStart++,h.directiveEnd++,s&&(h.providerIndexes+=1048576),n.push(L),l.push(L)):(n[Q]=L,l[Q]=L)}else{const L=gy(g,t,S+R,T),Q=gy(g,t,S,S+R),Pe=Q>=0&&n[Q];if(s&&!Pe||!s&&!(L>=0&&n[L])){Su(Bn(h,l),c,g);const Ze=function E_(e,t,n,r,s){const c=new Vi(e,n,Pd);return c.multi=[],c.index=t,c.componentProviders=0,ow(c,s,r&&!n),c}(s?D_:y_,n.length,s,r,E);!s&&Pe&&(n[Q].providerFactory=Ze),py(c,e,t.length,0),t.push(g),h.directiveStart++,h.directiveEnd++,s&&(h.providerIndexes+=1048576),n.push(Ze),l.push(Ze)}else py(c,e,L>-1?L:Q,ow(n[s?Q:L],E,!s&&r));!s&&r&&Pe&&n[Q].componentProviders++}}}function py(e,t,n,r){const s=$r(t),c=function Hu(e){return!!e.useClass}(t);if(s||c){const g=(c?me(t.useClass):t).prototype.ngOnDestroy;if(g){const E=e.destroyHooks||(e.destroyHooks=[]);if(!s&&t.multi){const S=E.indexOf(n);-1===S?E.push(n,[r,g]):E[S+1].push(r,g)}else E.push(n,g)}}}function ow(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function gy(e,t,n,r){for(let s=n;s{n.providersResolver=(r,s)=>function v_(e,t,n){const r=Mt();if(r.firstCreatePass){const s=lr(e);hy(n,r.data,r.blueprint,s,!0),hy(t,r.data,r.blueprint,s,!1)}}(r,s?s(e):e,t)}}class Pc{}class aw{}function w_(e,t){return new vy(e,t??null,[])}class vy extends Pc{constructor(t,n,r){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new I0(this);const s=vn(t);this._bootstrapComponents=Vn(s.bootstrap),this._r3Injector=Eh(t,n,[{provide:Pc,useValue:this},{provide:Ic,useValue:this.componentFactoryResolver},...r],q(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class yy extends aw{constructor(t){super(),this.moduleType=t}create(t){return new vy(this.moduleType,t,[])}}class uw extends Pc{constructor(t){super(),this.componentFactoryResolver=new I0(this),this.instance=null;const n=new yr([...t.providers,{provide:Pc,useValue:this},{provide:Ic,useValue:this.componentFactoryResolver}],t.parent||as(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function cw(e,t,n=null){return new uw({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}let b_=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){const r=$u(0,n.type),s=r.length>0?cw([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n,s)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}static#e=this.\u0275prov=Nt({token:e,providedIn:"environment",factory:()=>new e(gn(vr))})}return e})();function lw(e){Tc("NgStandalone"),e.getStandaloneInjector=t=>t.get(b_).getOrCreateStandaloneInjector(e)}function yw(e,t,n){const r=Dn()+e,s=te();return s[r]===Dt?wo(s,r,n?t.call(n):t()):function yp(e,t){return e[t]}(s,r)}function Dw(e,t,n,r){return Ew(te(),Dn(),e,t,n,r)}function Pp(e,t){const n=e[t];return n===Dt?void 0:n}function Ew(e,t,n,r,s,c){const l=t+n;return In(e,l,s)?wo(e,l+1,c?r.call(c,s):r(s)):Pp(e,l+1)}function Cw(e,t,n,r,s,c,l,h){const g=t+n;return function lm(e,t,n,r,s){const c=Rc(e,t,n,r);return In(e,t+2,s)||c}(e,g,s,c,l)?wo(e,g+3,h?r.call(h,s,c,l):r(s,c,l)):Pp(e,g+3)}function Sw(e,t){const n=Mt();let r;const s=e+st;n.firstCreatePass?(r=function H_(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[s]=r,r.onDestroy&&(n.destroyHooks??=[]).push(s,r.onDestroy)):r=n.data[s];const c=r.factory||(r.factory=Yr(r.type)),h=Mn(Pd);try{const g=qs(!1),E=c();return qs(g),function o_(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,te(),s,E),E}finally{Mn(h)}}function Mw(e,t,n){const r=e+st,s=te(),c=hi(s,r);return Lp(s,r)?Ew(s,Dn(),t,c.transform,n,c):c.transform(n)}function _w(e,t,n,r){const s=e+st,c=te(),l=hi(c,s);return Lp(c,s)?function ww(e,t,n,r,s,c,l){const h=t+n;return Rc(e,h,s,c)?wo(e,h+2,l?r.call(l,s,c):r(s,c)):Pp(e,h+2)}(c,Dn(),t,l.transform,n,r,l):l.transform(n,r)}function Tw(e,t,n,r,s){const c=e+st,l=te(),h=hi(l,c);return Lp(l,c)?Cw(l,Dn(),t,h.transform,n,r,s,h):h.transform(n,r,s)}function Lp(e,t){return e[Ie].data[t].pure}function G_(){return this._results[Symbol.iterator]()}class Ey{static#e=Symbol.iterator;get changes(){return this._changes??=new Eo}constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=void 0,this.length=0,this.first=void 0,this.last=void 0;const n=Ey.prototype;n[Symbol.iterator]||(n[Symbol.iterator]=G_)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;const r=function Pn(e){return e.flat(Number.POSITIVE_INFINITY)}(t);(this._changesDetected=!function yi(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r{class e{static#e=this.__NG_ELEMENT_ID__=Z_}return e})();const W_=Fp,K_=class extends W_{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(t,n){return this.createEmbeddedViewImpl(t,n)}createEmbeddedViewImpl(t,n,r){const s=Ip(this._declarationLView,this._declarationTContainer,t,{injector:n,dehydratedView:r});return new gp(s)}};function Z_(){return Pm(jt(),te())}function Pm(e,t){return 4&e.type?new K_(t,e,vo(e,t)):null}class wy{constructor(t){this.queryList=t,this.matches=null}clone(){return new wy(this.queryList)}setDirty(){this.queryList.setDirty()}}class Cy{constructor(t=[]){this.queries=t}createEmbeddedView(t){const n=t.queries;if(null!==n){const r=null!==t.contentQueries?t.contentQueries[0]:n.length,s=[];for(let c=0;c0)r.push(l[h/2]);else{const E=c[h+1],S=t[-g];for(let T=Qt;T{class e{log(n){console.log(n)}warn(n){console.warn(n)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();class bT{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let IT=(()=>{class e{compileModuleSync(n){return new yy(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),c=Vn(vn(n).declarations).reduce((l,h)=>{const g=Et(h);return g&&l.push(new vp(g)),l},[]);return new bT(r,c)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Fm=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new kc.X(!1)}get _hasPendingTasks(){return this.hasPendingTasks.value}add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);const n=this.taskId++;return this.pendingTasks.add(n),n}remove(n){this.pendingTasks.delete(n),0===this.pendingTasks.size&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const oC=new pt(""),sC=new pt("");let Oy,JT=(()=>{class e{constructor(n,r,s){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,Oy||(function QT(e){Oy=e}(s),s.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:()=>{dn.assertNotInAngularZone(),queueMicrotask(()=>{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())queueMicrotask(()=>{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,s){let c=-1;r&&r>0&&(c=setTimeout(()=>{this._callbacks=this._callbacks.filter(l=>l.timeoutId!==c),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:c,updateCb:s})}whenStable(n,r,s){if(s&&!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,s),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,s){return[]}static#e=this.\u0275fac=function(r){return new(r||e)(gn(dn),gn(aC),gn(sC))};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac})}return e})(),aC=(()=>{class e{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 Oy?.findTestabilityInTree(this,n,r)??null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();const uC=new pt("Application Initializer");let Ny=(()=>{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r}),this.appInits=bt(uC,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const n=[];for(const s of this.appInits){const c=s();if(cy(c))n.push(c);else if(IE(c)){const l=new Promise((h,g)=>{c.subscribe({complete:h,error:g})});n.push(l)}}const r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(s=>{this.reject(s)}),0===n.length&&r(),this.initialized=!0}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const xy=new pt("appBootstrapListener");let Lc=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=bt(bn),this.afterRenderEffectManager=bt(mp),this.componentTypes=[],this.components=[],this.isStable=bt(Fm).hasPendingTasks.pipe((0,Xe.U)(n=>!n)),this._injector=bt(vr)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const s=n instanceof Td;if(!this._injector.get(Ny).done)throw!s&&Kr(n),new Oe(405,!1);let l;l=s?n:this._injector.get(Ic).resolveComponentFactory(n),this.componentTypes.push(l.componentType);const h=function e1(e){return e.isBoundToModule}(l)?void 0:this._injector.get(Pc),E=l.create(Kn.NULL,[],r||l.selector,h),S=E.location.nativeElement,T=E.injector.get(oC,null);return T?.registerApplication(S),E.onDestroy(()=>{this.detachView(E.hostView),$m(this.components,E),T?.unregisterApplication(S)}),this._loadComponent(E),E}tick(){if(this._runningTick)throw new Oe(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this.internalErrorHandler(n)}finally{try{this.afterRenderEffectManager.execute()}catch(n){this.internalErrorHandler(n)}this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;$m(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n);const r=this._injector.get(xy,[]);[...this._bootstrapListeners,...r].forEach(s=>s(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>$m(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new Oe(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function $m(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}let n1=(()=>{class e{constructor(){this.zone=bt(dn),this.applicationRef=bt(Lc)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function hC(e){return[{provide:dn,useFactory:e},{provide:rr,multi:!0,useFactory:()=>{const t=bt(n1,{optional:!0});return()=>t.initialize()}},{provide:rr,multi:!0,useFactory:()=>{const t=bt(o1);return()=>{t.initialize()}}},{provide:bn,useFactory:r1}]}function r1(){const e=bt(dn),t=bt(Lt);return n=>e.runOutsideAngular(()=>t.handleError(n))}function i1(e){return Ln([[],hC(()=>new dn(function pC(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}(e)))])}let o1=(()=>{class e{constructor(){this.subscription=new Os.w0,this.initialized=!1,this.zone=bt(dn),this.pendingTasks=bt(Fm)}initialize(){if(this.initialized)return;this.initialized=!0;let n=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(n=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{dn.assertNotInAngularZone(),queueMicrotask(()=>{null!==n&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(n),n=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{dn.assertInAngularZone(),n??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=Nt({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const jm=new pt("LocaleId",{providedIn:"root",factory:()=>bt(jm,Ct.Optional|Ct.SkipSelf)||function s1(){return typeof $localize<"u"&&$localize.locale||rf}()}),a1=new pt("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"}),Py=new pt("PlatformDestroyListeners");let $a=null;function f1(){return!1}let v1=(()=>{class e{constructor(n){}static#e=this.\u0275fac=function(r){return new(r||e)(gn(Lc))};static#t=this.\u0275mod=$i({type:e});static#n=this.\u0275inj=Ps({})}return e})();function O1(e){try{const{rootComponent:t,appProviders:n,platformProviders:r}=e,s=function d1(e=[]){if($a)return $a;const t=function vC(e=[],t){return Kn.create({name:t,providers:[{provide:aa,useValue:"platform"},{provide:Py,useValue:new Set([()=>$a=null])},...e]})}(e);return $a=t,function cC(){!function tt(e){ne=e}(()=>{throw new Oe(600,!1)})}(),function yC(e){e.get(kl,null)?.forEach(n=>n())}(t),t}(r),c=[i1(),...n||[]],h=new uw({providers:c,parent:s,debugName:"",runEnvironmentInitializers:!1}).injector,g=h.get(dn);return g.run(()=>{h.resolveInjectorInitializers();const E=h.get(Lt,null);let S;g.runOutsideAngular(()=>{S=g.onError.subscribe({next:L=>{E.handleError(L)}})});const T=()=>h.destroy(),R=s.get(Py);return R.add(T),h.onDestroy(()=>{S.unsubscribe(),R.delete(T)}),function lC(e,t,n){try{const r=n();return cy(r)?r.catch(s=>{throw t.runOutsideAngular(()=>e.handleError(s)),s}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(E,g,()=>{const L=h.get(Ny);return L.runInitializers(),L.donePromise.then(()=>{!function eE(e){on(e,"Expected localeId to be defined"),"string"==typeof e&&(XD=e.toLowerCase().replace(/_/g,"-"))}(h.get(jm,rf)||rf);const ge=h.get(Lc);return void 0!==t&&ge.bootstrap(t),ge})})})}catch(t){return Promise.reject(t)}}function z1(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}function W1(e){const t=Et(e);if(!t)return null;const n=new vp(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}}},Fe=>{Fe(Fe.s=7707)}]); \ No newline at end of file diff --git a/transloco-playground/runtime.3c03cea8cca53c0b.js b/transloco-playground/runtime.3c03cea8cca53c0b.js new file mode 100644 index 000000000..0b7605090 --- /dev/null +++ b/transloco-playground/runtime.3c03cea8cca53c0b.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,g={},v={};function r(e){var n=v[e];if(void 0!==n)return n.exports;var t=v[e]={exports:{}};return g[e].call(t.exports,t,t.exports,r),t.exports}r.m=g,e=[],r.O=(n,t,o,i)=>{if(!t){var a=1/0;for(f=0;f=i)&&Object.keys(r.O).every(b=>r.O[b](t[d]))?t.splice(d--,1):(u=!1,i0&&e[f-1][2]>i;f--)e[f]=e[f-1];e[f]=[t,o,i]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},(()=>{var n,e=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__;r.t=function(t,o){if(1&o&&(t=this(t)),8&o||"object"==typeof t&&t&&(4&o&&t.__esModule||16&o&&"function"==typeof t.then))return t;var i=Object.create(null);r.r(i);var f={};n=n||[null,e({}),e([]),e(e)];for(var a=2&o&&t;"object"==typeof a&&!~n.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(u=>f[u]=()=>t[u]);return f.default=()=>t,r.d(i,f),i}})(),r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>e+"."+{42:"7f33c8245a26184e",72:"0569ed76c8decd49",76:"a77738d5ecb6deb5",326:"e1e4474655e0373c",332:"ef95f16cbc1ca642",386:"174b6b18113eff88",494:"4d60de1f7210b476",830:"49882ea042b0494a",848:"aa8fb8478f8fbb50",867:"0f423999483c2650",930:"780709826fca8604"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="transloco-playground:";r.l=(t,o,i,f)=>{if(e[t])e[t].push(o);else{var a,u;if(void 0!==i)for(var d=document.getElementsByTagName("script"),l=0;l{a.onerror=a.onload=null,clearTimeout(p);var y=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),y&&y.forEach(m=>m(b)),_)return _(b)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),u&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(o,i)=>{var f=r.o(e,o)?e[o]:void 0;if(0!==f)if(f)i.push(f[2]);else if(666!=o){var a=new Promise((c,s)=>f=e[o]=[c,s]);i.push(f[2]=a);var u=r.p+r.u(o),d=new Error;r.l(u,c=>{if(r.o(e,o)&&(0!==(f=e[o])&&(e[o]=void 0),f)){var s=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;d.message="Loading chunk "+o+" failed.\n("+s+": "+p+")",d.name="ChunkLoadError",d.type=s,d.request=p,f[1](d)}},"chunk-"+o,o)}else e[o]=0},r.O.j=o=>0===e[o];var n=(o,i)=>{var d,l,[f,a,u]=i,c=0;if(f.some(p=>0!==e[p])){for(d in a)r.o(a,d)&&(r.m[d]=a[d]);if(u)var s=u(r)}for(o&&o(i);c Transloco Angular i18n - +
Subscribe to the NgNeat official youtube channel
- + \ No newline at end of file