@bootkit/ng0 0.0.0-alpha.21 → 0.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/index.d.ts +125 -7
- package/components/dropdown/index.d.ts +87 -25
- package/components/list/index.d.ts +138 -45
- package/components/select/index.d.ts +32 -25
- package/data/index.d.ts +25 -122
- package/fesm2022/bootkit-ng0-common.mjs +145 -11
- package/fesm2022/bootkit-ng0-common.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-dropdown.mjs +208 -95
- package/fesm2022/bootkit-ng0-components-dropdown.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-list.mjs +287 -144
- package/fesm2022/bootkit-ng0-components-list.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-select.mjs +168 -236
- package/fesm2022/bootkit-ng0-components-select.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-data.mjs +49 -114
- package/fesm2022/bootkit-ng0-data.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization-locales.mjs +2 -16
- package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization.mjs +42 -44
- package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-routing.mjs +80 -0
- package/fesm2022/bootkit-ng0-routing.mjs.map +1 -0
- package/localization/index.d.ts +29 -23
- package/package.json +9 -5
- package/routing/index.d.ts +124 -0
|
@@ -115,38 +115,27 @@ class Locale {
|
|
|
115
115
|
}
|
|
116
116
|
/**
|
|
117
117
|
* Returns a formatter function by its name and parameters.
|
|
118
|
-
* @param
|
|
119
|
-
* @returns A
|
|
118
|
+
* @param formatterName The format string in the form of "formatterName:param1:param2:..."
|
|
119
|
+
* @returns A ValueFormatterFunction
|
|
120
120
|
*/
|
|
121
|
-
getFormatter(
|
|
122
|
-
let
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return (enumValue) => enumValue?.toString() ?? '';
|
|
140
|
-
}
|
|
141
|
-
return (enumValue) => {
|
|
142
|
-
return this.translateEnum(enumName, enumValue, enumValue?.toString());
|
|
143
|
-
};
|
|
144
|
-
default:
|
|
145
|
-
let customFormatter = this.definition.formatters?.custom?.[name];
|
|
146
|
-
if (customFormatter) {
|
|
147
|
-
return customFormatter;
|
|
148
|
-
}
|
|
149
|
-
throw new Error(`formatter is not defined in locale ${this.definition.name}`);
|
|
121
|
+
getFormatter(formatterName) {
|
|
122
|
+
let formatter = this.definition.formatters?.[formatterName];
|
|
123
|
+
let formatterType = typeof formatter;
|
|
124
|
+
if (!formatter) {
|
|
125
|
+
console.warn(`The formatter "${formatterName}" is not defined in locale ${this.definition.name}`);
|
|
126
|
+
return (value) => value?.toString() || ''; // return a default formatter
|
|
127
|
+
}
|
|
128
|
+
if (formatterType === 'function') {
|
|
129
|
+
return formatter;
|
|
130
|
+
}
|
|
131
|
+
else if (Array.isArray(formatter)) {
|
|
132
|
+
return (value) => formatter[+value]; // use + to cast boolean values to numbers
|
|
133
|
+
}
|
|
134
|
+
else if (formatterType == 'object' && formatter != null) {
|
|
135
|
+
return (value) => formatter[value] || '';
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
throw Error(`Invalid locale formatter: ${formatterName}`);
|
|
150
139
|
}
|
|
151
140
|
}
|
|
152
141
|
}
|
|
@@ -447,26 +436,35 @@ const LOCALE = new InjectionToken('LOCALE');
|
|
|
447
436
|
* @param value The item to format.
|
|
448
437
|
* @returns The formatted string.
|
|
449
438
|
*/
|
|
450
|
-
function
|
|
451
|
-
|
|
452
|
-
return '';
|
|
453
|
-
}
|
|
454
|
-
return value.toString();
|
|
439
|
+
function defaultObjectFormatter(obj) {
|
|
440
|
+
return obj?.toString() || '';
|
|
455
441
|
}
|
|
456
|
-
|
|
442
|
+
/**
|
|
443
|
+
* Creates an object formatter attribute function.
|
|
444
|
+
* The returned function takes a ObjectFormatterLike and returns a ObjectFormatterFunction.
|
|
445
|
+
* If the input is a function, it is returned as is.
|
|
446
|
+
* If the input is a string starting with '@', it returns a function that retrieves the corresponding property from the item.
|
|
447
|
+
* If the input is a string representing a locale format, it uses the provided locale to get the appropriate formatter.
|
|
448
|
+
* If no locale is provided and a locale format string is used, an error is thrown.
|
|
449
|
+
* @param locale Optional locale object for locale-based formatting.
|
|
450
|
+
* @returns A function that takes a ValueFormatterLike and returns a ValueFormatterFunction.
|
|
451
|
+
*/
|
|
452
|
+
function objectFormatterAttribute(locale) {
|
|
457
453
|
return (v) => {
|
|
458
454
|
if (typeof v === 'function')
|
|
459
455
|
return v;
|
|
460
456
|
else if (typeof v === 'string') {
|
|
461
|
-
if (v.startsWith('
|
|
462
|
-
|
|
463
|
-
return (item, ...options) => item?.[fieldName]?.toString() ?? '';
|
|
464
|
-
}
|
|
465
|
-
else {
|
|
457
|
+
if (v.startsWith('@')) {
|
|
458
|
+
// Locale-based formatting
|
|
466
459
|
if (locale == null) {
|
|
467
460
|
throw Error('For using locale value formatters, provide a locale object.');
|
|
468
461
|
}
|
|
469
|
-
|
|
462
|
+
let formatterName = v.substring(1);
|
|
463
|
+
return locale.getFormatter(formatterName);
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
// Field-based formatting
|
|
467
|
+
return (item) => item?.[v]?.toString() ?? '';
|
|
470
468
|
}
|
|
471
469
|
}
|
|
472
470
|
throw Error('invalid value');
|
|
@@ -477,5 +475,5 @@ function ValueFormatterAttribute(locale) {
|
|
|
477
475
|
* Generated bundle index. Do not edit.
|
|
478
476
|
*/
|
|
479
477
|
|
|
480
|
-
export { DatePipe, LOCALE, Locale, LocalizationModule, LocalizationService, LocalizeBooleanPipe, LocalizeDatePipe, LocalizeEnumPipe, LocalizePipe, TranslateBooleanPipe, TranslateEnumPipe, TranslatePipe,
|
|
478
|
+
export { DatePipe, LOCALE, Locale, LocalizationModule, LocalizationService, LocalizeBooleanPipe, LocalizeDatePipe, LocalizeEnumPipe, LocalizePipe, TranslateBooleanPipe, TranslateEnumPipe, TranslatePipe, defaultObjectFormatter, objectFormatterAttribute };
|
|
481
479
|
//# sourceMappingURL=bootkit-ng0-localization.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/locale-definition.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/translate-enum.pipe.ts","../../../projects/ng0/localization/translate-boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localize.pipe.ts","../../../projects/ng0/localization/localize-enum.pipe.ts","../../../projects/ng0/localization/localize-boolean-pipe.ts","../../../projects/ng0/localization/localize-date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/value-formatter.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\r\nimport { TranslatedValidationError } from \"./types\";\r\nimport { ValueFormatterFunction } from \"./value-formatter\";\r\n\r\n/** Locale */\r\nexport class Locale {\r\n constructor(public readonly definition: LocaleDefinition) {\r\n }\r\n\r\n /** \r\n * Returns the name of the locale\r\n * @returns The name of the locale\r\n */\r\n get name(): string {\r\n return this.definition.name;\r\n }\r\n\r\n /** \r\n * Translates a key in the dictionary\r\n * @param key The key to look up\r\n * @param fallback Optional fallback value if the key is not found\r\n * @returns The translated string or the fallbackValue if not found\r\n */\r\n translate(key: string, fallback?: string): string | undefined {\r\n return this.definition.dictionary?.[key] ?? fallback;\r\n }\r\n\r\n /**\r\n * Translates an enum value \r\n * @param enumName The name of the enum \r\n * @param enumValue The value of the enum to translate \r\n * @param fallback\r\n * @returns The translated string or the enum value itself if not found \r\n */\r\n\r\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\r\n let e = this.definition.enums?.[enumName];\r\n\r\n if (!e) {\r\n return fallback || enumValue?.toString();\r\n }\r\n\r\n if (enumValue === null) {\r\n return e['[null]'] || e['[empty]'];\r\n } else if (enumValue === undefined) {\r\n return e['[undefined]'] || e['[empty]'];\r\n } else if (enumValue === '') {\r\n return e['empty'];\r\n } else {\r\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\r\n }\r\n }\r\n\r\n /** \r\n * Translates a form validation error\r\n * @param errorKey The key of the error to translate\r\n * @param error The error object\r\n */\r\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\r\n const errors = this.definition?.form?.validation?.errors;\r\n\r\n if (!errors) {\r\n return fallbackMessage;\r\n }\r\n\r\n const translatorFunc = errors[errorKey] ?? errors['*'];\r\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\r\n }\r\n\r\n /** \r\n * Translates validation errors \r\n * @param errors Validation errors object\r\n * @returns Array of translated validation errors\r\n */\r\n translateErrors(errors: any): TranslatedValidationError[] {\r\n const result: TranslatedValidationError[] = [];\r\n for (const key in errors) {\r\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\r\n result.push({\r\n key: key,\r\n value: errors[key],\r\n text: this.translateError(key, errors[key])\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** \r\n * Translates the first error in the validation errors object \r\n * @param errors Validation errors object\r\n * @returns TranslatedValidationError or undefined if no errors\r\n */\r\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\r\n const keys = Object.keys(errors);\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const key = keys[0];\r\n const value = errors[key];\r\n return {\r\n key,\r\n value,\r\n text: this.translateError(key, value, fallbackMessage)\r\n };\r\n }\r\n\r\n /**\r\n * Clones and extends this object and returns a new Locale (without modifying this object).\r\n */\r\n extend(definition?: Omit<LocaleDefinition, 'name'>): Locale {\r\n return new Locale({ ...this.definition, ...definition });\r\n }\r\n\r\n /**\r\n * \r\n * @param date Date string or timestamp\r\n * @returns Formatted date string based on the locale \r\n */\r\n formatDate(date: Date | string | number, format?: string): string {\r\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\r\n }\r\n\r\n /**\r\n * Returns a formatter function by its name and parameters.\r\n * @param format The format string in the form of \"formatterName:param1:param2:...\"\r\n * @returns A FormatFunction\r\n */\r\n getFormatter(format: string): ValueFormatterFunction {\r\n let parts = format.split(':');\r\n let name: string = parts[0];\r\n let params = parts.length > 1 ? parts.slice(1) : [];\r\n\r\n switch (name) {\r\n case 'boolean':\r\n let booleanKind = params.length > 0 ? params[0] : 'Default';\r\n let f = this.definition.formatters?.boolean?.[booleanKind];\r\n if (!Array.isArray(f)) {\r\n throw new Error(`Boolean formatter is not defined in locale ${this.definition.name}`);\r\n }\r\n\r\n return (value?: boolean) => {\r\n return value === true ? f[0] : (value === false ? f[1] : f[2]);\r\n }\r\n\r\n case 'enum':\r\n let enumName = params[0];\r\n if (!enumName) {\r\n // throw new Error('Enum name is required for enum formatter');\r\n return (enumValue: string | number) => enumValue?.toString() ?? '';\r\n }\r\n\r\n return (enumValue?: string | number | null) => {\r\n return this.translateEnum(enumName, enumValue, enumValue?.toString())!;\r\n }\r\n default:\r\n let customFormatter = this.definition.formatters?.custom?.[name];\r\n if (customFormatter) {\r\n return customFormatter;\r\n }\r\n\r\n throw new Error(`formatter is not defined in locale ${this.definition.name}`);\r\n }\r\n }\r\n}\r\n","import { ValueFormatterFunction } from \"./value-formatter\";\r\n\r\n/** Locale dictionary */\r\nexport type LocaleDictionary = { [key: string]: string; };\r\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\r\n\r\n/** Locale Error Translator */\r\nexport type LocaleValidationErrorTranslator = (error: any) => string;\r\n\r\n\r\n/** Locale validation error translator functions */\r\nexport type LocaleValidationErrorTranslators = {\r\n [key: string]: LocaleValidationErrorTranslator;\r\n};\r\n\r\n/**\r\n * A function to format the paging info of a table.\r\n * \r\n */\r\nexport type TableComponentPagingFormatter = (info: {\r\n /**\r\n * The first record in the current page.\r\n */\r\n firstRecord: number,\r\n\r\n /**\r\n * The last record in the current page.\r\n */\r\n lastRecord: number,\r\n\r\n /**\r\n * The total number of records.\r\n */\r\n totalRecords?: number,\r\n\r\n /**\r\n * The current page index.\r\n */\r\n currentPage: number\r\n}) => string;\r\n\r\n/** \r\n * Locale definition\r\n */\r\nexport interface LocaleDefinition {\r\n /** Locale name */\r\n readonly name: string;\r\n\r\n /** Does this locale belongs to a RTL language */\r\n readonly rtl?: boolean;\r\n\r\n /** Locale dictionary */\r\n dictionary?: LocaleDictionary;\r\n enums?: LocaleEnums,\r\n form?: {\r\n validation?: {\r\n /** Form validation error translators. */\r\n errors?: LocaleValidationErrorTranslators\r\n }\r\n },\r\n data?: {\r\n logicalOperators?: {\r\n [operator: string]: string\r\n }\r\n },\r\n components?: {\r\n table?: {\r\n /**\r\n * No records found message.\r\n */\r\n noRecords?: string;\r\n\r\n /** \r\n * Error message displayed when loading data fails. \r\n */\r\n loadError?: string;\r\n\r\n /**\r\n * A format function to format the paging info.\r\n */\r\n pagingInfo?: TableComponentPagingFormatter;\r\n },\r\n select?: {\r\n placeholder?: string;\r\n }\r\n },\r\n\r\n formatters?: {\r\n boolean?: {\r\n [booleanKind: string]: string[] // [false, true]\r\n },\r\n enum?: {\r\n [enumName: string]: { [enumValue: string]: string }\r\n }\r\n custom?: {\r\n [formatterName: string]: ValueFormatterFunction,\r\n },\r\n // date?: {\r\n // calendars?: {\r\n // [calendar: string]: {\r\n // days: string[],\r\n // daysShort: string[],\r\n // months: string[],\r\n // monthsShort: string[],\r\n // }\r\n // }\r\n // };\r\n // }\r\n }\r\n};\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Locale } from './locale';\r\nimport { LocaleChangeEvent } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizationService {\r\n private _locales: Locale[] = [];\r\n private _activeLocale?: Locale;\r\n private _changeSubject = new Subject<LocaleChangeEvent>();\r\n readonly change = this._changeSubject.asObservable();\r\n\r\n constructor() {\r\n }\r\n\r\n /** \r\n * Adds a Locale \r\n */\r\n add(locale: Locale): void;\r\n /** Adds an array of Locales to this LocaleProvider */\r\n add(locales: Locale[]): void;\r\n add(l: any): void {\r\n if (l instanceof Locale) {\r\n this._locales.push(l);\r\n } else if (Array.isArray(l)) {\r\n l.forEach(x => this.add(x));\r\n } else {\r\n throw Error('Invalid locale');\r\n }\r\n\r\n if (this._locales.length == 1) {\r\n this._activeLocale = this._locales[0];\r\n }\r\n }\r\n\r\n /** Changes the active locale */\r\n set(localeName: string): void {\r\n const locale = this._locales.find(x => x.name === localeName);\r\n if (locale) {\r\n this._changeSubject.next({ old: this._activeLocale, new: locale });\r\n this._activeLocale = locale;\r\n return;\r\n }\r\n\r\n throw Error('Locale not found.');\r\n }\r\n\r\n /** Gets the active locale */\r\n get(): Locale | undefined {\r\n return this._activeLocale;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n\r\n/**\r\n * Pipe to translate a dictionary key into a localized string.\r\n * It uses the LocalizationService to fetch the translation.\r\n * If the translation is not found, it returns the fallback string if provided.\r\n */\r\n@Pipe({\r\n name: 'ng0Translate',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(dictionaryKey: string, fallback?: string) {\r\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0TranslateEnum',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslateEnumPipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n /**\r\n * \r\n * @param enumValue \r\n * @param enumName \r\n * @param nullValueKey \r\n * @param returnEnumAsFallback\r\n * @param fallbackKey \r\n * @returns \r\n */\r\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\r\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0TranslateBool',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslateBooleanPipe implements PipeTransform {\r\n\r\n constructor(private localeProvider: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\r\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Date',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class DatePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(value: Date | string | number, format?: string) {\r\n return this._ls.get()?.formatDate(value, format);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Localize',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(dictionaryKey: string) {\r\n return this._ls.get()?.translate(dictionaryKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeEnum',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeEnumPipe implements PipeTransform {\r\n private _recompute = true;\r\n private _value?: string;\r\n\r\n constructor(private _ls: LocalizationService) {\r\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\r\n }\r\n\r\n /**\r\n * \r\n * @param enumValue \r\n * @param enumName \r\n * @param nullValueKey \r\n * @param returnEnumAsFallback\r\n * @param fallbackKey \r\n * @returns \r\n */\r\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\r\n if (this._recompute) {\r\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeBool',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeBooleanPipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey = 'true', trueKey: 'false') {\r\n return this._ls.get()?.translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Locale } from './locale';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeDate',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeDatePipe implements PipeTransform {\r\n private _value?: string;\r\n private _recompute = true;\r\n\r\n constructor(private _ls: LocalizationService) {\r\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\r\n }\r\n\r\n transform(value: number | string, format?: string) {\r\n if (this._recompute) {\r\n this._value = this._ls.get()?.formatDate(value, format);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { TranslatePipe } from './translate.pipe';\r\nimport { TranslateEnumPipe } from './translate-enum.pipe';\r\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\r\nimport { DatePipe } from './date.pipe';\r\nimport { LocalizePipe } from './localize.pipe';\r\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\r\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\r\nimport { LocalizeDatePipe } from './localize-date.pipe';\r\n\r\nconst Declares = [\r\n // Pure pipes\r\n TranslatePipe,\r\n TranslateEnumPipe,\r\n TranslateBooleanPipe,\r\n DatePipe,\r\n\r\n // Impure pipes\r\n LocalizePipe,\r\n LocalizeEnumPipe,\r\n LocalizeBooleanPipe,\r\n LocalizeDatePipe\r\n];\r\n\r\n@NgModule({\r\n imports: Declares,\r\n exports: Declares\r\n})\r\nexport class LocalizationModule {\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\n\r\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\r\n\r\nexport interface TranslatedValidationError {\r\n /** Error key */\r\n key: string;\r\n \r\n /** Error object */\r\n value: any;\r\n \r\n /** localized error text */\r\n text?: string;\r\n }\r\n \r\n export interface LocaleChangeEvent {\r\n old?: Locale;\r\n new: Locale;\r\n }\r\n ","import { Locale } from \"./locale\";\r\n\r\n/**\r\n * Format function type.\r\n * @param item The item to format.\r\n * @returns The formatted string.\r\n */\r\nexport type ValueFormatterFunction = (value: any, ...options: any[]) => string;\r\n\r\nexport type ValueFormatterLike = ValueFormatterFunction | string;\r\n\r\n/**\r\n * Default format function.\r\n * @param value The item to format.\r\n * @returns The formatted string.\r\n */\r\nexport function defaultValueFormatter(value: any): string {\r\n if (value == null) {\r\n return '';\r\n }\r\n\r\n return value.toString();\r\n}\r\n\r\nexport function ValueFormatterAttribute\r\n (locale?: Locale): ((v: ValueFormatterLike) => ValueFormatterFunction) {\r\n return (v) => {\r\n if (typeof v === 'function')\r\n return v;\r\n else if (typeof v === 'string') {\r\n if (v.startsWith('field:')) {\r\n let fieldName = v.substring(6);\r\n return (item: any, ...options: any[]) => (item?.[fieldName]?.toString() as string) ?? '';\r\n } else {\r\n if (locale == null) {\r\n throw Error('For using locale value formatters, provide a locale object.')\r\n }\r\n\r\n return locale.getFormatter(v);\r\n }\r\n }\r\n\r\n throw Error('invalid value');\r\n }\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/locale-definition.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/translate-enum.pipe.ts","../../../projects/ng0/localization/translate-boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localize.pipe.ts","../../../projects/ng0/localization/localize-enum.pipe.ts","../../../projects/ng0/localization/localize-boolean-pipe.ts","../../../projects/ng0/localization/localize-date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/value-formatter.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\r\nimport { TranslatedValidationError } from \"./types\";\r\nimport { ObjectFormatter } from \"./value-formatter\";\r\n\r\n/** Locale */\r\nexport class Locale {\r\n constructor(public readonly definition: LocaleDefinition) {\r\n }\r\n\r\n /** \r\n * Returns the name of the locale\r\n * @returns The name of the locale\r\n */\r\n get name(): string {\r\n return this.definition.name;\r\n }\r\n\r\n /** \r\n * Translates a key in the dictionary\r\n * @param key The key to look up\r\n * @param fallback Optional fallback value if the key is not found\r\n * @returns The translated string or the fallbackValue if not found\r\n */\r\n translate(key: string, fallback?: string): string | undefined {\r\n return this.definition.dictionary?.[key] ?? fallback;\r\n }\r\n\r\n /**\r\n * Translates an enum value \r\n * @param enumName The name of the enum \r\n * @param enumValue The value of the enum to translate \r\n * @param fallback\r\n * @returns The translated string or the enum value itself if not found \r\n */\r\n\r\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\r\n let e = this.definition.enums?.[enumName];\r\n\r\n if (!e) {\r\n return fallback || enumValue?.toString();\r\n }\r\n\r\n if (enumValue === null) {\r\n return e['[null]'] || e['[empty]'];\r\n } else if (enumValue === undefined) {\r\n return e['[undefined]'] || e['[empty]'];\r\n } else if (enumValue === '') {\r\n return e['empty'];\r\n } else {\r\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\r\n }\r\n }\r\n\r\n /** \r\n * Translates a form validation error\r\n * @param errorKey The key of the error to translate\r\n * @param error The error object\r\n */\r\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\r\n const errors = this.definition?.form?.validation?.errors;\r\n\r\n if (!errors) {\r\n return fallbackMessage;\r\n }\r\n\r\n const translatorFunc = errors[errorKey] ?? errors['*'];\r\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\r\n }\r\n\r\n /** \r\n * Translates validation errors \r\n * @param errors Validation errors object\r\n * @returns Array of translated validation errors\r\n */\r\n translateErrors(errors: any): TranslatedValidationError[] {\r\n const result: TranslatedValidationError[] = [];\r\n for (const key in errors) {\r\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\r\n result.push({\r\n key: key,\r\n value: errors[key],\r\n text: this.translateError(key, errors[key])\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** \r\n * Translates the first error in the validation errors object \r\n * @param errors Validation errors object\r\n * @returns TranslatedValidationError or undefined if no errors\r\n */\r\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\r\n const keys = Object.keys(errors);\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const key = keys[0];\r\n const value = errors[key];\r\n return {\r\n key,\r\n value,\r\n text: this.translateError(key, value, fallbackMessage)\r\n };\r\n }\r\n\r\n /**\r\n * Clones and extends this object and returns a new Locale (without modifying this object).\r\n */\r\n extend(definition?: Omit<LocaleDefinition, 'name' | 'rtl'>): Locale {\r\n return new Locale({ ...this.definition, ...definition });\r\n }\r\n\r\n /**\r\n * \r\n * @param date Date string or timestamp\r\n * @returns Formatted date string based on the locale \r\n */\r\n formatDate(date: Date | string | number, format?: string): string {\r\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\r\n }\r\n\r\n /**\r\n * Returns a formatter function by its name and parameters.\r\n * @param formatterName The format string in the form of \"formatterName:param1:param2:...\"\r\n * @returns A ValueFormatterFunction\r\n */\r\n getFormatter(formatterName: string): ObjectFormatter {\r\n let formatter = this.definition.formatters?.[formatterName];\r\n let formatterType = typeof formatter;\r\n\r\n if (!formatter) {\r\n console.warn(`The formatter \"${formatterName}\" is not defined in locale ${this.definition.name}`);\r\n return (value) => value?.toString() || '' // return a default formatter\r\n }\r\n\r\n if (formatterType === 'function') {\r\n return formatter as ObjectFormatter;\r\n } else if (Array.isArray(formatter)) {\r\n return (value: number | boolean) => formatter[+value]; // use + to cast boolean values to numbers\r\n } else if (formatterType == 'object' && formatter != null) {\r\n return (value: string) => (formatter as any)[value] || ''\r\n } else {\r\n throw Error(`Invalid locale formatter: ${formatterName}`);\r\n }\r\n }\r\n}\r\n","import { ObjectFormatter } from \"./value-formatter\";\r\n\r\n/** Locale dictionary */\r\nexport type LocaleDictionary = { [key: string]: string; };\r\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\r\n\r\n/** Locale Error Translator */\r\nexport type LocaleValidationErrorTranslator = (error: any) => string;\r\n\r\n\r\n/** Locale validation error translator functions */\r\nexport type LocaleValidationErrorTranslators = {\r\n [key: string]: LocaleValidationErrorTranslator;\r\n};\r\n\r\n/**\r\n * A function to format the paging info of a table.\r\n * \r\n */\r\nexport type TableComponentPagingFormatter = (info: {\r\n /**\r\n * The first record in the current page.\r\n */\r\n firstRecord: number,\r\n\r\n /**\r\n * The last record in the current page.\r\n */\r\n lastRecord: number,\r\n\r\n /**\r\n * The total number of records.\r\n */\r\n totalRecords?: number,\r\n\r\n /**\r\n * The current page index.\r\n */\r\n currentPage: number\r\n}) => string;\r\n\r\n/** \r\n * Locale definition\r\n */\r\nexport interface LocaleDefinition {\r\n /** Locale name */\r\n readonly name: string;\r\n\r\n /** Does this locale belongs to a RTL language */\r\n readonly rtl?: boolean;\r\n\r\n /** Locale dictionary */\r\n dictionary?: LocaleDictionary;\r\n enums?: LocaleEnums,\r\n form?: {\r\n validation?: {\r\n /** Form validation error translators. */\r\n errors?: LocaleValidationErrorTranslators\r\n }\r\n },\r\n data?: {\r\n logicalOperators?: {\r\n [operator: string]: string\r\n }\r\n },\r\n components?: {\r\n table?: {\r\n /**\r\n * No records found message.\r\n */\r\n noRecords?: string;\r\n\r\n /** \r\n * Error message displayed when loading data fails. \r\n */\r\n loadError?: string;\r\n\r\n /**\r\n * A format function to format the paging info.\r\n */\r\n pagingInfo?: TableComponentPagingFormatter;\r\n },\r\n select?: {\r\n placeholder?: string;\r\n }\r\n },\r\n\r\n formatters?: {\r\n // boolean?: {\r\n // [booleanKind: string]: string[] // [false, true]\r\n // },\r\n // enum?: {\r\n // [enumName: string]: { [enumValue: string]: string }\r\n // }\r\n // custom?: {\r\n [formatterName: string]: ObjectFormatter | string[] | {\r\n [value: string]: string\r\n }\r\n // },\r\n // date?: {\r\n // calendars?: {\r\n // [calendar: string]: {\r\n // days: string[],\r\n // daysShort: string[],\r\n // months: string[],\r\n // monthsShort: string[],\r\n // }\r\n // }\r\n // };\r\n // }\r\n }\r\n};\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Locale } from './locale';\r\nimport { LocaleChangeEvent } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizationService {\r\n private _locales: Locale[] = [];\r\n private _activeLocale?: Locale;\r\n private _changeSubject = new Subject<LocaleChangeEvent>();\r\n readonly change = this._changeSubject.asObservable();\r\n\r\n constructor() {\r\n }\r\n\r\n /** \r\n * Adds a Locale \r\n */\r\n add(locale: Locale): void;\r\n /** Adds an array of Locales to this LocaleProvider */\r\n add(locales: Locale[]): void;\r\n add(l: any): void {\r\n if (l instanceof Locale) {\r\n this._locales.push(l);\r\n } else if (Array.isArray(l)) {\r\n l.forEach(x => this.add(x));\r\n } else {\r\n throw Error('Invalid locale');\r\n }\r\n\r\n if (this._locales.length == 1) {\r\n this._activeLocale = this._locales[0];\r\n }\r\n }\r\n\r\n /** Changes the active locale */\r\n set(localeName: string): void {\r\n const locale = this._locales.find(x => x.name === localeName);\r\n if (locale) {\r\n this._changeSubject.next({ old: this._activeLocale, new: locale });\r\n this._activeLocale = locale;\r\n return;\r\n }\r\n\r\n throw Error('Locale not found.');\r\n }\r\n\r\n /** Gets the active locale */\r\n get(): Locale | undefined {\r\n return this._activeLocale;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n\r\n/**\r\n * Pipe to translate a dictionary key into a localized string.\r\n * It uses the LocalizationService to fetch the translation.\r\n * If the translation is not found, it returns the fallback string if provided.\r\n */\r\n@Pipe({\r\n name: 'ng0Translate',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(dictionaryKey: string, fallback?: string) {\r\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0TranslateEnum',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslateEnumPipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n /**\r\n * \r\n * @param enumValue \r\n * @param enumName \r\n * @param nullValueKey \r\n * @param returnEnumAsFallback\r\n * @param fallbackKey \r\n * @returns \r\n */\r\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\r\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0TranslateBool',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class TranslateBooleanPipe implements PipeTransform {\r\n\r\n constructor(private localeProvider: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\r\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Date',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class DatePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(value: Date | string | number, format?: string) {\r\n return this._ls.get()?.formatDate(value, format);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Localize',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizePipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(dictionaryKey: string) {\r\n return this._ls.get()?.translate(dictionaryKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeEnum',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeEnumPipe implements PipeTransform {\r\n private _recompute = true;\r\n private _value?: string;\r\n\r\n constructor(private _ls: LocalizationService) {\r\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\r\n }\r\n\r\n /**\r\n * \r\n * @param enumValue \r\n * @param enumName \r\n * @param nullValueKey \r\n * @param returnEnumAsFallback\r\n * @param fallbackKey \r\n * @returns \r\n */\r\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\r\n if (this._recompute) {\r\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeBool',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeBooleanPipe implements PipeTransform {\r\n constructor(private _ls: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey = 'true', trueKey: 'false') {\r\n return this._ls.get()?.translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Locale } from './locale';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0LocalizeDate',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class LocalizeDatePipe implements PipeTransform {\r\n private _value?: string;\r\n private _recompute = true;\r\n\r\n constructor(private _ls: LocalizationService) {\r\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\r\n }\r\n\r\n transform(value: number | string, format?: string) {\r\n if (this._recompute) {\r\n this._value = this._ls.get()?.formatDate(value, format);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { TranslatePipe } from './translate.pipe';\r\nimport { TranslateEnumPipe } from './translate-enum.pipe';\r\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\r\nimport { DatePipe } from './date.pipe';\r\nimport { LocalizePipe } from './localize.pipe';\r\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\r\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\r\nimport { LocalizeDatePipe } from './localize-date.pipe';\r\n\r\nconst Declares = [\r\n // Pure pipes\r\n TranslatePipe,\r\n TranslateEnumPipe,\r\n TranslateBooleanPipe,\r\n DatePipe,\r\n\r\n // Impure pipes\r\n LocalizePipe,\r\n LocalizeEnumPipe,\r\n LocalizeBooleanPipe,\r\n LocalizeDatePipe\r\n];\r\n\r\n@NgModule({\r\n imports: Declares,\r\n exports: Declares\r\n})\r\nexport class LocalizationModule {\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\n\r\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\r\n\r\nexport interface TranslatedValidationError {\r\n /** Error key */\r\n key: string;\r\n \r\n /** Error object */\r\n value: any;\r\n \r\n /** localized error text */\r\n text?: string;\r\n }\r\n \r\n export interface LocaleChangeEvent {\r\n old?: Locale;\r\n new: Locale;\r\n }\r\n ","import { Locale } from \"./locale\";\r\n\r\n/**\r\n * Object formatter function type.\r\n * @param obj The object to format.\r\n * @param options Additional options for formatting.\r\n * @returns The formatted value.\r\n */\r\nexport type ObjectFormatter = (obj: any, ...options: any[]) => string;\r\n\r\n/**\r\n * ObjectFormatterLike \r\n */\r\nexport type ObjectFormatterLike = ObjectFormatter | string;\r\n\r\n/**\r\n * Default format function.\r\n * @param value The item to format.\r\n * @returns The formatted string.\r\n */\r\nexport function defaultObjectFormatter(obj: any): string {\r\n return obj?.toString() || '';\r\n}\r\n\r\n/**\r\n * Creates an object formatter attribute function.\r\n * The returned function takes a ObjectFormatterLike and returns a ObjectFormatterFunction.\r\n * If the input is a function, it is returned as is.\r\n * If the input is a string starting with '@', it returns a function that retrieves the corresponding property from the item.\r\n * If the input is a string representing a locale format, it uses the provided locale to get the appropriate formatter.\r\n * If no locale is provided and a locale format string is used, an error is thrown.\r\n * @param locale Optional locale object for locale-based formatting.\r\n * @returns A function that takes a ValueFormatterLike and returns a ValueFormatterFunction.\r\n */\r\nexport function objectFormatterAttribute(locale?: Locale): ((v: ObjectFormatterLike) => ObjectFormatter) {\r\n return (v) => {\r\n if (typeof v === 'function')\r\n return v;\r\n else if (typeof v === 'string') {\r\n if (v.startsWith('@')) {\r\n // Locale-based formatting\r\n if (locale == null) {\r\n throw Error('For using locale value formatters, provide a locale object.')\r\n }\r\n let formatterName = v.substring(1);\r\n return locale.getFormatter(formatterName);\r\n } else {\r\n // Field-based formatting\r\n return (item: any) => (item?.[v]?.toString() as string) ?? '';\r\n }\r\n }\r\n\r\n throw Error('invalid value');\r\n }\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
4
|
+
import { filter, map } from 'rxjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Service to interact with Angular Router.
|
|
8
|
+
*/
|
|
9
|
+
class RouterService {
|
|
10
|
+
_router = inject(Router);
|
|
11
|
+
/**
|
|
12
|
+
* Get activated route tree.
|
|
13
|
+
* @param outlets List of outlets to include, default is ['primary']
|
|
14
|
+
* @returns Observable of the activated route tree
|
|
15
|
+
*/
|
|
16
|
+
getActivatedRouteTree(outlets = ['primary']) {
|
|
17
|
+
return this._router.events.pipe(filter(x => x instanceof NavigationEnd), map(e => {
|
|
18
|
+
let { root } = this._router.routerState.snapshot;
|
|
19
|
+
return this._mapRoute(root, outlets);
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get activated routes as a flat array from root to the deepest child for a specific outlet.
|
|
24
|
+
* @param outlet The outlet to include, default is 'primary'
|
|
25
|
+
* @returns Observable of the activated routes array
|
|
26
|
+
*/
|
|
27
|
+
getActivatedRoutes(outlet = 'primary') {
|
|
28
|
+
return this.getActivatedRouteTree([outlet]).pipe(map(root => {
|
|
29
|
+
let result = [];
|
|
30
|
+
do {
|
|
31
|
+
result.push(root);
|
|
32
|
+
root = root?.children[0];
|
|
33
|
+
} while (root !== undefined);
|
|
34
|
+
return result;
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Map a route to RouterRouteSnapshot
|
|
39
|
+
* @param route The route to map
|
|
40
|
+
* @param outlets The outlets to include
|
|
41
|
+
* @returns The mapped RouterRouteSnapshot
|
|
42
|
+
*/
|
|
43
|
+
_mapRoute(route, outlets) {
|
|
44
|
+
let configData = route.routeConfig?.data;
|
|
45
|
+
let title;
|
|
46
|
+
if (route.title && route.routeConfig?.title)
|
|
47
|
+
// Route is resolved by Angular.
|
|
48
|
+
title = route.title;
|
|
49
|
+
else if (configData?.title) {
|
|
50
|
+
title = typeof configData.title === 'function' ?
|
|
51
|
+
configData.title(route, this._router.routerState.snapshot) :
|
|
52
|
+
configData.title;
|
|
53
|
+
}
|
|
54
|
+
let link = configData?.routerLink;
|
|
55
|
+
if (typeof link === 'function') {
|
|
56
|
+
link = link(route, this._router.routerState.snapshot);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
route: route,
|
|
60
|
+
title,
|
|
61
|
+
routerLink: link,
|
|
62
|
+
children: route.children
|
|
63
|
+
.filter(x => outlets.includes(x.outlet))
|
|
64
|
+
.map(x => this._mapRoute(x, outlets))
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
68
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterService, providedIn: 'root' });
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterService, decorators: [{
|
|
71
|
+
type: Injectable,
|
|
72
|
+
args: [{ providedIn: 'root' }]
|
|
73
|
+
}] });
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Generated bundle index. Do not edit.
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
export { RouterService };
|
|
80
|
+
//# sourceMappingURL=bootkit-ng0-routing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-routing.mjs","sources":["../../../projects/ng0/routing/router.service.ts","../../../projects/ng0/routing/bootkit-ng0-routing.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\r\nimport { filter, map, Observable } from 'rxjs';\r\nimport { RouteData, RouterLinkValueResolver, RouterActivatedRouteSnapshot, RouteTitleResolver } from './types';\r\n\r\n/**\r\n * Service to interact with Angular Router.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class RouterService {\r\n private readonly _router = inject(Router);\r\n\r\n /**\r\n * Get activated route tree.\r\n * @param outlets List of outlets to include, default is ['primary']\r\n * @returns Observable of the activated route tree\r\n */\r\n public getActivatedRouteTree(outlets: string[] = ['primary']): Observable<RouterActivatedRouteSnapshot> {\r\n return this._router.events.pipe(\r\n filter(x => x instanceof NavigationEnd),\r\n map(e => {\r\n let { root } = this._router.routerState.snapshot;\r\n return this._mapRoute(root, outlets);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get activated routes as a flat array from root to the deepest child for a specific outlet.\r\n * @param outlet The outlet to include, default is 'primary'\r\n * @returns Observable of the activated routes array\r\n */\r\n public getActivatedRoutes(outlet = 'primary'): Observable<RouterActivatedRouteSnapshot[]> {\r\n return this.getActivatedRouteTree([outlet]).pipe(\r\n map(root => {\r\n let result: RouterActivatedRouteSnapshot[] = [];\r\n \r\n do {\r\n result.push(root);\r\n root = root?.children[0];\r\n } while (root !== undefined);\r\n\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Map a route to RouterRouteSnapshot\r\n * @param route The route to map\r\n * @param outlets The outlets to include\r\n * @returns The mapped RouterRouteSnapshot\r\n */\r\n private _mapRoute(route: ActivatedRouteSnapshot, outlets: string[]): RouterActivatedRouteSnapshot {\r\n let configData = route.routeConfig?.data as RouteData | undefined;\r\n let title: string | undefined;\r\n \r\n if(route.title && route.routeConfig?.title)\r\n // Route is resolved by Angular.\r\n title = route.title;\r\n else if (configData?.title) {\r\n title = typeof configData.title === 'function' ?\r\n (configData.title as RouteTitleResolver)(route, this._router.routerState.snapshot) :\r\n configData.title;\r\n }\r\n\r\n let link = configData?.routerLink;\r\n if (typeof link === 'function') {\r\n link = (link as RouterLinkValueResolver)(route, this._router.routerState.snapshot);\r\n }\r\n\r\n return {\r\n route: route,\r\n title,\r\n routerLink: link,\r\n children: route.children\r\n .filter(x => outlets.includes(x.outlet))\r\n .map(x => this._mapRoute(x, outlets))\r\n } as RouterActivatedRouteSnapshot;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAKA;;AAEG;MAEU,aAAa,CAAA;AACP,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAEzC;;;;AAIG;AACI,IAAA,qBAAqB,CAAC,OAAA,GAAoB,CAAC,SAAS,CAAC,EAAA;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAC7B,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC,EACvC,GAAG,CAAC,CAAC,IAAG;YACN,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;QACtC,CAAC,CAAC,CACH;IACH;AAEA;;;;AAIG;IACI,kBAAkB,CAAC,MAAM,GAAG,SAAS,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,IAAI,IAAG;YACT,IAAI,MAAM,GAAmC,EAAE;AAE/C,YAAA,GAAG;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACjB,gBAAA,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,QAAQ,IAAI,KAAK,SAAS;AAE3B,YAAA,OAAO,MAAM;QACf,CAAC,CAAC,CACH;IACH;AAEA;;;;;AAKG;IACK,SAAS,CAAC,KAA6B,EAAE,OAAiB,EAAA;AAChE,QAAA,IAAI,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,IAA6B;AACjE,QAAA,IAAI,KAAyB;QAE7B,IAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK;;AAExC,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK;AAChB,aAAA,IAAI,UAAU,EAAE,KAAK,EAAE;YAC1B,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU;AAC5C,gBAAA,UAAU,CAAC,KAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAClF,UAAU,CAAC,KAAK;QACnB;AAEA,QAAA,IAAI,IAAI,GAAG,UAAU,EAAE,UAAU;AACjC,QAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,YAAA,IAAI,GAAI,IAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;QACpF;QAEA,OAAO;AACL,YAAA,KAAK,EAAE,KAAK;YACZ,KAAK;AACL,YAAA,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC;AACb,iBAAA,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,iBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;SACP;IACnC;uGAtEW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACRlC;;AAEG;;;;"}
|
package/localization/index.d.ts
CHANGED
|
@@ -3,19 +3,33 @@ import { InjectionToken, PipeTransform } from '@angular/core';
|
|
|
3
3
|
import * as rxjs from 'rxjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @param
|
|
8
|
-
* @
|
|
6
|
+
* Object formatter function type.
|
|
7
|
+
* @param obj The object to format.
|
|
8
|
+
* @param options Additional options for formatting.
|
|
9
|
+
* @returns The formatted value.
|
|
10
|
+
*/
|
|
11
|
+
type ObjectFormatter = (obj: any, ...options: any[]) => string;
|
|
12
|
+
/**
|
|
13
|
+
* ObjectFormatterLike
|
|
9
14
|
*/
|
|
10
|
-
type
|
|
11
|
-
type ValueFormatterLike = ValueFormatterFunction | string;
|
|
15
|
+
type ObjectFormatterLike = ObjectFormatter | string;
|
|
12
16
|
/**
|
|
13
17
|
* Default format function.
|
|
14
18
|
* @param value The item to format.
|
|
15
19
|
* @returns The formatted string.
|
|
16
20
|
*/
|
|
17
|
-
declare function
|
|
18
|
-
|
|
21
|
+
declare function defaultObjectFormatter(obj: any): string;
|
|
22
|
+
/**
|
|
23
|
+
* Creates an object formatter attribute function.
|
|
24
|
+
* The returned function takes a ObjectFormatterLike and returns a ObjectFormatterFunction.
|
|
25
|
+
* If the input is a function, it is returned as is.
|
|
26
|
+
* If the input is a string starting with '@', it returns a function that retrieves the corresponding property from the item.
|
|
27
|
+
* If the input is a string representing a locale format, it uses the provided locale to get the appropriate formatter.
|
|
28
|
+
* If no locale is provided and a locale format string is used, an error is thrown.
|
|
29
|
+
* @param locale Optional locale object for locale-based formatting.
|
|
30
|
+
* @returns A function that takes a ValueFormatterLike and returns a ValueFormatterFunction.
|
|
31
|
+
*/
|
|
32
|
+
declare function objectFormatterAttribute(locale?: Locale): ((v: ObjectFormatterLike) => ObjectFormatter);
|
|
19
33
|
|
|
20
34
|
/** Locale dictionary */
|
|
21
35
|
type LocaleDictionary = {
|
|
@@ -96,16 +110,8 @@ interface LocaleDefinition {
|
|
|
96
110
|
};
|
|
97
111
|
};
|
|
98
112
|
formatters?: {
|
|
99
|
-
|
|
100
|
-
[
|
|
101
|
-
};
|
|
102
|
-
enum?: {
|
|
103
|
-
[enumName: string]: {
|
|
104
|
-
[enumValue: string]: string;
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
custom?: {
|
|
108
|
-
[formatterName: string]: ValueFormatterFunction;
|
|
113
|
+
[formatterName: string]: ObjectFormatter | string[] | {
|
|
114
|
+
[value: string]: string;
|
|
109
115
|
};
|
|
110
116
|
};
|
|
111
117
|
}
|
|
@@ -189,7 +195,7 @@ declare class Locale {
|
|
|
189
195
|
/**
|
|
190
196
|
* Clones and extends this object and returns a new Locale (without modifying this object).
|
|
191
197
|
*/
|
|
192
|
-
extend(definition?: Omit<LocaleDefinition, 'name'>): Locale;
|
|
198
|
+
extend(definition?: Omit<LocaleDefinition, 'name' | 'rtl'>): Locale;
|
|
193
199
|
/**
|
|
194
200
|
*
|
|
195
201
|
* @param date Date string or timestamp
|
|
@@ -198,10 +204,10 @@ declare class Locale {
|
|
|
198
204
|
formatDate(date: Date | string | number, format?: string): string;
|
|
199
205
|
/**
|
|
200
206
|
* Returns a formatter function by its name and parameters.
|
|
201
|
-
* @param
|
|
202
|
-
* @returns A
|
|
207
|
+
* @param formatterName The format string in the form of "formatterName:param1:param2:..."
|
|
208
|
+
* @returns A ValueFormatterFunction
|
|
203
209
|
*/
|
|
204
|
-
getFormatter(
|
|
210
|
+
getFormatter(formatterName: string): ObjectFormatter;
|
|
205
211
|
}
|
|
206
212
|
|
|
207
213
|
/**
|
|
@@ -301,5 +307,5 @@ declare class LocalizationModule {
|
|
|
301
307
|
static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationModule>;
|
|
302
308
|
}
|
|
303
309
|
|
|
304
|
-
export { DatePipe, LOCALE, Locale, LocalizationModule, LocalizationService, LocalizeBooleanPipe, LocalizeDatePipe, LocalizeEnumPipe, LocalizePipe, TranslateBooleanPipe, TranslateEnumPipe, TranslatePipe,
|
|
305
|
-
export type { LocaleChangeEvent, LocaleDefinition, LocaleDictionary, LocaleEnums, LocaleValidationErrorTranslator, LocaleValidationErrorTranslators,
|
|
310
|
+
export { DatePipe, LOCALE, Locale, LocalizationModule, LocalizationService, LocalizeBooleanPipe, LocalizeDatePipe, LocalizeEnumPipe, LocalizePipe, TranslateBooleanPipe, TranslateEnumPipe, TranslatePipe, defaultObjectFormatter, objectFormatterAttribute };
|
|
311
|
+
export type { LocaleChangeEvent, LocaleDefinition, LocaleDictionary, LocaleEnums, LocaleValidationErrorTranslator, LocaleValidationErrorTranslators, ObjectFormatter, ObjectFormatterLike, TableComponentPagingFormatter, TranslatedValidationError };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bootkit/ng0",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.23",
|
|
4
4
|
"description": "Angular+Bootstrap Component Library",
|
|
5
5
|
"homepage": "https://bootkitlib.github.io/",
|
|
6
6
|
"author": "BootKit",
|
|
@@ -63,6 +63,10 @@
|
|
|
63
63
|
"types": "./localization/index.d.ts",
|
|
64
64
|
"default": "./fesm2022/bootkit-ng0-localization.mjs"
|
|
65
65
|
},
|
|
66
|
+
"./routing": {
|
|
67
|
+
"types": "./routing/index.d.ts",
|
|
68
|
+
"default": "./fesm2022/bootkit-ng0-routing.mjs"
|
|
69
|
+
},
|
|
66
70
|
"./script": {
|
|
67
71
|
"types": "./script/index.d.ts",
|
|
68
72
|
"default": "./fesm2022/bootkit-ng0-script.mjs"
|
|
@@ -75,14 +79,14 @@
|
|
|
75
79
|
"types": "./components/accordion/index.d.ts",
|
|
76
80
|
"default": "./fesm2022/bootkit-ng0-components-accordion.mjs"
|
|
77
81
|
},
|
|
78
|
-
"./components/button": {
|
|
79
|
-
"types": "./components/button/index.d.ts",
|
|
80
|
-
"default": "./fesm2022/bootkit-ng0-components-button.mjs"
|
|
81
|
-
},
|
|
82
82
|
"./components/backdrop": {
|
|
83
83
|
"types": "./components/backdrop/index.d.ts",
|
|
84
84
|
"default": "./fesm2022/bootkit-ng0-components-backdrop.mjs"
|
|
85
85
|
},
|
|
86
|
+
"./components/button": {
|
|
87
|
+
"types": "./components/button/index.d.ts",
|
|
88
|
+
"default": "./fesm2022/bootkit-ng0-components-button.mjs"
|
|
89
|
+
},
|
|
86
90
|
"./components/card": {
|
|
87
91
|
"types": "./components/card/index.d.ts",
|
|
88
92
|
"default": "./fesm2022/bootkit-ng0-components-card.mjs"
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { ActivatedRouteSnapshot, UrlTree, RouterStateSnapshot, Route as Route$1 } from '@angular/router';
|
|
3
|
+
import { ClaimLike } from '@bootkit/ng0/common';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A function that resolves a title from the route and router state
|
|
8
|
+
*/
|
|
9
|
+
type RouteTitleResolver = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => string;
|
|
10
|
+
/**
|
|
11
|
+
* A router link value.
|
|
12
|
+
*/
|
|
13
|
+
type RouterLinkValue = any[] | string | UrlTree | null | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* A function that resolves a router link.
|
|
16
|
+
* @param route The activated route snapshot
|
|
17
|
+
* @param state The router state snapshot
|
|
18
|
+
* @returns The resolved link (RouteDataLink)
|
|
19
|
+
*/
|
|
20
|
+
type RouterLinkValueResolver = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => RouterLinkValue;
|
|
21
|
+
/**
|
|
22
|
+
* A function that resolves a meta description.
|
|
23
|
+
* @param route The activated route snapshot
|
|
24
|
+
* @param state The router state snapshot
|
|
25
|
+
* @returns The resolved meta description string
|
|
26
|
+
*/
|
|
27
|
+
type RouteMetaDescriptionResolver = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => string;
|
|
28
|
+
/**
|
|
29
|
+
* A function that resolves meta tags from the route and router state
|
|
30
|
+
*/
|
|
31
|
+
type RouteMetaTagResolver = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
|
|
32
|
+
[metaTagName: string]: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Route data
|
|
36
|
+
*/
|
|
37
|
+
interface RouteData {
|
|
38
|
+
/**
|
|
39
|
+
* The title of the route, or a function that resolves the title.
|
|
40
|
+
*/
|
|
41
|
+
title?: string | RouteTitleResolver;
|
|
42
|
+
/**
|
|
43
|
+
* A Router link defined for the route.
|
|
44
|
+
*/
|
|
45
|
+
routerLink?: RouterLinkValue | RouterLinkValueResolver;
|
|
46
|
+
/**
|
|
47
|
+
* linkTarget
|
|
48
|
+
*/
|
|
49
|
+
linkTarget?: '_self' | '_blank' | '_parent' | '_top';
|
|
50
|
+
/**
|
|
51
|
+
* meta
|
|
52
|
+
*/
|
|
53
|
+
meta?: string | RouteMetaTagResolver | RouteMetaDescriptionResolver;
|
|
54
|
+
/**
|
|
55
|
+
* Route security claim.
|
|
56
|
+
*/
|
|
57
|
+
claim?: ClaimLike;
|
|
58
|
+
/**
|
|
59
|
+
* Route childreen.
|
|
60
|
+
*/
|
|
61
|
+
children?: RouteData[];
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Router Activated Route Snapshot.
|
|
66
|
+
* Represents the state of an activated route in the router.
|
|
67
|
+
*/
|
|
68
|
+
interface RouterActivatedRouteSnapshot {
|
|
69
|
+
/**
|
|
70
|
+
* The original ActivatedRouteSnapshot
|
|
71
|
+
*/
|
|
72
|
+
route: ActivatedRouteSnapshot;
|
|
73
|
+
/**
|
|
74
|
+
* Resolved title, if any
|
|
75
|
+
*/
|
|
76
|
+
title?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Resolved link, if any
|
|
79
|
+
*/
|
|
80
|
+
routerLink: RouterLinkValue;
|
|
81
|
+
/**
|
|
82
|
+
* Children routes
|
|
83
|
+
*/
|
|
84
|
+
children: RouterActivatedRouteSnapshot[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extended Angular Route interface with additional data property.
|
|
88
|
+
*/
|
|
89
|
+
interface Route extends Route$1 {
|
|
90
|
+
children?: Routes;
|
|
91
|
+
data?: RouteData;
|
|
92
|
+
}
|
|
93
|
+
type Routes = Route[];
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Service to interact with Angular Router.
|
|
97
|
+
*/
|
|
98
|
+
declare class RouterService {
|
|
99
|
+
private readonly _router;
|
|
100
|
+
/**
|
|
101
|
+
* Get activated route tree.
|
|
102
|
+
* @param outlets List of outlets to include, default is ['primary']
|
|
103
|
+
* @returns Observable of the activated route tree
|
|
104
|
+
*/
|
|
105
|
+
getActivatedRouteTree(outlets?: string[]): Observable<RouterActivatedRouteSnapshot>;
|
|
106
|
+
/**
|
|
107
|
+
* Get activated routes as a flat array from root to the deepest child for a specific outlet.
|
|
108
|
+
* @param outlet The outlet to include, default is 'primary'
|
|
109
|
+
* @returns Observable of the activated routes array
|
|
110
|
+
*/
|
|
111
|
+
getActivatedRoutes(outlet?: string): Observable<RouterActivatedRouteSnapshot[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Map a route to RouterRouteSnapshot
|
|
114
|
+
* @param route The route to map
|
|
115
|
+
* @param outlets The outlets to include
|
|
116
|
+
* @returns The mapped RouterRouteSnapshot
|
|
117
|
+
*/
|
|
118
|
+
private _mapRoute;
|
|
119
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RouterService, never>;
|
|
120
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RouterService>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { RouterService };
|
|
124
|
+
export type { Route, RouteData, RouteMetaDescriptionResolver, RouteMetaTagResolver, RouteTitleResolver, RouterActivatedRouteSnapshot, RouterLinkValue, RouterLinkValueResolver, Routes };
|