@bootkit/ng0 0.0.0-alpha.52 → 0.0.0-alpha.53
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/components/table/index.d.ts +7 -1
- package/fesm2022/bootkit-ng0-components-table.mjs +9 -1
- package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization-locales.mjs +6 -7
- package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization.mjs +42 -15
- package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
- package/localization/index.d.ts +30 -8
- package/package.json +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _bootkit_ng0_localization from '@bootkit/ng0/localization';
|
|
2
2
|
import { LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';
|
|
3
3
|
import * as _angular_core from '@angular/core';
|
|
4
|
-
import { OnInit, TemplateRef, AfterContentInit, OnDestroy, QueryList } from '@angular/core';
|
|
4
|
+
import { OnInit, TemplateRef, AfterContentInit, OnDestroy, ChangeDetectorRef, QueryList } from '@angular/core';
|
|
5
5
|
import { formatString } from '@bootkit/ng0/common';
|
|
6
6
|
import { DataResult, DataSource, DataSourceLike } from '@bootkit/ng0/data';
|
|
7
7
|
import { ItemSelectEvent } from '@bootkit/ng0/components/select';
|
|
@@ -129,6 +129,7 @@ declare class TableDetailRowDirective {
|
|
|
129
129
|
declare class TableComponent implements AfterContentInit, OnDestroy {
|
|
130
130
|
protected readonly _ls: LocalizationService;
|
|
131
131
|
private readonly _destroyRef;
|
|
132
|
+
protected _changeDetectorRef: ChangeDetectorRef;
|
|
132
133
|
private _changeSubscription?;
|
|
133
134
|
protected _columns: QueryList<TableColumnDirective>;
|
|
134
135
|
protected _detailRow?: TableDetailRowDirective;
|
|
@@ -245,6 +246,11 @@ declare class TableComponent implements AfterContentInit, OnDestroy {
|
|
|
245
246
|
*/
|
|
246
247
|
readonly loadingCover: _angular_core.InputSignal<"none" | "simple" | "spinner">;
|
|
247
248
|
ngAfterContentInit(): void;
|
|
249
|
+
/**
|
|
250
|
+
* Manually triggers a refresh of the table. This can be used to update the table's display after making changes to the data or state.
|
|
251
|
+
* It will mark the component for check, which will cause Angular to re-render the component and update the displayed data.
|
|
252
|
+
*/
|
|
253
|
+
refresh(): void;
|
|
248
254
|
/**
|
|
249
255
|
* Loads data from the data source based on the current state of the table (pagination, sorting, filtering).
|
|
250
256
|
* This method can be called manually to refresh the data in the table.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, EnvironmentInjector, input, booleanAttribute, model, signal, TemplateRef, ContentChild, Directive, Input, DestroyRef, numberAttribute, HostBinding, ContentChildren, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, EnvironmentInjector, input, booleanAttribute, model, signal, TemplateRef, ContentChild, Directive, Input, DestroyRef, ChangeDetectorRef, numberAttribute, HostBinding, ContentChildren, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
3
|
import * as i4 from '@bootkit/ng0/localization';
|
|
4
4
|
import { defaultFormatter, objectFormatterAttribute, LocalizationService, LocalizationModule } from '@bootkit/ng0/localization';
|
|
5
5
|
import * as i1 from '@angular/common';
|
|
@@ -173,6 +173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
173
173
|
class TableComponent {
|
|
174
174
|
_ls = inject(LocalizationService);
|
|
175
175
|
_destroyRef = inject(DestroyRef);
|
|
176
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
176
177
|
_changeSubscription;
|
|
177
178
|
_columns;
|
|
178
179
|
_detailRow;
|
|
@@ -297,6 +298,13 @@ class TableComponent {
|
|
|
297
298
|
this.load();
|
|
298
299
|
}
|
|
299
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Manually triggers a refresh of the table. This can be used to update the table's display after making changes to the data or state.
|
|
303
|
+
* It will mark the component for check, which will cause Angular to re-render the component and update the displayed data.
|
|
304
|
+
*/
|
|
305
|
+
refresh() {
|
|
306
|
+
this._changeDetectorRef.markForCheck();
|
|
307
|
+
}
|
|
300
308
|
/**
|
|
301
309
|
* Loads data from the data source based on the current state of the table (pagination, sorting, filtering).
|
|
302
310
|
* This method can be called manually to refresh the data in the table.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { booleanAttribute, ContentChild, Directive, EnvironmentInjector, inject, input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableColumnType } from './types';\nimport { defaultFormatter, objectFormatterAttribute } from '@bootkit/ng0/localization';\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n private readonly _injector = inject(EnvironmentInjector);\n \n /**\n * The field in the data source to bind to. If not set, the column will not display any data.\n * @deprecated Use formatBy input.\n */\n public readonly field = input<string>();\n\n /**\n * A fromatter to convert each item to a string for display.\n * This can be a function, a string (field name), or an array of formatters.\n * If not set, the default formatter will be used, which simply calls toString() on the value.\n */\n public readonly formatBy = input(defaultFormatter, {\n transform: objectFormatterAttribute(this._injector)\n });\n\n /**\n * The title of the column. This will be displayed in the header row.\n */\n public readonly title = input<string>();\n\n /**\n * Text to display in the cell if the value is null or undefined.\n */\n public readonly emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n public readonly type = input<TableColumnType>('text');\n\n /**\n * CSS class(es) to apply to the table cell.\n */\n public readonly cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n public readonly bold = input(false, { transform: booleanAttribute });\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n public readonly shrink = input(false, { transform: booleanAttribute });\n\n /**\n * If true, the column will support filtering.\n */\n public readonly filterable = input(false, { transform: booleanAttribute });\n \n /**\n * The current filter value of the column.\n */\n public readonly filterValue = model<any>();\n\n /**\n * The current filter operator of the column.\n */\n public readonly filterOperator = model<string>();\n\n /**\n * The list of filter operators to show in the filter dropdown. If not set, a default list will be used based on the column type.\n */\n public readonly filterOperators = input<string[]>();\n\n /**\n * If true, the filter operators dropdown will be shown.\n */\n public readonly showFilterOperators = signal(false);\n\n /**\n * The name of the field in the data source. If not set, the `field` property will be used.\n */\n public readonly fieldName = input<string>();\n\n /**\n * If true, the column will support sorting.\n */\n public readonly sortable = input(false, { transform: booleanAttribute });\n\n /**\n * The current sort direction of the column.\n */\n public readonly sortDirection = model<'none' | 'asc' | 'desc'>('none');\n\n @ContentChild(TemplateRef) public readonly template?: TemplateRef<any>;\n\n constructor() {\n }\n\n ngOnInit(): void {\n if (this.filterOperator() == undefined) {\n this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');\n }\n }\n\n /**\n * Get the list of filter operators to show in the filter dropdown.\n */\n public getFilterOperators(): string[] {\n let op = this.filterOperators();\n if (op && op.length > 0)\n return op;\n\n let type = this.type();\n if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {\n return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n } else if (type == 'text') {\n return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n } else {\n return []\n }\n }\n\n /**\n * Toggle the sort direction of the column.\n * @returns void\n */\n public toggleSortDirection(): void {\n if (!this.sortable()) {\n return;\n }\n\n let dir = this.sortDirection();\n if (dir === 'none') {\n this.sortDirection.set('asc');\n } else if (dir === 'asc') {\n this.sortDirection.set('desc');\n } else {\n this.sortDirection.set('none');\n }\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, ContentChildren, DestroyRef, HostBinding, inject, input, model, numberAttribute, OnDestroy, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, dataSourceAttribute, DataSourceLike } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng0/form';\nimport { ItemSelectEvent, SelectComponent } from '@bootkit/ng0/components/select';\nimport { Filter1Icon } from '@bootkit/ng0/icons';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent,\n NumberDirective,\n OverlayModule,\n SelectComponent,\n Filter1Icon\n ]\n})\nexport class TableComponent implements AfterContentInit, OnDestroy {\n protected readonly _ls = inject(LocalizationService);\n private readonly _destroyRef = inject(DestroyRef);\n private _changeSubscription?: Subscription;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected readonly _dataResult = signal<DataResult | undefined>(undefined);\n protected readonly _error = signal(undefined);\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n\n\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({ transform: dataSourceAttribute });\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public readonly autoLoad = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public readonly showRowNumbers = input(false, { transform: booleanAttribute });\n\n /** \n * If true, the table will show the header row.\n */\n public readonly showHeader = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support pagination.\n */\n public readonly pageable = input(false, { transform: booleanAttribute });\n\n /**\n * The currently selected page in the table.\n * @default 0\n */\n public readonly pageIndex = model(0);\n\n /**\n * The number of records to display per page.\n * @default 10\n */\n public readonly pageSize = model(10);\n\n /**\n * Maximum number of visible pages in the pagination controls.\n * @default 10\n */\n public readonly maxVisiblePages = input(10, { transform: numberAttribute });\n\n /**\n * If true, the table will show pagination controls at the bottom.\n * This will allow users to navigate between pages of data.\n * @default true\n */\n public readonly showPagingControls = input(true, { transform: booleanAttribute });\n\n /**\n * Whether to show the first and last buttons in the pagination controls.\n * @default true\n */\n public readonly showFirstLastButtons = input(false, { transform: booleanAttribute });\n\n /**\n * Whetheer to show the next and previous buttons in the pagination controls.\n * @default true\n */\n public readonly showNextPreviousButtons = input(false, { transform: booleanAttribute });\n\n /**\n * Array of page size options to display in the page size selector.\n * If not provided, the default page size options will be used.\n * @default true\n */\n public readonly pageSizeOptions = input<number[] | undefined>([10, 25, 50, 100]);\n\n /**\n * Whether to show paging info at the bottom of the table.\n * This will show the number of records displayed and total records.\n * @default true\n */\n public readonly showPagingInfo = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public readonly sortable = input(true, { transform: booleanAttribute });\n\n /**\n * The CSS class to apply to the internal table element.\n * This can be used to apply custom styles to the table.\n */\n public readonly tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public readonly headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public readonly caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public readonly height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public readonly filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public readonly loadingIndicator = input<'none' | 'simple' | 'spinner'>('spinner');\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public readonly loadingCover = input<'none' | 'simple' | 'spinner'>('spinner');\n\n ngAfterContentInit(): void {\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load();\n }\n }\n\n /**\n * Loads data from the data source based on the current state of the table (pagination, sorting, filtering).\n * This method can be called manually to refresh the data in the table.\n * It will construct a DataRequest object based on the current pagination, sorting, and filtering settings,\n * and then call the load method of the data source with that request.\n */\n public load(pageIndex?: number) {\n let filters: DataRequestFilter[] = [];\n let page: DataRequestPage | undefined;\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {\n filters.push({ field: col.fieldName() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });\n }\n });\n }\n\n if (this.pageable()) {\n if (pageIndex != undefined) {\n this.pageIndex.set(pageIndex);\n }\n\n page = {\n index: this.pageIndex(),\n size: this.pageSize(),\n };\n }\n\n if (this.sortable()) {\n let col = this._columns.find(c => c.sortable() && c.sortDirection() != 'none' && (c.field() != '' || c.fieldName() != ''));\n if (col) {\n sort = {\n field: col.fieldName() ?? col.field()!,\n asc: col.sortDirection() === 'asc'\n }\n }\n }\n\n var request = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this.source().load(request)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._error.set(undefined);\n }, error: err => {\n this._error.set(err);\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this.source().isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field()!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n protected _onToggleFilterOperator(col: TableColumnDirective) {\n if (col.showFilterOperators()) {\n col.showFilterOperators.set(false)\n } else {\n this._columns.forEach(x => x.showFilterOperators.set(false));\n col.showFilterOperators.set(true)\n }\n }\n\n protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n col.filterOperator.set(filterOperator);\n this._columns.forEach(x => x.showFilterOperators.set(false));\n this.load(0);\n }\n\n _onPageSizeOptionsItemSelect(e: ItemSelectEvent) {\n this.pageSize.set(e.value);\n this.load(0);\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = pageIndex();\n@let $pageSize = pageSize();\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecordIndex = $pageable ? ($pageSize * $pageIndex) : 0;\n@let $lastRecordIndex = $data ? $firstRecordIndex + $data.length - 1 : 1;\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>\n {{caption()}}\n </caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if (isLoading() && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\" />\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_error()) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if (isLoading() && !$isFirstLoad && loadingCover()) {\n <div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n </div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if (col.filterable() && (col.field() || col.filterValue())) {\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input\n [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\" />\n }\n @case ('number') {\n <input\n [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\" />\n }\n }\n\n <button\n class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <ng0-icon-filter1 />\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button\n class=\"dropdown-item\"\n [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th\n (click)=\"col.toggleSortDirection(); load()\"\n [class.sortable]=\"sortable() && col.sortable()\"\n [ngClass]=\"{ \n 'sort-asc': col.sortDirection() == 'asc', \n 'sort-desc': col.sortDirection() == 'desc',\n 'sort-none': col.sortDirection() == 'none'\n }\">\n {{ col.title() }}\n\n @if (sortable() && col.sortable()) {\n <svg\n class=\"ng0-table-sort-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 7L12 16\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M8 13L12 17L16 13\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecordIndex + $index + 1}}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if (\n (cellValue === null || cellValue === undefined) && col.emptyCellText()\n ) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n } @else {\n {{ cellValue }}\n }\n }\n }\n } @else if(col.formatBy()) {\n {{col.formatBy()(row)}}\n } \n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && showPagingControls() && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [showNextPreviousButtons]=\"showNextPreviousButtons()\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"pageSize()\"\n [selectedPage]=\"pageIndex()\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"maxVisiblePages()\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if (pageSizeOptions()) {\n <div class=\"ng0-table-paging-options\">\n <ng0-select\n name=\"pageSize\"\n [source]=\"pageSizeOptions()\"\n [(ngModel)]=\"pageSize\"\n (itemSelect)=\"_onPageSizeOptionsItemSelect($event)\"></ng0-select>\n <!-- <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select> -->\n </div>\n }\n\n @if (showPagingInfo()) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecordIndex + 1, lastRecord: $lastRecordIndex + 1, totalRecords:\n $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { booleanAttribute, ContentChild, Directive, EnvironmentInjector, inject, input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableColumnType } from './types';\nimport { defaultFormatter, objectFormatterAttribute } from '@bootkit/ng0/localization';\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n private readonly _injector = inject(EnvironmentInjector);\n \n /**\n * The field in the data source to bind to. If not set, the column will not display any data.\n * @deprecated Use formatBy input.\n */\n public readonly field = input<string>();\n\n /**\n * A fromatter to convert each item to a string for display.\n * This can be a function, a string (field name), or an array of formatters.\n * If not set, the default formatter will be used, which simply calls toString() on the value.\n */\n public readonly formatBy = input(defaultFormatter, {\n transform: objectFormatterAttribute(this._injector)\n });\n\n /**\n * The title of the column. This will be displayed in the header row.\n */\n public readonly title = input<string>();\n\n /**\n * Text to display in the cell if the value is null or undefined.\n */\n public readonly emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n public readonly type = input<TableColumnType>('text');\n\n /**\n * CSS class(es) to apply to the table cell.\n */\n public readonly cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n public readonly bold = input(false, { transform: booleanAttribute });\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n public readonly shrink = input(false, { transform: booleanAttribute });\n\n /**\n * If true, the column will support filtering.\n */\n public readonly filterable = input(false, { transform: booleanAttribute });\n \n /**\n * The current filter value of the column.\n */\n public readonly filterValue = model<any>();\n\n /**\n * The current filter operator of the column.\n */\n public readonly filterOperator = model<string>();\n\n /**\n * The list of filter operators to show in the filter dropdown. If not set, a default list will be used based on the column type.\n */\n public readonly filterOperators = input<string[]>();\n\n /**\n * If true, the filter operators dropdown will be shown.\n */\n public readonly showFilterOperators = signal(false);\n\n /**\n * The name of the field in the data source. If not set, the `field` property will be used.\n */\n public readonly fieldName = input<string>();\n\n /**\n * If true, the column will support sorting.\n */\n public readonly sortable = input(false, { transform: booleanAttribute });\n\n /**\n * The current sort direction of the column.\n */\n public readonly sortDirection = model<'none' | 'asc' | 'desc'>('none');\n\n @ContentChild(TemplateRef) public readonly template?: TemplateRef<any>;\n\n constructor() {\n }\n\n ngOnInit(): void {\n if (this.filterOperator() == undefined) {\n this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');\n }\n }\n\n /**\n * Get the list of filter operators to show in the filter dropdown.\n */\n public getFilterOperators(): string[] {\n let op = this.filterOperators();\n if (op && op.length > 0)\n return op;\n\n let type = this.type();\n if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {\n return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n } else if (type == 'text') {\n return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n } else {\n return []\n }\n }\n\n /**\n * Toggle the sort direction of the column.\n * @returns void\n */\n public toggleSortDirection(): void {\n if (!this.sortable()) {\n return;\n }\n\n let dir = this.sortDirection();\n if (dir === 'none') {\n this.sortDirection.set('asc');\n } else if (dir === 'asc') {\n this.sortDirection.set('desc');\n } else {\n this.sortDirection.set('none');\n }\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, HostBinding, inject, input, model, numberAttribute, OnDestroy, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, dataSourceAttribute, DataSourceLike } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng0/form';\nimport { ItemSelectEvent, SelectComponent } from '@bootkit/ng0/components/select';\nimport { Filter1Icon } from '@bootkit/ng0/icons';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent,\n NumberDirective,\n OverlayModule,\n SelectComponent,\n Filter1Icon\n ]\n})\nexport class TableComponent implements AfterContentInit, OnDestroy {\n protected readonly _ls = inject(LocalizationService);\n private readonly _destroyRef = inject(DestroyRef);\n protected _changeDetectorRef = inject(ChangeDetectorRef);\n\n private _changeSubscription?: Subscription;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected readonly _dataResult = signal<DataResult | undefined>(undefined);\n protected readonly _error = signal(undefined);\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n\n\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({ transform: dataSourceAttribute });\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public readonly autoLoad = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public readonly showRowNumbers = input(false, { transform: booleanAttribute });\n\n /** \n * If true, the table will show the header row.\n */\n public readonly showHeader = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support pagination.\n */\n public readonly pageable = input(false, { transform: booleanAttribute });\n\n /**\n * The currently selected page in the table.\n * @default 0\n */\n public readonly pageIndex = model(0);\n\n /**\n * The number of records to display per page.\n * @default 10\n */\n public readonly pageSize = model(10);\n\n /**\n * Maximum number of visible pages in the pagination controls.\n * @default 10\n */\n public readonly maxVisiblePages = input(10, { transform: numberAttribute });\n\n /**\n * If true, the table will show pagination controls at the bottom.\n * This will allow users to navigate between pages of data.\n * @default true\n */\n public readonly showPagingControls = input(true, { transform: booleanAttribute });\n\n /**\n * Whether to show the first and last buttons in the pagination controls.\n * @default true\n */\n public readonly showFirstLastButtons = input(false, { transform: booleanAttribute });\n\n /**\n * Whetheer to show the next and previous buttons in the pagination controls.\n * @default true\n */\n public readonly showNextPreviousButtons = input(false, { transform: booleanAttribute });\n\n /**\n * Array of page size options to display in the page size selector.\n * If not provided, the default page size options will be used.\n * @default true\n */\n public readonly pageSizeOptions = input<number[] | undefined>([10, 25, 50, 100]);\n\n /**\n * Whether to show paging info at the bottom of the table.\n * This will show the number of records displayed and total records.\n * @default true\n */\n public readonly showPagingInfo = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public readonly sortable = input(true, { transform: booleanAttribute });\n\n /**\n * The CSS class to apply to the internal table element.\n * This can be used to apply custom styles to the table.\n */\n public readonly tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public readonly headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public readonly caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public readonly height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public readonly filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public readonly loadingIndicator = input<'none' | 'simple' | 'spinner'>('spinner');\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public readonly loadingCover = input<'none' | 'simple' | 'spinner'>('spinner');\n\n ngAfterContentInit(): void {\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load();\n }\n }\n\n /**\n * Manually triggers a refresh of the table. This can be used to update the table's display after making changes to the data or state.\n * It will mark the component for check, which will cause Angular to re-render the component and update the displayed data.\n */\n public refresh(): void {\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Loads data from the data source based on the current state of the table (pagination, sorting, filtering).\n * This method can be called manually to refresh the data in the table.\n * It will construct a DataRequest object based on the current pagination, sorting, and filtering settings,\n * and then call the load method of the data source with that request.\n */\n public load(pageIndex?: number) {\n let filters: DataRequestFilter[] = [];\n let page: DataRequestPage | undefined;\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {\n filters.push({ field: col.fieldName() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });\n }\n });\n }\n\n if (this.pageable()) {\n if (pageIndex != undefined) {\n this.pageIndex.set(pageIndex);\n }\n\n page = {\n index: this.pageIndex(),\n size: this.pageSize(),\n };\n }\n\n if (this.sortable()) {\n let col = this._columns.find(c => c.sortable() && c.sortDirection() != 'none' && (c.field() != '' || c.fieldName() != ''));\n if (col) {\n sort = {\n field: col.fieldName() ?? col.field()!,\n asc: col.sortDirection() === 'asc'\n }\n }\n }\n\n var request = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this.source().load(request)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._error.set(undefined);\n }, error: err => {\n this._error.set(err);\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this.source().isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field()!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n protected _onToggleFilterOperator(col: TableColumnDirective) {\n if (col.showFilterOperators()) {\n col.showFilterOperators.set(false)\n } else {\n this._columns.forEach(x => x.showFilterOperators.set(false));\n col.showFilterOperators.set(true)\n }\n }\n\n protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n col.filterOperator.set(filterOperator);\n this._columns.forEach(x => x.showFilterOperators.set(false));\n this.load(0);\n }\n\n _onPageSizeOptionsItemSelect(e: ItemSelectEvent) {\n this.pageSize.set(e.value);\n this.load(0);\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = pageIndex();\n@let $pageSize = pageSize();\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecordIndex = $pageable ? ($pageSize * $pageIndex) : 0;\n@let $lastRecordIndex = $data ? $firstRecordIndex + $data.length - 1 : 1;\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>\n {{caption()}}\n </caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if (isLoading() && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\" />\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_error()) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if (isLoading() && !$isFirstLoad && loadingCover()) {\n <div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n </div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if (col.filterable() && (col.field() || col.filterValue())) {\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input\n [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\" />\n }\n @case ('number') {\n <input\n [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\" />\n }\n }\n\n <button\n class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <ng0-icon-filter1 />\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button\n class=\"dropdown-item\"\n [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th\n (click)=\"col.toggleSortDirection(); load()\"\n [class.sortable]=\"sortable() && col.sortable()\"\n [ngClass]=\"{ \n 'sort-asc': col.sortDirection() == 'asc', \n 'sort-desc': col.sortDirection() == 'desc',\n 'sort-none': col.sortDirection() == 'none'\n }\">\n {{ col.title() }}\n\n @if (sortable() && col.sortable()) {\n <svg\n class=\"ng0-table-sort-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 7L12 16\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M8 13L12 17L16 13\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecordIndex + $index + 1}}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if (\n (cellValue === null || cellValue === undefined) && col.emptyCellText()\n ) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n } @else {\n {{ cellValue }}\n }\n }\n }\n } @else if(col.formatBy()) {\n {{col.formatBy()(row)}}\n } \n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && showPagingControls() && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [showNextPreviousButtons]=\"showNextPreviousButtons()\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"pageSize()\"\n [selectedPage]=\"pageIndex()\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"maxVisiblePages()\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if (pageSizeOptions()) {\n <div class=\"ng0-table-paging-options\">\n <ng0-select\n name=\"pageSize\"\n [source]=\"pageSizeOptions()\"\n [(ngModel)]=\"pageSize\"\n (itemSelect)=\"_onPageSizeOptionsItemSelect($event)\"></ng0-select>\n <!-- <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select> -->\n </div>\n }\n\n @if (showPagingInfo()) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecordIndex + 1, lastRecord: $lastRecordIndex + 1, totalRecords:\n $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,6 @@ const formatNumber$1 = (n) => n.toLocaleString();
|
|
|
4
4
|
const EN_US_LOCALE = new Locale({
|
|
5
5
|
name: 'en',
|
|
6
6
|
rtl: false,
|
|
7
|
-
intl: {
|
|
8
|
-
date: {
|
|
9
|
-
year: 'numeric',
|
|
10
|
-
calendar: 'persian'
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
7
|
dictionary: {
|
|
14
8
|
ok: 'Ok',
|
|
15
9
|
cancel: 'Cancel',
|
|
@@ -48,8 +42,13 @@ const EN_US_LOCALE = new Locale({
|
|
|
48
42
|
|
|
49
43
|
const formatNumber = (n) => n.toLocaleString();
|
|
50
44
|
const FA_IR_LOCALE = new Locale({
|
|
51
|
-
name: 'fa
|
|
45
|
+
name: 'fa',
|
|
52
46
|
rtl: true,
|
|
47
|
+
date: {
|
|
48
|
+
options: {
|
|
49
|
+
calendar: 'persian'
|
|
50
|
+
}
|
|
51
|
+
},
|
|
53
52
|
dictionary: {
|
|
54
53
|
ok: 'تایید',
|
|
55
54
|
cancel: 'لغو',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const EN_US_LOCALE = new Locale({\n name: 'en',\n rtl: false,\n
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const EN_US_LOCALE = new Locale({\n name: 'en',\n rtl: false,\n dictionary: {\n ok: 'Ok',\n cancel: 'Cancel',\n warning: 'Warning',\n areYouSure: 'Are you sure?',\n noRecords: 'No records.',\n first: 'First',\n last: 'Last',\n next: 'Next',\n previous: 'Previous',\n pageXofY: 'Page {0} of {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'Invalid',\n required: (e) => `Required`,\n min: (e) => `Minimum: ${formatNumber(e.min)}`,\n max: (e) => `Maximum: ${formatNumber(e.max)}`,\n minlength: (e) => `Minimum length: ${e.requiredLength}`,\n maxlength: (e) => `Maximum length: ${e.requiredLength}`,\n email: (e) => `Invalid email`,\n }\n }\n },\n formatters: {\n 'boolean': ['No', 'Yes'],\n },\n components: {\n table: {\n noRecords: 'No records found.',\n pagingInfo: (info) => `Showingsdsd ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} of ${formatNumber(info.totalRecords!)} records`\n }\n }\n});\n","import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const FA_IR_LOCALE = new Locale({\n name: 'fa',\n rtl: true,\n date: {\n options: {\n calendar: 'persian'\n }\n },\n dictionary: {\n ok: 'تایید',\n cancel: 'لغو',\n warning: 'هشدار',\n areYouSure: 'آیا مطمئن هستید?',\n noRecords: 'بدون رکورد',\n first: 'اولین',\n last: 'آخرین',\n next: 'بعدی',\n previous: 'قبلی',\n pageXofY: 'صفحه {0} از {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'نامعتبر',\n required: (e) => `الزامی`,\n min: (e) => `حداقل: ${formatNumber(e.min)}`,\n max: (e) => `حداکثر: ${formatNumber(e.max)}`,\n minlength: (e) => `حداقل ${e.requiredLength} کاراکتر`,\n maxlength: (e) => `حداکثر ${e.requiredLength} کاراکتر`,\n email: (e) => `ایمیل نامعتبر است`,\n fileMinSize: (e) => `حداقل ${formatNumber(e.min / 1024 / 1024)} مگابایت ${e.fileList ? `(${e.file.name})` : ''}`,\n fileMaxSize: (e) => `حداکثر ${formatNumber(e.max / 1024 / 1024)} مگابایت ${e.fileList ? `(${e.file.name})` : ''}`,\n }\n }\n },\n formatters: {\n 'boolean': ['خیر', 'بله'],\n },\n components: {\n table: {\n noRecords: 'رکوردی وجود ندارد',\n pagingInfo: (info) => `نمایش ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} از ${formatNumber(info.totalRecords!)} رکورد`\n }\n },\n data: {\n logicalOperators: {\n contains: 'شامل',\n startsWith: 'شروع',\n endsWith: 'پایان',\n eq: 'مساوی',\n gt: 'بزرگتر',\n gte: 'بزرگتر یا مساوی',\n lt: 'کوچکتر',\n lte: 'کوچکتر یا مساوی',\n ne: 'مخالف',\n\n }\n }\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["formatNumber"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { all } from 'deepmerge';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
3
|
import { Injectable, Pipe, inject, runInInjectionContext, EnvironmentInjector, NgModule, InjectionToken } from '@angular/core';
|
|
3
4
|
import { Subject } from 'rxjs';
|
|
@@ -103,7 +104,8 @@ class Locale {
|
|
|
103
104
|
* Clones and extends this object and returns a new Locale (without modifying this object).
|
|
104
105
|
*/
|
|
105
106
|
extend(definition) {
|
|
106
|
-
|
|
107
|
+
const newDefinition = all([this.definition, definition || {}]);
|
|
108
|
+
return new Locale(newDefinition);
|
|
107
109
|
}
|
|
108
110
|
/**
|
|
109
111
|
*
|
|
@@ -320,26 +322,46 @@ function createNumberFormatter(minimumIntegerDigits, minimumFractionDigits, maxi
|
|
|
320
322
|
}
|
|
321
323
|
/**
|
|
322
324
|
* Creates a currency formatter.
|
|
323
|
-
* @param
|
|
324
|
-
* @param
|
|
325
|
-
* @
|
|
325
|
+
* @param currency The ISO 4217 currency code (e.g., "USD", "EUR", "IRR").
|
|
326
|
+
* @param minimumIntegerDigits Minimum number of integer digits to use. Default is 1.
|
|
327
|
+
* @param minimumFractionDigits Minimum number of fraction digits to use. Default is 1.
|
|
328
|
+
* @param maximumFractionDigits Maximum number of fraction digits to use. Default is 2.
|
|
329
|
+
* @param notation The notation to use. Default is 'standard'.
|
|
330
|
+
* @param currencySign The currency sign to use. Default is 'standard'.
|
|
331
|
+
* @returns An ObjectFormatter function.
|
|
326
332
|
*/
|
|
327
|
-
function createCurrencyFormatter(
|
|
328
|
-
|
|
333
|
+
function createCurrencyFormatter(currency, notation, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, currencySign) {
|
|
334
|
+
let locale = inject(LocalizationService, { optional: true })?.get();
|
|
335
|
+
const localeName = locale?.definition.name || 'en-US';
|
|
336
|
+
const f = new Intl.NumberFormat(localeName, {
|
|
337
|
+
style: 'currency',
|
|
338
|
+
currency: currency,
|
|
339
|
+
notation: notation,
|
|
340
|
+
currencySign: currencySign,
|
|
341
|
+
minimumIntegerDigits: minimumIntegerDigits,
|
|
342
|
+
minimumFractionDigits: minimumFractionDigits,
|
|
343
|
+
maximumFractionDigits: maximumFractionDigits,
|
|
344
|
+
});
|
|
345
|
+
return (n) => Number.isFinite(n) ? f.format(n) : '';
|
|
329
346
|
}
|
|
330
347
|
function createDateFormatter(options) {
|
|
331
348
|
const locale = inject(LocalizationService, { optional: true })?.get();
|
|
332
349
|
let intlOptions;
|
|
333
|
-
|
|
334
|
-
|
|
350
|
+
let localeOptions = locale?.definition.date?.options;
|
|
351
|
+
let length = arguments.length;
|
|
352
|
+
if (length == 0) {
|
|
353
|
+
intlOptions = { ...localeOptions };
|
|
354
|
+
}
|
|
355
|
+
else if (length == 1 && typeof arguments[0] == 'object') {
|
|
356
|
+
intlOptions = { ...localeOptions, ...arguments[0] };
|
|
335
357
|
}
|
|
336
358
|
else {
|
|
337
359
|
intlOptions = {
|
|
338
|
-
dateStyle: arguments[0],
|
|
339
|
-
timeStyle: arguments[1],
|
|
340
|
-
timeZone: arguments[2]?.[0],
|
|
341
|
-
timeZoneName: arguments[2]?.[1],
|
|
342
|
-
calendar: arguments[3],
|
|
360
|
+
dateStyle: length > 0 ? arguments[0] : localeOptions?.dateStyle,
|
|
361
|
+
timeStyle: length > 1 ? arguments[1] : localeOptions?.timeStyle,
|
|
362
|
+
timeZone: length > 2 ? arguments[2]?.[0] : localeOptions?.timeZone,
|
|
363
|
+
timeZoneName: length > 2 ? arguments[2]?.[1] : localeOptions?.timeZoneName,
|
|
364
|
+
calendar: length > 3 ? arguments[3] : localeOptions?.calendar,
|
|
343
365
|
};
|
|
344
366
|
}
|
|
345
367
|
let intlFormatter;
|
|
@@ -405,7 +427,12 @@ function createCompositeFormatter(...formatters) {
|
|
|
405
427
|
/**
|
|
406
428
|
* Creates an ObjectFormatter from various ObjectFormatterLike types.
|
|
407
429
|
* @param formatter The ObjectFormatterLike value to convert.
|
|
408
|
-
*
|
|
430
|
+
* A formatter can be:
|
|
431
|
+
* - A function: used directly as the formatter.
|
|
432
|
+
* - A number: creates an index formatter that retrieves the value at the specified index from an array.
|
|
433
|
+
* - A string: can be a field name (e.g., "user.name"), a predefined formatter symbol ("#", "$", "@"), or a locale formatter name (e.g., "*date").
|
|
434
|
+
* - An array: if the first element is a predefined formatter symbol, it creates a formatter using that symbol and the rest of the elements as parameters.
|
|
435
|
+
* Otherwise, it creates a composite formatter that applies each element in sequence.
|
|
409
436
|
* @param params Additional parameters for the formatter.
|
|
410
437
|
* @returns An ObjectFormatter function.
|
|
411
438
|
*/
|
|
@@ -416,7 +443,7 @@ function createObjectFormatter(formatter, ...params) {
|
|
|
416
443
|
case 'number':
|
|
417
444
|
return createIndexFormatter(formatter);
|
|
418
445
|
case 'string':
|
|
419
|
-
switch (formatter
|
|
446
|
+
switch (formatter) {
|
|
420
447
|
case '#':
|
|
421
448
|
return createNumberFormatter(...params);
|
|
422
449
|
case '$':
|
|
@@ -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/formatter.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/format.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\nimport { TranslatedValidationError } from \"./types\";\nimport { ObjectFormatter } from \"./formatter\";\n\n/** Locale */\nexport class Locale {\n constructor(public readonly definition: LocaleDefinition) {\n }\n\n /** \n * Returns the name of the locale\n * @returns The name of the locale\n */\n get name(): string {\n return this.definition.name;\n }\n\n /** \n * Translates a key in the dictionary\n * @param key The key to look up\n * @param fallback Optional fallback value if the key is not found\n * @returns The translated string or the fallbackValue if not found\n */\n translate(key: string, fallback?: string): string | undefined {\n return this.definition.dictionary?.[key] ?? fallback;\n }\n\n /**\n * Translates an enum value \n * @param enumName The name of the enum \n * @param enumValue The value of the enum to translate \n * @param fallback\n * @returns The translated string or the enum value itself if not found \n */\n\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\n let e = this.definition.enums?.[enumName];\n\n if (!e) {\n return fallback || enumValue?.toString();\n }\n\n if (enumValue === null) {\n return e['[null]'] || e['[empty]'];\n } else if (enumValue === undefined) {\n return e['[undefined]'] || e['[empty]'];\n } else if (enumValue === '') {\n return e['empty'];\n } else {\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\n }\n }\n\n /** \n * Translates a form validation error\n * @param errorKey The key of the error to translate\n * @param error The error object\n */\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\n const errors = this.definition?.form?.validation?.errors;\n\n if (!errors) {\n return fallbackMessage;\n }\n\n const translatorFunc = errors[errorKey] ?? errors['*'];\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\n }\n\n /** \n * Translates validation errors \n * @param errors Validation errors object\n * @returns Array of translated validation errors\n */\n translateErrors(errors: any): TranslatedValidationError[] {\n const result: TranslatedValidationError[] = [];\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n result.push({\n key: key,\n value: errors[key],\n text: this.translateError(key, errors[key])\n });\n }\n }\n\n return result;\n }\n\n /** \n * Translates the first error in the validation errors object \n * @param errors Validation errors object\n * @returns TranslatedValidationError or undefined if no errors\n */\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\n const keys = Object.keys(errors);\n if (keys.length === 0) {\n return undefined;\n }\n\n const key = keys[0];\n const value = errors[key];\n return {\n key,\n value,\n text: this.translateError(key, value, fallbackMessage)\n };\n }\n\n /**\n * Clones and extends this object and returns a new Locale (without modifying this object).\n */\n extend(definition?: Omit<LocaleDefinition, 'name' | 'rtl'>): Locale {\n return new Locale({ ...this.definition, ...definition });\n }\n\n /**\n * \n * @param date Date string or timestamp\n * @returns Formatted date string based on the locale \n */\n formatDate(date: Date | string | number, format?: string): string {\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\n }\n\n format(object: any, formatterName: string, ...params: any[]): string {\n let formatter = this.definition.formatters?.[formatterName];\n\n if (!formatter) {\n throw Error(`The formatter \"${formatterName}\" is not defined in locale ${this.definition.name}`);\n }\n\n let formatterType = typeof formatter;\n if (formatterType === 'function') {\n return (formatter as ObjectFormatter)(object, ...params);\n } else if (Array.isArray(formatter)) {\n return formatter[+object];\n } else if (formatterType == 'object' && formatter != null) {\n return (formatter as any)[object] || '';\n } else {\n throw Error(`Invalid locale formatter: ${formatterName}`);\n }\n }\n}\n","import { ObjectFormatter } from \"./formatter\";\n\n/** Locale dictionary */\nexport type LocaleDictionary = { [key: string]: string; };\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\n\n/** Locale Error Translator */\nexport type LocaleValidationErrorTranslator = (error: any) => string;\n\n\n/** Locale validation error translator functions */\nexport type LocaleValidationErrorTranslators = {\n [key: string]: LocaleValidationErrorTranslator;\n};\n\n/**\n * A function to format the paging info of a table.\n * \n */\nexport type TableComponentPagingFormatter = (info: {\n /**\n * The first record in the current page.\n */\n firstRecord: number,\n\n /**\n * The last record in the current page.\n */\n lastRecord: number,\n\n /**\n * The total number of records.\n */\n totalRecords?: number,\n\n /**\n * The current page index.\n */\n currentPage: number\n}) => string;\n\n/** \n * Locale definition\n */\nexport interface LocaleDefinition {\n /** Locale name */\n readonly name: string;\n\n /** Does this locale belongs to a RTL language */\n readonly rtl?: boolean;\n\n /** Intl API default options */\n intl?: {\n date?: Intl.DateTimeFormatOptions\n }\n\n /** Locale dictionary */\n dictionary?: LocaleDictionary;\n enums?: LocaleEnums,\n form?: {\n validation?: {\n /** Form validation error translators. */\n errors?: LocaleValidationErrorTranslators\n }\n },\n data?: {\n logicalOperators?: {\n [operator: string]: string\n }\n },\n components?: {\n table?: {\n /**\n * No records found message.\n */\n noRecords?: string;\n\n /** \n * Error message displayed when loading data fails. \n */\n loadError?: string;\n\n /**\n * A format function to format the paging info.\n */\n pagingInfo?: TableComponentPagingFormatter;\n },\n select?: {\n placeholder?: string;\n }\n },\n\n formatters?: {\n // boolean?: {\n // [booleanKind: string]: string[] // [false, true]\n // },\n // enum?: {\n // [enumName: string]: { [enumValue: string]: string }\n // }\n // custom?: {\n [formatterName: string]: ObjectFormatter | string[] | {\n [value: string]: string\n }\n // },\n // date?: {\n // calendars?: {\n // [calendar: string]: {\n // days: string[],\n // daysShort: string[],\n // months: string[],\n // monthsShort: string[],\n // }\n // }\n // };\n // }\n }\n};\n\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Locale } from './locale';\nimport { LocaleChangeEvent } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizationService {\n private _locales: Locale[] = [];\n private _activeLocale?: Locale;\n private _changeSubject = new Subject<LocaleChangeEvent>();\n readonly change = this._changeSubject.asObservable();\n\n constructor() {\n }\n\n /** \n * Adds a Locale \n */\n add(locale: Locale): void;\n /** Adds an array of Locales to this LocaleProvider */\n add(locales: Locale[]): void;\n add(l: any): void {\n if (l instanceof Locale) {\n this._locales.push(l);\n } else if (Array.isArray(l)) {\n l.forEach(x => this.add(x));\n } else {\n throw Error('Invalid locale');\n }\n\n if (this._locales.length == 1) {\n this._activeLocale = this._locales[0];\n }\n }\n\n /** Changes the active locale */\n set(localeName: string): void {\n const locale = this._locales.find(x => x.name === localeName);\n if (locale) {\n this._changeSubject.next({ old: this._activeLocale, new: locale });\n this._activeLocale = locale;\n return;\n }\n\n throw Error('Locale not found.');\n }\n\n /** Gets the active locale */\n get(): Locale | undefined {\n return this._activeLocale;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n\n/**\n * Pipe to translate a dictionary key into a localized string.\n * It uses the LocalizationService to fetch the translation.\n * If the translation is not found, it returns the fallback string if provided.\n */\n@Pipe({\n name: 'ng0Translate',\n standalone: true,\n pure: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string, fallback?: string) {\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateEnum',\n standalone: true,\n pure: true\n})\nexport class TranslateEnumPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateBool',\n standalone: true,\n pure: true\n})\nexport class TranslateBooleanPipe implements PipeTransform {\n\n constructor(private localeProvider: LocalizationService) {\n }\n\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { EnvironmentInjector, inject, runInInjectionContext } from \"@angular/core\";\nimport { Locale } from \"./locale\";\nimport { LocalizationService } from \"./localization.service\";\n\n/**\n * Object formatter function type.\n * @param obj The object to format.\n * @param params Additional parameters for formatting.\n * @returns The formatted value.\n */\nexport type ObjectFormatter = (obj: any, ...params: any[]) => any;\n\n/**\n * Object formatter-like types. \n */\nexport type ObjectFormatterLike = ObjectFormatter | string | number | Array<any>;\n\n/**\n * Default object formatter function.\n * @param value The item to format.\n * @returns The formatted string.\n */\nexport function defaultFormatter(obj: any): string {\n return obj?.toString() || '';\n}\n\n/**\n * Creates a field formatter that retrieves the value of a specified field from an object.\n * @param field The field name to retrieve. Supports nested fields using dot notation (e.g., \"user.name\").\n * @returns An ObjectFormatter function.\n */\nexport function createFieldFormatter(field: string): ObjectFormatter {\n var subFields = field.split('.');\n // let value = row[subFields[0]];\n // for (let i = 1; i < subFields.length; i++) {\n // if (value == null) break;\n // value = value[subFields[i]];\n // }\n\n // return value;\n\n return (obj: any) => {\n let value = obj?.[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value?.[subFields[i]];\n }\n return value;\n }\n}\n\n/**\n * Creates an index formatter that retrieves the value at a specified index from an array.\n * @param index The index to retrieve (number or boolean).\n * @returns An ObjectFormatter function.\n */\nexport function createIndexFormatter(index: number | boolean): ObjectFormatter {\n return (obj: any) => {\n if (Array.isArray(obj)) {\n return obj[+index]; // use + to cast boolean values to numbers\n }\n\n throw Error('Object is not an array');\n }\n}\n\n/**\n * Creates a number formatter.\n * @param minimumIntegerDigits \n * @param minimumFractionDigits \n * @param maximumFractionDigits \n * @param useGrouping \n * @returns An ObjectFormatter function.\n */\nexport function createNumberFormatter(\n minimumIntegerDigits?: number,\n minimumFractionDigits?: number,\n maximumFractionDigits?: number,\n useGrouping = true): ObjectFormatter {\n let locale = inject(LocalizationService, { optional: true })?.get();\n const localeName = locale?.definition.name || 'en-US';\n\n const f = new Intl.NumberFormat(localeName, {\n minimumIntegerDigits,\n minimumFractionDigits,\n maximumFractionDigits,\n useGrouping,\n })\n\n return (n: number) => Number.isFinite(n) ? f.format(n) : '';\n}\n\n/**\n * Creates a currency formatter.\n * @param minFractions \n * @param maxFractions \n * @returns \n */\nexport function createCurrencyFormatter(minFractions = 1, maxFractions = 2): ObjectFormatter {\n return (n: number, minFractions, maxFractions) => Number.isFinite(n) ? n.toString() : '';\n}\n\n/**\n * Creates a date formatter.\n */\nexport function createDateFormatter(\n dateStyle?: 'short' | 'medium' | 'long' | 'full',\n timeStyle?: 'short' | 'medium' | 'long' | 'full',\n zone?: string[], // zone[0]: name, zone[1]: display ('long' | 'short' | 'shortOffset' | 'longOffset' | 'narrowOffset' | 'longGeneric' | 'shortGeneric')\n calendar?: string\n): ObjectFormatter;\nexport function createDateFormatter(options?: Intl.DateTimeFormatOptions): ObjectFormatter;\nexport function createDateFormatter(options?: any): ObjectFormatter {\n const locale = inject(LocalizationService, { optional: true })?.get();\n let intlOptions: Intl.DateTimeFormatOptions;\n\n if (arguments.length == 0 || (typeof arguments[0] == 'object')) {\n intlOptions = { ...locale?.definition.intl?.date, ...options };\n } else {\n intlOptions = {\n dateStyle: arguments[0],\n timeStyle: arguments[1],\n timeZone: arguments[2]?.[0],\n timeZoneName: arguments[2]?.[1],\n calendar: arguments[3],\n }\n }\n\n let intlFormatter: Intl.DateTimeFormat;\n\n try {\n intlFormatter = new Intl.DateTimeFormat(locale?.name, intlOptions as Intl.DateTimeFormatOptions);\n return (d: string | number | Date) => intlFormatter.format(new Date(d));\n } catch (err) {\n console.warn('Date formatter options are invalid. A fallback formatter will be used.', intlOptions, err);\n // Return a fallback formatter\n return (d: string | number | Date) => new Date(d).toLocaleString()\n }\n}\n\n/**\n * Creates a locale-based formatter.\n * @param locale The Locale object.\n * @param formatterName The format string in the form of \"formatterName:param1:param2:...\"\n * @returns A ValueFormatterFunction\n * @private\n */\nexport function createLocaleFormatter(formatterName: string): ObjectFormatter {\n let locale = inject(LocalizationService, { optional: true })?.get();\n\n if (locale == null) {\n throw Error('For using locale formatters, provide a Locale object.')\n }\n\n let formatter = locale.definition.formatters?.[formatterName];\n let formatterType = typeof formatter;\n\n if (!formatter) {\n console.warn(`The formatter \"${formatterName}\" is not defined in locale ${locale.definition.name}`);\n return defaultFormatter;\n }\n\n if (formatterType === 'function') {\n return formatter as ObjectFormatter;\n } else if (Array.isArray(formatter)) {\n return (index: number | boolean) => formatter[+index];\n } else if (formatterType == 'object' && formatter != null) {\n return (value: string) => (formatter as any)[value] || '';\n } else {\n throw Error(`Invalid locale formatter: ${formatterName}`);\n }\n}\n\n/**\n * Creates a composite formatter that applies multiple formatters in sequence. \n * @param formatters The list of ObjectFormatterLike values to compose.\n * @returns An ObjectFormatter function.\n */\nexport function createCompositeFormatter(...formatters: ObjectFormatterLike[]): ObjectFormatter {\n if (!Array.isArray(formatters) || formatters.length == 0) {\n throw Error('Composite formatter requires a non-empty array of formatters');\n }\n\n const formattersFuncs = formatters.map(item => createObjectFormatter(item as any));\n\n return (obj: any) => {\n let result = formattersFuncs[0](obj);\n for (let index = 1; index < formatters.length; index++) {\n result = formattersFuncs[index](result);\n }\n return result;\n }\n}\n\n/**\n * Creates an ObjectFormatter from various ObjectFormatterLike types.\n * @param formatter The ObjectFormatterLike value to convert. \n * @param locale Optional locale object for locale-based formatting.\n * @param params Additional parameters for the formatter.\n * @returns An ObjectFormatter function.\n */\nexport function createObjectFormatter(formatter: ObjectFormatterLike, ...params: any[]): ObjectFormatter {\n switch (typeof formatter) {\n case 'function':\n return formatter.bind(null, ...params);\n case 'number':\n return createIndexFormatter(formatter);\n case 'string':\n switch (formatter[0]) {\n case '#':\n return createNumberFormatter(...params);\n case '$':\n return createCurrencyFormatter(...params);\n case '@':\n return createDateFormatter(...params);\n case '*':\n return createLocaleFormatter(formatter.substring(1));\n default:\n return createFieldFormatter(formatter);\n }\n case 'object':\n if (Array.isArray(formatter) && formatter.length > 0) {\n const formatterSymbols = ['#', '$', '@', '*'];\n\n if (formatterSymbols.includes(formatter[0])) {\n return createObjectFormatter(formatter[0], ...formatter.slice(1));\n } else {\n return createCompositeFormatter(...formatter)\n }\n }\n break;\n }\n\n throw Error('invalid formatter', { cause: formatter });\n}\n\n/**\n * Creates a transform function that converts a ObjectFormatterLike value into a ObjectFormatter.\n * @param injector The EnvironmentInjector to use for dependency injection.\n * @returns A function that takes a ObjectFormatterLike and returns a ObjectFormatter.\n */\nexport function objectFormatterAttribute(injector: EnvironmentInjector): ((v: ObjectFormatterLike) => ObjectFormatter) {\n return (x: ObjectFormatterLike) => runInInjectionContext(injector, createObjectFormatter.bind(null, x));\n};\n","import { EnvironmentInjector, inject, Pipe, PipeTransform, runInInjectionContext } from '@angular/core';\nimport { createDateFormatter } from './formatter';\n\n@Pipe({\n name: 'ng0Date',\n standalone: true,\n pure: true\n})\nexport class DatePipe implements PipeTransform {\n private _injector = inject(EnvironmentInjector);\n\n transform(value: Date | string | number,\n dateStyle?: 'short' | 'medium' | 'long' | 'full',\n timeStyle?: 'short' | 'medium' | 'long' | 'full',\n zone?: string[],\n calendar?: string): string;\n transform(value: Date | string | number, options?: Intl.DateTimeFormatOptions): string;\n transform(value: Date | string | number, ...options: any[]): string {\n const formatter = runInInjectionContext(this._injector, createDateFormatter.bind(null, ...options));\n return formatter(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Localize',\n standalone: true,\n pure: false\n})\nexport class LocalizePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string) {\n return this._ls.get()?.translate(dictionaryKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeEnum',\n standalone: true,\n pure: false\n})\nexport class LocalizeEnumPipe implements PipeTransform {\n private _recompute = true;\n private _value?: string;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n if (this._recompute) {\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0LocalizeBool',\n standalone: true,\n pure: false\n})\nexport class LocalizeBooleanPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: any, falseKey = 'true', trueKey: 'false') {\n return this._ls.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Locale } from './locale';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeDate',\n standalone: true,\n pure: false\n})\nexport class LocalizeDatePipe implements PipeTransform {\n private _value?: string;\n private _recompute = true;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n transform(value: number | string, format?: string) {\n if (this._recompute) {\n this._value = this._ls.get()?.formatDate(value, format);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { EnvironmentInjector, inject, Pipe, PipeTransform, runInInjectionContext } from '@angular/core';\nimport { createObjectFormatter, ObjectFormatterLike } from './formatter';\n\n/**\n * Format pipe to format objects using various formatter types.\n */\n@Pipe({\n name: 'ng0Format',\n standalone: true,\n pure: true\n})\nexport class FormatPipe implements PipeTransform {\n private _injector = inject(EnvironmentInjector);\n \n transform(obj: any, formatter: ObjectFormatterLike, ...params: any[]): any {\n const frmtFunc = runInInjectionContext(this._injector, createObjectFormatter.bind(null, formatter, ...params));\n return frmtFunc(obj);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslateEnumPipe } from './translate-enum.pipe';\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\nimport { DatePipe } from './date.pipe';\nimport { LocalizePipe } from './localize.pipe';\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\nimport { LocalizeDatePipe } from './localize-date.pipe';\nimport { FormatPipe } from './format.pipe';\n\nconst Declares = [\n // Pure pipes\n TranslatePipe,\n TranslateEnumPipe,\n TranslateBooleanPipe,\n DatePipe,\n FormatPipe,\n\n // Impure pipes\n LocalizePipe,\n LocalizeEnumPipe,\n LocalizeBooleanPipe,\n LocalizeDatePipe\n];\n\n@NgModule({\n imports: Declares,\n exports: Declares\n})\nexport class LocalizationModule {\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { Locale } from './locale';\n\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\n\nexport interface TranslatedValidationError {\n /** Error key */\n key: string;\n \n /** Error object */\n value: any;\n \n /** localized error text */\n text?: string;\n }\n \n export interface LocaleChangeEvent {\n old?: Locale;\n new: Locale;\n }\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/formatter.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/format.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\nimport { TranslatedValidationError } from \"./types\";\nimport { ObjectFormatter } from \"./formatter\";\nimport { all } from 'deepmerge';\n\n/** Locale */\nexport class Locale {\n constructor(public readonly definition: LocaleDefinition) {\n }\n\n /** \n * Returns the name of the locale\n * @returns The name of the locale\n */\n get name(): string {\n return this.definition.name;\n }\n\n /** \n * Translates a key in the dictionary\n * @param key The key to look up\n * @param fallback Optional fallback value if the key is not found\n * @returns The translated string or the fallbackValue if not found\n */\n translate(key: string, fallback?: string): string | undefined {\n return this.definition.dictionary?.[key] ?? fallback;\n }\n\n /**\n * Translates an enum value \n * @param enumName The name of the enum \n * @param enumValue The value of the enum to translate \n * @param fallback\n * @returns The translated string or the enum value itself if not found \n */\n\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\n let e = this.definition.enums?.[enumName];\n\n if (!e) {\n return fallback || enumValue?.toString();\n }\n\n if (enumValue === null) {\n return e['[null]'] || e['[empty]'];\n } else if (enumValue === undefined) {\n return e['[undefined]'] || e['[empty]'];\n } else if (enumValue === '') {\n return e['empty'];\n } else {\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\n }\n }\n\n /** \n * Translates a form validation error\n * @param errorKey The key of the error to translate\n * @param error The error object\n */\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\n const errors = this.definition?.form?.validation?.errors;\n\n if (!errors) {\n return fallbackMessage;\n }\n\n const translatorFunc = errors[errorKey] ?? errors['*'];\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\n }\n\n /** \n * Translates validation errors \n * @param errors Validation errors object\n * @returns Array of translated validation errors\n */\n translateErrors(errors: any): TranslatedValidationError[] {\n const result: TranslatedValidationError[] = [];\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n result.push({\n key: key,\n value: errors[key],\n text: this.translateError(key, errors[key])\n });\n }\n }\n\n return result;\n }\n\n /** \n * Translates the first error in the validation errors object \n * @param errors Validation errors object\n * @returns TranslatedValidationError or undefined if no errors\n */\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\n const keys = Object.keys(errors);\n if (keys.length === 0) {\n return undefined;\n }\n\n const key = keys[0];\n const value = errors[key];\n return {\n key,\n value,\n text: this.translateError(key, value, fallbackMessage)\n };\n }\n\n /**\n * Clones and extends this object and returns a new Locale (without modifying this object).\n */\n extend(definition?: Omit<LocaleDefinition, 'name' | 'rtl'>): Locale {\n const newDefinition = all([this.definition, definition || {}]) as LocaleDefinition;\n return new Locale(newDefinition);\n }\n\n /**\n * \n * @param date Date string or timestamp\n * @returns Formatted date string based on the locale \n */\n formatDate(date: Date | string | number, format?: string): string {\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\n }\n\n format(object: any, formatterName: string, ...params: any[]): string {\n let formatter = this.definition.formatters?.[formatterName];\n\n if (!formatter) {\n throw Error(`The formatter \"${formatterName}\" is not defined in locale ${this.definition.name}`);\n }\n\n let formatterType = typeof formatter;\n if (formatterType === 'function') {\n return (formatter as ObjectFormatter)(object, ...params);\n } else if (Array.isArray(formatter)) {\n return formatter[+object];\n } else if (formatterType == 'object' && formatter != null) {\n return (formatter as any)[object] || '';\n } else {\n throw Error(`Invalid locale formatter: ${formatterName}`);\n }\n }\n}\n","import { ObjectFormatter } from \"./formatter\";\n\n/** Locale dictionary */\nexport type LocaleDictionary = { [key: string]: string; };\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\n\n/** Locale Error Translator */\nexport type LocaleValidationErrorTranslator = (error: any) => string;\n\n\n/** Locale validation error translator functions */\nexport type LocaleValidationErrorTranslators = {\n [key: string]: LocaleValidationErrorTranslator;\n};\n\n/**\n * A function to format the paging info of a table.\n * \n */\nexport type TableComponentPagingFormatter = (info: {\n /**\n * The first record in the current page.\n */\n firstRecord: number,\n\n /**\n * The last record in the current page.\n */\n lastRecord: number,\n\n /**\n * The total number of records.\n */\n totalRecords?: number,\n\n /**\n * The current page index.\n */\n currentPage: number\n}) => string;\n\n/** \n * Locale definition\n */\nexport interface LocaleDefinition {\n /** Locale name */\n readonly name: string;\n\n /** Does this locale belongs to a RTL language */\n readonly rtl?: boolean;\n\n /** Intl API default options */\n date?: {\n /**\n * Default options for Intl.DateTimeFormat API. \n * For more info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#parameters\n */\n options?: Intl.DateTimeFormatOptions\n }\n\n /** Locale dictionary */\n dictionary?: LocaleDictionary;\n enums?: LocaleEnums,\n form?: {\n validation?: {\n /** Form validation error translators. */\n errors?: LocaleValidationErrorTranslators\n }\n },\n data?: {\n logicalOperators?: {\n [operator: string]: string\n }\n },\n components?: {\n table?: {\n /**\n * No records found message.\n */\n noRecords?: string;\n\n /** \n * Error message displayed when loading data fails. \n */\n loadError?: string;\n\n /**\n * A format function to format the paging info.\n */\n pagingInfo?: TableComponentPagingFormatter;\n },\n select?: {\n placeholder?: string;\n }\n },\n\n formatters?: {\n // boolean?: {\n // [booleanKind: string]: string[] // [false, true]\n // },\n // enum?: {\n // [enumName: string]: { [enumValue: string]: string }\n // }\n // custom?: {\n [formatterName: string]: ObjectFormatter | string[] | {\n [value: string]: string\n }\n // },\n // date?: {\n // calendars?: {\n // [calendar: string]: {\n // days: string[],\n // daysShort: string[],\n // months: string[],\n // monthsShort: string[],\n // }\n // }\n // };\n // }\n }\n};\n\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Locale } from './locale';\nimport { LocaleChangeEvent } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizationService {\n private _locales: Locale[] = [];\n private _activeLocale?: Locale;\n private _changeSubject = new Subject<LocaleChangeEvent>();\n readonly change = this._changeSubject.asObservable();\n\n constructor() {\n }\n\n /** \n * Adds a Locale \n */\n add(locale: Locale): void;\n /** Adds an array of Locales to this LocaleProvider */\n add(locales: Locale[]): void;\n add(l: any): void {\n if (l instanceof Locale) {\n this._locales.push(l);\n } else if (Array.isArray(l)) {\n l.forEach(x => this.add(x));\n } else {\n throw Error('Invalid locale');\n }\n\n if (this._locales.length == 1) {\n this._activeLocale = this._locales[0];\n }\n }\n\n /** Changes the active locale */\n set(localeName: string): void {\n const locale = this._locales.find(x => x.name === localeName);\n if (locale) {\n this._changeSubject.next({ old: this._activeLocale, new: locale });\n this._activeLocale = locale;\n return;\n }\n\n throw Error('Locale not found.');\n }\n\n /** Gets the active locale */\n get(): Locale | undefined {\n return this._activeLocale;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n\n/**\n * Pipe to translate a dictionary key into a localized string.\n * It uses the LocalizationService to fetch the translation.\n * If the translation is not found, it returns the fallback string if provided.\n */\n@Pipe({\n name: 'ng0Translate',\n standalone: true,\n pure: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string, fallback?: string) {\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateEnum',\n standalone: true,\n pure: true\n})\nexport class TranslateEnumPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateBool',\n standalone: true,\n pure: true\n})\nexport class TranslateBooleanPipe implements PipeTransform {\n\n constructor(private localeProvider: LocalizationService) {\n }\n\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { EnvironmentInjector, inject, runInInjectionContext } from \"@angular/core\";\nimport { Locale } from \"./locale\";\nimport { LocalizationService } from \"./localization.service\";\n\n/**\n * Object formatter function type.\n * @param obj The object to format.\n * @param params Additional parameters for formatting.\n * @returns The formatted value.\n */\nexport type ObjectFormatter = (obj: any, ...params: any[]) => any;\n\n/**\n * Object formatter-like types. \n */\nexport type ObjectFormatterLike = ObjectFormatter | string | number | Array<any>;\n\n/**\n * Default object formatter function.\n * @param value The item to format.\n * @returns The formatted string.\n */\nexport function defaultFormatter(obj: any): string {\n return obj?.toString() || '';\n}\n\n/**\n * Creates a field formatter that retrieves the value of a specified field from an object.\n * @param field The field name to retrieve. Supports nested fields using dot notation (e.g., \"user.name\").\n * @returns An ObjectFormatter function.\n */\nexport function createFieldFormatter(field: string): ObjectFormatter {\n var subFields = field.split('.');\n // let value = row[subFields[0]];\n // for (let i = 1; i < subFields.length; i++) {\n // if (value == null) break;\n // value = value[subFields[i]];\n // }\n\n // return value;\n\n return (obj: any) => {\n let value = obj?.[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value?.[subFields[i]];\n }\n return value;\n }\n}\n\n/**\n * Creates an index formatter that retrieves the value at a specified index from an array.\n * @param index The index to retrieve (number or boolean).\n * @returns An ObjectFormatter function.\n */\nexport function createIndexFormatter(index: number | boolean): ObjectFormatter {\n return (obj: any) => {\n if (Array.isArray(obj)) {\n return obj[+index]; // use + to cast boolean values to numbers\n }\n\n throw Error('Object is not an array');\n }\n}\n\n/**\n * Creates a number formatter.\n * @param minimumIntegerDigits \n * @param minimumFractionDigits \n * @param maximumFractionDigits \n * @param useGrouping \n * @returns An ObjectFormatter function.\n */\nexport function createNumberFormatter(\n minimumIntegerDigits?: number,\n minimumFractionDigits?: number,\n maximumFractionDigits?: number,\n useGrouping = true): ObjectFormatter {\n let locale = inject(LocalizationService, { optional: true })?.get();\n const localeName = locale?.definition.name || 'en-US';\n\n const f = new Intl.NumberFormat(localeName, {\n minimumIntegerDigits,\n minimumFractionDigits,\n maximumFractionDigits,\n useGrouping,\n })\n\n return (n: number) => Number.isFinite(n) ? f.format(n) : '';\n}\n\n/**\n * Creates a currency formatter.\n * @param currency The ISO 4217 currency code (e.g., \"USD\", \"EUR\", \"IRR\").\n * @param minimumIntegerDigits Minimum number of integer digits to use. Default is 1.\n * @param minimumFractionDigits Minimum number of fraction digits to use. Default is 1.\n * @param maximumFractionDigits Maximum number of fraction digits to use. Default is 2.\n * @param notation The notation to use. Default is 'standard'.\n * @param currencySign The currency sign to use. Default is 'standard'.\n * @returns An ObjectFormatter function.\n */\nexport function createCurrencyFormatter(\n currency?: string,\n notation?: 'standard' | 'scientific' | 'engineering' | 'compact',\n minimumIntegerDigits?: number,\n minimumFractionDigits?: number,\n maximumFractionDigits?: number,\n currencySign?: 'standard' | 'accounting'\n): ObjectFormatter {\n let locale = inject(LocalizationService, { optional: true })?.get();\n const localeName = locale?.definition.name || 'en-US';\n\n const f = new Intl.NumberFormat(localeName, {\n style: 'currency',\n currency: currency,\n notation: notation,\n currencySign: currencySign,\n minimumIntegerDigits: minimumIntegerDigits,\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n })\n\n return (n: number) => Number.isFinite(n) ? f.format(n) : '';\n}\n\n/**\n * Creates a date formatter.\n * The formatter can be created using predefined styles or custom Intl.DateTimeFormatOptions.\n * Predefined styles:\n * - dateStyle: 'short' | 'medium' | 'long' | 'full'\n * - timeStyle: 'short' | 'medium' | 'long' | 'full'\n * - zone: [name, display?] (e.g., ['UTC', 'short'])\n * - calendar: string (e.g., 'gregory', 'persian', 'islamic')\n * #### Custom options:\n * - Any valid Intl.DateTimeFormatOptions can be used for custom formatting.\n * @returns An ObjectFormatter function.\n */\nexport function createDateFormatter(\n dateStyle?: 'short' | 'medium' | 'long' | 'full',\n timeStyle?: 'short' | 'medium' | 'long' | 'full',\n zone?: string[], // zone[0]: name, zone[1]: display ('long' | 'short' | 'shortOffset' | 'longOffset' | 'narrowOffset' | 'longGeneric' | 'shortGeneric')\n calendar?: string\n): ObjectFormatter;\nexport function createDateFormatter(options?: Intl.DateTimeFormatOptions): ObjectFormatter;\nexport function createDateFormatter(options?: any): ObjectFormatter {\n const locale = inject(LocalizationService, { optional: true })?.get();\n let intlOptions: Intl.DateTimeFormatOptions;\n let localeOptions = locale?.definition.date?.options;\n let length = arguments.length;\n\n if (length == 0) {\n intlOptions = { ...localeOptions };\n } else if (length == 1 && typeof arguments[0] == 'object') {\n intlOptions = { ...localeOptions, ...arguments[0] };\n } else {\n intlOptions = {\n dateStyle: length > 0 ? arguments[0] : localeOptions?.dateStyle,\n timeStyle: length > 1 ? arguments[1] : localeOptions?.timeStyle,\n timeZone: length > 2 ? arguments[2]?.[0] : localeOptions?.timeZone,\n timeZoneName: length > 2 ? arguments[2]?.[1] : localeOptions?.timeZoneName,\n calendar: length > 3 ? arguments[3] : localeOptions?.calendar,\n }\n }\n\n let intlFormatter: Intl.DateTimeFormat;\n\n try {\n intlFormatter = new Intl.DateTimeFormat(locale?.name, intlOptions as Intl.DateTimeFormatOptions);\n return (d: string | number | Date) => intlFormatter.format(new Date(d));\n } catch (err) {\n console.warn('Date formatter options are invalid. A fallback formatter will be used.', intlOptions, err);\n // Return a fallback formatter\n return (d: string | number | Date) => new Date(d).toLocaleString()\n }\n}\n\n/**\n * Creates a locale-based formatter.\n * @param locale The Locale object.\n * @param formatterName The format string in the form of \"formatterName:param1:param2:...\"\n * @returns A ValueFormatterFunction\n * @private\n */\nexport function createLocaleFormatter(formatterName: string): ObjectFormatter {\n let locale = inject(LocalizationService, { optional: true })?.get();\n\n if (locale == null) {\n throw Error('For using locale formatters, provide a Locale object.')\n }\n\n let formatter = locale.definition.formatters?.[formatterName];\n let formatterType = typeof formatter;\n\n if (!formatter) {\n console.warn(`The formatter \"${formatterName}\" is not defined in locale ${locale.definition.name}`);\n return defaultFormatter;\n }\n\n if (formatterType === 'function') {\n return formatter as ObjectFormatter;\n } else if (Array.isArray(formatter)) {\n return (index: number | boolean) => formatter[+index];\n } else if (formatterType == 'object' && formatter != null) {\n return (value: string) => (formatter as any)[value] || '';\n } else {\n throw Error(`Invalid locale formatter: ${formatterName}`);\n }\n}\n\n/**\n * Creates a composite formatter that applies multiple formatters in sequence. \n * @param formatters The list of ObjectFormatterLike values to compose.\n * @returns An ObjectFormatter function.\n */\nexport function createCompositeFormatter(...formatters: ObjectFormatterLike[]): ObjectFormatter {\n if (!Array.isArray(formatters) || formatters.length == 0) {\n throw Error('Composite formatter requires a non-empty array of formatters');\n }\n\n const formattersFuncs = formatters.map(item => createObjectFormatter(item as any));\n\n return (obj: any) => {\n let result = formattersFuncs[0](obj);\n for (let index = 1; index < formatters.length; index++) {\n result = formattersFuncs[index](result);\n }\n return result;\n }\n}\n\n/**\n * Creates an ObjectFormatter from various ObjectFormatterLike types.\n * @param formatter The ObjectFormatterLike value to convert.\n * A formatter can be:\n * - A function: used directly as the formatter.\n * - A number: creates an index formatter that retrieves the value at the specified index from an array.\n * - A string: can be a field name (e.g., \"user.name\"), a predefined formatter symbol (\"#\", \"$\", \"@\"), or a locale formatter name (e.g., \"*date\").\n * - An array: if the first element is a predefined formatter symbol, it creates a formatter using that symbol and the rest of the elements as parameters. \n * Otherwise, it creates a composite formatter that applies each element in sequence.\n * @param params Additional parameters for the formatter.\n * @returns An ObjectFormatter function.\n */\nexport function createObjectFormatter(formatter: ObjectFormatterLike, ...params: any[]): ObjectFormatter {\n switch (typeof formatter) {\n case 'function':\n return formatter.bind(null, ...params);\n case 'number':\n return createIndexFormatter(formatter);\n case 'string':\n switch (formatter) {\n case '#':\n return createNumberFormatter(...params);\n case '$':\n return createCurrencyFormatter(...params);\n case '@':\n return createDateFormatter(...params);\n case '*':\n return createLocaleFormatter(formatter.substring(1));\n default:\n return createFieldFormatter(formatter);\n }\n case 'object':\n if (Array.isArray(formatter) && formatter.length > 0) {\n const formatterSymbols = ['#', '$', '@', '*'];\n\n if (formatterSymbols.includes(formatter[0])) {\n return createObjectFormatter(formatter[0], ...formatter.slice(1));\n } else {\n return createCompositeFormatter(...formatter)\n }\n }\n break;\n }\n\n throw Error('invalid formatter', { cause: formatter });\n}\n\n/**\n * Creates a transform function that converts a ObjectFormatterLike value into a ObjectFormatter.\n * @param injector The EnvironmentInjector to use for dependency injection.\n * @returns A function that takes a ObjectFormatterLike and returns a ObjectFormatter.\n */\nexport function objectFormatterAttribute(injector: EnvironmentInjector): ((v: ObjectFormatterLike) => ObjectFormatter) {\n return (x: ObjectFormatterLike) => runInInjectionContext(injector, createObjectFormatter.bind(null, x));\n};\n","import { EnvironmentInjector, inject, Pipe, PipeTransform, runInInjectionContext } from '@angular/core';\nimport { createDateFormatter } from './formatter';\n\n@Pipe({\n name: 'ng0Date',\n standalone: true,\n pure: true\n})\nexport class DatePipe implements PipeTransform {\n private _injector = inject(EnvironmentInjector);\n\n transform(value: Date | string | number,\n dateStyle?: 'short' | 'medium' | 'long' | 'full',\n timeStyle?: 'short' | 'medium' | 'long' | 'full',\n zone?: string[],\n calendar?: string): string;\n transform(value: Date | string | number, options?: Intl.DateTimeFormatOptions): string;\n transform(value: Date | string | number, ...options: any[]): string {\n const formatter = runInInjectionContext(this._injector, createDateFormatter.bind(null, ...options));\n return formatter(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Localize',\n standalone: true,\n pure: false\n})\nexport class LocalizePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string) {\n return this._ls.get()?.translate(dictionaryKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeEnum',\n standalone: true,\n pure: false\n})\nexport class LocalizeEnumPipe implements PipeTransform {\n private _recompute = true;\n private _value?: string;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n if (this._recompute) {\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0LocalizeBool',\n standalone: true,\n pure: false\n})\nexport class LocalizeBooleanPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: any, falseKey = 'true', trueKey: 'false') {\n return this._ls.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Locale } from './locale';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeDate',\n standalone: true,\n pure: false\n})\nexport class LocalizeDatePipe implements PipeTransform {\n private _value?: string;\n private _recompute = true;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n transform(value: number | string, format?: string) {\n if (this._recompute) {\n this._value = this._ls.get()?.formatDate(value, format);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { EnvironmentInjector, inject, Pipe, PipeTransform, runInInjectionContext } from '@angular/core';\nimport { createObjectFormatter, ObjectFormatterLike } from './formatter';\n\n/**\n * Format pipe to format objects using various formatter types.\n */\n@Pipe({\n name: 'ng0Format',\n standalone: true,\n pure: true\n})\nexport class FormatPipe implements PipeTransform {\n private readonly _injector = inject(EnvironmentInjector);\n \n transform(obj: any, formatter: ObjectFormatterLike, ...params: any[]): any {\n const frmtFunc = runInInjectionContext(this._injector, createObjectFormatter.bind(null, formatter, ...params));\n return frmtFunc(obj);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslateEnumPipe } from './translate-enum.pipe';\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\nimport { DatePipe } from './date.pipe';\nimport { LocalizePipe } from './localize.pipe';\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\nimport { LocalizeDatePipe } from './localize-date.pipe';\nimport { FormatPipe } from './format.pipe';\n\nconst Declares = [\n // Pure pipes\n TranslatePipe,\n TranslateEnumPipe,\n TranslateBooleanPipe,\n DatePipe,\n FormatPipe,\n\n // Impure pipes\n LocalizePipe,\n LocalizeEnumPipe,\n LocalizeBooleanPipe,\n LocalizeDatePipe\n];\n\n@NgModule({\n imports: Declares,\n exports: Declares\n})\nexport class LocalizationModule {\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { Locale } from './locale';\n\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\n\nexport interface TranslatedValidationError {\n /** Error key */\n key: string;\n \n /** Error object */\n value: any;\n \n /** localized error text */\n text?: string;\n }\n \n export interface LocaleChangeEvent {\n old?: Locale;\n new: Locale;\n }\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":";;;;;;AAKA;MACa,MAAM,CAAA;AACW,IAAA,UAAA;AAA5B,IAAA,WAAA,CAA4B,UAA4B,EAAA;QAA5B,IAAA,CAAA,UAAU,GAAV,UAAU;IACtC;AAEA;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;IAC7B;AAEA;;;;;AAKG;IACH,SAAS,CAAC,GAAW,EAAE,QAAiB,EAAA;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,QAAQ;IACtD;AAEA;;;;;;AAMG;AAEH,IAAA,aAAa,CAAC,QAAgB,EAAE,SAA6C,EAAE,QAAiB,EAAA;QAC9F,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEzC,IAAI,CAAC,CAAC,EAAE;AACN,YAAA,OAAO,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE;QAC1C;AAEA,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QACpC;AAAO,aAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAClC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QACzC;AAAO,aAAA,IAAI,SAAS,KAAK,EAAE,EAAE;AAC3B,YAAA,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB;aAAO;AACL,YAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE;QACtE;IACF;AAEA;;;;AAIC;AACD,IAAA,cAAc,CAAC,QAAgB,EAAE,KAAU,EAAE,kBAAsC,SAAS,EAAA;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM;QAExD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,eAAe;QACxB;QAEA,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACtD,QAAA,OAAO,OAAO,cAAc,KAAK,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe;IACvF;AAEA;;;;AAIG;AACH,IAAA,eAAe,CAAC,MAAW,EAAA;QACzB,MAAM,MAAM,GAAgC,EAAE;AAC9C,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;gBACrD,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,GAAG,EAAE,GAAG;AACR,oBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;AAC3C,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,MAAW,EAAE,eAAA,GAAsC,SAAS,EAAA;QAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,OAAO;YACL,GAAG;YACH,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe;SACtD;IACH;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,UAAmD,EAAA;AACxD,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC,CAAqB;AAClF,QAAA,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC;IAClC;AAEA;;;;AAIC;IACD,UAAU,CAAC,IAA4B,EAAE,MAAe,EAAA;AACtD,QAAA,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE;IACpH;AAEA,IAAA,MAAM,CAAC,MAAW,EAAE,aAAqB,EAAE,GAAG,MAAa,EAAA;QACzD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,aAAa,CAAC;QAE3D,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,aAAa,CAAA,2BAAA,EAA8B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA,CAAE,CAAC;QAClG;AAEA,QAAA,IAAI,aAAa,GAAG,OAAO,SAAS;AACpC,QAAA,IAAI,aAAa,KAAK,UAAU,EAAE;AAChC,YAAA,OAAQ,SAA6B,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;QAC1D;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACnC,YAAA,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC;QAC3B;aAAO,IAAI,aAAa,IAAI,QAAQ,IAAI,SAAS,IAAI,IAAI,EAAE;AACzD,YAAA,OAAQ,SAAiB,CAAC,MAAM,CAAC,IAAI,EAAE;QACzC;aAAO;AACL,YAAA,MAAM,KAAK,CAAC,CAAA,0BAAA,EAA6B,aAAa,CAAA,CAAE,CAAC;QAC3D;IACF;AACD;;ACzBA;;MChHY,mBAAmB,CAAA;IACtB,QAAQ,GAAa,EAAE;AACvB,IAAA,aAAa;AACb,IAAA,cAAc,GAAG,IAAI,OAAO,EAAqB;AAChD,IAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAEpD,IAAA,WAAA,GAAA;IACA;AAQA,IAAA,GAAG,CAAC,CAAM,EAAA;AACR,QAAA,IAAI,CAAC,YAAY,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACvB;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3B,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B;aAAO;AACL,YAAA,MAAM,KAAK,CAAC,gBAAgB,CAAC;QAC/B;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvC;IACF;;AAGA,IAAA,GAAG,CAAC,UAAkB,EAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;QAC7D,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAClE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;YAC3B;QACF;AAEA,QAAA,MAAM,KAAK,CAAC,mBAAmB,CAAC;IAClC;;IAGA,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,aAAa;IAC7B;wGA5CW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHD;;;;AAIG;MAMU,aAAa,CAAA;AACJ,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;IACvB;IAEA,SAAS,CAAC,aAAqB,EAAE,QAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,aAAa;IAC5E;wGANW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCLY,iBAAiB,CAAA;AACR,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;IACvB;AAEA;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,SAA6C,EAAE,QAAgB,EAAE,QAAiB,EAAA;AAC1F,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IACrE;wGAfW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,oBAAoB,CAAA;AAEX,IAAA,cAAA;AAApB,IAAA,WAAA,CAAoB,cAAmC,EAAA;QAAnC,IAAA,CAAA,cAAc,GAAd,cAAc;IAClC;AAEA,IAAA,SAAS,CAAC,KAAU,EAAE,WAAmB,MAAM,EAAE,UAAkB,OAAO,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACzE;wGAPW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACUD;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,GAAQ,EAAA;AACrC,IAAA,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAChC;AAEA;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;;;;;;;IAShC,OAAO,CAAC,GAAQ,KAAI;QAChB,IAAI,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,KAAK,IAAI,IAAI;gBAAE;YACnB,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACjC;AACA,QAAA,OAAO,KAAK;AAChB,IAAA,CAAC;AACL;AAEA;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAuB,EAAA;IACxD,OAAO,CAAC,GAAQ,KAAI;AAChB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB;AAEA,QAAA,MAAM,KAAK,CAAC,wBAAwB,CAAC;AACzC,IAAA,CAAC;AACL;AAEA;;;;;;;AAOG;AACG,SAAU,qBAAqB,CACjC,oBAA6B,EAC7B,qBAA8B,EAC9B,qBAA8B,EAC9B,WAAW,GAAG,IAAI,EAAA;AAClB,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IACnE,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,OAAO;IAErD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;QACxC,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,WAAW;AACd,KAAA,CAAC;IAEF,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/D;AAEA;;;;;;;;;AASG;AACG,SAAU,uBAAuB,CACnC,QAAiB,EACjB,QAAgE,EAChE,oBAA6B,EAC7B,qBAA8B,EAC9B,qBAA8B,EAC9B,YAAwC,EAAA;AAExC,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IACnE,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,OAAO;IAErD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACxC,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,oBAAoB,EAAE,oBAAoB;AAC1C,QAAA,qBAAqB,EAAE,qBAAqB;AAC5C,QAAA,qBAAqB,EAAE,qBAAqB;AAC/C,KAAA,CAAC;IAEF,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/D;AAqBM,SAAU,mBAAmB,CAAC,OAAa,EAAA;AAC7C,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;AACrE,IAAA,IAAI,WAAuC;IAC3C,IAAI,aAAa,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO;AACpD,IAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAE7B,IAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACb,QAAA,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE;IACtC;AAAO,SAAA,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;QACvD,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;IACvD;SAAO;AACH,QAAA,WAAW,GAAG;AACV,YAAA,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS;AAC/D,YAAA,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS;YAC/D,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,QAAQ;YAClE,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,YAAY;AAC1E,YAAA,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,QAAQ;SAChE;IACL;AAEA,IAAA,IAAI,aAAkC;AAEtC,IAAA,IAAI;AACA,QAAA,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,WAAyC,CAAC;AAChG,QAAA,OAAO,CAAC,CAAyB,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E;IAAE,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,wEAAwE,EAAE,WAAW,EAAE,GAAG,CAAC;;AAExG,QAAA,OAAO,CAAC,CAAyB,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;IACtE;AACJ;AAEA;;;;;;AAMG;AACG,SAAU,qBAAqB,CAAC,aAAqB,EAAA;AACvD,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;AAEnE,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,QAAA,MAAM,KAAK,CAAC,uDAAuD,CAAC;IACxE;IAEA,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,aAAa,CAAC;AAC7D,IAAA,IAAI,aAAa,GAAG,OAAO,SAAS;IAEpC,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkB,aAAa,CAAA,2BAAA,EAA8B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAA,CAAE,CAAC;AACnG,QAAA,OAAO,gBAAgB;IAC3B;AAEA,IAAA,IAAI,aAAa,KAAK,UAAU,EAAE;AAC9B,QAAA,OAAO,SAA4B;IACvC;AAAO,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACjC,OAAO,CAAC,KAAuB,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC;IACzD;SAAO,IAAI,aAAa,IAAI,QAAQ,IAAI,SAAS,IAAI,IAAI,EAAE;QACvD,OAAO,CAAC,KAAa,KAAM,SAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;IAC7D;SAAO;AACH,QAAA,MAAM,KAAK,CAAC,CAAA,0BAAA,EAA6B,aAAa,CAAA,CAAE,CAAC;IAC7D;AACJ;AAEA;;;;AAIG;AACG,SAAU,wBAAwB,CAAC,GAAG,UAAiC,EAAA;AACzE,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACtD,QAAA,MAAM,KAAK,CAAC,8DAA8D,CAAC;IAC/E;AAEA,IAAA,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,qBAAqB,CAAC,IAAW,CAAC,CAAC;IAElF,OAAO,CAAC,GAAQ,KAAI;QAChB,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpC,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC3C;AACA,QAAA,OAAO,MAAM;AACjB,IAAA,CAAC;AACL;AAEA;;;;;;;;;;;AAWG;SACa,qBAAqB,CAAC,SAA8B,EAAE,GAAG,MAAa,EAAA;IAClF,QAAQ,OAAO,SAAS;AACpB,QAAA,KAAK,UAAU;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;AAC1C,QAAA,KAAK,QAAQ;AACT,YAAA,OAAO,oBAAoB,CAAC,SAAS,CAAC;AAC1C,QAAA,KAAK,QAAQ;YACT,QAAQ,SAAS;AACb,gBAAA,KAAK,GAAG;AACJ,oBAAA,OAAO,qBAAqB,CAAC,GAAG,MAAM,CAAC;AAC3C,gBAAA,KAAK,GAAG;AACJ,oBAAA,OAAO,uBAAuB,CAAC,GAAG,MAAM,CAAC;AAC7C,gBAAA,KAAK,GAAG;AACJ,oBAAA,OAAO,mBAAmB,CAAC,GAAG,MAAM,CAAC;AACzC,gBAAA,KAAK,GAAG;oBACJ,OAAO,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAA;AACI,oBAAA,OAAO,oBAAoB,CAAC,SAAS,CAAC;;AAElD,QAAA,KAAK,QAAQ;AACT,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClD,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAE7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AACzC,oBAAA,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrE;qBAAO;AACH,oBAAA,OAAO,wBAAwB,CAAC,GAAG,SAAS,CAAC;gBACjD;YACJ;YACA;;IAGR,MAAM,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC1D;AAEA;;;;AAIG;AACG,SAAU,wBAAwB,CAAC,QAA6B,EAAA;AAClE,IAAA,OAAO,CAAC,CAAsB,KAAK,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3G;AAAC;;MCrRY,QAAQ,CAAA;AACX,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAQ/C,IAAA,SAAS,CAAC,KAA6B,EAAE,GAAG,OAAc,EAAA;AACxD,QAAA,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AACnG,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB;wGAZW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBALpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,YAAY,CAAA;AACH,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;IACvB;AAEA,IAAA,SAAS,CAAC,aAAqB,EAAA;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC;IACjD;wGANW,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCEY,gBAAgB,CAAA;AAIP,IAAA,GAAA;IAHZ,UAAU,GAAG,IAAI;AACjB,IAAA,MAAM;AAEd,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;QACrB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9E;AAEA;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,SAA6C,EAAE,QAAgB,EAAE,QAAiB,EAAA;AAC1F,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;QAEA,OAAO,IAAI,CAAC,MAAM;IACpB;wGAxBW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCAY,mBAAmB,CAAA;AACV,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;IACvB;AAEA,IAAA,SAAS,CAAC,KAAU,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAgB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9D;wGANW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCGY,gBAAgB,CAAA;AAIP,IAAA,GAAA;AAHZ,IAAA,MAAM;IACN,UAAU,GAAG,IAAI;AAEzB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAA,CAAA,GAAG,GAAH,GAAG;QACrB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9E;IAEA,SAAS,CAAC,KAAsB,EAAE,MAAe,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AACvD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;QAEA,OAAO,IAAI,CAAC,MAAM;IACpB;wGAfW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACND;;AAEG;MAMU,UAAU,CAAA;AACJ,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAExD,IAAA,SAAS,CAAC,GAAQ,EAAE,SAA8B,EAAE,GAAG,MAAa,EAAA;QAClE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,CAAC;AAC9G,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC;IACtB;wGANW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBALtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACED,MAAM,QAAQ,GAAG;;IAEf,aAAa;IACb,iBAAiB;IACjB,oBAAoB;IACpB,QAAQ;IACR,UAAU;;IAGV,YAAY;IACZ,gBAAgB;IAChB,mBAAmB;IACnB;CACD;MAMY,kBAAkB,CAAA;wGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAlB,kBAAkB,EAAA,OAAA,EAAA;;YAjB7B,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,QAAQ;YACR,UAAU;;YAGV,YAAY;YACZ,gBAAgB;YAChB,mBAAmB;YACnB,gBAAgB,CAAA,EAAA,OAAA,EAAA;;YAVhB,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,QAAQ;YACR,UAAU;;YAGV,YAAY;YACZ,gBAAgB;YAChB,mBAAmB;YACnB,gBAAgB,CAAA,EAAA,CAAA;yGAOL,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE;AACV,iBAAA;;;MC1BY,MAAM,GAAG,IAAI,cAAc,CAA+B,QAAQ;;ACJ/E;;AAEG;;;;"}
|
package/localization/index.d.ts
CHANGED
|
@@ -42,13 +42,26 @@ declare function createIndexFormatter(index: number | boolean): ObjectFormatter;
|
|
|
42
42
|
declare function createNumberFormatter(minimumIntegerDigits?: number, minimumFractionDigits?: number, maximumFractionDigits?: number, useGrouping?: boolean): ObjectFormatter;
|
|
43
43
|
/**
|
|
44
44
|
* Creates a currency formatter.
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
47
|
-
* @
|
|
45
|
+
* @param currency The ISO 4217 currency code (e.g., "USD", "EUR", "IRR").
|
|
46
|
+
* @param minimumIntegerDigits Minimum number of integer digits to use. Default is 1.
|
|
47
|
+
* @param minimumFractionDigits Minimum number of fraction digits to use. Default is 1.
|
|
48
|
+
* @param maximumFractionDigits Maximum number of fraction digits to use. Default is 2.
|
|
49
|
+
* @param notation The notation to use. Default is 'standard'.
|
|
50
|
+
* @param currencySign The currency sign to use. Default is 'standard'.
|
|
51
|
+
* @returns An ObjectFormatter function.
|
|
48
52
|
*/
|
|
49
|
-
declare function createCurrencyFormatter(
|
|
53
|
+
declare function createCurrencyFormatter(currency?: string, notation?: 'standard' | 'scientific' | 'engineering' | 'compact', minimumIntegerDigits?: number, minimumFractionDigits?: number, maximumFractionDigits?: number, currencySign?: 'standard' | 'accounting'): ObjectFormatter;
|
|
50
54
|
/**
|
|
51
55
|
* Creates a date formatter.
|
|
56
|
+
* The formatter can be created using predefined styles or custom Intl.DateTimeFormatOptions.
|
|
57
|
+
* Predefined styles:
|
|
58
|
+
* - dateStyle: 'short' | 'medium' | 'long' | 'full'
|
|
59
|
+
* - timeStyle: 'short' | 'medium' | 'long' | 'full'
|
|
60
|
+
* - zone: [name, display?] (e.g., ['UTC', 'short'])
|
|
61
|
+
* - calendar: string (e.g., 'gregory', 'persian', 'islamic')
|
|
62
|
+
* #### Custom options:
|
|
63
|
+
* - Any valid Intl.DateTimeFormatOptions can be used for custom formatting.
|
|
64
|
+
* @returns An ObjectFormatter function.
|
|
52
65
|
*/
|
|
53
66
|
declare function createDateFormatter(dateStyle?: 'short' | 'medium' | 'long' | 'full', timeStyle?: 'short' | 'medium' | 'long' | 'full', zone?: string[], // zone[0]: name, zone[1]: display ('long' | 'short' | 'shortOffset' | 'longOffset' | 'narrowOffset' | 'longGeneric' | 'shortGeneric')
|
|
54
67
|
calendar?: string): ObjectFormatter;
|
|
@@ -70,7 +83,12 @@ declare function createCompositeFormatter(...formatters: ObjectFormatterLike[]):
|
|
|
70
83
|
/**
|
|
71
84
|
* Creates an ObjectFormatter from various ObjectFormatterLike types.
|
|
72
85
|
* @param formatter The ObjectFormatterLike value to convert.
|
|
73
|
-
*
|
|
86
|
+
* A formatter can be:
|
|
87
|
+
* - A function: used directly as the formatter.
|
|
88
|
+
* - A number: creates an index formatter that retrieves the value at the specified index from an array.
|
|
89
|
+
* - A string: can be a field name (e.g., "user.name"), a predefined formatter symbol ("#", "$", "@"), or a locale formatter name (e.g., "*date").
|
|
90
|
+
* - An array: if the first element is a predefined formatter symbol, it creates a formatter using that symbol and the rest of the elements as parameters.
|
|
91
|
+
* Otherwise, it creates a composite formatter that applies each element in sequence.
|
|
74
92
|
* @param params Additional parameters for the formatter.
|
|
75
93
|
* @returns An ObjectFormatter function.
|
|
76
94
|
*/
|
|
@@ -128,8 +146,12 @@ interface LocaleDefinition {
|
|
|
128
146
|
/** Does this locale belongs to a RTL language */
|
|
129
147
|
readonly rtl?: boolean;
|
|
130
148
|
/** Intl API default options */
|
|
131
|
-
|
|
132
|
-
|
|
149
|
+
date?: {
|
|
150
|
+
/**
|
|
151
|
+
* Default options for Intl.DateTimeFormat API.
|
|
152
|
+
* For more info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#parameters
|
|
153
|
+
*/
|
|
154
|
+
options?: Intl.DateTimeFormatOptions;
|
|
133
155
|
};
|
|
134
156
|
/** Locale dictionary */
|
|
135
157
|
dictionary?: LocaleDictionary;
|
|
@@ -310,7 +332,7 @@ declare class DatePipe implements PipeTransform {
|
|
|
310
332
|
* Format pipe to format objects using various formatter types.
|
|
311
333
|
*/
|
|
312
334
|
declare class FormatPipe implements PipeTransform {
|
|
313
|
-
private _injector;
|
|
335
|
+
private readonly _injector;
|
|
314
336
|
transform(obj: any, formatter: ObjectFormatterLike, ...params: any[]): any;
|
|
315
337
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormatPipe, never>;
|
|
316
338
|
static ɵpipe: i0.ɵɵPipeDeclaration<FormatPipe, "ng0Format", true>;
|
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.53",
|
|
4
4
|
"description": "Angular+Bootstrap Component Library",
|
|
5
5
|
"homepage": "https://bootkitlib.github.io/",
|
|
6
6
|
"author": "BootKit",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"@angular/cdk": ">=20.2.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"tslib": "^2.3.0"
|
|
25
|
+
"tslib": "^2.3.0",
|
|
26
|
+
"deepmerge": "^4.3.1"
|
|
26
27
|
},
|
|
27
28
|
"sideEffects": false,
|
|
28
29
|
"module": "fesm2022/bootkit-ng0.mjs",
|