@nanahoshi/mona-ui 0.23.2 → 0.23.3
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/fesm2022/nanahoshi-mona-ui-calendar.mjs +7 -4
- package/fesm2022/nanahoshi-mona-ui-color-gradient.mjs +5 -2
- package/fesm2022/nanahoshi-mona-ui-dropdowns.mjs +6 -3
- package/fesm2022/nanahoshi-mona-ui-editor.mjs +5 -2
- package/fesm2022/{nanahoshi-mona-ui-grid-grid-footer-row.component-CIMXz60d.mjs → nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs} +2 -2
- package/fesm2022/{nanahoshi-mona-ui-grid-grid-list.component-CpeheGXU.mjs → nanahoshi-mona-ui-grid-grid-list.component-B2pBOuLa.mjs} +4 -4
- package/fesm2022/{nanahoshi-mona-ui-grid-grid-row.component-B_5ay_Nz.mjs → nanahoshi-mona-ui-grid-grid-row.component-Buf4evf5.mjs} +2 -2
- package/fesm2022/{nanahoshi-mona-ui-grid-grid-virtual-list.component-BzKywU5b.mjs → nanahoshi-mona-ui-grid-grid-virtual-list.component-1RdqLEa9.mjs} +4 -4
- package/fesm2022/{nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-IewqeT4m.mjs → nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs} +15 -12
- package/fesm2022/nanahoshi-mona-ui-grid.mjs +1 -1
- package/fesm2022/nanahoshi-mona-ui-i18n.mjs +61 -12
- package/fesm2022/nanahoshi-mona-ui-locales.mjs +352 -279
- package/fesm2022/nanahoshi-mona-ui-multi-select.mjs +5 -2
- package/fesm2022/nanahoshi-mona-ui-notification.mjs +17 -2
- package/fesm2022/nanahoshi-mona-ui-pager.mjs +10 -7
- package/fesm2022/nanahoshi-mona-ui-popup.mjs +15 -1
- package/fesm2022/nanahoshi-mona-ui-rating.mjs +5 -2
- package/fesm2022/nanahoshi-mona-ui-scroll-view.mjs +6 -3
- package/package.json +1 -1
- package/types/nanahoshi-mona-ui-i18n.d.ts +32 -4
- package/types/nanahoshi-mona-ui-notification.d.ts +1 -0
|
@@ -11,13 +11,16 @@ import { themeRaisedBackdropClasses, createElementControlId, rxTimeout } from '@
|
|
|
11
11
|
import { DateTime } from 'luxon';
|
|
12
12
|
import { skip, fromEvent } from 'rxjs';
|
|
13
13
|
import { twMerge } from 'tailwind-merge';
|
|
14
|
-
import { MonaI18nService, injectComponentDirection, gregorianDateTime, formatGregorianDateToLocaleString, getLocaleFirstDayOfWeek, gregorianDateTimeFromObject
|
|
14
|
+
import { formatNumber, MonaI18nService, injectComponentDirection, gregorianDateTime, formatGregorianDateToLocaleString, getLocaleFirstDayOfWeek, gregorianDateTimeFromObject } from '@nanahoshi/mona-ui/i18n';
|
|
15
15
|
import { cva } from 'class-variance-authority';
|
|
16
16
|
|
|
17
|
+
function localizeYear(year) {
|
|
18
|
+
return formatNumber(year, "en-US", { useGrouping: false });
|
|
19
|
+
}
|
|
17
20
|
const CALENDAR_DEFAULT_MESSAGES = {
|
|
18
21
|
calendarLabel: (formattedMonthAndYear) => `Calendar, ${formattedMonthAndYear}`,
|
|
19
22
|
yearViewLabel: (year) => `Year view, ${year}`,
|
|
20
|
-
decadeViewLabel: (start, end) => `Decade view, ${start} - ${end}`,
|
|
23
|
+
decadeViewLabel: (start, end) => `Decade view, ${localizeYear(start)} - ${localizeYear(end)}`,
|
|
21
24
|
nextMonth: "Next month",
|
|
22
25
|
nextYear: "Next year",
|
|
23
26
|
nextDecade: "Next decade",
|
|
@@ -28,8 +31,8 @@ const CALENDAR_DEFAULT_MESSAGES = {
|
|
|
28
31
|
goToToday: (formattedDate) => `Go to today, ${formattedDate}`,
|
|
29
32
|
switchToYearView: (currentMonthAndYear) => `Switch to year view, currently ${currentMonthAndYear}`,
|
|
30
33
|
switchToDecadeView: (currentYear) => `Switch to decade view, currently ${currentYear}`,
|
|
31
|
-
decadeRange: (start, end) => `${start} to ${end}`,
|
|
32
|
-
yearCellLabel: (year) => `Year ${year}`
|
|
34
|
+
decadeRange: (start, end) => `${localizeYear(start)} to ${localizeYear(end)}`,
|
|
35
|
+
yearCellLabel: (year) => `Year ${localizeYear(year)}`
|
|
33
36
|
};
|
|
34
37
|
|
|
35
38
|
class CalendarDecadeCellTemplateDirective {
|
|
@@ -10,10 +10,13 @@ import { DropdownButtonComponent, DropdownButtonItemComponent } from '@nanahoshi
|
|
|
10
10
|
import { NumericTextBoxComponent, NumericTextBoxPrefixTemplateDirective } from '@nanahoshi/mona-ui/numeric-text-box';
|
|
11
11
|
import { SliderComponent } from '@nanahoshi/mona-ui/slider';
|
|
12
12
|
import { TextBoxComponent, TextBoxPrefixTemplateDirective, TextBoxSuffixTemplateDirective } from '@nanahoshi/mona-ui/text-box';
|
|
13
|
-
import { MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
13
|
+
import { formatNumber, MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
14
14
|
import { Subject, fromEvent, switchMap, takeUntil, distinctUntilChanged } from 'rxjs';
|
|
15
15
|
import { cva } from 'class-variance-authority';
|
|
16
16
|
|
|
17
|
+
function localizeNumber(value) {
|
|
18
|
+
return formatNumber(value, "en-US");
|
|
19
|
+
}
|
|
17
20
|
const COLOR_GRADIENT_DEFAULT_MESSAGES = {
|
|
18
21
|
apply: "Apply",
|
|
19
22
|
cancel: "Cancel",
|
|
@@ -24,7 +27,7 @@ const COLOR_GRADIENT_DEFAULT_MESSAGES = {
|
|
|
24
27
|
currentColor: "Current color",
|
|
25
28
|
previousColor: "Previous color",
|
|
26
29
|
saturationAndValue: "Color saturation and value",
|
|
27
|
-
saturationAndValueText: (saturation, value) => `Saturation ${saturation}%, Value ${value}%`,
|
|
30
|
+
saturationAndValueText: (saturation, value) => `Saturation ${localizeNumber(saturation)}%, Value ${localizeNumber(value)}%`,
|
|
28
31
|
switchColorMode: "Switch color mode"
|
|
29
32
|
};
|
|
30
33
|
|
|
@@ -6,7 +6,7 @@ import { PreventableEvent } from '@nanahoshi/mona-ui/common';
|
|
|
6
6
|
import { Subject, takeUntil, take, filter, switchMap, fromEvent } from 'rxjs';
|
|
7
7
|
import { ConnectionPositionPair } from '@angular/cdk/overlay';
|
|
8
8
|
import { PopupService, dropdownPopupAnimation } from '@nanahoshi/mona-ui/popup';
|
|
9
|
-
import { MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
9
|
+
import { formatNumber, MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
10
10
|
import { cva } from 'class-variance-authority';
|
|
11
11
|
import { themeOverlaySurfaceClasses } from '@nanahoshi/mona-ui/internal';
|
|
12
12
|
|
|
@@ -593,10 +593,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
593
593
|
}]
|
|
594
594
|
}], ctorParameters: () => [] });
|
|
595
595
|
|
|
596
|
+
function localizeNumber(value) {
|
|
597
|
+
return formatNumber(value, "en-US");
|
|
598
|
+
}
|
|
596
599
|
const DROPDOWNS_DEFAULT_MESSAGES = {
|
|
597
|
-
itemPosition: (text, position, total) => `${text}, ${position} of ${total}`,
|
|
600
|
+
itemPosition: (text, position, total) => `${text}, ${localizeNumber(position)} of ${localizeNumber(total)}`,
|
|
598
601
|
noResultsFound: "No results found",
|
|
599
|
-
resultsAvailable: (count) => `${count} result${count === 1 ? "" : "s"} available`
|
|
602
|
+
resultsAvailable: (count) => `${localizeNumber(count)} result${count === 1 ? "" : "s"} available`
|
|
600
603
|
};
|
|
601
604
|
|
|
602
605
|
class DropdownLiveRegionDirective {
|
|
@@ -4,7 +4,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
4
4
|
import { FormsModule } from '@angular/forms';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { ImmutableSet, any, List, range } from '@mirei/ts-collections';
|
|
7
|
-
import { MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
7
|
+
import { formatNumber, MonaI18nService } from '@nanahoshi/mona-ui/i18n';
|
|
8
8
|
import { Extension, Editor } from '@tiptap/core';
|
|
9
9
|
import { Color } from '@tiptap/extension-color';
|
|
10
10
|
import { FontFamily } from '@tiptap/extension-font-family';
|
|
@@ -256,6 +256,9 @@ const Indent = Extension.create({
|
|
|
256
256
|
}
|
|
257
257
|
});
|
|
258
258
|
|
|
259
|
+
function localizeNumber(value) {
|
|
260
|
+
return formatNumber(value, "en-US");
|
|
261
|
+
}
|
|
259
262
|
const EDITOR_DEFAULT_MESSAGES = {
|
|
260
263
|
addColumnAfter: "Add column after",
|
|
261
264
|
addColumnBefore: "Add column before",
|
|
@@ -277,7 +280,7 @@ const EDITOR_DEFAULT_MESSAGES = {
|
|
|
277
280
|
enterUrl: "Enter the URL",
|
|
278
281
|
fontSize: "Font Size",
|
|
279
282
|
format: "Format",
|
|
280
|
-
heading: (level) => `Heading ${level}`,
|
|
283
|
+
heading: (level) => `Heading ${localizeNumber(level)}`,
|
|
281
284
|
heightPx: "Height (px)",
|
|
282
285
|
imageUrl: "Image URL",
|
|
283
286
|
indent: "Indent",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, computed, input, Directive, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
import { a as GridService, v as gridFooterTableCellThemeVariants, w as gridFooterTableRowThemeVariants, m as GridLockedCellDirective } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
3
|
+
import { a as GridService, v as gridFooterTableCellThemeVariants, w as gridFooterTableRowThemeVariants, m as GridLockedCellDirective } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs';
|
|
4
4
|
import { NgTemplateOutlet } from '@angular/common';
|
|
5
5
|
import { ImmutableDictionary } from '@mirei/ts-collections';
|
|
6
6
|
|
|
@@ -166,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
166
166
|
}], propDecorators: { groupKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupKey", required: false }] }] } });
|
|
167
167
|
|
|
168
168
|
export { GridFooterRowComponent };
|
|
169
|
-
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-footer-row.component-
|
|
169
|
+
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs.map
|
|
@@ -5,9 +5,9 @@ import { inject, DestroyRef, ElementRef, viewChild, computed, input, afterNextRe
|
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { ImmutableList } from '@mirei/ts-collections';
|
|
7
7
|
import { fromEvent } from 'rxjs';
|
|
8
|
-
import { G as GridNavigationService, g as gridListBaseThemeVariants, a as GridService, b as gridRowDragPreviewThemeVariants, c as gridListTableThemeVariants, d as GridColgroupComponent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
9
|
-
import { G as GridAddRowComponent, a as GridDetailRowComponent, b as GridGroupRowComponent, c as GridRowComponent } from './nanahoshi-mona-ui-grid-grid-row.component-
|
|
10
|
-
import { GridFooterRowComponent } from './nanahoshi-mona-ui-grid-grid-footer-row.component-
|
|
8
|
+
import { G as GridNavigationService, g as gridListBaseThemeVariants, a as GridService, b as gridRowDragPreviewThemeVariants, c as gridListTableThemeVariants, d as GridColgroupComponent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs';
|
|
9
|
+
import { G as GridAddRowComponent, a as GridDetailRowComponent, b as GridGroupRowComponent, c as GridRowComponent } from './nanahoshi-mona-ui-grid-grid-row.component-Buf4evf5.mjs';
|
|
10
|
+
import { GridFooterRowComponent } from './nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs';
|
|
11
11
|
|
|
12
12
|
const ROW_MOVE_DURATION = 200;
|
|
13
13
|
const ROW_MOVE_EASING = "cubic-bezier(0.2, 0, 0, 1)";
|
|
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
173
173
|
}], ctorParameters: () => [], propDecorators: { bodyTableElementRef: [{ type: i0.ViewChild, args: ["bodyTable", { isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
|
|
174
174
|
|
|
175
175
|
export { GridListComponent };
|
|
176
|
-
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-list.component-
|
|
176
|
+
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-list.component-B2pBOuLa.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, computed, input, Directive, Component, signal, ElementRef, viewChild, output, effect, untracked, afterNextRender, ChangeDetectionStrategy, model, Injector, LOCALE_ID } from '@angular/core';
|
|
3
|
-
import { a as GridService, i as gridListTableCellThemeVariants, j as gridCellEditorBaseThemeVariants, k as gridCellEditorInputThemeVariants, l as gridListTableRowThemeVariants, m as GridLockedCellDirective, n as GridLogicalCellDirective, o as gridGroupRowThemeVariants, G as GridNavigationService, p as gridCellBaseThemeVariants, q as gridCellContainerThemeVariants, r as gridCellDirtyIndicatorThemeVariants, s as gridCellTextThemeVariants, t as gridRowReorderHandleThemeVariants, u as gridSelectionCellThemeVariants } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
3
|
+
import { a as GridService, i as gridListTableCellThemeVariants, j as gridCellEditorBaseThemeVariants, k as gridCellEditorInputThemeVariants, l as gridListTableRowThemeVariants, m as GridLockedCellDirective, n as GridLogicalCellDirective, o as gridGroupRowThemeVariants, G as GridNavigationService, p as gridCellBaseThemeVariants, q as gridCellContainerThemeVariants, r as gridCellDirtyIndicatorThemeVariants, s as gridCellTextThemeVariants, t as gridRowReorderHandleThemeVariants, u as gridSelectionCellThemeVariants } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs';
|
|
4
4
|
import { NgTemplateOutlet, formatDate } from '@angular/common';
|
|
5
5
|
import { ContextMenuComponent } from '@nanahoshi/mona-ui/contextmenu';
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -943,4 +943,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
943
943
|
}], propDecorators: { index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: true }] }], row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }] } });
|
|
944
944
|
|
|
945
945
|
export { GridAddRowComponent as G, GridDetailRowComponent as a, GridGroupRowComponent as b, GridRowComponent as c };
|
|
946
|
-
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-row.component-
|
|
946
|
+
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-row.component-Buf4evf5.mjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as GridNavigationService, a as GridService, g as gridListBaseThemeVariants, e as gridFooterThemeVariants, f as gridFooterTableThemeVariants, c as gridListTableThemeVariants, h as GRID_DEFAULT_VIRTUAL_ROW_HEIGHT, d as GridColgroupComponent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
1
|
+
import { G as GridNavigationService, a as GridService, g as gridListBaseThemeVariants, e as gridFooterThemeVariants, f as gridFooterTableThemeVariants, c as gridListTableThemeVariants, h as GRID_DEFAULT_VIRTUAL_ROW_HEIGHT, d as GridColgroupComponent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs';
|
|
2
2
|
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { inject, DestroyRef, ElementRef, Injector, viewChild, computed, input, effect, untracked, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
@@ -6,8 +6,8 @@ import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
6
6
|
import { ImmutableList } from '@mirei/ts-collections';
|
|
7
7
|
import { rxTimeout } from '@nanahoshi/mona-ui/internal';
|
|
8
8
|
import { fromEvent } from 'rxjs';
|
|
9
|
-
import { G as GridAddRowComponent, a as GridDetailRowComponent, b as GridGroupRowComponent, c as GridRowComponent } from './nanahoshi-mona-ui-grid-grid-row.component-
|
|
10
|
-
import { GridFooterRowComponent } from './nanahoshi-mona-ui-grid-grid-footer-row.component-
|
|
9
|
+
import { G as GridAddRowComponent, a as GridDetailRowComponent, b as GridGroupRowComponent, c as GridRowComponent } from './nanahoshi-mona-ui-grid-grid-row.component-Buf4evf5.mjs';
|
|
10
|
+
import { GridFooterRowComponent } from './nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs';
|
|
11
11
|
|
|
12
12
|
class GridVirtualListComponent {
|
|
13
13
|
#destroyRef;
|
|
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
170
170
|
}], ctorParameters: () => [], propDecorators: { addRowScrollElementRef: [{ type: i0.ViewChild, args: ["addRowScrollElement", { isSignal: true }] }], bodyTableElementRef: [{ type: i0.ViewChild, args: ["bodyTable", { isSignal: true }] }], footerScrollElementRef: [{ type: i0.ViewChild, args: ["footerScrollElement", { isSignal: true }] }], viewport: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
|
|
171
171
|
|
|
172
172
|
export { GridVirtualListComponent };
|
|
173
|
-
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-virtual-list.component-
|
|
173
|
+
//# sourceMappingURL=nanahoshi-mona-ui-grid-grid-virtual-list.component-1RdqLEa9.mjs.map
|
|
@@ -5,7 +5,7 @@ import { isPlatformBrowser, DOCUMENT as DOCUMENT$1, NgTemplateOutlet } from '@an
|
|
|
5
5
|
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { form } from '@angular/forms/signals';
|
|
7
7
|
import { Dictionary, ImmutableList, ImmutableDictionary, ImmutableSet, KeyValuePair, select, sequenceEqual, orderBy, any } from '@mirei/ts-collections';
|
|
8
|
-
import { MonaI18nService, injectComponentDirection } from '@nanahoshi/mona-ui/i18n';
|
|
8
|
+
import { formatNumber, MonaI18nService, injectComponentDirection } from '@nanahoshi/mona-ui/i18n';
|
|
9
9
|
import { Query } from '@nanahoshi/mona-ui/query';
|
|
10
10
|
import { Subject, BehaviorSubject, filter, startWith, pairwise, map, skip, fromEvent, take, debounceTime } from 'rxjs';
|
|
11
11
|
import { v4 } from 'uuid';
|
|
@@ -220,13 +220,16 @@ class RowReorderEvent extends PreventableEvent {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
function localizeNumber(value) {
|
|
224
|
+
return formatNumber(value, "en-US");
|
|
225
|
+
}
|
|
223
226
|
const GRID_DEFAULT_MESSAGES = {
|
|
224
227
|
all: "(All)",
|
|
225
228
|
apply: "Apply",
|
|
226
229
|
cancel: "Cancel",
|
|
227
230
|
cancelRowEdit: "Cancel row edit",
|
|
228
231
|
columns: "Columns",
|
|
229
|
-
columnsSelected: (count) => `${count} selected columns`,
|
|
232
|
+
columnsSelected: (count) => `${localizeNumber(count)} selected columns`,
|
|
230
233
|
delete: "Delete",
|
|
231
234
|
deleteRowConfirmation: "Are you sure you want to delete this item?",
|
|
232
235
|
deleteRowTitle: "Delete row?",
|
|
@@ -243,7 +246,7 @@ const GRID_DEFAULT_MESSAGES = {
|
|
|
243
246
|
noData: "No data",
|
|
244
247
|
remove: "Remove",
|
|
245
248
|
removeRow: "Remove row",
|
|
246
|
-
reorderRow: (rowNumber) => `Reorder row ${rowNumber}`,
|
|
249
|
+
reorderRow: (rowNumber) => `Reorder row ${localizeNumber(rowNumber)}`,
|
|
247
250
|
resizeColumn: "Resize column",
|
|
248
251
|
rowReorder: "Row reorder",
|
|
249
252
|
rowReorderDisabled: "Row reordering is disabled.",
|
|
@@ -256,12 +259,12 @@ const GRID_DEFAULT_MESSAGES = {
|
|
|
256
259
|
rowReorderDisabledVirtualScroll: "Row reordering isn't available while virtual scrolling is enabled.",
|
|
257
260
|
rowReorderHandleAriaLabel: (rowLabel, keyboardHint, disabledReason) => `${rowLabel}. ${keyboardHint}${disabledReason ? ` ${disabledReason}` : ""}`,
|
|
258
261
|
rowReorderKeyboardHint: "Use Alt plus Up Arrow or Alt plus Down Arrow to move.",
|
|
259
|
-
rowReorderMoved: (fromRowNumber, toPosition) => `Moved row ${fromRowNumber} to position ${toPosition}.`,
|
|
262
|
+
rowReorderMoved: (fromRowNumber, toPosition) => `Moved row ${localizeNumber(fromRowNumber)} to position ${localizeNumber(toPosition)}.`,
|
|
260
263
|
rowValidationError: "This row has validation errors.",
|
|
261
264
|
save: "Save",
|
|
262
265
|
saveRow: "Save row",
|
|
263
266
|
selectAllRows: "Select all rows",
|
|
264
|
-
selectRow: (rowNumber) => `Select row ${rowNumber}`
|
|
267
|
+
selectRow: (rowNumber) => `Select row ${localizeNumber(rowNumber)}`
|
|
265
268
|
};
|
|
266
269
|
|
|
267
270
|
/**
|
|
@@ -5745,15 +5748,15 @@ class GridComponent {
|
|
|
5745
5748
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: GridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5746
5749
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: GridComponent, isStandalone: true, selector: "mona-grid", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeValues: { classPropertyName: "pageSizeValues", publicName: "pageSizeValues", isSignal: true, isRequired: false, transformFunction: null }, resizeMethod: { classPropertyName: "resizeMethod", publicName: "resizeMethod", isSignal: true, isRequired: false, transformFunction: null }, responsivePager: { classPropertyName: "responsivePager", publicName: "responsivePager", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, rowKey: { classPropertyName: "rowKey", publicName: "rowKey", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "class": "baseClass()", "attr.data-uid": "uid", "attr.aria-busy": "gridService.serverLoading() || null" } }, providers: [GridService, GridNavigationService, FilterService], queries: [{ propertyName: "columnDefinitions", predicate: GRID_COLUMN_DEFINITION, isSignal: true }, { propertyName: "gridDetailTemplate", first: true, predicate: GridDetailTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "noDataTemplate", first: true, predicate: GridNoDataTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "toolbarTemplate", first: true, predicate: GridToolbarTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "footerScrollElement", first: true, predicate: ["footerScrollElement"], descendants: true, isSignal: true }, { propertyName: "gridHeaderElement", first: true, predicate: ["gridHeaderElement"], descendants: true, isSignal: true }, { propertyName: "gridHeaderTableElement", first: true, predicate: ["headerTable"], descendants: true, isSignal: true }, { propertyName: "groupColumnList", first: true, predicate: ["groupColumnList"], descendants: true, isSignal: true }, { propertyName: "toolbarElement", first: true, predicate: ["toolbarElement"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (toolbarTemplate()) {\n <div\n class=\"flex min-h-10 items-center gap-2 border-b border-border p-2\"\n #toolbarElement\n (keydown)=\"onToolbarKeydown($event)\">\n <ng-container\n [ngTemplateOutlet]=\"toolbarTemplate() ?? null\"\n [ngTemplateOutletContext]=\"toolbarContext()\"></ng-container>\n <button monaButton size=\"small\" #columnsButton>{{ messages().columns }}</button>\n <mona-popup\n [anchor]=\"columnsButton\"\n [animation]=\"{ leave: [] }\"\n [width]=\"'max-content'\"\n [anchorConnectionPoint]=\"'bottomleft'\"\n [popupConnectionPoint]=\"'topleft'\"\n #popup>\n <mona-grid-column-chooser\n (apply)=\"popup.closePopup()\"\n (cancel)=\"popup.closePopup()\"></mona-grid-column-chooser>\n </mona-popup>\n </div>\n}\n\n@if (groupable()) {\n <div\n [class]=\"groupPanelClass()\"\n cdkDropList\n #groupColumnList=\"cdkDropList\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListEntered)=\"onColumnDragEnterForGrouping()\"\n (cdkDropListExited)=\"onColumnDragExitForGrouping()\"\n (cdkDropListDropped)=\"onColumnDropForGrouping($event)\">\n @if (gridService.groupColumns().length !== 0) {\n @for (groupColumn of gridService.groupColumns(); track $index) {\n <mona-chip\n [removable]=\"true\"\n size=\"small\"\n [rounded]=\"rounded()\"\n (click)=\"onGroupingColumnSort(groupColumn)\"\n (remove)=\"onGroupingColumnRemove($event, groupColumn)\">\n @if (groupColumn.groupSortDirection === \"asc\") {\n <svg lucideArrowDown [size]=\"16\" aria-hidden=\"true\"></svg>\n } @else if (groupColumn.groupSortDirection === \"desc\") {\n <svg lucideArrowUp [size]=\"16\" aria-hidden=\"true\"></svg>\n }\n <span>{{ groupColumn.title }}</span>\n <span class=\"ms-2\" (click)=\"$event.stopPropagation()\" #groupReorder>\n <svg lucideEllipsisVertical [size]=\"16\" aria-hidden=\"true\"></svg>\n </span>\n <mona-popup-menu size=\"small\" [target]=\"groupReorder\">\n <mona-popup-menu-item\n [disabled]=\"$first\"\n (menuClick)=\"onGroupColumnReorder(groupColumn, 'prev')\">\n <ng-template monaPopupMenuTextTemplate>\n <svg lucideArrowLeft [size]=\"16\" aria-hidden=\"true\" class=\"rtl:rotate-180\"></svg>\n {{ messages().moveAsPrevious }}\n </ng-template>\n </mona-popup-menu-item>\n <mona-popup-menu-item\n [disabled]=\"$last\"\n (menuClick)=\"onGroupColumnReorder(groupColumn, 'next')\">\n <ng-template monaPopupMenuTextTemplate>\n <svg lucideArrowRight [size]=\"16\" aria-hidden=\"true\" class=\"rtl:rotate-180\"></svg>\n {{ messages().moveAsNext }}\n </ng-template>\n </mona-popup-menu-item>\n </mona-popup-menu>\n </mona-chip>\n }\n } @else if (groupPanelPlaceholderVisible()) {\n <span [class]=\"groupPanelPlaceholderClass()\">{{ messages().dragColumnHeaderToGroup }}</span>\n }\n </div>\n}\n<div class=\"flex flex-col flex-1 min-h-0\" [attr.role]=\"groupable() ? 'treegrid' : 'grid'\">\n <div [class]=\"headerClass()\" [style.margin-inline-end.px]=\"headerMarginInlineEnd()\" #gridHeaderElement>\n <div>\n <table\n role=\"presentation\"\n #headerTable\n [class]=\"headerTableClass()\"\n [style.width.px]=\"gridService.tableWidth()\">\n <colgroup monaGridColgroup></colgroup>\n <thead role=\"rowgroup\" [style.visibility]=\"!gridWidthSet() ? 'hidden' : undefined\">\n <tr\n role=\"row\"\n cdkDropList\n [cdkDropListConnectedTo]=\"groupable() ? [groupColumnList()!] : []\"\n (cdkDropListDropped)=\"onColumnDrop()\"\n [class]=\"headerTableRowClass()\">\n @for (layoutColumn of gridService.layout(); track layoutColumn.key) {\n @if (layoutColumn.kind === \"column\") {\n @let column = layoutColumn.column;\n @let columnSortable =\n gridService.sortableOptions().enabled &&\n column.kind === \"data\" &&\n column.sortable &&\n column.field !== \"\";\n <th\n scope=\"col\"\n role=\"columnheader\"\n cdkDrag\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n monaGridLogicalCell\n [cellKind]=\"'header'\"\n [columnId]=\"column.id\"\n [rowIndex]=\"-1\"\n [colIndex]=\"layoutColumn.logicalIndex\"\n [section]=\"'header'\"\n [firstInRow]=\"layoutColumn.firstInRow\"\n [lastInRow]=\"layoutColumn.lastInRow\"\n (toggleExpand)=\"onColumnSort(column)\"\n [cdkDragData]=\"column\"\n [cdkDragDisabled]=\"isColumnDragDisabled(column)\"\n [class]=\"headerTableCellClass()\"\n (mouseenter)=\"onColumnMouseEnter(column)\"\n (cdkDragEntered)=\"onColumnDragEnter($event)\"\n (cdkDragStarted)=\"onColumnDragStart($event)\"\n [style.min-width.px]=\"column.minWidth\"\n [style.width.px]=\"column.calculatedWidth\"\n [attr.aria-sort]=\"\n columnSortable ? (column.columnSortDirection | columnAriaSort) : null\n \">\n <div\n [class]=\"headerTableColumnWrapClass()\"\n [style.cursor]=\"columnSortable ? 'pointer' : 'default'\">\n @if (column.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"column.headerTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: column,\n column\n }\"></ng-container>\n } @else if (column.titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"column.titleTemplate\"></ng-container>\n } @else {\n <span\n [class]=\"headerTableColumnTitleClass()\"\n (click)=\"onColumnSort(column)\"\n [title]=\"column.title\"\n >{{ column.title }}</span\n >\n }\n\n <div [class]=\"columnActionsClass()\" [attr.data-column-actions]=\"true\">\n @if (\n gridService.sortableOptions().enabled &&\n column.columnSortDirection !== null\n ) {\n <div class=\"inline-flex shrink-0 items-center gap-0.5\">\n @if (column.columnSortDirection === \"asc\") {\n <svg lucideArrowUp [size]=\"16\" aria-hidden=\"true\"></svg>\n } @else {\n <svg lucideArrowDown [size]=\"16\" aria-hidden=\"true\"></svg>\n }\n @if (\n gridService.sortableOptions().mode === \"multiple\" &&\n gridService.sortableOptions().showIndices &&\n column.sortIndex !== null\n ) {\n <span class=\"tabular-nums\">{{ column.sortIndex }}</span>\n }\n </div>\n }\n @if (filterMenuEnabled()) {\n @if (column.kind === \"data\" && column.filterable) {\n <mona-grid-filter-menu\n [column]=\"column\"\n [type]=\"column.dataType\"\n (apply)=\"\n onColumnFilter(column, $event)\n \"></mona-grid-filter-menu>\n }\n }\n </div>\n </div>\n @if (\n dropColumn() === column &&\n dragColumn() &&\n gridService.reorderableOptions().enabled &&\n !groupingInProgress()\n ) {\n <span [class]=\"columnDropHintClass()\"> </span>\n }\n @if (gridService.resizableOptions().enabled && !columnDragging()) {\n <div\n monaGridColumnResizeHandler\n [column]=\"column\"\n [class]=\"columnResizerClass()\"\n (resizeStart)=\"onColumnResizeStart()\"\n (resizeEnd)=\"onColumnResizeEnd($event)\"></div>\n }\n <ng-template cdkDragPreview>\n <div [class]=\"columnDragPreviewClass()\">\n <span>{{ column.title }}</span>\n </div>\n </ng-template>\n <ng-template cdkDragPlaceholder>\n @if (groupingInProgress()) {\n <mona-chip\n style=\"z-index: 10; pointer-events: none\"\n [removable]=\"true\"\n [rounded]=\"rounded()\"\n >{{ column.title }}</mona-chip\n >\n }\n </ng-template>\n </th>\n @if (columnDragging() && dragColumn() === column) {\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n [class]=\"headerTableCellClass()\"\n [style.min-width.px]=\"column.minWidth\"\n [style.width.px]=\"column.calculatedWidth\">\n <div [class]=\"headerTableColumnWrapClass()\">\n @if (column.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"column.headerTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: column,\n column\n }\"></ng-container>\n } @else if (column.titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"column.titleTemplate\"></ng-container>\n } @else {\n <span\n [class]=\"headerTableColumnTitleClass()\"\n (click)=\"onColumnSort(column)\"\n [title]=\"column.title\"\n >{{ column.title }}</span\n >\n }\n </div>\n </th>\n }\n } @else if (layoutColumn.kind === \"reorder\") {\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n monaGridLogicalCell\n [cellKind]=\"'command'\"\n [columnId]=\"'$rowReorder'\"\n [rowIndex]=\"-1\"\n [colIndex]=\"layoutColumn.logicalIndex\"\n [section]=\"'header'\"\n [firstInRow]=\"layoutColumn.firstInRow\"\n [lastInRow]=\"layoutColumn.lastInRow\"\n scope=\"col\"\n [attr.aria-label]=\"gridService.messages().rowReorder\"\n class=\"border-e border-border\"\n [style.width.px]=\"layoutColumn.width\"></th>\n } @else if (layoutColumn.kind === \"selection\") {\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n monaGridLogicalCell\n [cellKind]=\"'command'\"\n [columnId]=\"'$selection'\"\n [rowIndex]=\"-1\"\n [colIndex]=\"layoutColumn.logicalIndex\"\n [section]=\"'header'\"\n [firstInRow]=\"layoutColumn.firstInRow\"\n [lastInRow]=\"layoutColumn.lastInRow\"\n scope=\"col\"\n class=\"border-e border-border\"\n [style.width.px]=\"layoutColumn.width\">\n @if (\n gridService.selectableOptions().mode === \"multiple\" &&\n gridService.selectableOptions().showSelectAll !== false\n ) {\n <mona-grid-select-all-checkbox />\n }\n </th>\n } @else {\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n scope=\"col\"\n class=\"border-e border-border\"\n [style.width.px]=\"layoutColumn.width\"></th>\n }\n }\n </tr>\n @if (filterRowEnabled()) {\n <tr role=\"row\" [class]=\"headerTableRowClass()\">\n @for (layoutColumn of gridService.layout(); track layoutColumn.key) {\n @if (layoutColumn.kind === \"column\") {\n @let column = layoutColumn.column;\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n scope=\"col\"\n class=\"border-e border-border overflow-hidden\"\n [style.width.px]=\"layoutColumn.width\"\n [attr.aria-label]=\"messages().filterByColumn(column.title)\">\n @if (column.kind === \"data\" && column.field && column.filterable) {\n <mona-grid-filter-row-cell\n [column]=\"column\"\n (apply)=\"onColumnFilter(column, $event)\" />\n }\n </th>\n } @else {\n <th\n [monaGridLockedCell]=\"layoutColumn.key\"\n [lockedCellHeader]=\"true\"\n scope=\"col\"\n class=\"border-e border-border\"\n [style.width.px]=\"layoutColumn.width\"></th>\n }\n }\n </tr>\n }\n </thead>\n </table>\n </div>\n </div>\n\n @defer (when gridWidthSet()) {\n @if (gridService.virtualScrollOptions().enabled) {\n @if (gridService.viewRows().length !== 0 || gridService.addRowVisible()) {\n <mona-grid-virtual-list [data]=\"gridService.viewRows()\" />\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyGridTemplate\" />\n }\n } @else {\n <div class=\"relative flex-1 min-h-0\" data-grid-body-region>\n @if (gridService.viewPageRows().length !== 0 || gridService.addRowVisible()) {\n <mona-grid-list [data]=\"gridService.viewPageRows()\" />\n } @else if (!gridService.serverLoading()) {\n <ng-container [ngTemplateOutlet]=\"emptyGridTemplate\" />\n }\n @if (gridService.serverLoading()) {\n <div class=\"absolute inset-0 z-20 flex items-center justify-center bg-surface/60\" data-grid-loading>\n <mona-spinner size=\"large\" />\n </div>\n }\n </div>\n @if (gridService.viewPageRows().length !== 0 || gridService.addRowVisible()) {\n @if (footerVisible()) {\n <div\n [class]=\"footerClass()\"\n [style.margin-inline-end.px]=\"gridService.scrollbarGutterWidth()\"\n #footerScrollElement\n data-grid-footer-scroll>\n <div>\n <table\n role=\"presentation\"\n [class]=\"footerTableClass()\"\n [style.width.px]=\"gridService.tableWidth()\">\n <colgroup monaGridColgroup></colgroup>\n <tfoot role=\"rowgroup\">\n <tr monaGridFooterRow></tr>\n </tfoot>\n </table>\n </div>\n </div>\n }\n }\n }\n } @placeholder {\n <mona-placeholder text=\"Loading...\" />\n }\n</div>\n@if (!gridService.virtualScrollOptions().enabled) {\n @if (gridService.serverBindingEnabled() || gridService.viewPageRows().length !== 0 || gridService.addRowVisible()) {\n <mona-pager\n class=\"border-0 border-t border-t-border rounded-ss-none rounded-se-none\"\n [skip]=\"gridService.paginationState().skip\"\n [pageSize]=\"gridService.paginationState().take\"\n [total]=\"gridService.pagerTotal()\"\n [size]=\"'small'\"\n [rounded]=\"rounded()\"\n [pageInput]=\"true\"\n [pageSizeValues]=\"pageSizeValues()\"\n [responsive]=\"responsivePager()\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (pageChange)=\"onPageChange($event)\"></mona-pager>\n }\n}\n\n<ng-template #emptyGridTemplate>\n <div [class]=\"noDataClass()\">\n @if (noDataTemplate()) {\n <ng-container [ngTemplateOutlet]=\"noDataTemplate() ?? null\"></ng-container>\n } @else {\n <mona-placeholder [text]=\"gridService.messages().noData\"></mona-placeholder>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: LucideArrowDown, selector: "svg[lucideArrowDown]" }, { kind: "component", type: LucideArrowLeft, selector: "svg[lucideArrowLeft]" }, { kind: "component", type: LucideArrowRight, selector: "svg[lucideArrowRight]" }, { kind: "component", type: LucideArrowUp, selector: "svg[lucideArrowUp]" }, { kind: "component", type: LucideEllipsisVertical, selector: "svg[lucideEllipsisVertical], svg[lucideMoreVertical]" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: ChipComponent, selector: "mona-chip", inputs: ["aria-label", "disabled", "label", "look", "removable", "removeLabel", "removeTabIndex", "rounded", "selected", "size", "tabindex", "toggleable", "class", "value"], outputs: ["contentClick", "remove", "selectedChange"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: GridColgroupComponent, selector: "colgroup[monaGridColgroup]" }, { kind: "component", type: GridFilterMenuComponent, selector: "mona-grid-filter-menu", inputs: ["column", "type"], outputs: ["apply"] }, { kind: "component", type: GridFilterRowCellComponent, selector: "mona-grid-filter-row-cell", inputs: ["column"], outputs: ["apply"] }, { kind: "directive", type: GridColumnResizeHandlerDirective, selector: "[monaGridColumnResizeHandler]", inputs: ["column"], outputs: ["resizeEnd", "resizeStart"] }, { kind: "directive", type: CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "component", type: PagerComponent, selector: "mona-pager", inputs: ["firstLast", "navigable", "pageInput", "pageSize", "pageSizeValues", "previousNext", "responsive", "rounded", "showInfo", "size", "skip", "total", "type", "class", "visiblePages"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: PlaceholderComponent, selector: "mona-placeholder", inputs: ["text", "class"] }, { kind: "component", type: PopupMenuComponent, selector: "mona-popup-menu", inputs: ["anchor", "anchorConnectionPoint", "items", "id", "minWidth", "offset", "popupConnectionPoint", "precise", "rounded", "size", "target", "trigger", "width", "class"], outputs: ["close", "menuClick", "navigate", "open"] }, { kind: "component", type: PopupMenuItemComponent, selector: "mona-popup-menu-item", inputs: ["disabled", "label"], outputs: ["menuClick"] }, { kind: "directive", type: PopupMenuTextTemplateDirective, selector: "ng-template[monaPopupMenuTextTemplate]" }, { kind: "directive", type: GridLogicalCellDirective, selector: "td[monaGridLogicalCell], th[monaGridLogicalCell]", inputs: ["cellKind", "colIndex", "columnId", "editable", "firstInRow", "groupHeader", "groupKey", "lastInRow", "rowIndex", "rowUid", "section"], outputs: ["edit", "toggleExpand"] }, { kind: "directive", type: GridLockedCellDirective, selector: "td[monaGridLockedCell], th[monaGridLockedCell]", inputs: ["monaGridLockedCell", "lockedCellHeader"] }, { kind: "directive", type: ButtonDirective, selector: "button[monaButton]", inputs: ["aria-haspopup", "disabled", "iconOnly", "loading", "look", "rounded", "selected", "size", "tabindex", "type", "toggleable", "class"], outputs: ["disabledChange", "loadingChange", "lookChange", "selectedChange"] }, { kind: "component", type: PopupComponent, selector: "mona-popup", inputs: ["anchor", "anchorConnectionPoint", "animation", "backdropClass", "closeOnBackdropClick", "closeOnEscape", "closeOnMouseLeave", "closeOnOutsideClick", "data", "hasBackdrop", "height", "maxHeight", "maxWidth", "minHeight", "minWidth", "offset", "popupClass", "popupConnectionPoint", "popupWrapperClass", "positionStrategy", "positions", "preventClose", "providers", "trigger", "width", "withPush", "closeOnScroll", "restoreFocus", "withScrollTracking"], outputs: ["close", "open"] }, { kind: "component", type: GridColumnChooserComponent, selector: "mona-grid-column-chooser", outputs: ["apply", "cancel"] }, { kind: "component", type: GridSelectAllCheckboxComponent, selector: "mona-grid-select-all-checkbox" }, { kind: "pipe", type: ColumnAriaSortPipe, name: "columnAriaSort" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [NgTemplateOutlet,
|
|
5747
5750
|
GridColgroupComponent, /* @ts-ignore */
|
|
5748
|
-
import('./nanahoshi-mona-ui-grid-grid-footer-row.component-
|
|
5749
|
-
import('./nanahoshi-mona-ui-grid-grid-list.component-
|
|
5750
|
-
import('./nanahoshi-mona-ui-grid-grid-virtual-list.component-
|
|
5751
|
+
import('./nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs').then(m => m.GridFooterRowComponent), /* @ts-ignore */
|
|
5752
|
+
import('./nanahoshi-mona-ui-grid-grid-list.component-B2pBOuLa.mjs').then(m => m.GridListComponent), /* @ts-ignore */
|
|
5753
|
+
import('./nanahoshi-mona-ui-grid-grid-virtual-list.component-1RdqLEa9.mjs').then(m => m.GridVirtualListComponent), /* @ts-ignore */
|
|
5751
5754
|
import('@nanahoshi/mona-ui/spinner').then(m => m.SpinnerComponent)]] }); }
|
|
5752
5755
|
}
|
|
5753
5756
|
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.6", ngImport: i0, type: GridComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
5754
|
-
import('./nanahoshi-mona-ui-grid-grid-footer-row.component-
|
|
5755
|
-
import('./nanahoshi-mona-ui-grid-grid-list.component-
|
|
5756
|
-
import('./nanahoshi-mona-ui-grid-grid-virtual-list.component-
|
|
5757
|
+
import('./nanahoshi-mona-ui-grid-grid-footer-row.component-BSVlcB9_.mjs').then(m => m.GridFooterRowComponent), /* @ts-ignore */
|
|
5758
|
+
import('./nanahoshi-mona-ui-grid-grid-list.component-B2pBOuLa.mjs').then(m => m.GridListComponent), /* @ts-ignore */
|
|
5759
|
+
import('./nanahoshi-mona-ui-grid-grid-virtual-list.component-1RdqLEa9.mjs').then(m => m.GridVirtualListComponent), /* @ts-ignore */
|
|
5757
5760
|
import('@nanahoshi/mona-ui/spinner').then(m => m.SpinnerComponent)], resolveMetadata: (GridFooterRowComponent, GridListComponent, GridVirtualListComponent, SpinnerComponent) => ({ decorators: [{
|
|
5758
5761
|
type: Component,
|
|
5759
5762
|
args: [{ selector: "mona-grid", changeDetection: ChangeDetectionStrategy.OnPush, providers: [GridService, GridNavigationService, FilterService], imports: [
|
|
@@ -5805,4 +5808,4 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.6", ng
|
|
|
5805
5808
|
*/
|
|
5806
5809
|
|
|
5807
5810
|
export { GridSaveCommandDirective as $, GridCancelCommandDirective as A, GridCancelEvent as B, CellEditEvent as C, GridCellTemplateDirective as D, GridColumnComponent as E, GridColumnTitleTemplateDirective as F, GridNavigationService as G, GridCommandColumnComponent as H, GridComponent as I, GridContextMenuDirective as J, GridDetailTemplateDirective as K, GridEditCommandDirective as L, GridEditEvent as M, GridEditTemplateDirective as N, GridEditableDirective as O, GridExportDirective as P, GridFilterableDirective as Q, GridFooterTemplateDirective as R, GridGroupFooterTemplateDirective as S, GridGroupableDirective as T, GridHeaderTemplateDirective as U, GridNoDataTemplateDirective as V, GridRemoveCommandDirective as W, GridRemoveEvent as X, GridReorderableDirective as Y, GridResizableDirective as Z, GridRowReorderableDirective as _, GridService as a, GridSaveEvent as a0, GridSelectableDirective as a1, GridServerBindingDirective as a2, GridSortableDirective as a3, GridStatePersistenceDirective as a4, GridToolbarTemplateDirective as a5, GridVirtualScrollDirective as a6, RowEditEvent as a7, RowReorderEvent as a8, gridRowDragPreviewThemeVariants as b, gridListTableThemeVariants as c, GridColgroupComponent as d, gridFooterThemeVariants as e, gridFooterTableThemeVariants as f, gridListBaseThemeVariants as g, GRID_DEFAULT_VIRTUAL_ROW_HEIGHT as h, gridListTableCellThemeVariants as i, gridCellEditorBaseThemeVariants as j, gridCellEditorInputThemeVariants as k, gridListTableRowThemeVariants as l, GridLockedCellDirective as m, GridLogicalCellDirective as n, gridGroupRowThemeVariants as o, gridCellBaseThemeVariants as p, gridCellContainerThemeVariants as q, gridCellDirtyIndicatorThemeVariants as r, gridCellTextThemeVariants as s, gridRowReorderHandleThemeVariants as t, gridSelectionCellThemeVariants as u, gridFooterTableCellThemeVariants as v, gridFooterTableRowThemeVariants as w, GRID_DEFAULT_MESSAGES as x, GridAddCommandDirective as y, GridAddEvent as z };
|
|
5808
|
-
//# sourceMappingURL=nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
5811
|
+
//# sourceMappingURL=nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as CellEditEvent, x as GRID_DEFAULT_MESSAGES, y as GridAddCommandDirective, z as GridAddEvent, A as GridCancelCommandDirective, B as GridCancelEvent, D as GridCellTemplateDirective, E as GridColumnComponent, F as GridColumnTitleTemplateDirective, H as GridCommandColumnComponent, I as GridComponent, J as GridContextMenuDirective, K as GridDetailTemplateDirective, L as GridEditCommandDirective, M as GridEditEvent, N as GridEditTemplateDirective, O as GridEditableDirective, P as GridExportDirective, Q as GridFilterableDirective, R as GridFooterTemplateDirective, S as GridGroupFooterTemplateDirective, T as GridGroupableDirective, U as GridHeaderTemplateDirective, V as GridNoDataTemplateDirective, W as GridRemoveCommandDirective, X as GridRemoveEvent, Y as GridReorderableDirective, Z as GridResizableDirective, _ as GridRowReorderableDirective, $ as GridSaveCommandDirective, a0 as GridSaveEvent, a1 as GridSelectableDirective, a2 as GridServerBindingDirective, a3 as GridSortableDirective, a4 as GridStatePersistenceDirective, a5 as GridToolbarTemplateDirective, a6 as GridVirtualScrollDirective, a7 as RowEditEvent, a8 as RowReorderEvent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-
|
|
1
|
+
export { C as CellEditEvent, x as GRID_DEFAULT_MESSAGES, y as GridAddCommandDirective, z as GridAddEvent, A as GridCancelCommandDirective, B as GridCancelEvent, D as GridCellTemplateDirective, E as GridColumnComponent, F as GridColumnTitleTemplateDirective, H as GridCommandColumnComponent, I as GridComponent, J as GridContextMenuDirective, K as GridDetailTemplateDirective, L as GridEditCommandDirective, M as GridEditEvent, N as GridEditTemplateDirective, O as GridEditableDirective, P as GridExportDirective, Q as GridFilterableDirective, R as GridFooterTemplateDirective, S as GridGroupFooterTemplateDirective, T as GridGroupableDirective, U as GridHeaderTemplateDirective, V as GridNoDataTemplateDirective, W as GridRemoveCommandDirective, X as GridRemoveEvent, Y as GridReorderableDirective, Z as GridResizableDirective, _ as GridRowReorderableDirective, $ as GridSaveCommandDirective, a0 as GridSaveEvent, a1 as GridSelectableDirective, a2 as GridServerBindingDirective, a3 as GridSortableDirective, a4 as GridStatePersistenceDirective, a5 as GridToolbarTemplateDirective, a6 as GridVirtualScrollDirective, a7 as RowEditEvent, a8 as RowReorderEvent } from './nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-DeRc_QcP.mjs';
|
|
2
2
|
//# sourceMappingURL=nanahoshi-mona-ui-grid.mjs.map
|
|
@@ -84,11 +84,14 @@ function mergeMessages(fallback, localeMessages, overrideMessages) {
|
|
|
84
84
|
class MonaI18nService {
|
|
85
85
|
#config;
|
|
86
86
|
#locale;
|
|
87
|
+
#localeOverrides;
|
|
87
88
|
#overrides;
|
|
88
89
|
constructor() {
|
|
89
90
|
this.#config = inject(MONA_I18N_CONFIG);
|
|
90
91
|
this.#locale = signal(this.#config.locale ?? MONA_DEFAULT_LOCALE, /* @ts-ignore */
|
|
91
92
|
...(ngDevMode ? [{ debugName: "#locale" }] : /* istanbul ignore next */ []));
|
|
93
|
+
this.#localeOverrides = signal(createLocaleOverrides(this.#config.localeMessages), /* @ts-ignore */
|
|
94
|
+
...(ngDevMode ? [{ debugName: "#localeOverrides" }] : /* istanbul ignore next */ []));
|
|
92
95
|
this.#overrides = signal(this.#config.messages ?? {}, /* @ts-ignore */
|
|
93
96
|
...(ngDevMode ? [{ debugName: "#overrides" }] : /* istanbul ignore next */ []));
|
|
94
97
|
this.direction = computed(() => this.#locale().direction, /* @ts-ignore */
|
|
@@ -102,21 +105,54 @@ class MonaI18nService {
|
|
|
102
105
|
...(ngDevMode ? [{ debugName: "localeId" }] : /* istanbul ignore next */ []));
|
|
103
106
|
warnOnInvalidLocaleId(this.#locale().id);
|
|
104
107
|
}
|
|
105
|
-
|
|
106
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Removes overrides. With `options.locale`, only that locale's overrides are removed; without it, every
|
|
110
|
+
* override is removed, global and per locale.
|
|
111
|
+
*/
|
|
112
|
+
clearMessages(options) {
|
|
113
|
+
if (options?.locale == null) {
|
|
114
|
+
this.#overrides.set({});
|
|
115
|
+
this.#localeOverrides.set(new Map());
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const localeId = canonicalizeLocaleId(options.locale);
|
|
119
|
+
this.#localeOverrides.update(current => {
|
|
120
|
+
const next = new Map(current);
|
|
121
|
+
next.delete(localeId);
|
|
122
|
+
return next;
|
|
123
|
+
});
|
|
107
124
|
}
|
|
108
125
|
componentMessages(namespace, fallback) {
|
|
109
126
|
return computed(() => {
|
|
110
127
|
const localeMessages = this.#locale().messages[namespace];
|
|
111
128
|
const overrideMessages = this.#overrides()[namespace];
|
|
112
|
-
|
|
129
|
+
const localeOverrideMessages = this.#localeOverrides().get(this.localeId())?.[namespace];
|
|
130
|
+
const merged = mergeMessages(fallback, localeMessages, overrideMessages);
|
|
131
|
+
return mergeTwo(merged, localeOverrideMessages);
|
|
113
132
|
});
|
|
114
133
|
}
|
|
115
|
-
|
|
116
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Merges overrides into the existing ones. With `options.locale`, they apply only while that locale is
|
|
136
|
+
* active, so overrides patched for German do not show after switching to English.
|
|
137
|
+
*/
|
|
138
|
+
patchMessages(messages, options) {
|
|
139
|
+
if (options?.locale == null) {
|
|
140
|
+
this.#overrides.update(current => mergeTwo(current, messages));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const localeId = canonicalizeLocaleId(options.locale);
|
|
144
|
+
this.#localeOverrides.update(current => new Map(current).set(localeId, mergeTwo(current.get(localeId) ?? {}, messages)));
|
|
117
145
|
}
|
|
118
|
-
|
|
119
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Replaces the existing overrides. With `options.locale`, only that locale's overrides are replaced.
|
|
148
|
+
*/
|
|
149
|
+
setMessages(messages, options) {
|
|
150
|
+
if (options?.locale == null) {
|
|
151
|
+
this.#overrides.set(messages);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const localeId = canonicalizeLocaleId(options.locale);
|
|
155
|
+
this.#localeOverrides.update(current => new Map(current).set(localeId, messages));
|
|
120
156
|
}
|
|
121
157
|
use(locale) {
|
|
122
158
|
warnOnInvalidLocaleId(locale.id);
|
|
@@ -131,6 +167,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
131
167
|
providedIn: "root"
|
|
132
168
|
}]
|
|
133
169
|
}], ctorParameters: () => [] });
|
|
170
|
+
function createLocaleOverrides(localeMessages) {
|
|
171
|
+
const overrides = new Map();
|
|
172
|
+
for (const [localeId, messages] of Object.entries(localeMessages ?? {})) {
|
|
173
|
+
const canonicalId = canonicalizeLocaleId(localeId);
|
|
174
|
+
overrides.set(canonicalId, mergeTwo(overrides.get(canonicalId) ?? {}, messages));
|
|
175
|
+
}
|
|
176
|
+
return overrides;
|
|
177
|
+
}
|
|
134
178
|
function warnOnInvalidLocaleId(localeId) {
|
|
135
179
|
if (isDevMode() && tryCanonicalizeLocaleId(localeId) == null) {
|
|
136
180
|
console.warn(`[mona-ui] "${localeId}" is not a valid BCP 47 locale id. Falling back to "${MONA_FALLBACK_LOCALE_ID}".`);
|
|
@@ -421,6 +465,9 @@ const FULLWIDTH_ASCII_START = 0xff01;
|
|
|
421
465
|
const FULLWIDTH_ASCII_END = 0xff5e;
|
|
422
466
|
const FULLWIDTH_ASCII_OFFSET = 0xfee0;
|
|
423
467
|
const DECIMAL_DIGIT_REGEX = /^\p{Nd}$/u;
|
|
468
|
+
/** Apostrophe, right single quotation mark and modifier letter apostrophe. */
|
|
469
|
+
const APOSTROPHE_REGEX = /^['\u2019\u02BC]$/;
|
|
470
|
+
const APOSTROPHE_REGEX_GLOBAL = /['\u2019\u02BC]/g;
|
|
424
471
|
const asciiDigitCache = new Map();
|
|
425
472
|
const numberSymbolsCache = new Map();
|
|
426
473
|
const numberFormatterCache = new Map();
|
|
@@ -662,6 +709,11 @@ function parseLocalizedNumber(text, localeId, options) {
|
|
|
662
709
|
const groupSep = grouping.groupSeparator;
|
|
663
710
|
const isSpaceGroup = /[ \u00A0\u202F]/.test(groupSep);
|
|
664
711
|
const decimalSep = symbols.decimal;
|
|
712
|
+
// Engines disagree on the apostrophe a locale groups with (de-CH: Node ICU "'", Chrome "’"),
|
|
713
|
+
// and keyboards type "'", so every apostrophe variant counts as that locale's group separator.
|
|
714
|
+
if (APOSTROPHE_REGEX.test(groupSep)) {
|
|
715
|
+
cleaned = cleaned.replace(APOSTROPHE_REGEX_GLOBAL, groupSep);
|
|
716
|
+
}
|
|
665
717
|
// Reject non-accepted control or whitespace characters (tabs, newlines, formfeeds)
|
|
666
718
|
if (/[^\S\u0020\u00A0\u202F]/.test(cleaned)) {
|
|
667
719
|
return null;
|
|
@@ -737,11 +789,8 @@ function parseLocalizedNumber(text, localeId, options) {
|
|
|
737
789
|
if (intGroups.length < 2) {
|
|
738
790
|
return null;
|
|
739
791
|
}
|
|
740
|
-
//
|
|
741
|
-
|
|
742
|
-
if (totalGroupedDigits < grouping.minimumGroupedIntegerDigits) {
|
|
743
|
-
return null;
|
|
744
|
-
}
|
|
792
|
+
// Grouping below the locale's minimum (es-ES formats 1000, not 1.000) is still accepted:
|
|
793
|
+
// users type and paste it, and it is unambiguous because the group sizes are checked below.
|
|
745
794
|
// Last (rightmost) group: must match primaryGroupSize digits
|
|
746
795
|
const lastGroup = intGroups[intGroups.length - 1];
|
|
747
796
|
if (lastGroup.length !== grouping.primaryGroupSize || !/^\d+$/.test(lastGroup)) {
|