You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

3318 lines
100 KiB

/**
* @license Angular v21.1.1
* (c) 2010-2026 Google LLC. https://angular.dev/
* License: MIT
*/
import * as i0 from '@angular/core';
import { Injectable, Optional, Inject, ɵfindLocaleData as _findLocaleData, ɵLocaleDataIndex as _LocaleDataIndex, ɵgetLocaleCurrencyCode as _getLocaleCurrencyCode, ɵgetLocalePluralCase as _getLocalePluralCase, ɵRuntimeError as _RuntimeError, ɵformatRuntimeError as _formatRuntimeError, inject, LOCALE_ID, ɵstringify as _stringify, Directive, Input, createNgModule, NgModuleRef, Host, Attribute, RendererStyleFlags2, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵisPromise as _isPromise, ɵisSubscribable as _isSubscribable, Pipe, untracked, InjectionToken, DEFAULT_CURRENCY_CODE, NgModule } from '@angular/core';
import { LocationStrategy, joinWithSlash, normalizeQueryParams, APP_BASE_HREF } from './_location-chunk.mjs';
import { PlatformLocation } from './_platform_location-chunk.mjs';
class HashLocationStrategy extends LocationStrategy {
_platformLocation;
_baseHref = '';
_removeListenerFns = [];
constructor(_platformLocation, _baseHref) {
super();
this._platformLocation = _platformLocation;
if (_baseHref != null) {
this._baseHref = _baseHref;
}
}
ngOnDestroy() {
while (this._removeListenerFns.length) {
this._removeListenerFns.pop()();
}
}
onPopState(fn) {
this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
}
getBaseHref() {
return this._baseHref;
}
path(includeHash = false) {
const path = this._platformLocation.hash ?? '#';
return path.length > 0 ? path.substring(1) : path;
}
prepareExternalUrl(internal) {
const url = joinWithSlash(this._baseHref, internal);
return url.length > 0 ? '#' + url : url;
}
pushState(state, title, path, queryParams) {
const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;
this._platformLocation.pushState(state, title, url);
}
replaceState(state, title, path, queryParams) {
const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;
this._platformLocation.replaceState(state, title, url);
}
forward() {
this._platformLocation.forward();
}
back() {
this._platformLocation.back();
}
getState() {
return this._platformLocation.getState();
}
historyGo(relativePosition = 0) {
this._platformLocation.historyGo?.(relativePosition);
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: HashLocationStrategy,
deps: [{
token: PlatformLocation
}, {
token: APP_BASE_HREF,
optional: true
}],
target: i0.ɵɵFactoryTarget.Injectable
});
static ɵprov = i0.ɵɵngDeclareInjectable({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: HashLocationStrategy
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: HashLocationStrategy,
decorators: [{
type: Injectable
}],
ctorParameters: () => [{
type: PlatformLocation
}, {
type: undefined,
decorators: [{
type: Optional
}, {
type: Inject,
args: [APP_BASE_HREF]
}]
}]
});
const CURRENCIES_EN = {
"ADP": [undefined, undefined, 0],
"AFN": [undefined, "؋", 0],
"ALL": [undefined, undefined, 0],
"AMD": [undefined, "֏", 2],
"AOA": [undefined, "Kz"],
"ARS": [undefined, "$"],
"AUD": ["A$", "$"],
"AZN": [undefined, "₼"],
"BAM": [undefined, "KM"],
"BBD": [undefined, "$"],
"BDT": [undefined, "৳"],
"BHD": [undefined, undefined, 3],
"BIF": [undefined, undefined, 0],
"BMD": [undefined, "$"],
"BND": [undefined, "$"],
"BOB": [undefined, "Bs"],
"BRL": ["R$"],
"BSD": [undefined, "$"],
"BWP": [undefined, "P"],
"BYN": [undefined, undefined, 2],
"BYR": [undefined, undefined, 0],
"BZD": [undefined, "$"],
"CAD": ["CA$", "$", 2],
"CHF": [undefined, undefined, 2],
"CLF": [undefined, undefined, 4],
"CLP": [undefined, "$", 0],
"CNY": ["CN¥", "¥"],
"COP": [undefined, "$", 2],
"CRC": [undefined, "₡", 2],
"CUC": [undefined, "$"],
"CUP": [undefined, "$"],
"CZK": [undefined, "Kč", 2],
"DJF": [undefined, undefined, 0],
"DKK": [undefined, "kr", 2],
"DOP": [undefined, "$"],
"EGP": [undefined, "E£"],
"ESP": [undefined, "₧", 0],
"EUR": ["€"],
"FJD": [undefined, "$"],
"FKP": [undefined, "£"],
"GBP": ["£"],
"GEL": [undefined, "₾"],
"GHS": [undefined, "GH₵"],
"GIP": [undefined, "£"],
"GNF": [undefined, "FG", 0],
"GTQ": [undefined, "Q"],
"GYD": [undefined, "$", 2],
"HKD": ["HK$", "$"],
"HNL": [undefined, "L"],
"HRK": [undefined, "kn"],
"HUF": [undefined, "Ft", 2],
"IDR": [undefined, "Rp", 2],
"ILS": ["₪"],
"INR": ["₹"],
"IQD": [undefined, undefined, 0],
"IRR": [undefined, undefined, 0],
"ISK": [undefined, "kr", 0],
"ITL": [undefined, undefined, 0],
"JMD": [undefined, "$"],
"JOD": [undefined, undefined, 3],
"JPY": ["¥", undefined, 0],
"KGS": [undefined, "⃀"],
"KHR": [undefined, "៛"],
"KMF": [undefined, "CF", 0],
"KPW": [undefined, "₩", 0],
"KRW": ["₩", undefined, 0],
"KWD": [undefined, undefined, 3],
"KYD": [undefined, "$"],
"KZT": [undefined, "₸"],
"LAK": [undefined, "₭", 0],
"LBP": [undefined, "L£", 0],
"LKR": [undefined, "Rs"],
"LRD": [undefined, "$"],
"LTL": [undefined, "Lt"],
"LUF": [undefined, undefined, 0],
"LVL": [undefined, "Ls"],
"LYD": [undefined, undefined, 3],
"MGA": [undefined, "Ar", 0],
"MGF": [undefined, undefined, 0],
"MMK": [undefined, "K", 0],
"MNT": [undefined, "₮", 2],
"MRO": [undefined, undefined, 0],
"MUR": [undefined, "Rs", 2],
"MXN": ["MX$", "$"],
"MYR": [undefined, "RM"],
"NAD": [undefined, "$"],
"NGN": [undefined, "₦"],
"NIO": [undefined, "C$"],
"NOK": [undefined, "kr", 2],
"NPR": [undefined, "Rs"],
"NZD": ["NZ$", "$"],
"OMR": [undefined, undefined, 3],
"PHP": ["₱"],
"PKR": [undefined, "Rs", 2],
"PLN": [undefined, "zł"],
"PYG": [undefined, "₲", 0],
"RON": [undefined, "lei"],
"RSD": [undefined, undefined, 0],
"RUB": [undefined, "₽"],
"RWF": [undefined, "RF", 0],
"SBD": [undefined, "$"],
"SEK": [undefined, "kr", 2],
"SGD": [undefined, "$"],
"SHP": [undefined, "£"],
"SLE": [undefined, undefined, 2],
"SLL": [undefined, undefined, 0],
"SOS": [undefined, undefined, 0],
"SRD": [undefined, "$"],
"SSP": [undefined, "£"],
"STD": [undefined, undefined, 0],
"STN": [undefined, "Db"],
"SYP": [undefined, "£", 0],
"THB": [undefined, "฿"],
"TMM": [undefined, undefined, 0],
"TND": [undefined, undefined, 3],
"TOP": [undefined, "T$"],
"TRL": [undefined, undefined, 0],
"TRY": [undefined, "₺"],
"TTD": [undefined, "$"],
"TWD": ["NT$", "$", 2],
"TZS": [undefined, undefined, 2],
"UAH": [undefined, "₴"],
"UGX": [undefined, undefined, 0],
"USD": ["$"],
"UYI": [undefined, undefined, 0],
"UYU": [undefined, "$"],
"UYW": [undefined, undefined, 4],
"UZS": [undefined, undefined, 2],
"VEF": [undefined, "Bs", 2],
"VND": ["₫", undefined, 0],
"VUV": [undefined, undefined, 0],
"XAF": ["FCFA", undefined, 0],
"XCD": ["EC$", "$"],
"XCG": ["Cg."],
"XOF": ["F CFA", undefined, 0],
"XPF": ["CFPF", undefined, 0],
"XXX": ["¤"],
"YER": [undefined, undefined, 0],
"ZAR": [undefined, "R"],
"ZMK": [undefined, undefined, 0],
"ZMW": [undefined, "ZK"],
"ZWD": [undefined, undefined, 0]
};
var NumberFormatStyle;
(function (NumberFormatStyle) {
NumberFormatStyle[NumberFormatStyle["Decimal"] = 0] = "Decimal";
NumberFormatStyle[NumberFormatStyle["Percent"] = 1] = "Percent";
NumberFormatStyle[NumberFormatStyle["Currency"] = 2] = "Currency";
NumberFormatStyle[NumberFormatStyle["Scientific"] = 3] = "Scientific";
})(NumberFormatStyle || (NumberFormatStyle = {}));
var Plural;
(function (Plural) {
Plural[Plural["Zero"] = 0] = "Zero";
Plural[Plural["One"] = 1] = "One";
Plural[Plural["Two"] = 2] = "Two";
Plural[Plural["Few"] = 3] = "Few";
Plural[Plural["Many"] = 4] = "Many";
Plural[Plural["Other"] = 5] = "Other";
})(Plural || (Plural = {}));
var FormStyle;
(function (FormStyle) {
FormStyle[FormStyle["Format"] = 0] = "Format";
FormStyle[FormStyle["Standalone"] = 1] = "Standalone";
})(FormStyle || (FormStyle = {}));
var TranslationWidth;
(function (TranslationWidth) {
TranslationWidth[TranslationWidth["Narrow"] = 0] = "Narrow";
TranslationWidth[TranslationWidth["Abbreviated"] = 1] = "Abbreviated";
TranslationWidth[TranslationWidth["Wide"] = 2] = "Wide";
TranslationWidth[TranslationWidth["Short"] = 3] = "Short";
})(TranslationWidth || (TranslationWidth = {}));
var FormatWidth;
(function (FormatWidth) {
FormatWidth[FormatWidth["Short"] = 0] = "Short";
FormatWidth[FormatWidth["Medium"] = 1] = "Medium";
FormatWidth[FormatWidth["Long"] = 2] = "Long";
FormatWidth[FormatWidth["Full"] = 3] = "Full";
})(FormatWidth || (FormatWidth = {}));
const NumberSymbol = {
Decimal: 0,
Group: 1,
List: 2,
PercentSign: 3,
PlusSign: 4,
MinusSign: 5,
Exponential: 6,
SuperscriptingExponent: 7,
PerMille: 8,
Infinity: 9,
NaN: 10,
TimeSeparator: 11,
CurrencyDecimal: 12,
CurrencyGroup: 13
};
var WeekDay;
(function (WeekDay) {
WeekDay[WeekDay["Sunday"] = 0] = "Sunday";
WeekDay[WeekDay["Monday"] = 1] = "Monday";
WeekDay[WeekDay["Tuesday"] = 2] = "Tuesday";
WeekDay[WeekDay["Wednesday"] = 3] = "Wednesday";
WeekDay[WeekDay["Thursday"] = 4] = "Thursday";
WeekDay[WeekDay["Friday"] = 5] = "Friday";
WeekDay[WeekDay["Saturday"] = 6] = "Saturday";
})(WeekDay || (WeekDay = {}));
function getLocaleId(locale) {
return _findLocaleData(locale)[_LocaleDataIndex.LocaleId];
}
function getLocaleDayPeriods(locale, formStyle, width) {
const data = _findLocaleData(locale);
const amPmData = [data[_LocaleDataIndex.DayPeriodsFormat], data[_LocaleDataIndex.DayPeriodsStandalone]];
const amPm = getLastDefinedValue(amPmData, formStyle);
return getLastDefinedValue(amPm, width);
}
function getLocaleDayNames(locale, formStyle, width) {
const data = _findLocaleData(locale);
const daysData = [data[_LocaleDataIndex.DaysFormat], data[_LocaleDataIndex.DaysStandalone]];
const days = getLastDefinedValue(daysData, formStyle);
return getLastDefinedValue(days, width);
}
function getLocaleMonthNames(locale, formStyle, width) {
const data = _findLocaleData(locale);
const monthsData = [data[_LocaleDataIndex.MonthsFormat], data[_LocaleDataIndex.MonthsStandalone]];
const months = getLastDefinedValue(monthsData, formStyle);
return getLastDefinedValue(months, width);
}
function getLocaleEraNames(locale, width) {
const data = _findLocaleData(locale);
const erasData = data[_LocaleDataIndex.Eras];
return getLastDefinedValue(erasData, width);
}
function getLocaleFirstDayOfWeek(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.FirstDayOfWeek];
}
function getLocaleWeekEndRange(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.WeekendRange];
}
function getLocaleDateFormat(locale, width) {
const data = _findLocaleData(locale);
return getLastDefinedValue(data[_LocaleDataIndex.DateFormat], width);
}
function getLocaleTimeFormat(locale, width) {
const data = _findLocaleData(locale);
return getLastDefinedValue(data[_LocaleDataIndex.TimeFormat], width);
}
function getLocaleDateTimeFormat(locale, width) {
const data = _findLocaleData(locale);
const dateTimeFormatData = data[_LocaleDataIndex.DateTimeFormat];
return getLastDefinedValue(dateTimeFormatData, width);
}
function getLocaleNumberSymbol(locale, symbol) {
const data = _findLocaleData(locale);
const res = data[_LocaleDataIndex.NumberSymbols][symbol];
if (typeof res === 'undefined') {
if (symbol === NumberSymbol.CurrencyDecimal) {
return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];
} else if (symbol === NumberSymbol.CurrencyGroup) {
return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Group];
}
}
return res;
}
function getLocaleNumberFormat(locale, type) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.NumberFormats][type];
}
function getLocaleCurrencySymbol(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.CurrencySymbol] || null;
}
function getLocaleCurrencyName(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.CurrencyName] || null;
}
function getLocaleCurrencyCode(locale) {
return _getLocaleCurrencyCode(locale);
}
function getLocaleCurrencies(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.Currencies];
}
const getLocalePluralCase = _getLocalePluralCase;
function checkFullData(data) {
if (!data[_LocaleDataIndex.ExtraData]) {
throw new _RuntimeError(2303, ngDevMode && `Missing extra locale data for the locale "${data[_LocaleDataIndex.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`);
}
}
function getLocaleExtraDayPeriodRules(locale) {
const data = _findLocaleData(locale);
checkFullData(data);
const rules = data[_LocaleDataIndex.ExtraData][2] || [];
return rules.map(rule => {
if (typeof rule === 'string') {
return extractTime(rule);
}
return [extractTime(rule[0]), extractTime(rule[1])];
});
}
function getLocaleExtraDayPeriods(locale, formStyle, width) {
const data = _findLocaleData(locale);
checkFullData(data);
const dayPeriodsData = [data[_LocaleDataIndex.ExtraData][0], data[_LocaleDataIndex.ExtraData][1]];
const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
return getLastDefinedValue(dayPeriods, width) || [];
}
function getLocaleDirection(locale) {
const data = _findLocaleData(locale);
return data[_LocaleDataIndex.Directionality];
}
function getLastDefinedValue(data, index) {
for (let i = index; i > -1; i--) {
if (typeof data[i] !== 'undefined') {
return data[i];
}
}
throw new _RuntimeError(2304, ngDevMode && 'Locale data API: locale data undefined');
}
function extractTime(time) {
const [h, m] = time.split(':');
return {
hours: +h,
minutes: +m
};
}
function getCurrencySymbol(code, format, locale = 'en') {
const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
const symbolNarrow = currency[1];
if (format === 'narrow' && typeof symbolNarrow === 'string') {
return symbolNarrow;
}
return currency[0] || code;
}
const DEFAULT_NB_OF_CURRENCY_DIGITS = 2;
function getNumberOfCurrencyDigits(code) {
let digits;
const currency = CURRENCIES_EN[code];
if (currency) {
digits = currency[2];
}
return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
}
const ISO8601_DATE_REGEX = /^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
const NAMED_FORMATS = {};
const DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
function formatDate(value, format, locale, timezone) {
let date = toDate(value);
const namedFormat = getNamedFormat(locale, format);
format = namedFormat || format;
let parts = [];
let match;
while (format) {
match = DATE_FORMATS_SPLIT.exec(format);
if (match) {
parts = parts.concat(match.slice(1));
const part = parts.pop();
if (!part) {
break;
}
format = part;
} else {
parts.push(format);
break;
}
}
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertValidDateFormat(parts);
}
let dateTimezoneOffset = date.getTimezoneOffset();
if (timezone) {
dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
date = convertTimezoneToLocal(date, timezone);
}
let text = '';
parts.forEach(value => {
const dateFormatter = getDateFormatter(value);
text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === "''" ? "'" : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
});
return text;
}
function assertValidDateFormat(parts) {
if (parts.some(part => /^Y+$/.test(part)) && !parts.some(part => /^w+$/.test(part))) {
const message = `Suspicious use of week-based year "Y" in date pattern "${parts.join('')}". Did you mean to use calendar year "y" instead?`;
if (parts.length === 1) {
console.error(_formatRuntimeError(2300, message));
} else {
throw new _RuntimeError(2300, message);
}
}
}
function createDate(year, month, date) {
const newDate = new Date(0);
newDate.setFullYear(year, month, date);
newDate.setHours(0, 0, 0);
return newDate;
}
function getNamedFormat(locale, format) {
const localeId = getLocaleId(locale);
NAMED_FORMATS[localeId] ??= {};
if (NAMED_FORMATS[localeId][format]) {
return NAMED_FORMATS[localeId][format];
}
let formatValue = '';
switch (format) {
case 'shortDate':
formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
break;
case 'mediumDate':
formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
break;
case 'longDate':
formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
break;
case 'fullDate':
formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
break;
case 'shortTime':
formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
break;
case 'mediumTime':
formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
break;
case 'longTime':
formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
break;
case 'fullTime':
formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
break;
case 'short':
const shortTime = getNamedFormat(locale, 'shortTime');
const shortDate = getNamedFormat(locale, 'shortDate');
formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
break;
case 'medium':
const mediumTime = getNamedFormat(locale, 'mediumTime');
const mediumDate = getNamedFormat(locale, 'mediumDate');
formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
break;
case 'long':
const longTime = getNamedFormat(locale, 'longTime');
const longDate = getNamedFormat(locale, 'longDate');
formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
break;
case 'full':
const fullTime = getNamedFormat(locale, 'fullTime');
const fullDate = getNamedFormat(locale, 'fullDate');
formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
break;
}
if (formatValue) {
NAMED_FORMATS[localeId][format] = formatValue;
}
return formatValue;
}
function formatDateTime(str, opt_values) {
if (opt_values) {
str = str.replace(/\{([^}]+)}/g, function (match, key) {
return opt_values != null && key in opt_values ? opt_values[key] : match;
});
}
return str;
}
function padNumber(num, digits, minusSign = '-', trim, negWrap) {
let neg = '';
if (num < 0 || negWrap && num <= 0) {
if (negWrap) {
num = -num + 1;
} else {
num = -num;
neg = minusSign;
}
}
let strNum = String(num);
while (strNum.length < digits) {
strNum = '0' + strNum;
}
if (trim) {
strNum = strNum.slice(strNum.length - digits);
}
return neg + strNum;
}
function formatFractionalSeconds(milliseconds, digits) {
const strMs = padNumber(milliseconds, 3);
return strMs.substring(0, digits);
}
function dateGetter(name, size, offset = 0, trim = false, negWrap = false) {
return function (date, locale) {
let part = getDatePart(name, date);
if (offset > 0 || part > -offset) {
part += offset;
}
if (name === 3) {
if (part === 0 && offset === -12) {
part = 12;
}
} else if (name === 6) {
return formatFractionalSeconds(part, size);
}
const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
return padNumber(part, size, localeMinus, trim, negWrap);
};
}
function getDatePart(part, date) {
switch (part) {
case 0:
return date.getFullYear();
case 1:
return date.getMonth();
case 2:
return date.getDate();
case 3:
return date.getHours();
case 4:
return date.getMinutes();
case 5:
return date.getSeconds();
case 6:
return date.getMilliseconds();
case 7:
return date.getDay();
default:
throw new _RuntimeError(2301, ngDevMode && `Unknown DateType value "${part}".`);
}
}
function dateStrGetter(name, width, form = FormStyle.Format, extended = false) {
return function (date, locale) {
return getDateTranslation(date, locale, name, width, form, extended);
};
}
function getDateTranslation(date, locale, name, width, form, extended) {
switch (name) {
case 2:
return getLocaleMonthNames(locale, form, width)[date.getMonth()];
case 1:
return getLocaleDayNames(locale, form, width)[date.getDay()];
case 0:
const currentHours = date.getHours();
const currentMinutes = date.getMinutes();
if (extended) {
const rules = getLocaleExtraDayPeriodRules(locale);
const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);
const index = rules.findIndex(rule => {
if (Array.isArray(rule)) {
const [from, to] = rule;
const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;
const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;
if (from.hours < to.hours) {
if (afterFrom && beforeTo) {
return true;
}
} else if (afterFrom || beforeTo) {
return true;
}
} else {
if (rule.hours === currentHours && rule.minutes === currentMinutes) {
return true;
}
}
return false;
});
if (index !== -1) {
return dayPeriods[index];
}
}
return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];
case 3:
return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];
default:
const unexpected = name;
throw new _RuntimeError(2302, ngDevMode && `unexpected translation type ${unexpected}`);
}
}
function timeZoneGetter(width) {
return function (date, locale, offset) {
const zone = -1 * offset;
const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);
switch (width) {
case 0:
return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);
case 1:
return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);
case 2:
return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);
case 3:
if (offset === 0) {
return 'Z';
} else {
return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);
}
default:
throw new _RuntimeError(2310, ngDevMode && `Unknown zone width "${width}"`);
}
};
}
const JANUARY = 0;
const THURSDAY = 4;
function getFirstThursdayOfYear(year) {
const firstDayOfYear = createDate(year, JANUARY, 1).getDay();
return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
}
function getThursdayThisIsoWeek(datetime) {
const currentDay = datetime.getDay();
const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;
return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);
}
function weekGetter(size, monthBased = false) {
return function (date, locale) {
let result;
if (monthBased) {
const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
const today = date.getDate();
result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
} else {
const thisThurs = getThursdayThisIsoWeek(date);
const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());
const diff = thisThurs.getTime() - firstThurs.getTime();
result = 1 + Math.round(diff / 6.048e8);
}
return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
};
}
function weekNumberingYearGetter(size, trim = false) {
return function (date, locale) {
const thisThurs = getThursdayThisIsoWeek(date);
const weekNumberingYear = thisThurs.getFullYear();
return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);
};
}
const DATE_FORMATS = {};
function getDateFormatter(format) {
if (DATE_FORMATS[format]) {
return DATE_FORMATS[format];
}
let formatter;
switch (format) {
case 'G':
case 'GG':
case 'GGG':
formatter = dateStrGetter(3, TranslationWidth.Abbreviated);
break;
case 'GGGG':
formatter = dateStrGetter(3, TranslationWidth.Wide);
break;
case 'GGGGG':
formatter = dateStrGetter(3, TranslationWidth.Narrow);
break;
case 'y':
formatter = dateGetter(0, 1, 0, false, true);
break;
case 'yy':
formatter = dateGetter(0, 2, 0, true, true);
break;
case 'yyy':
formatter = dateGetter(0, 3, 0, false, true);
break;
case 'yyyy':
formatter = dateGetter(0, 4, 0, false, true);
break;
case 'Y':
formatter = weekNumberingYearGetter(1);
break;
case 'YY':
formatter = weekNumberingYearGetter(2, true);
break;
case 'YYY':
formatter = weekNumberingYearGetter(3);
break;
case 'YYYY':
formatter = weekNumberingYearGetter(4);
break;
case 'M':
case 'L':
formatter = dateGetter(1, 1, 1);
break;
case 'MM':
case 'LL':
formatter = dateGetter(1, 2, 1);
break;
case 'MMM':
formatter = dateStrGetter(2, TranslationWidth.Abbreviated);
break;
case 'MMMM':
formatter = dateStrGetter(2, TranslationWidth.Wide);
break;
case 'MMMMM':
formatter = dateStrGetter(2, TranslationWidth.Narrow);
break;
case 'LLL':
formatter = dateStrGetter(2, TranslationWidth.Abbreviated, FormStyle.Standalone);
break;
case 'LLLL':
formatter = dateStrGetter(2, TranslationWidth.Wide, FormStyle.Standalone);
break;
case 'LLLLL':
formatter = dateStrGetter(2, TranslationWidth.Narrow, FormStyle.Standalone);
break;
case 'w':
formatter = weekGetter(1);
break;
case 'ww':
formatter = weekGetter(2);
break;
case 'W':
formatter = weekGetter(1, true);
break;
case 'd':
formatter = dateGetter(2, 1);
break;
case 'dd':
formatter = dateGetter(2, 2);
break;
case 'c':
case 'cc':
formatter = dateGetter(7, 1);
break;
case 'ccc':
formatter = dateStrGetter(1, TranslationWidth.Abbreviated, FormStyle.Standalone);
break;
case 'cccc':
formatter = dateStrGetter(1, TranslationWidth.Wide, FormStyle.Standalone);
break;
case 'ccccc':
formatter = dateStrGetter(1, TranslationWidth.Narrow, FormStyle.Standalone);
break;
case 'cccccc':
formatter = dateStrGetter(1, TranslationWidth.Short, FormStyle.Standalone);
break;
case 'E':
case 'EE':
case 'EEE':
formatter = dateStrGetter(1, TranslationWidth.Abbreviated);
break;
case 'EEEE':
formatter = dateStrGetter(1, TranslationWidth.Wide);
break;
case 'EEEEE':
formatter = dateStrGetter(1, TranslationWidth.Narrow);
break;
case 'EEEEEE':
formatter = dateStrGetter(1, TranslationWidth.Short);
break;
case 'a':
case 'aa':
case 'aaa':
formatter = dateStrGetter(0, TranslationWidth.Abbreviated);
break;
case 'aaaa':
formatter = dateStrGetter(0, TranslationWidth.Wide);
break;
case 'aaaaa':
formatter = dateStrGetter(0, TranslationWidth.Narrow);
break;
case 'b':
case 'bb':
case 'bbb':
formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
break;
case 'bbbb':
formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Standalone, true);
break;
case 'bbbbb':
formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Standalone, true);
break;
case 'B':
case 'BB':
case 'BBB':
formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Format, true);
break;
case 'BBBB':
formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Format, true);
break;
case 'BBBBB':
formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Format, true);
break;
case 'h':
formatter = dateGetter(3, 1, -12);
break;
case 'hh':
formatter = dateGetter(3, 2, -12);
break;
case 'H':
formatter = dateGetter(3, 1);
break;
case 'HH':
formatter = dateGetter(3, 2);
break;
case 'm':
formatter = dateGetter(4, 1);
break;
case 'mm':
formatter = dateGetter(4, 2);
break;
case 's':
formatter = dateGetter(5, 1);
break;
case 'ss':
formatter = dateGetter(5, 2);
break;
case 'S':
formatter = dateGetter(6, 1);
break;
case 'SS':
formatter = dateGetter(6, 2);
break;
case 'SSS':
formatter = dateGetter(6, 3);
break;
case 'Z':
case 'ZZ':
case 'ZZZ':
formatter = timeZoneGetter(0);
break;
case 'ZZZZZ':
formatter = timeZoneGetter(3);
break;
case 'O':
case 'OO':
case 'OOO':
case 'z':
case 'zz':
case 'zzz':
formatter = timeZoneGetter(1);
break;
case 'OOOO':
case 'ZZZZ':
case 'zzzz':
formatter = timeZoneGetter(2);
break;
default:
return null;
}
DATE_FORMATS[format] = formatter;
return formatter;
}
function timezoneToOffset(timezone, fallback) {
timezone = timezone.replace(/:/g, '');
const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
}
function addDateMinutes(date, minutes) {
date = new Date(date.getTime());
date.setMinutes(date.getMinutes() + minutes);
return date;
}
function convertTimezoneToLocal(date, timezone, reverse) {
const reverseValue = -1 ;
const dateTimezoneOffset = date.getTimezoneOffset();
const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
}
function toDate(value) {
if (isDate(value)) {
return value;
}
if (typeof value === 'number' && !isNaN(value)) {
return new Date(value);
}
if (typeof value === 'string') {
value = value.trim();
if (/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(value)) {
const [y, m = 1, d = 1] = value.split('-').map(val => +val);
return createDate(y, m - 1, d);
}
const parsedNb = parseFloat(value);
if (!isNaN(value - parsedNb)) {
return new Date(parsedNb);
}
let match;
if (match = value.match(ISO8601_DATE_REGEX)) {
return isoStringToDate(match);
}
}
const date = new Date(value);
if (!isDate(date)) {
throw new _RuntimeError(2311, ngDevMode && `Unable to convert "${value}" into a date`);
}
return date;
}
function isoStringToDate(match) {
const date = new Date(0);
let tzHour = 0;
let tzMin = 0;
const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
const timeSetter = match[8] ? date.setUTCHours : date.setHours;
if (match[9]) {
tzHour = Number(match[9] + match[10]);
tzMin = Number(match[9] + match[11]);
}
dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));
const h = Number(match[4] || 0) - tzHour;
const m = Number(match[5] || 0) - tzMin;
const s = Number(match[6] || 0);
const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);
timeSetter.call(date, h, m, s, ms);
return date;
}
function isDate(value) {
return value instanceof Date && !isNaN(value.valueOf());
}
const NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
const MAX_DIGITS = 22;
const DECIMAL_SEP = '.';
const ZERO_CHAR = '0';
const PATTERN_SEP = ';';
const GROUP_SEP = ',';
const DIGIT_CHAR = '#';
const CURRENCY_CHAR = '¤';
const PERCENT_CHAR = '%';
function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {
let formattedText = '';
let isZero = false;
if (!isFinite(value)) {
formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
} else {
let parsedNumber = parseNumber(value);
if (isPercent) {
parsedNumber = toPercent(parsedNumber);
}
let minInt = pattern.minInt;
let minFraction = pattern.minFrac;
let maxFraction = pattern.maxFrac;
if (digitsInfo) {
const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
if (parts === null) {
throw new _RuntimeError(2306, ngDevMode && `${digitsInfo} is not a valid digit info`);
}
const minIntPart = parts[1];
const minFractionPart = parts[3];
const maxFractionPart = parts[5];
if (minIntPart != null) {
minInt = parseIntAutoRadix(minIntPart);
}
if (minFractionPart != null) {
minFraction = parseIntAutoRadix(minFractionPart);
}
if (maxFractionPart != null) {
maxFraction = parseIntAutoRadix(maxFractionPart);
} else if (minFractionPart != null && minFraction > maxFraction) {
maxFraction = minFraction;
}
}
roundNumber(parsedNumber, minFraction, maxFraction);
let digits = parsedNumber.digits;
let integerLen = parsedNumber.integerLen;
const exponent = parsedNumber.exponent;
let decimals = [];
isZero = digits.every(d => !d);
for (; integerLen < minInt; integerLen++) {
digits.unshift(0);
}
for (; integerLen < 0; integerLen++) {
digits.unshift(0);
}
if (integerLen > 0) {
decimals = digits.splice(integerLen, digits.length);
} else {
decimals = digits;
digits = [0];
}
const groups = [];
if (digits.length >= pattern.lgSize) {
groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));
}
while (digits.length > pattern.gSize) {
groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));
}
if (digits.length) {
groups.unshift(digits.join(''));
}
formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));
if (decimals.length) {
formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');
}
if (exponent) {
formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;
}
}
if (value < 0 && !isZero) {
formattedText = pattern.negPre + formattedText + pattern.negSuf;
} else {
formattedText = pattern.posPre + formattedText + pattern.posSuf;
}
return formattedText;
}
function formatCurrency(value, locale, currency, currencyCode, digitsInfo) {
const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);
const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);
pattern.maxFrac = pattern.minFrac;
const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);
return res.replace(CURRENCY_CHAR, currency).replace(CURRENCY_CHAR, '').trim();
}
function formatPercent(value, locale, digitsInfo) {
const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);
const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);
return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
}
function formatNumber(value, locale, digitsInfo) {
const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);
const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);
}
function parseNumberFormat(format, minusSign = '-') {
const p = {
minInt: 1,
minFrac: 0,
maxFrac: 0,
posPre: '',
posSuf: '',
negPre: '',
negSuf: '',
gSize: 0,
lgSize: 0
};
const patternParts = format.split(PATTERN_SEP);
const positive = patternParts[0];
const negative = patternParts[1];
const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],
integer = positiveParts[0],
fraction = positiveParts[1] || '';
p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));
for (let i = 0; i < fraction.length; i++) {
const ch = fraction.charAt(i);
if (ch === ZERO_CHAR) {
p.minFrac = p.maxFrac = i + 1;
} else if (ch === DIGIT_CHAR) {
p.maxFrac = i + 1;
} else {
p.posSuf += ch;
}
}
const groups = integer.split(GROUP_SEP);
p.gSize = groups[1] ? groups[1].length : 0;
p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;
if (negative) {
const trunkLen = positive.length - p.posPre.length - p.posSuf.length,
pos = negative.indexOf(DIGIT_CHAR);
p.negPre = negative.substring(0, pos).replace(/'/g, '');
p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, '');
} else {
p.negPre = minusSign + p.posPre;
p.negSuf = p.posSuf;
}
return p;
}
function toPercent(parsedNumber) {
if (parsedNumber.digits[0] === 0) {
return parsedNumber;
}
const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;
if (parsedNumber.exponent) {
parsedNumber.exponent += 2;
} else {
if (fractionLen === 0) {
parsedNumber.digits.push(0, 0);
} else if (fractionLen === 1) {
parsedNumber.digits.push(0);
}
parsedNumber.integerLen += 2;
}
return parsedNumber;
}
function parseNumber(num) {
let numStr = Math.abs(num) + '';
let exponent = 0,
digits,
integerLen;
let i, j, zeros;
if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
numStr = numStr.replace(DECIMAL_SEP, '');
}
if ((i = numStr.search(/e/i)) > 0) {
if (integerLen < 0) integerLen = i;
integerLen += +numStr.slice(i + 1);
numStr = numStr.substring(0, i);
} else if (integerLen < 0) {
integerLen = numStr.length;
}
for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {}
if (i === (zeros = numStr.length)) {
digits = [0];
integerLen = 1;
} else {
zeros--;
while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;
integerLen -= i;
digits = [];
for (j = 0; i <= zeros; i++, j++) {
digits[j] = Number(numStr.charAt(i));
}
}
if (integerLen > MAX_DIGITS) {
digits = digits.splice(0, MAX_DIGITS - 1);
exponent = integerLen - 1;
integerLen = 1;
}
return {
digits,
exponent,
integerLen
};
}
function roundNumber(parsedNumber, minFrac, maxFrac) {
if (minFrac > maxFrac) {
throw new _RuntimeError(2307, ngDevMode && `The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);
}
let digits = parsedNumber.digits;
let fractionLen = digits.length - parsedNumber.integerLen;
const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);
let roundAt = fractionSize + parsedNumber.integerLen;
let digit = digits[roundAt];
if (roundAt > 0) {
digits.splice(Math.max(parsedNumber.integerLen, roundAt));
for (let j = roundAt; j < digits.length; j++) {
digits[j] = 0;
}
} else {
fractionLen = Math.max(0, fractionLen);
parsedNumber.integerLen = 1;
digits.length = Math.max(1, roundAt = fractionSize + 1);
digits[0] = 0;
for (let i = 1; i < roundAt; i++) digits[i] = 0;
}
if (digit >= 5) {
if (roundAt - 1 < 0) {
for (let k = 0; k > roundAt; k--) {
digits.unshift(0);
parsedNumber.integerLen++;
}
digits.unshift(1);
parsedNumber.integerLen++;
} else {
digits[roundAt - 1]++;
}
}
for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);
let dropTrailingZeros = fractionSize !== 0;
const minLen = minFrac + parsedNumber.integerLen;
const carry = digits.reduceRight(function (carry, d, i, digits) {
d = d + carry;
digits[i] = d < 10 ? d : d - 10;
if (dropTrailingZeros) {
if (digits[i] === 0 && i >= minLen) {
digits.pop();
} else {
dropTrailingZeros = false;
}
}
return d >= 10 ? 1 : 0;
}, 0);
if (carry) {
digits.unshift(carry);
parsedNumber.integerLen++;
}
}
function parseIntAutoRadix(text) {
const result = parseInt(text);
if (isNaN(result)) {
throw new _RuntimeError(2305, ngDevMode && 'Invalid integer literal when parsing ' + text);
}
return result;
}
class NgLocalization {
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocalization,
deps: [],
target: i0.ɵɵFactoryTarget.Injectable
});
static ɵprov = i0.ɵɵngDeclareInjectable({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocalization,
providedIn: 'root',
useFactory: () => new NgLocaleLocalization(inject(LOCALE_ID))
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocalization,
decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
useFactory: () => new NgLocaleLocalization(inject(LOCALE_ID))
}]
}]
});
function getPluralCategory(value, cases, ngLocalization, locale) {
let key = `=${value}`;
if (cases.indexOf(key) > -1) {
return key;
}
key = ngLocalization.getPluralCategory(value, locale);
if (cases.indexOf(key) > -1) {
return key;
}
if (cases.indexOf('other') > -1) {
return 'other';
}
throw new _RuntimeError(2308, ngDevMode && `No plural message found for value "${value}"`);
}
class NgLocaleLocalization extends NgLocalization {
locale;
constructor(locale) {
super();
this.locale = locale;
}
getPluralCategory(value, locale) {
const plural = getLocalePluralCase(locale || this.locale)(value);
switch (plural) {
case Plural.Zero:
return 'zero';
case Plural.One:
return 'one';
case Plural.Two:
return 'two';
case Plural.Few:
return 'few';
case Plural.Many:
return 'many';
default:
return 'other';
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocaleLocalization,
deps: [{
token: LOCALE_ID
}],
target: i0.ɵɵFactoryTarget.Injectable
});
static ɵprov = i0.ɵɵngDeclareInjectable({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocaleLocalization
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgLocaleLocalization,
decorators: [{
type: Injectable
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Inject,
args: [LOCALE_ID]
}]
}]
});
const WS_REGEXP = /\s+/;
const EMPTY_ARRAY = [];
class NgClass {
_ngEl;
_renderer;
initialClasses = EMPTY_ARRAY;
rawClass;
stateMap = new Map();
constructor(_ngEl, _renderer) {
this._ngEl = _ngEl;
this._renderer = _renderer;
}
set klass(value) {
this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;
}
set ngClass(value) {
this.rawClass = typeof value === 'string' ? value.trim().split(WS_REGEXP) : value;
}
ngDoCheck() {
for (const klass of this.initialClasses) {
this._updateState(klass, true);
}
const rawClass = this.rawClass;
if (Array.isArray(rawClass) || rawClass instanceof Set) {
for (const klass of rawClass) {
this._updateState(klass, true);
}
} else if (rawClass != null) {
for (const klass of Object.keys(rawClass)) {
this._updateState(klass, Boolean(rawClass[klass]));
}
}
this._applyStateDiff();
}
_updateState(klass, nextEnabled) {
const state = this.stateMap.get(klass);
if (state !== undefined) {
if (state.enabled !== nextEnabled) {
state.changed = true;
state.enabled = nextEnabled;
}
state.touched = true;
} else {
this.stateMap.set(klass, {
enabled: nextEnabled,
changed: true,
touched: true
});
}
}
_applyStateDiff() {
for (const stateEntry of this.stateMap) {
const klass = stateEntry[0];
const state = stateEntry[1];
if (state.changed) {
this._toggleClass(klass, state.enabled);
state.changed = false;
} else if (!state.touched) {
if (state.enabled) {
this._toggleClass(klass, false);
}
this.stateMap.delete(klass);
}
state.touched = false;
}
}
_toggleClass(klass, enabled) {
if (ngDevMode) {
if (typeof klass !== 'string') {
throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${_stringify(klass)}`);
}
}
klass = klass.trim();
if (klass.length > 0) {
klass.split(WS_REGEXP).forEach(klass => {
if (enabled) {
this._renderer.addClass(this._ngEl.nativeElement, klass);
} else {
this._renderer.removeClass(this._ngEl.nativeElement, klass);
}
});
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgClass,
deps: [{
token: i0.ElementRef
}, {
token: i0.Renderer2
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgClass,
isStandalone: true,
selector: "[ngClass]",
inputs: {
klass: ["class", "klass"],
ngClass: "ngClass"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgClass,
decorators: [{
type: Directive,
args: [{
selector: '[ngClass]'
}]
}],
ctorParameters: () => [{
type: i0.ElementRef
}, {
type: i0.Renderer2
}],
propDecorators: {
klass: [{
type: Input,
args: ['class']
}],
ngClass: [{
type: Input,
args: ['ngClass']
}]
}
});
class NgComponentOutlet {
_viewContainerRef;
ngComponentOutlet = null;
ngComponentOutletInputs;
ngComponentOutletInjector;
ngComponentOutletEnvironmentInjector;
ngComponentOutletContent;
ngComponentOutletNgModule;
_componentRef;
_moduleRef;
_inputsUsed = new Map();
get componentInstance() {
return this._componentRef?.instance ?? null;
}
constructor(_viewContainerRef) {
this._viewContainerRef = _viewContainerRef;
}
_needToReCreateNgModuleInstance(changes) {
return changes['ngComponentOutletNgModule'] !== undefined;
}
_needToReCreateComponentInstance(changes) {
return changes['ngComponentOutlet'] !== undefined || changes['ngComponentOutletContent'] !== undefined || changes['ngComponentOutletInjector'] !== undefined || changes['ngComponentOutletEnvironmentInjector'] !== undefined || this._needToReCreateNgModuleInstance(changes);
}
ngOnChanges(changes) {
if (this._needToReCreateComponentInstance(changes)) {
this._viewContainerRef.clear();
this._inputsUsed.clear();
this._componentRef = undefined;
if (this.ngComponentOutlet) {
const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;
if (this._needToReCreateNgModuleInstance(changes)) {
this._moduleRef?.destroy();
if (this.ngComponentOutletNgModule) {
this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));
} else {
this._moduleRef = undefined;
}
}
this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {
injector,
ngModuleRef: this._moduleRef,
projectableNodes: this.ngComponentOutletContent,
environmentInjector: this.ngComponentOutletEnvironmentInjector
});
}
}
}
ngDoCheck() {
if (this._componentRef) {
if (this.ngComponentOutletInputs) {
for (const inputName of Object.keys(this.ngComponentOutletInputs)) {
this._inputsUsed.set(inputName, true);
}
}
this._applyInputStateDiff(this._componentRef);
}
}
ngOnDestroy() {
this._moduleRef?.destroy();
}
_applyInputStateDiff(componentRef) {
for (const [inputName, touched] of this._inputsUsed) {
if (!touched) {
componentRef.setInput(inputName, undefined);
this._inputsUsed.delete(inputName);
} else {
componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);
this._inputsUsed.set(inputName, false);
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgComponentOutlet,
deps: [{
token: i0.ViewContainerRef
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgComponentOutlet,
isStandalone: true,
selector: "[ngComponentOutlet]",
inputs: {
ngComponentOutlet: "ngComponentOutlet",
ngComponentOutletInputs: "ngComponentOutletInputs",
ngComponentOutletInjector: "ngComponentOutletInjector",
ngComponentOutletEnvironmentInjector: "ngComponentOutletEnvironmentInjector",
ngComponentOutletContent: "ngComponentOutletContent",
ngComponentOutletNgModule: "ngComponentOutletNgModule"
},
exportAs: ["ngComponentOutlet"],
usesOnChanges: true,
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgComponentOutlet,
decorators: [{
type: Directive,
args: [{
selector: '[ngComponentOutlet]',
exportAs: 'ngComponentOutlet'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}],
propDecorators: {
ngComponentOutlet: [{
type: Input
}],
ngComponentOutletInputs: [{
type: Input
}],
ngComponentOutletInjector: [{
type: Input
}],
ngComponentOutletEnvironmentInjector: [{
type: Input
}],
ngComponentOutletContent: [{
type: Input
}],
ngComponentOutletNgModule: [{
type: Input
}]
}
});
function getParentInjector(injector) {
const parentNgModule = injector.get(NgModuleRef);
return parentNgModule.injector;
}
class NgForOfContext {
$implicit;
ngForOf;
index;
count;
constructor($implicit, ngForOf, index, count) {
this.$implicit = $implicit;
this.ngForOf = ngForOf;
this.index = index;
this.count = count;
}
get first() {
return this.index === 0;
}
get last() {
return this.index === this.count - 1;
}
get even() {
return this.index % 2 === 0;
}
get odd() {
return !this.even;
}
}
class NgForOf {
_viewContainer;
_template;
_differs;
set ngForOf(ngForOf) {
this._ngForOf = ngForOf;
this._ngForOfDirty = true;
}
set ngForTrackBy(fn) {
if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {
console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.dev/api/common/NgForOf#change-propagation for more information.`);
}
this._trackByFn = fn;
}
get ngForTrackBy() {
return this._trackByFn;
}
_ngForOf = null;
_ngForOfDirty = true;
_differ = null;
_trackByFn;
constructor(_viewContainer, _template, _differs) {
this._viewContainer = _viewContainer;
this._template = _template;
this._differs = _differs;
}
set ngForTemplate(value) {
if (value) {
this._template = value;
}
}
ngDoCheck() {
if (this._ngForOfDirty) {
this._ngForOfDirty = false;
const value = this._ngForOf;
if (!this._differ && value) {
if (typeof ngDevMode === 'undefined' || ngDevMode) {
try {
this._differ = this._differs.find(value).create(this.ngForTrackBy);
} catch {
let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;
if (typeof value === 'object') {
errorMessage += ' Did you mean to use the keyvalue pipe?';
}
throw new _RuntimeError(-2200, errorMessage);
}
} else {
this._differ = this._differs.find(value).create(this.ngForTrackBy);
}
}
}
if (this._differ) {
const changes = this._differ.diff(this._ngForOf);
if (changes) this._applyChanges(changes);
}
}
_applyChanges(changes) {
const viewContainer = this._viewContainer;
changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
if (item.previousIndex == null) {
viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);
} else if (currentIndex == null) {
viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);
} else if (adjustedPreviousIndex !== null) {
const view = viewContainer.get(adjustedPreviousIndex);
viewContainer.move(view, currentIndex);
applyViewChange(view, item);
}
});
for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {
const viewRef = viewContainer.get(i);
const context = viewRef.context;
context.index = i;
context.count = ilen;
context.ngForOf = this._ngForOf;
}
changes.forEachIdentityChange(record => {
const viewRef = viewContainer.get(record.currentIndex);
applyViewChange(viewRef, record);
});
}
static ngTemplateContextGuard(dir, ctx) {
return true;
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgForOf,
deps: [{
token: i0.ViewContainerRef
}, {
token: i0.TemplateRef
}, {
token: i0.IterableDiffers
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgForOf,
isStandalone: true,
selector: "[ngFor][ngForOf]",
inputs: {
ngForOf: "ngForOf",
ngForTrackBy: "ngForTrackBy",
ngForTemplate: "ngForTemplate"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgForOf,
decorators: [{
type: Directive,
args: [{
selector: '[ngFor][ngForOf]'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}, {
type: i0.TemplateRef
}, {
type: i0.IterableDiffers
}],
propDecorators: {
ngForOf: [{
type: Input
}],
ngForTrackBy: [{
type: Input
}],
ngForTemplate: [{
type: Input
}]
}
});
function applyViewChange(view, record) {
view.context.$implicit = record.item;
}
function getTypeName(type) {
return type['name'] || typeof type;
}
class NgIf {
_viewContainer;
_context = new NgIfContext();
_thenTemplateRef = null;
_elseTemplateRef = null;
_thenViewRef = null;
_elseViewRef = null;
constructor(_viewContainer, templateRef) {
this._viewContainer = _viewContainer;
this._thenTemplateRef = templateRef;
}
set ngIf(condition) {
this._context.$implicit = this._context.ngIf = condition;
this._updateView();
}
set ngIfThen(templateRef) {
assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfThen');
this._thenTemplateRef = templateRef;
this._thenViewRef = null;
this._updateView();
}
set ngIfElse(templateRef) {
assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfElse');
this._elseTemplateRef = templateRef;
this._elseViewRef = null;
this._updateView();
}
_updateView() {
if (this._context.$implicit) {
if (!this._thenViewRef) {
this._viewContainer.clear();
this._elseViewRef = null;
if (this._thenTemplateRef) {
this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
}
}
} else {
if (!this._elseViewRef) {
this._viewContainer.clear();
this._thenViewRef = null;
if (this._elseTemplateRef) {
this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
}
}
}
}
static ngIfUseIfTypeGuard;
static ngTemplateGuard_ngIf;
static ngTemplateContextGuard(dir, ctx) {
return true;
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgIf,
deps: [{
token: i0.ViewContainerRef
}, {
token: i0.TemplateRef
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgIf,
isStandalone: true,
selector: "[ngIf]",
inputs: {
ngIf: "ngIf",
ngIfThen: "ngIfThen",
ngIfElse: "ngIfElse"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgIf,
decorators: [{
type: Directive,
args: [{
selector: '[ngIf]'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}, {
type: i0.TemplateRef
}],
propDecorators: {
ngIf: [{
type: Input
}],
ngIfThen: [{
type: Input
}],
ngIfElse: [{
type: Input
}]
}
});
class NgIfContext {
$implicit = null;
ngIf = null;
}
function assertTemplate(templateRef, property) {
if (templateRef && !templateRef.createEmbeddedView) {
throw new _RuntimeError(2020, (typeof ngDevMode === 'undefined' || ngDevMode) && `${property} must be a TemplateRef, but received '${_stringify(templateRef)}'.`);
}
}
class SwitchView {
_viewContainerRef;
_templateRef;
_created = false;
constructor(_viewContainerRef, _templateRef) {
this._viewContainerRef = _viewContainerRef;
this._templateRef = _templateRef;
}
create() {
this._created = true;
this._viewContainerRef.createEmbeddedView(this._templateRef);
}
destroy() {
this._created = false;
this._viewContainerRef.clear();
}
enforceState(created) {
if (created && !this._created) {
this.create();
} else if (!created && this._created) {
this.destroy();
}
}
}
class NgSwitch {
_defaultViews = [];
_defaultUsed = false;
_caseCount = 0;
_lastCaseCheckIndex = 0;
_lastCasesMatched = false;
_ngSwitch;
set ngSwitch(newValue) {
this._ngSwitch = newValue;
if (this._caseCount === 0) {
this._updateDefaultCases(true);
}
}
_addCase() {
return this._caseCount++;
}
_addDefault(view) {
this._defaultViews.push(view);
}
_matchCase(value) {
const matched = value === this._ngSwitch;
this._lastCasesMatched ||= matched;
this._lastCaseCheckIndex++;
if (this._lastCaseCheckIndex === this._caseCount) {
this._updateDefaultCases(!this._lastCasesMatched);
this._lastCaseCheckIndex = 0;
this._lastCasesMatched = false;
}
return matched;
}
_updateDefaultCases(useDefault) {
if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {
this._defaultUsed = useDefault;
for (const defaultView of this._defaultViews) {
defaultView.enforceState(useDefault);
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitch,
deps: [],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgSwitch,
isStandalone: true,
selector: "[ngSwitch]",
inputs: {
ngSwitch: "ngSwitch"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitch,
decorators: [{
type: Directive,
args: [{
selector: '[ngSwitch]'
}]
}],
propDecorators: {
ngSwitch: [{
type: Input
}]
}
});
class NgSwitchCase {
ngSwitch;
_view;
ngSwitchCase;
constructor(viewContainer, templateRef, ngSwitch) {
this.ngSwitch = ngSwitch;
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {
throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');
}
ngSwitch._addCase();
this._view = new SwitchView(viewContainer, templateRef);
}
ngDoCheck() {
this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitchCase,
deps: [{
token: i0.ViewContainerRef
}, {
token: i0.TemplateRef
}, {
token: NgSwitch,
host: true,
optional: true
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgSwitchCase,
isStandalone: true,
selector: "[ngSwitchCase]",
inputs: {
ngSwitchCase: "ngSwitchCase"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitchCase,
decorators: [{
type: Directive,
args: [{
selector: '[ngSwitchCase]'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}, {
type: i0.TemplateRef
}, {
type: NgSwitch,
decorators: [{
type: Optional
}, {
type: Host
}]
}],
propDecorators: {
ngSwitchCase: [{
type: Input
}]
}
});
class NgSwitchDefault {
constructor(viewContainer, templateRef, ngSwitch) {
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {
throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');
}
ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitchDefault,
deps: [{
token: i0.ViewContainerRef
}, {
token: i0.TemplateRef
}, {
token: NgSwitch,
host: true,
optional: true
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgSwitchDefault,
isStandalone: true,
selector: "[ngSwitchDefault]",
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgSwitchDefault,
decorators: [{
type: Directive,
args: [{
selector: '[ngSwitchDefault]'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}, {
type: i0.TemplateRef
}, {
type: NgSwitch,
decorators: [{
type: Optional
}, {
type: Host
}]
}]
});
function throwNgSwitchProviderNotFoundError(attrName, directiveName) {
throw new _RuntimeError(2000, `An element with the "${attrName}" attribute ` + `(matching the "${directiveName}" directive) must be located inside an element with the "ngSwitch" attribute ` + `(matching "NgSwitch" directive)`);
}
class NgPlural {
_localization;
_activeView;
_caseViews = {};
constructor(_localization) {
this._localization = _localization;
}
set ngPlural(value) {
this._updateView(value);
}
addCase(value, switchView) {
this._caseViews[value] = switchView;
}
_updateView(switchValue) {
this._clearViews();
const cases = Object.keys(this._caseViews);
const key = getPluralCategory(switchValue, cases, this._localization);
this._activateView(this._caseViews[key]);
}
_clearViews() {
if (this._activeView) this._activeView.destroy();
}
_activateView(view) {
if (view) {
this._activeView = view;
this._activeView.create();
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgPlural,
deps: [{
token: NgLocalization
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgPlural,
isStandalone: true,
selector: "[ngPlural]",
inputs: {
ngPlural: "ngPlural"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgPlural,
decorators: [{
type: Directive,
args: [{
selector: '[ngPlural]'
}]
}],
ctorParameters: () => [{
type: NgLocalization
}],
propDecorators: {
ngPlural: [{
type: Input
}]
}
});
class NgPluralCase {
value;
constructor(value, template, viewContainer, ngPlural) {
this.value = value;
const isANumber = !isNaN(Number(value));
ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgPluralCase,
deps: [{
token: 'ngPluralCase',
attribute: true
}, {
token: i0.TemplateRef
}, {
token: i0.ViewContainerRef
}, {
token: NgPlural,
host: true
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgPluralCase,
isStandalone: true,
selector: "[ngPluralCase]",
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgPluralCase,
decorators: [{
type: Directive,
args: [{
selector: '[ngPluralCase]'
}]
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Attribute,
args: ['ngPluralCase']
}]
}, {
type: i0.TemplateRef
}, {
type: i0.ViewContainerRef
}, {
type: NgPlural,
decorators: [{
type: Host
}]
}]
});
class NgStyle {
_ngEl;
_differs;
_renderer;
_ngStyle = null;
_differ = null;
constructor(_ngEl, _differs, _renderer) {
this._ngEl = _ngEl;
this._differs = _differs;
this._renderer = _renderer;
}
set ngStyle(values) {
this._ngStyle = values;
if (!this._differ && values) {
this._differ = this._differs.find(values).create();
}
}
ngDoCheck() {
if (this._differ) {
const changes = this._differ.diff(this._ngStyle);
if (changes) {
this._applyChanges(changes);
}
}
}
_setStyle(nameAndUnit, value) {
const [name, unit] = nameAndUnit.split('.');
const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;
if (value != null) {
this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);
} else {
this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);
}
}
_applyChanges(changes) {
changes.forEachRemovedItem(record => this._setStyle(record.key, null));
changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue));
changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue));
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgStyle,
deps: [{
token: i0.ElementRef
}, {
token: i0.KeyValueDiffers
}, {
token: i0.Renderer2
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgStyle,
isStandalone: true,
selector: "[ngStyle]",
inputs: {
ngStyle: "ngStyle"
},
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgStyle,
decorators: [{
type: Directive,
args: [{
selector: '[ngStyle]'
}]
}],
ctorParameters: () => [{
type: i0.ElementRef
}, {
type: i0.KeyValueDiffers
}, {
type: i0.Renderer2
}],
propDecorators: {
ngStyle: [{
type: Input,
args: ['ngStyle']
}]
}
});
class NgTemplateOutlet {
_viewContainerRef;
_viewRef = null;
ngTemplateOutletContext = null;
ngTemplateOutlet = null;
ngTemplateOutletInjector = null;
constructor(_viewContainerRef) {
this._viewContainerRef = _viewContainerRef;
}
ngOnChanges(changes) {
if (this._shouldRecreateView(changes)) {
const viewContainerRef = this._viewContainerRef;
if (this._viewRef) {
viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
}
if (!this.ngTemplateOutlet) {
this._viewRef = null;
return;
}
const viewContext = this._createContextForwardProxy();
this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {
injector: this.ngTemplateOutletInjector ?? undefined
});
}
}
_shouldRecreateView(changes) {
return !!changes['ngTemplateOutlet'] || !!changes['ngTemplateOutletInjector'];
}
_createContextForwardProxy() {
return new Proxy({}, {
set: (_target, prop, newValue) => {
if (!this.ngTemplateOutletContext) {
return false;
}
return Reflect.set(this.ngTemplateOutletContext, prop, newValue);
},
get: (_target, prop, receiver) => {
if (!this.ngTemplateOutletContext) {
return undefined;
}
return Reflect.get(this.ngTemplateOutletContext, prop, receiver);
}
});
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgTemplateOutlet,
deps: [{
token: i0.ViewContainerRef
}],
target: i0.ɵɵFactoryTarget.Directive
});
static ɵdir = i0.ɵɵngDeclareDirective({
minVersion: "14.0.0",
version: "21.1.1",
type: NgTemplateOutlet,
isStandalone: true,
selector: "[ngTemplateOutlet]",
inputs: {
ngTemplateOutletContext: "ngTemplateOutletContext",
ngTemplateOutlet: "ngTemplateOutlet",
ngTemplateOutletInjector: "ngTemplateOutletInjector"
},
usesOnChanges: true,
ngImport: i0
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: NgTemplateOutlet,
decorators: [{
type: Directive,
args: [{
selector: '[ngTemplateOutlet]'
}]
}],
ctorParameters: () => [{
type: i0.ViewContainerRef
}],
propDecorators: {
ngTemplateOutletContext: [{
type: Input
}],
ngTemplateOutlet: [{
type: Input
}],
ngTemplateOutletInjector: [{
type: Input
}]
}
});
const COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];
function invalidPipeArgumentError(type, value) {
return new _RuntimeError(2100, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${_stringify(type)}'`);
}
class SubscribableStrategy {
createSubscription(async, updateLatestValue, onError) {
return untracked(() => async.subscribe({
next: updateLatestValue,
error: onError
}));
}
dispose(subscription) {
untracked(() => subscription.unsubscribe());
}
}
class PromiseStrategy {
createSubscription(async, updateLatestValue, onError) {
async.then(v => updateLatestValue?.(v), e => onError?.(e));
return {
unsubscribe: () => {
updateLatestValue = null;
onError = null;
}
};
}
dispose(subscription) {
subscription.unsubscribe();
}
}
const _promiseStrategy = new PromiseStrategy();
const _subscribableStrategy = new SubscribableStrategy();
class AsyncPipe {
_ref;
_latestValue = null;
markForCheckOnValueUpdate = true;
_subscription = null;
_obj = null;
_strategy = null;
applicationErrorHandler = inject(_INTERNAL_APPLICATION_ERROR_HANDLER);
constructor(ref) {
this._ref = ref;
}
ngOnDestroy() {
if (this._subscription) {
this._dispose();
}
this._ref = null;
}
transform(obj) {
if (!this._obj) {
if (obj) {
try {
this.markForCheckOnValueUpdate = false;
this._subscribe(obj);
} finally {
this.markForCheckOnValueUpdate = true;
}
}
return this._latestValue;
}
if (obj !== this._obj) {
this._dispose();
return this.transform(obj);
}
return this._latestValue;
}
_subscribe(obj) {
this._obj = obj;
this._strategy = this._selectStrategy(obj);
this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value), e => this.applicationErrorHandler(e));
}
_selectStrategy(obj) {
if (_isPromise(obj)) {
return _promiseStrategy;
}
if (_isSubscribable(obj)) {
return _subscribableStrategy;
}
throw invalidPipeArgumentError(AsyncPipe, obj);
}
_dispose() {
this._strategy.dispose(this._subscription);
this._latestValue = null;
this._subscription = null;
this._obj = null;
}
_updateLatestValue(async, value) {
if (async === this._obj) {
this._latestValue = value;
if (this.markForCheckOnValueUpdate) {
this._ref?.markForCheck();
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: AsyncPipe,
deps: [{
token: i0.ChangeDetectorRef
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: AsyncPipe,
isStandalone: true,
name: "async",
pure: false
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: AsyncPipe,
decorators: [{
type: Pipe,
args: [{
name: 'async',
pure: false
}]
}],
ctorParameters: () => [{
type: i0.ChangeDetectorRef
}]
});
class LowerCasePipe {
transform(value) {
if (value == null) return null;
if (typeof value !== 'string') {
throw invalidPipeArgumentError(LowerCasePipe, value);
}
return value.toLowerCase();
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: LowerCasePipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: LowerCasePipe,
isStandalone: true,
name: "lowercase"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: LowerCasePipe,
decorators: [{
type: Pipe,
args: [{
name: 'lowercase'
}]
}]
});
const unicodeWordMatch = /(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;
class TitleCasePipe {
transform(value) {
if (value == null) return null;
if (typeof value !== 'string') {
throw invalidPipeArgumentError(TitleCasePipe, value);
}
return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase());
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: TitleCasePipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: TitleCasePipe,
isStandalone: true,
name: "titlecase"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: TitleCasePipe,
decorators: [{
type: Pipe,
args: [{
name: 'titlecase'
}]
}]
});
class UpperCasePipe {
transform(value) {
if (value == null) return null;
if (typeof value !== 'string') {
throw invalidPipeArgumentError(UpperCasePipe, value);
}
return value.toUpperCase();
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: UpperCasePipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: UpperCasePipe,
isStandalone: true,
name: "uppercase"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: UpperCasePipe,
decorators: [{
type: Pipe,
args: [{
name: 'uppercase'
}]
}]
});
const DEFAULT_DATE_FORMAT = 'mediumDate';
const DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_TIMEZONE' : '');
const DATE_PIPE_DEFAULT_OPTIONS = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_OPTIONS' : '');
class DatePipe {
locale;
defaultTimezone;
defaultOptions;
constructor(locale, defaultTimezone, defaultOptions) {
this.locale = locale;
this.defaultTimezone = defaultTimezone;
this.defaultOptions = defaultOptions;
}
transform(value, format, timezone, locale) {
if (value == null || value === '' || value !== value) return null;
try {
const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;
const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? undefined;
return formatDate(value, _format, locale || this.locale, _timezone);
} catch (error) {
throw invalidPipeArgumentError(DatePipe, error.message);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: DatePipe,
deps: [{
token: LOCALE_ID
}, {
token: DATE_PIPE_DEFAULT_TIMEZONE,
optional: true
}, {
token: DATE_PIPE_DEFAULT_OPTIONS,
optional: true
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: DatePipe,
isStandalone: true,
name: "date"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: DatePipe,
decorators: [{
type: Pipe,
args: [{
name: 'date'
}]
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Inject,
args: [LOCALE_ID]
}]
}, {
type: undefined,
decorators: [{
type: Inject,
args: [DATE_PIPE_DEFAULT_TIMEZONE]
}, {
type: Optional
}]
}, {
type: undefined,
decorators: [{
type: Inject,
args: [DATE_PIPE_DEFAULT_OPTIONS]
}, {
type: Optional
}]
}]
});
const _INTERPOLATION_REGEXP = /#/g;
class I18nPluralPipe {
_localization;
constructor(_localization) {
this._localization = _localization;
}
transform(value, pluralMap, locale) {
if (value == null) return '';
if (typeof pluralMap !== 'object' || pluralMap === null) {
throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);
}
const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nPluralPipe,
deps: [{
token: NgLocalization
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nPluralPipe,
isStandalone: true,
name: "i18nPlural"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nPluralPipe,
decorators: [{
type: Pipe,
args: [{
name: 'i18nPlural'
}]
}],
ctorParameters: () => [{
type: NgLocalization
}]
});
class I18nSelectPipe {
transform(value, mapping) {
if (value == null) return '';
if (typeof mapping !== 'object' || typeof value !== 'string') {
throw invalidPipeArgumentError(I18nSelectPipe, mapping);
}
if (mapping.hasOwnProperty(value)) {
return mapping[value];
}
if (mapping.hasOwnProperty('other')) {
return mapping['other'];
}
return '';
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nSelectPipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nSelectPipe,
isStandalone: true,
name: "i18nSelect"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: I18nSelectPipe,
decorators: [{
type: Pipe,
args: [{
name: 'i18nSelect'
}]
}]
});
class JsonPipe {
transform(value) {
return JSON.stringify(value, null, 2);
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: JsonPipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: JsonPipe,
isStandalone: true,
name: "json",
pure: false
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: JsonPipe,
decorators: [{
type: Pipe,
args: [{
name: 'json',
pure: false
}]
}]
});
function makeKeyValuePair(key, value) {
return {
key: key,
value: value
};
}
class KeyValuePipe {
differs;
constructor(differs) {
this.differs = differs;
}
differ;
keyValues = [];
compareFn = defaultComparator;
transform(input, compareFn = defaultComparator) {
if (!input || !(input instanceof Map) && typeof input !== 'object') {
return null;
}
this.differ ??= this.differs.find(input).create();
const differChanges = this.differ.diff(input);
const compareFnChanged = compareFn !== this.compareFn;
if (differChanges) {
this.keyValues = [];
differChanges.forEachItem(r => {
this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));
});
}
if (differChanges || compareFnChanged) {
if (compareFn) {
this.keyValues.sort(compareFn);
}
this.compareFn = compareFn;
}
return this.keyValues;
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: KeyValuePipe,
deps: [{
token: i0.KeyValueDiffers
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: KeyValuePipe,
isStandalone: true,
name: "keyvalue",
pure: false
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: KeyValuePipe,
decorators: [{
type: Pipe,
args: [{
name: 'keyvalue',
pure: false
}]
}],
ctorParameters: () => [{
type: i0.KeyValueDiffers
}]
});
function defaultComparator(keyValueA, keyValueB) {
const a = keyValueA.key;
const b = keyValueB.key;
if (a === b) return 0;
if (a == null) return 1;
if (b == null) return -1;
if (typeof a == 'string' && typeof b == 'string') {
return a < b ? -1 : 1;
}
if (typeof a == 'number' && typeof b == 'number') {
return a - b;
}
if (typeof a == 'boolean' && typeof b == 'boolean') {
return a < b ? -1 : 1;
}
const aString = String(a);
const bString = String(b);
return aString == bString ? 0 : aString < bString ? -1 : 1;
}
class DecimalPipe {
_locale;
constructor(_locale) {
this._locale = _locale;
}
transform(value, digitsInfo, locale) {
if (!isValue(value)) return null;
locale ||= this._locale;
try {
const num = strToNumber(value);
return formatNumber(num, locale, digitsInfo);
} catch (error) {
throw invalidPipeArgumentError(DecimalPipe, error.message);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: DecimalPipe,
deps: [{
token: LOCALE_ID
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: DecimalPipe,
isStandalone: true,
name: "number"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: DecimalPipe,
decorators: [{
type: Pipe,
args: [{
name: 'number'
}]
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Inject,
args: [LOCALE_ID]
}]
}]
});
class PercentPipe {
_locale;
constructor(_locale) {
this._locale = _locale;
}
transform(value, digitsInfo, locale) {
if (!isValue(value)) return null;
locale ||= this._locale;
try {
const num = strToNumber(value);
return formatPercent(num, locale, digitsInfo);
} catch (error) {
throw invalidPipeArgumentError(PercentPipe, error.message);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: PercentPipe,
deps: [{
token: LOCALE_ID
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: PercentPipe,
isStandalone: true,
name: "percent"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: PercentPipe,
decorators: [{
type: Pipe,
args: [{
name: 'percent'
}]
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Inject,
args: [LOCALE_ID]
}]
}]
});
class CurrencyPipe {
_locale;
_defaultCurrencyCode;
constructor(_locale, _defaultCurrencyCode = 'USD') {
this._locale = _locale;
this._defaultCurrencyCode = _defaultCurrencyCode;
}
transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {
if (!isValue(value)) return null;
locale ||= this._locale;
if (typeof display === 'boolean') {
if (typeof ngDevMode === 'undefined' || ngDevMode) {
console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".`);
}
display = display ? 'symbol' : 'code';
}
let currency = currencyCode || this._defaultCurrencyCode;
if (display !== 'code') {
if (display === 'symbol' || display === 'symbol-narrow') {
currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
} else {
currency = display;
}
}
try {
const num = strToNumber(value);
return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
} catch (error) {
throw invalidPipeArgumentError(CurrencyPipe, error.message);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: CurrencyPipe,
deps: [{
token: LOCALE_ID
}, {
token: DEFAULT_CURRENCY_CODE
}],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: CurrencyPipe,
isStandalone: true,
name: "currency"
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: CurrencyPipe,
decorators: [{
type: Pipe,
args: [{
name: 'currency'
}]
}],
ctorParameters: () => [{
type: undefined,
decorators: [{
type: Inject,
args: [LOCALE_ID]
}]
}, {
type: undefined,
decorators: [{
type: Inject,
args: [DEFAULT_CURRENCY_CODE]
}]
}]
});
function isValue(value) {
return !(value == null || value === '' || value !== value);
}
function strToNumber(value) {
if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
return Number(value);
}
if (typeof value !== 'number') {
throw new _RuntimeError(2309, ngDevMode && `${value} is not a number`);
}
return value;
}
class SlicePipe {
transform(value, start, end) {
if (value == null) return null;
const supports = typeof value === 'string' || Array.isArray(value);
if (!supports) {
throw invalidPipeArgumentError(SlicePipe, value);
}
return value.slice(start, end);
}
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: SlicePipe,
deps: [],
target: i0.ɵɵFactoryTarget.Pipe
});
static ɵpipe = i0.ɵɵngDeclarePipe({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: SlicePipe,
isStandalone: true,
name: "slice",
pure: false
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: SlicePipe,
decorators: [{
type: Pipe,
args: [{
name: 'slice',
pure: false
}]
}]
});
const COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];
class CommonModule {
static ɵfac = i0.ɵɵngDeclareFactory({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: CommonModule,
deps: [],
target: i0.ɵɵFactoryTarget.NgModule
});
static ɵmod = i0.ɵɵngDeclareNgModule({
minVersion: "14.0.0",
version: "21.1.1",
ngImport: i0,
type: CommonModule,
imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],
exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]
});
static ɵinj = i0.ɵɵngDeclareInjector({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: CommonModule
});
}
i0.ɵɵngDeclareClassMetadata({
minVersion: "12.0.0",
version: "21.1.1",
ngImport: i0,
type: CommonModule,
decorators: [{
type: NgModule,
args: [{
imports: [COMMON_DIRECTIVES, COMMON_PIPES],
exports: [COMMON_DIRECTIVES, COMMON_PIPES]
}]
}]
});
export { AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PercentPipe, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits };
//# sourceMappingURL=_common_module-chunk.mjs.map