@mmlogic/components 0.5.13 → 0.5.14
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/dist/cjs/{cell-renderer-BBebjBVz.js → cell-renderer-mjS630f1.js} +8 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mosterdcomponents.cjs.js +1 -1
- package/dist/cjs/mrd-boolean-field_25.cjs.entry.js +148 -28
- package/dist/cjs/mrd-merge-view.cjs.entry.js +1 -1
- package/dist/collection/components/table/mrd-table/mrd-table.css +36 -0
- package/dist/collection/components/table/mrd-table/mrd-table.js +137 -25
- package/dist/collection/components/table/mrd-table/table-parts.js +6 -2
- package/dist/collection/components/table/mrd-table/table-query.js +6 -0
- package/dist/collection/utils/i18n.js +8 -0
- package/dist/components/i18n.js +1 -1
- package/dist/components/mrd-table2.js +1 -1
- package/dist/esm/{cell-renderer-CC8-MtvQ.js → cell-renderer-BDY8UXkH.js} +8 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mosterdcomponents.js +1 -1
- package/dist/esm/mrd-boolean-field_25.entry.js +148 -28
- package/dist/esm/mrd-merge-view.entry.js +1 -1
- package/dist/mosterdcomponents/cell-renderer-B8u5BCK-.js.map +1 -0
- package/dist/mosterdcomponents/client-layout-Bc42CfJB.js.map +1 -0
- package/dist/mosterdcomponents/document-attachments-BufPmMRv.js.map +1 -0
- package/dist/mosterdcomponents/field-helpers-CNQcI3Hf.js.map +1 -0
- package/dist/mosterdcomponents/file-upload-common-C9wp47CB.js.map +1 -0
- package/dist/mosterdcomponents/format-gcecItcD.js.map +1 -0
- package/dist/mosterdcomponents/i18n-ydNM87-Q.js.map +1 -0
- package/dist/mosterdcomponents/index-1ayBojyN.js.map +1 -0
- package/dist/mosterdcomponents/index-DhffneUF.js.map +1 -0
- package/dist/mosterdcomponents/index.esm.js.map +1 -0
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +1 -0
- package/dist/mosterdcomponents/p-Dkm4WxMy.js +1 -0
- package/dist/mosterdcomponents/{p-07b148b2.entry.js → p-c834951a.entry.js} +2 -2
- package/dist/mosterdcomponents/{p-a7e8f6a3.entry.js → p-e8b0880f.entry.js} +1 -1
- package/dist/mosterdcomponents/purify.es-_duHfPgC.js.map +1 -0
- package/dist/mosterdcomponents/query-params-BZbQoeYF.js.map +1 -0
- package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +1 -0
- package/dist/mosterdcomponents/validation-CjjTt66G.js.map +1 -0
- package/dist/types/components/table/mrd-table/mrd-table.d.ts +48 -1
- package/dist/types/components/table/mrd-table/table-parts.d.ts +15 -0
- package/dist/types/components/table/mrd-table/table-query.d.ts +6 -0
- package/package.json +1 -1
- package/dist/mosterdcomponents/p-D5ZPfX3-.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h, Host, writeTask } from "@stencil/core";
|
|
2
2
|
import { t } from "../../../utils/i18n";
|
|
3
3
|
import { buildListPath } from "../../../utils/query-params";
|
|
4
|
-
import { TEXT_TYPES, NON_INTERACTIVE_TYPES, parseDefaultSort, buildSortParam, buildTableQueryParams, buildAggregationQs, filterHasValue, normalizeDatetimeFilter, datetimeFilterToDisplay, } from "./table-query";
|
|
4
|
+
import { TEXT_TYPES, NON_INTERACTIVE_TYPES, SEARCH_DEBOUNCE_MS, parseDefaultSort, buildSortParam, buildTableQueryParams, buildAggregationQs, filterHasValue, normalizeDatetimeFilter, datetimeFilterToDisplay, } from "./table-query";
|
|
5
5
|
import { FilterIcon, TableCell, TotalsRow, TextblockModal, JsonModal, Toolbar } from "./table-parts";
|
|
6
6
|
import { FilterPopup } from "./table-filter-popup";
|
|
7
7
|
import { REQUEST_DEBOUNCE_MS, REQUEST_TIMEOUT_MS, MAX_RETRY_ATTEMPTS, visibleCount, computeWindow, pageRange, getRowFromPages, computeEffectiveTotal, isTotalKnownFromPages, getStalePages, } from "./virtual-scroll";
|
|
@@ -27,6 +27,17 @@ export class MrdTable {
|
|
|
27
27
|
this.keydownHandler = null;
|
|
28
28
|
this.createPickerClickHandler = null;
|
|
29
29
|
this.viewPopoverClickHandler = null;
|
|
30
|
+
/** Debounce timer for the free-text search box — separate from debounceTimer
|
|
31
|
+
* (pending-page requests), since typing and scrolling debounce independently. */
|
|
32
|
+
this.searchDebounceTimer = null;
|
|
33
|
+
/** The rendered search <input>, captured so it can be focused the instant it mounts. */
|
|
34
|
+
this.searchInputEl = null;
|
|
35
|
+
/** Set by toggleSearch() when the box just expanded; consumed and cleared in componentDidRender(). */
|
|
36
|
+
this.searchNeedsFocus = false;
|
|
37
|
+
/** Column filters stashed by stashFiltersForSearch() while the search box is open — the
|
|
38
|
+
* backend can't combine `q` with column filters. Restored by restoreFiltersAfterSearch()
|
|
39
|
+
* on close, unless the user applied a fresh filter of their own in the meantime. */
|
|
40
|
+
this.stashedFilters = null;
|
|
30
41
|
/** Watches the host for gaining a box (e.g. its tab pane being shown) — see componentDidLoad. */
|
|
31
42
|
this.resizeObserver = null;
|
|
32
43
|
/** Guards against scheduling more than one column-width measurement per freeze. */
|
|
@@ -81,6 +92,10 @@ export class MrdTable {
|
|
|
81
92
|
this.sortDir = 'asc';
|
|
82
93
|
/** Active filters keyed by field name. */
|
|
83
94
|
this.activeFilters = new Map();
|
|
95
|
+
/** True while the toolbar's magnifying glass is expanded into the search input. */
|
|
96
|
+
this.searchOpen = false;
|
|
97
|
+
/** Current free-text search query — sent as `q` on every mrdLoadPage/aggregations request. */
|
|
98
|
+
this.searchQuery = '';
|
|
84
99
|
/** Field name of the currently open filter popup (null = closed). */
|
|
85
100
|
this.openFilterCol = null;
|
|
86
101
|
/** Filter state being edited in the open popup. */
|
|
@@ -134,6 +149,11 @@ export class MrdTable {
|
|
|
134
149
|
this.colWidthMeasureScheduled = false;
|
|
135
150
|
this.colWidthsUserSet = false;
|
|
136
151
|
this.fixedContentMeasured = false;
|
|
152
|
+
// A new item is a different table (possibly not even a VIEW any more) — a leftover
|
|
153
|
+
// query from the old one should not silently keep filtering it.
|
|
154
|
+
this.searchOpen = false;
|
|
155
|
+
this.searchQuery = '';
|
|
156
|
+
this.stashedFilters = null;
|
|
137
157
|
}
|
|
138
158
|
// ── Lifecycle ──────────────────────────────────────────────────────────────
|
|
139
159
|
componentWillLoad() {
|
|
@@ -241,7 +261,12 @@ export class MrdTable {
|
|
|
241
261
|
if (pageNumber === 0 && this.aggregationsPending) {
|
|
242
262
|
this.aggregationsPending = false;
|
|
243
263
|
const hasAggColumns = this.columns.some(c => c.type === 'FIELD' && c.aggregate);
|
|
244
|
-
|
|
264
|
+
// The aggregations endpoint doesn't support the `q` free-text param, so a request
|
|
265
|
+
// sent while searching would silently return unfiltered totals. Leave aggregations
|
|
266
|
+
// (and aggregationsTotal) at null instead — TotalsRow already renders nothing when
|
|
267
|
+
// aggregations is null, so the totals row just disappears for the duration of the
|
|
268
|
+
// search rather than showing numbers that don't match the filtered rows.
|
|
269
|
+
if (!this.searchQuery && (!isLastPage || hasAggColumns)) {
|
|
245
270
|
this.emitLoadAggregations();
|
|
246
271
|
}
|
|
247
272
|
}
|
|
@@ -280,10 +305,18 @@ export class MrdTable {
|
|
|
280
305
|
document.removeEventListener('click', this.viewPopoverClickHandler);
|
|
281
306
|
this.viewPopoverClickHandler = null;
|
|
282
307
|
}
|
|
308
|
+
if (this.searchDebounceTimer !== null) {
|
|
309
|
+
clearTimeout(this.searchDebounceTimer);
|
|
310
|
+
this.searchDebounceTimer = null;
|
|
311
|
+
}
|
|
283
312
|
}
|
|
284
313
|
componentDidRender() {
|
|
285
314
|
this.freezeColWidths();
|
|
286
315
|
this.growToFixedContent();
|
|
316
|
+
if (this.searchNeedsFocus && this.searchInputEl) {
|
|
317
|
+
this.searchInputEl.focus();
|
|
318
|
+
this.searchNeedsFocus = false;
|
|
319
|
+
}
|
|
287
320
|
}
|
|
288
321
|
/** Freeze the column widths once the first data page has rendered.
|
|
289
322
|
*
|
|
@@ -602,7 +635,13 @@ export class MrdTable {
|
|
|
602
635
|
dataClass: v.dataClass,
|
|
603
636
|
});
|
|
604
637
|
}
|
|
605
|
-
/** Build query params for a page request from current sort, view filters, filterClass and active column filters.
|
|
638
|
+
/** Build query params for a page request from current sort, view filters, filterClass and active column filters.
|
|
639
|
+
*
|
|
640
|
+
* `q` and column filters are mutually exclusive on the backend — combining them breaks
|
|
641
|
+
* the search. stashFiltersForSearch() already empties activeFilters for the duration of
|
|
642
|
+
* a search, but this guard is the actual guarantee: even if a filter is applied through
|
|
643
|
+
* a column header while the search box is still open (before the query is cleared),
|
|
644
|
+
* activeFilters is dropped from the request rather than sent alongside `q`. */
|
|
606
645
|
buildQueryParams(page) {
|
|
607
646
|
var _a;
|
|
608
647
|
const v = this.allViews[this.activeViewIdx];
|
|
@@ -611,7 +650,8 @@ export class MrdTable {
|
|
|
611
650
|
sort: this.sortParam(),
|
|
612
651
|
filterClass: v === null || v === void 0 ? void 0 : v.filterClass,
|
|
613
652
|
viewFilters: (_a = v === null || v === void 0 ? void 0 : v.view) === null || _a === void 0 ? void 0 : _a.filter,
|
|
614
|
-
activeFilters: this.activeFilters.values(),
|
|
653
|
+
activeFilters: this.searchQuery ? [] : this.activeFilters.values(),
|
|
654
|
+
query: this.searchQuery,
|
|
615
655
|
});
|
|
616
656
|
}
|
|
617
657
|
/** True when the table is in paginated / virtual-scroll mode rather than driven by the
|
|
@@ -917,6 +957,18 @@ export class MrdTable {
|
|
|
917
957
|
const current = (_b = (_a = this.pendingFilter) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : [];
|
|
918
958
|
this.pendingFilter = Object.assign(Object.assign({}, this.pendingFilter), { values: checked ? [...current, key] : current.filter(k => k !== key) });
|
|
919
959
|
}
|
|
960
|
+
/** Common reload after activeFilters or searchQuery changed: drop stale aggregations
|
|
961
|
+
* (the next setPage(0) re-requests them, guarded against `q` in setPage() itself) and
|
|
962
|
+
* re-fetch page 0. Shared by the filter popup, clear-all, and free-text search. */
|
|
963
|
+
reloadAfterQueryChange() {
|
|
964
|
+
this.aggregations = null;
|
|
965
|
+
this.aggregationsTotal = null;
|
|
966
|
+
this.aggregationsPending = true;
|
|
967
|
+
if (this.isPaginated) {
|
|
968
|
+
this.resetPages();
|
|
969
|
+
this.emitPagesForWindow(this.renderStart, this.renderEnd);
|
|
970
|
+
}
|
|
971
|
+
}
|
|
920
972
|
applyFilter() {
|
|
921
973
|
const f = this.pendingFilter;
|
|
922
974
|
if (!(f === null || f === void 0 ? void 0 : f.field)) {
|
|
@@ -933,13 +985,7 @@ export class MrdTable {
|
|
|
933
985
|
}
|
|
934
986
|
this.activeFilters = next;
|
|
935
987
|
this.closeFilterPopup();
|
|
936
|
-
this.
|
|
937
|
-
this.aggregationsTotal = null;
|
|
938
|
-
this.aggregationsPending = true;
|
|
939
|
-
if (this.isPaginated) {
|
|
940
|
-
this.resetPages();
|
|
941
|
-
this.emitPagesForWindow(this.renderStart, this.renderEnd);
|
|
942
|
-
}
|
|
988
|
+
this.reloadAfterQueryChange();
|
|
943
989
|
}
|
|
944
990
|
clearFilter() {
|
|
945
991
|
const name = this.openFilterCol;
|
|
@@ -948,23 +994,80 @@ export class MrdTable {
|
|
|
948
994
|
next.delete(name);
|
|
949
995
|
this.activeFilters = next;
|
|
950
996
|
this.closeFilterPopup();
|
|
951
|
-
this.
|
|
952
|
-
this.aggregationsTotal = null;
|
|
953
|
-
this.aggregationsPending = true;
|
|
954
|
-
if (this.isPaginated) {
|
|
955
|
-
this.resetPages();
|
|
956
|
-
this.emitPagesForWindow(this.renderStart, this.renderEnd);
|
|
957
|
-
}
|
|
997
|
+
this.reloadAfterQueryChange();
|
|
958
998
|
}
|
|
959
999
|
clearAllFilters() {
|
|
960
1000
|
this.activeFilters = new Map();
|
|
961
|
-
this.
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
1001
|
+
this.reloadAfterQueryChange();
|
|
1002
|
+
}
|
|
1003
|
+
// ── Free-text search ───────────────────────────────────────────────────────
|
|
1004
|
+
/** Search is a VIEW-only affordance — a RELATED_VIEW table is already scoped to
|
|
1005
|
+
* its parent record, so a free-text box there would invite confusion about what
|
|
1006
|
+
* it searches across. */
|
|
1007
|
+
get searchEnabled() {
|
|
1008
|
+
var _a;
|
|
1009
|
+
return ((_a = this.item) === null || _a === void 0 ? void 0 : _a.type) === 'VIEW';
|
|
1010
|
+
}
|
|
1011
|
+
toggleSearch() {
|
|
1012
|
+
if (this.searchOpen) {
|
|
1013
|
+
this.closeSearch();
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
this.searchOpen = true;
|
|
1017
|
+
this.searchNeedsFocus = true;
|
|
1018
|
+
this.stashFiltersForSearch();
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
/** Collapses the box back to the icon. Clearing a non-empty query and restoring any
|
|
1022
|
+
* stashed filters can each independently require a reload — reloadAfterQueryChange()
|
|
1023
|
+
* is called at most once here regardless of how many of the two actually changed. */
|
|
1024
|
+
closeSearch() {
|
|
1025
|
+
this.searchOpen = false;
|
|
1026
|
+
if (this.searchDebounceTimer !== null) {
|
|
1027
|
+
clearTimeout(this.searchDebounceTimer);
|
|
1028
|
+
this.searchDebounceTimer = null;
|
|
967
1029
|
}
|
|
1030
|
+
const hadQuery = this.searchQuery !== '';
|
|
1031
|
+
this.searchQuery = '';
|
|
1032
|
+
const filtersRestored = this.restoreFiltersAfterSearch();
|
|
1033
|
+
if (hadQuery || filtersRestored)
|
|
1034
|
+
this.reloadAfterQueryChange();
|
|
1035
|
+
}
|
|
1036
|
+
handleSearchInput(value) {
|
|
1037
|
+
this.searchQuery = value;
|
|
1038
|
+
if (this.searchDebounceTimer !== null)
|
|
1039
|
+
clearTimeout(this.searchDebounceTimer);
|
|
1040
|
+
this.searchDebounceTimer = setTimeout(() => this.applySearch(), SEARCH_DEBOUNCE_MS);
|
|
1041
|
+
}
|
|
1042
|
+
/** Reloads from page 0 with the current searchQuery, same reset as applyFilter(). */
|
|
1043
|
+
applySearch() {
|
|
1044
|
+
this.searchDebounceTimer = null;
|
|
1045
|
+
this.reloadAfterQueryChange();
|
|
1046
|
+
}
|
|
1047
|
+
/** Column filters and the free-text `q` param are mutually exclusive on the backend —
|
|
1048
|
+
* sending both breaks the search. Opening the search box stashes any active filters
|
|
1049
|
+
* and clears them (the header filter icons and the clear-all button disappear along
|
|
1050
|
+
* with activeFilters, so there is nothing extra to hide) and reloads unfiltered. */
|
|
1051
|
+
stashFiltersForSearch() {
|
|
1052
|
+
if (this.activeFilters.size === 0)
|
|
1053
|
+
return;
|
|
1054
|
+
this.stashedFilters = this.activeFilters;
|
|
1055
|
+
this.activeFilters = new Map();
|
|
1056
|
+
this.reloadAfterQueryChange();
|
|
1057
|
+
}
|
|
1058
|
+
/** Restores filters stashed by stashFiltersForSearch(), unless the user applied a fresh
|
|
1059
|
+
* filter of their own while the search box was open — that explicit choice wins over
|
|
1060
|
+
* reinstating the old one. Returns whether activeFilters actually changed, so the
|
|
1061
|
+
* caller can decide whether a reload is needed. */
|
|
1062
|
+
restoreFiltersAfterSearch() {
|
|
1063
|
+
if (!this.stashedFilters)
|
|
1064
|
+
return false;
|
|
1065
|
+
const stashed = this.stashedFilters;
|
|
1066
|
+
this.stashedFilters = null;
|
|
1067
|
+
if (this.activeFilters.size > 0)
|
|
1068
|
+
return false;
|
|
1069
|
+
this.activeFilters = stashed;
|
|
1070
|
+
return true;
|
|
968
1071
|
}
|
|
969
1072
|
// ── View switcher ──────────────────────────────────────────────────────────
|
|
970
1073
|
handleViewSwitch(targetIdx) {
|
|
@@ -975,6 +1078,9 @@ export class MrdTable {
|
|
|
975
1078
|
this.activeViewIdx = targetIdx;
|
|
976
1079
|
this.applyDefaultSort((_b = (_a = target.view) === null || _a === void 0 ? void 0 : _a.defaultSort) !== null && _b !== void 0 ? _b : '');
|
|
977
1080
|
this.activeFilters = new Map();
|
|
1081
|
+
this.searchOpen = false;
|
|
1082
|
+
this.searchQuery = '';
|
|
1083
|
+
this.stashedFilters = null;
|
|
978
1084
|
this.init();
|
|
979
1085
|
}
|
|
980
1086
|
toggleViewPopover(e) {
|
|
@@ -997,7 +1103,7 @@ export class MrdTable {
|
|
|
997
1103
|
// ── Render: toolbar ────────────────────────────────────────────────────────
|
|
998
1104
|
renderToolbar() {
|
|
999
1105
|
var _a;
|
|
1000
|
-
return (h(Toolbar, { locale: this.locale, filterCount: this.activeFilters.size, actions: this.tableActions, views: this.allViews, activeViewIdx: this.activeViewIdx, viewPopoverOpen: this.viewPopoverOpen, createPickerOpen: this.createPickerOpen, createTypes: (_a = this.item) === null || _a === void 0 ? void 0 : _a.createTypes, readOnly: this.readOnly, cb: {
|
|
1106
|
+
return (h(Toolbar, { locale: this.locale, filterCount: this.activeFilters.size, actions: this.tableActions, views: this.allViews, activeViewIdx: this.activeViewIdx, viewPopoverOpen: this.viewPopoverOpen, createPickerOpen: this.createPickerOpen, createTypes: (_a = this.item) === null || _a === void 0 ? void 0 : _a.createTypes, readOnly: this.readOnly, searchEnabled: this.searchEnabled, searchOpen: this.searchOpen, searchQuery: this.searchQuery, cb: {
|
|
1001
1107
|
onClearAllFilters: () => this.clearAllFilters(),
|
|
1002
1108
|
onViewSwitch: idx => this.handleViewSwitch(idx),
|
|
1003
1109
|
onToggleViewPopover: e => this.toggleViewPopover(e),
|
|
@@ -1008,6 +1114,10 @@ export class MrdTable {
|
|
|
1008
1114
|
this.closeCreatePicker();
|
|
1009
1115
|
},
|
|
1010
1116
|
onAction: action => this.mrdAction.emit(this.buildActionDetail(action)),
|
|
1117
|
+
onToggleSearch: () => this.toggleSearch(),
|
|
1118
|
+
onSearchInput: value => this.handleSearchInput(value),
|
|
1119
|
+
onCloseSearch: () => this.closeSearch(),
|
|
1120
|
+
onSearchInputRef: el => (this.searchInputEl = el !== null && el !== void 0 ? el : null),
|
|
1011
1121
|
} }));
|
|
1012
1122
|
}
|
|
1013
1123
|
// ── Render: filter popup ───────────────────────────────────────────────────
|
|
@@ -1378,6 +1488,8 @@ export class MrdTable {
|
|
|
1378
1488
|
"sortField": {},
|
|
1379
1489
|
"sortDir": {},
|
|
1380
1490
|
"activeFilters": {},
|
|
1491
|
+
"searchOpen": {},
|
|
1492
|
+
"searchQuery": {},
|
|
1381
1493
|
"openFilterCol": {},
|
|
1382
1494
|
"pendingFilter": {},
|
|
1383
1495
|
"popupPos": {},
|
|
@@ -8,6 +8,7 @@ import { NUMERIC_TYPES } from "./table-query";
|
|
|
8
8
|
* component; these components receive plain values and callbacks.
|
|
9
9
|
*/
|
|
10
10
|
export const FilterIcon = () => (h("span", { class: "mrd-table__filter-icon", "aria-hidden": "true" }, h("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "currentColor" }, h("path", { d: "M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" }))));
|
|
11
|
+
export const SearchIcon = ({ class: cls }) => (h("svg", { class: cls, viewBox: "0 0 24 24", width: "16", height: "16", "aria-hidden": "true" }, h("path", { fill: "currentColor", d: "M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19zM9.5 14A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14" })));
|
|
11
12
|
const TEXTBLOCK_MAX = 200;
|
|
12
13
|
export const TableCell = ({ col, row, locale, onDownload, onOpenTextblock, onOpenJson }) => {
|
|
13
14
|
var _a, _b, _c;
|
|
@@ -87,11 +88,14 @@ export const JsonModal = ({ html, locale, onClose }) => {
|
|
|
87
88
|
return null;
|
|
88
89
|
return (h("div", { class: "mrd-table__modal-backdrop", onClick: onClose, role: "dialog", "aria-modal": "true" }, h("div", { class: "mrd-table__modal", onClick: (e) => e.stopPropagation() }, h("button", { class: "mrd-table__modal-close", onClick: onClose, "aria-label": t('close', locale) }, "\u2715"), h("pre", { class: "mrd-table__modal-json", innerHTML: html }))));
|
|
89
90
|
};
|
|
90
|
-
export const Toolbar = ({ locale, filterCount, actions, views, activeViewIdx, viewPopoverOpen, createPickerOpen, createTypes, readOnly, cb }) => {
|
|
91
|
+
export const Toolbar = ({ locale, filterCount, actions, views, activeViewIdx, viewPopoverOpen, createPickerOpen, createTypes, readOnly, searchEnabled, searchOpen, searchQuery, cb }) => {
|
|
91
92
|
var _a;
|
|
92
93
|
const hasActions = actions.length > 0;
|
|
93
94
|
const hasViewSwitcher = views.length > 1;
|
|
94
|
-
return (h("div", { class: "mrd-table__toolbar" }, h("div", { class: "mrd-table__toolbar-left" },
|
|
95
|
+
return (h("div", { class: "mrd-table__toolbar" }, h("div", { class: "mrd-table__toolbar-left" }, searchEnabled && (searchOpen ? (h("span", { class: "mrd-table__search-box" }, h(SearchIcon, null), h("input", { type: "text", class: "mrd-table__search-input", value: searchQuery !== null && searchQuery !== void 0 ? searchQuery : '', placeholder: t('search_placeholder', locale), ref: cb.onSearchInputRef, onInput: (e) => cb.onSearchInput(e.target.value), onKeyDown: (e) => {
|
|
96
|
+
if (e.key === 'Escape')
|
|
97
|
+
cb.onCloseSearch();
|
|
98
|
+
} }), h("button", { type: "button", class: "mrd-table__search-clear", "aria-label": t('clear', locale), onClick: cb.onCloseSearch }, "\u2715"))) : (h("button", { type: "button", class: "mrd-table__action mrd-table__action--secondary mrd-table__search-toggle", onClick: cb.onToggleSearch }, h(SearchIcon, { class: "mrd-table__action-icon" }), h("span", { class: "mrd-table__action-tooltip" }, t('table_search', locale))))), filterCount > 0 && (h("button", { class: "mrd-table__action mrd-table__action--secondary mrd-table__filter-clear", onClick: cb.onClearAllFilters }, h("svg", { class: "mrd-table__action-icon", viewBox: "0 0 24 24", "aria-hidden": "true" }, h("path", { fill: "currentColor", d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })), h("span", { class: "mrd-table__filter-clear-label" }, t('table_filter_clear_all', locale), " (", filterCount, ")")))), hasViewSwitcher && (h("div", { class: "mrd-table__toolbar-center" }, h("div", { class: "mrd-table__view-switcher" }, h("button", { class: "mrd-table__view-arrow", "aria-label": "Previous view", onClick: () => cb.onViewSwitch((activeViewIdx - 1 + views.length) % views.length) }, "\u25C0"), h("div", { class: "mrd-table__view-title-wrap" }, h("button", { class: "mrd-table__view-title", onClick: (e) => cb.onToggleViewPopover(e) }, (_a = views[activeViewIdx]) === null || _a === void 0 ? void 0 : _a.label), viewPopoverOpen && (h("div", { class: "mrd-table__view-popover", onClick: (e) => e.stopPropagation() }, views.map((v, i) => (h("button", { key: String(i), class: `mrd-table__view-popover-item${i === activeViewIdx ? ' mrd-table__view-popover-item--active' : ''}`, onClick: () => {
|
|
95
99
|
if (i !== activeViewIdx)
|
|
96
100
|
cb.onViewSwitch(i);
|
|
97
101
|
cb.onCloseViewPopover();
|
|
@@ -9,6 +9,10 @@ export const DATE_TYPES = new Set(['DATE', 'DATETIME', 'TIME']);
|
|
|
9
9
|
export const NO_FILTER_TYPES = new Set(['FILE', 'IMAGE']);
|
|
10
10
|
/** Column types that cannot be sorted or filtered (not stored in PostgreSQL). */
|
|
11
11
|
export const NON_INTERACTIVE_TYPES = new Set(['LONGTEXT', 'JSON', 'FILE', 'IMAGE']);
|
|
12
|
+
/** Wait this long (ms) after the user stops typing in the free-text search box
|
|
13
|
+
* before firing the search request — mirrors REQUEST_DEBOUNCE_MS's purpose
|
|
14
|
+
* (skip intermediate keystrokes) but is tuned for typing, not scrolling. */
|
|
15
|
+
export const SEARCH_DEBOUNCE_MS = 400;
|
|
12
16
|
export function parseDefaultSort(defaultSort) {
|
|
13
17
|
var _a;
|
|
14
18
|
if (!defaultSort)
|
|
@@ -33,6 +37,8 @@ export function buildTableQueryParams(opts) {
|
|
|
33
37
|
if (opts.filterClass)
|
|
34
38
|
p.set('type', opts.filterClass);
|
|
35
39
|
applyViewFilters(p, opts.viewFilters);
|
|
40
|
+
if (opts.query)
|
|
41
|
+
p.set('q', opts.query);
|
|
36
42
|
for (const f of opts.activeFilters) {
|
|
37
43
|
if (f.operator === 'isEmpty') {
|
|
38
44
|
p.set(f.field, '');
|
|
@@ -31,6 +31,7 @@ const translations = {
|
|
|
31
31
|
value_empty: '—',
|
|
32
32
|
// mrd-table toolbar
|
|
33
33
|
table_filter_clear_all: 'Alle filters wissen',
|
|
34
|
+
table_search: 'Zoeken',
|
|
34
35
|
table_new_record: 'Nieuw record',
|
|
35
36
|
table_export_excel: 'Exporteer naar Excel',
|
|
36
37
|
readonly_access: 'Je hebt alleen-leestoegang',
|
|
@@ -135,6 +136,7 @@ const translations = {
|
|
|
135
136
|
value_empty: '—',
|
|
136
137
|
// mrd-table toolbar
|
|
137
138
|
table_filter_clear_all: 'Clear all filters',
|
|
139
|
+
table_search: 'Search',
|
|
138
140
|
table_new_record: 'New record',
|
|
139
141
|
table_export_excel: 'Export to Excel',
|
|
140
142
|
readonly_access: 'You have read-only access',
|
|
@@ -239,6 +241,7 @@ const translations = {
|
|
|
239
241
|
value_empty: '—',
|
|
240
242
|
// mrd-table toolbar
|
|
241
243
|
table_filter_clear_all: 'مسح جميع الفلاتر',
|
|
244
|
+
table_search: 'بحث',
|
|
242
245
|
table_new_record: 'سجل جديد',
|
|
243
246
|
table_export_excel: 'تصدير إلى Excel',
|
|
244
247
|
readonly_access: 'لديك حق الوصول للقراءة فقط',
|
|
@@ -337,6 +340,7 @@ const translations = {
|
|
|
337
340
|
value_empty: '—',
|
|
338
341
|
// mrd-table toolbar
|
|
339
342
|
table_filter_clear_all: 'Effacer tous les filtres',
|
|
343
|
+
table_search: 'Rechercher',
|
|
340
344
|
table_new_record: 'Nouvel enregistrement',
|
|
341
345
|
table_export_excel: 'Exporter vers Excel',
|
|
342
346
|
readonly_access: "Vous disposez d'un accès en lecture seule",
|
|
@@ -435,6 +439,7 @@ const translations = {
|
|
|
435
439
|
value_empty: '—',
|
|
436
440
|
// mrd-table toolbar
|
|
437
441
|
table_filter_clear_all: 'Alle Filter löschen',
|
|
442
|
+
table_search: 'Suchen',
|
|
438
443
|
table_new_record: 'Neuer Eintrag',
|
|
439
444
|
table_export_excel: 'Als Excel exportieren',
|
|
440
445
|
readonly_access: 'Sie haben nur Lesezugriff',
|
|
@@ -533,6 +538,7 @@ const translations = {
|
|
|
533
538
|
value_empty: '—',
|
|
534
539
|
// mrd-table toolbar
|
|
535
540
|
table_filter_clear_all: 'Borrar todos los filtros',
|
|
541
|
+
table_search: 'Buscar',
|
|
536
542
|
table_new_record: 'Nuevo registro',
|
|
537
543
|
table_export_excel: 'Exportar a Excel',
|
|
538
544
|
readonly_access: 'Tienes acceso de solo lectura',
|
|
@@ -631,6 +637,7 @@ const translations = {
|
|
|
631
637
|
value_empty: '—',
|
|
632
638
|
// mrd-table toolbar
|
|
633
639
|
table_filter_clear_all: 'Cancella tutti i filtri',
|
|
640
|
+
table_search: 'Cerca',
|
|
634
641
|
table_new_record: 'Nuovo record',
|
|
635
642
|
table_export_excel: 'Esporta in Excel',
|
|
636
643
|
readonly_access: 'Hai accesso in sola lettura',
|
|
@@ -729,6 +736,7 @@ const translations = {
|
|
|
729
736
|
value_empty: '—',
|
|
730
737
|
// mrd-table toolbar
|
|
731
738
|
table_filter_clear_all: 'Очистити всі фільтри',
|
|
739
|
+
table_search: 'Пошук',
|
|
732
740
|
table_new_record: 'Новий запис',
|
|
733
741
|
table_export_excel: 'Експортувати до Excel',
|
|
734
742
|
readonly_access: 'У вас доступ лише для перегляду',
|
package/dist/components/i18n.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={nl:{required:"Dit veld is verplicht",select_placeholder:"Selecteer een optie",search_placeholder:"Zoeken...",upload_file:"Bestand uploaden",choose_file:"Bestand kiezen",clear:"Wissen",today:"Vandaag",invalid_email:"Voer een geldig e-mailadres in",invalid_url:"Voer een geldige URL in",invalid_number:"Voer een geldig getal in",drop_file_here:"Sleep bestand hierheen of",browse:"bladeren",file_too_large:"Bestand is te groot",invalid_image:"Selecteer een afbeeldingsbestand",search_results:"Zoekresultaten",no_results:"Geen resultaten gevonden",load_failed_retry:"Laden mislukt — opnieuw proberen",column_resize:"Kolombreedte aanpassen (dubbelklik om passend te maken)",loading:"Laden...",submit:"Opslaan",cancel:"Annuleren",remove:"Verwijderen",add:"Toevoegen",yes:"Ja",no:"Nee",table_of:"van",download:"Downloaden",value_empty:"—",table_filter_clear_all:"Alle filters wissen",table_new_record:"Nieuw record",table_export_excel:"Exporteer naar Excel",readonly_access:"Je hebt alleen-leestoegang",doc_view_switch:"Weergave wisselen",doc_view_tree:"Boomweergave",doc_upload:"Uploaden",doc_upload_to:"Uploaden naar",doc_view_list:"Lijstweergave",filter_sorting:"Sortering",filter_ascending:"Oplopend",filter_descending:"Aflopend",filter_section:"Filter",filter_apply:"Toepassen",filter_clear:"Wissen",filter_contains:"Bevat",filter_starts_with:"Begint met",filter_equals:"Gelijk aan",filter_has_value:"Heeft waarde",filter_is_empty:"Is leeg",filter_is_not_empty:"Is niet leeg",filter_exact:"Exact",filter_range:"Bereik",filter_from:"Van",filter_to:"Tot",filter_all:"Alle",filter_select_all:"Alles",filter_select_none:"Geen",filter_search_value:"Zoekwaarde...",filter_no_support:"Geen filtering beschikbaar voor dit veldtype.",textblock_show_more:"Meer tonen",close:"Sluiten",history_until:"tot",history_badge_tooltip:"Vorige waarden",hyperlink_name:"Linktekst (optioneel)",new_folder:"Nieuwe folder",folder_name_placeholder:"Foldernaam",folder_no_slash:"Een foldernaam mag geen '/' bevatten",folder_duplicate:"Er bestaat al een folder met deze naam",doc_empty_drop:"Nog geen documenten — sleep bestanden hierheen",merge_search_hint:"Zoek het duplicaat waarmee je wilt samenvoegen",merge_select:"Selecteer",merge_compare_heading:"Los conflicten op",merge_column_a:"Huidig (blijft behouden)",merge_column_b:"Kandidaat (wordt verwijderd)",merge_auto_heading:"Deze velden worden automatisch overgenomen van de kandidaat:",merge_no_conflicts:"Geen conflicterende velden gevonden",merge_continue:"Doorgaan",merge_back:"Terug",merge_confirm_heading:"Bevestig samenvoegen",merge_confirm_warning:"Dit kan niet ongedaan worden gemaakt: de kandidaat wordt definitief verwijderd.",merge_confirm_button:"Samenvoegen bevestigen",invoice_title:"Factuur",invoice_date:"Factuurdatum",invoice_due_date:"Vervaldatum",invoice_subtotal:"Subtotaal",invoice_tax:"BTW",invoice_total:"Totaal",invoice_customer:"Klant",invoice_supplier:"Leverancier",email_from:"Van",email_to:"Aan",email_cc:"Cc",email_date:"Datum",email_show_headers:"Toon technische headers"},en:{required:"This field is required",select_placeholder:"Select an option",search_placeholder:"Search...",upload_file:"Upload file",choose_file:"Choose file",clear:"Clear",today:"Today",invalid_email:"Please enter a valid email address",invalid_url:"Please enter a valid URL",invalid_number:"Please enter a valid number",drop_file_here:"Drop file here or",browse:"browse",file_too_large:"File is too large",invalid_image:"Please select an image file",search_results:"Search results",no_results:"No results found",load_failed_retry:"Failed to load — retry",column_resize:"Resize column (double-click to fit)",loading:"Loading...",submit:"Save",cancel:"Cancel",remove:"Remove",add:"Add",yes:"Yes",no:"No",table_of:"of",download:"Download",value_empty:"—",table_filter_clear_all:"Clear all filters",table_new_record:"New record",table_export_excel:"Export to Excel",readonly_access:"You have read-only access",doc_view_switch:"Switch view",doc_view_tree:"Tree view",doc_upload:"Upload",doc_upload_to:"Upload to",doc_view_list:"List view",filter_sorting:"Sorting",filter_ascending:"Ascending",filter_descending:"Descending",filter_section:"Filter",filter_apply:"Apply",filter_clear:"Clear",filter_contains:"Contains",filter_starts_with:"Starts with",filter_equals:"Equals",filter_has_value:"Has value",filter_is_empty:"Is empty",filter_is_not_empty:"Is not empty",filter_exact:"Exact",filter_range:"Range",filter_from:"From",filter_to:"To",filter_all:"All",filter_select_all:"All",filter_select_none:"None",filter_search_value:"Search value...",filter_no_support:"Filtering is not available for this field type.",textblock_show_more:"Show more",close:"Close",history_until:"until",history_badge_tooltip:"Previous values",hyperlink_name:"Link text (optional)",new_folder:"New folder",folder_name_placeholder:"Folder name",folder_no_slash:"A folder name cannot contain '/'",folder_duplicate:"A folder with this name already exists",doc_empty_drop:"No documents yet — drop files here",merge_search_hint:"Search for the duplicate to merge with",merge_select:"Select",merge_compare_heading:"Resolve conflicts",merge_column_a:"Current (kept)",merge_column_b:"Candidate (will be deleted)",merge_auto_heading:"These fields will be taken from the candidate automatically:",merge_no_conflicts:"No conflicting fields found",merge_continue:"Continue",merge_back:"Back",merge_confirm_heading:"Confirm merge",merge_confirm_warning:"This cannot be undone: the candidate will be permanently deleted.",merge_confirm_button:"Confirm merge",invoice_title:"Invoice",invoice_date:"Invoice date",invoice_due_date:"Due date",invoice_subtotal:"Subtotal",invoice_tax:"Tax",invoice_total:"Total",invoice_customer:"Customer",invoice_supplier:"Supplier",email_from:"From",email_to:"To",email_cc:"Cc",email_date:"Date",email_show_headers:"Show technical headers"},ar:{required:"هذا الحقل مطلوب",select_placeholder:"اختر خياراً",search_placeholder:"بحث...",upload_file:"رفع ملف",choose_file:"اختر ملفاً",clear:"مسح",today:"اليوم",invalid_email:"يرجى إدخال عنوان بريد إلكتروني صحيح",invalid_url:"يرجى إدخال رابط صحيح",invalid_number:"يرجى إدخال رقم صحيح",drop_file_here:"اسحب الملف هنا أو",browse:"تصفح",file_too_large:"الملف كبير جداً",invalid_image:"يرجى اختيار ملف صورة",search_results:"نتائج البحث",no_results:"لم يتم العثور على نتائج",load_failed_retry:"فشل التحميل — إعادة المحاولة",column_resize:"تغيير عرض العمود (انقر نقرًا مزدوجًا للملاءمة)",loading:"جار التحميل...",submit:"حفظ",cancel:"إلغاء",remove:"إزالة",add:"إضافة",yes:"نعم",no:"لا",table_of:"من أصل",download:"تنزيل",value_empty:"—",table_filter_clear_all:"مسح جميع الفلاتر",table_new_record:"سجل جديد",table_export_excel:"تصدير إلى Excel",readonly_access:"لديك حق الوصول للقراءة فقط",doc_view_switch:"تبديل العرض",doc_view_tree:"عرض شجري",doc_upload:"رفع",doc_upload_to:"رفع إلى",doc_view_list:"عرض القائمة",filter_sorting:"الترتيب",filter_ascending:"تصاعدي",filter_descending:"تنازلي",filter_section:"تصفية",filter_apply:"تطبيق",filter_clear:"مسح",filter_contains:"يحتوي على",filter_starts_with:"يبدأ بـ",filter_equals:"يساوي",filter_has_value:"له قيمة",filter_is_empty:"فارغ",filter_is_not_empty:"ليس فارغاً",filter_exact:"دقيق",filter_range:"نطاق",filter_from:"من",filter_to:"إلى",filter_all:"الكل",filter_select_all:"الكل",filter_select_none:"لا شيء",filter_search_value:"قيمة البحث...",filter_no_support:"التصفية غير متاحة لهذا النوع من الحقول.",textblock_show_more:"عرض المزيد",close:"إغلاق",history_until:"حتى",history_badge_tooltip:"القيم السابقة",hyperlink_name:"نص الرابط (اختياري)",merge_search_hint:"ابحث عن السجل المكرر للدمج معه",merge_select:"اختر",merge_compare_heading:"حل التعارضات",merge_column_a:"الحالي (سيتم الاحتفاظ به)",merge_column_b:"المرشح (سيتم حذفه)",merge_auto_heading:"سيتم أخذ هذه الحقول من المرشح تلقائياً:",merge_no_conflicts:"لم يتم العثور على حقول متعارضة",merge_continue:"متابعة",merge_back:"رجوع",merge_confirm_heading:"تأكيد الدمج",merge_confirm_warning:"لا يمكن التراجع عن هذا الإجراء: سيتم حذف المرشح نهائياً.",merge_confirm_button:"تأكيد الدمج",invoice_title:"فاتورة",invoice_date:"تاريخ الفاتورة",invoice_due_date:"تاريخ الاستحقاق",invoice_subtotal:"المجموع الفرعي",invoice_tax:"الضريبة",invoice_total:"الإجمالي",invoice_customer:"العميل",invoice_supplier:"المورد",email_from:"من",email_to:"إلى",email_cc:"نسخة",email_date:"التاريخ",email_show_headers:"إظهار الترويسات التقنية"},fr:{required:"Ce champ est obligatoire",select_placeholder:"Sélectionner une option",search_placeholder:"Rechercher...",upload_file:"Télécharger un fichier",choose_file:"Choisir un fichier",clear:"Effacer",today:"Aujourd'hui",invalid_email:"Veuillez saisir une adresse e-mail valide",invalid_url:"Veuillez saisir une URL valide",invalid_number:"Veuillez saisir un nombre valide",drop_file_here:"Déposez le fichier ici ou",browse:"parcourir",file_too_large:"Le fichier est trop volumineux",invalid_image:"Veuillez sélectionner un fichier image",search_results:"Résultats de recherche",no_results:"Aucun résultat trouvé",load_failed_retry:"Échec du chargement — réessayer",column_resize:"Redimensionner la colonne (double-cliquer pour ajuster)",loading:"Chargement...",submit:"Enregistrer",cancel:"Annuler",remove:"Supprimer",add:"Ajouter",yes:"Oui",no:"Non",table_of:"sur",download:"Télécharger",value_empty:"—",table_filter_clear_all:"Effacer tous les filtres",table_new_record:"Nouvel enregistrement",table_export_excel:"Exporter vers Excel",readonly_access:"Vous disposez d'un accès en lecture seule",doc_view_switch:"Changer de vue",doc_view_tree:"Vue arborescente",doc_upload:"Téléverser",doc_upload_to:"Téléverser vers",doc_view_list:"Vue liste",filter_sorting:"Tri",filter_ascending:"Croissant",filter_descending:"Décroissant",filter_section:"Filtre",filter_apply:"Appliquer",filter_clear:"Effacer",filter_contains:"Contient",filter_starts_with:"Commence par",filter_equals:"Égal à",filter_has_value:"A une valeur",filter_is_empty:"Est vide",filter_is_not_empty:"N'est pas vide",filter_exact:"Exact",filter_range:"Plage",filter_from:"De",filter_to:"À",filter_all:"Tous",filter_select_all:"Tous",filter_select_none:"Aucun",filter_search_value:"Valeur de recherche...",filter_no_support:"Le filtrage n'est pas disponible pour ce type de champ.",textblock_show_more:"Voir plus",close:"Fermer",history_until:"jusqu'au",history_badge_tooltip:"Valeurs précédentes",hyperlink_name:"Texte du lien (optionnel)",merge_search_hint:"Rechercher le doublon à fusionner",merge_select:"Sélectionner",merge_compare_heading:"Résoudre les conflits",merge_column_a:"Actuel (conservé)",merge_column_b:"Candidat (sera supprimé)",merge_auto_heading:"Ces champs seront repris automatiquement du candidat :",merge_no_conflicts:"Aucun champ en conflit trouvé",merge_continue:"Continuer",merge_back:"Retour",merge_confirm_heading:"Confirmer la fusion",merge_confirm_warning:"Cette action est irréversible : le candidat sera définitivement supprimé.",merge_confirm_button:"Confirmer la fusion",invoice_title:"Facture",invoice_date:"Date de facture",invoice_due_date:"Date d'échéance",invoice_subtotal:"Sous-total",invoice_tax:"TVA",invoice_total:"Total",invoice_customer:"Client",invoice_supplier:"Fournisseur",email_from:"De",email_to:"À",email_cc:"Cc",email_date:"Date",email_show_headers:"Afficher les en-têtes techniques"},de:{required:"Dieses Feld ist erforderlich",select_placeholder:"Option auswählen",search_placeholder:"Suchen...",upload_file:"Datei hochladen",choose_file:"Datei auswählen",clear:"Löschen",today:"Heute",invalid_email:"Bitte geben Sie eine gültige E-Mail-Adresse ein",invalid_url:"Bitte geben Sie eine gültige URL ein",invalid_number:"Bitte geben Sie eine gültige Zahl ein",drop_file_here:"Datei hier ablegen oder",browse:"durchsuchen",file_too_large:"Datei ist zu groß",invalid_image:"Bitte eine Bilddatei auswählen",search_results:"Suchergebnisse",no_results:"Keine Ergebnisse gefunden",load_failed_retry:"Laden fehlgeschlagen — erneut versuchen",column_resize:"Spaltenbreite anpassen (Doppelklick zum Anpassen)",loading:"Laden...",submit:"Speichern",cancel:"Abbrechen",remove:"Entfernen",add:"Hinzufügen",yes:"Ja",no:"Nein",table_of:"von",download:"Herunterladen",value_empty:"—",table_filter_clear_all:"Alle Filter löschen",table_new_record:"Neuer Eintrag",table_export_excel:"Als Excel exportieren",readonly_access:"Sie haben nur Lesezugriff",doc_view_switch:"Ansicht wechseln",doc_view_tree:"Baumansicht",doc_upload:"Hochladen",doc_upload_to:"Hochladen nach",doc_view_list:"Listenansicht",filter_sorting:"Sortierung",filter_ascending:"Aufsteigend",filter_descending:"Absteigend",filter_section:"Filter",filter_apply:"Anwenden",filter_clear:"Löschen",filter_contains:"Enthält",filter_starts_with:"Beginnt mit",filter_equals:"Gleich",filter_has_value:"Hat Wert",filter_is_empty:"Ist leer",filter_is_not_empty:"Ist nicht leer",filter_exact:"Genau",filter_range:"Bereich",filter_from:"Von",filter_to:"Bis",filter_all:"Alle",filter_select_all:"Alle",filter_select_none:"Keine",filter_search_value:"Suchwert...",filter_no_support:"Filterung ist für diesen Feldtyp nicht verfügbar.",textblock_show_more:"Mehr anzeigen",close:"Schließen",history_until:"bis",history_badge_tooltip:"Vorherige Werte",hyperlink_name:"Linktext (optional)",merge_search_hint:"Suchen Sie das Duplikat, mit dem zusammengeführt werden soll",merge_select:"Auswählen",merge_compare_heading:"Konflikte lösen",merge_column_a:"Aktuell (bleibt erhalten)",merge_column_b:"Kandidat (wird gelöscht)",merge_auto_heading:"Diese Felder werden automatisch vom Kandidaten übernommen:",merge_no_conflicts:"Keine widersprüchlichen Felder gefunden",merge_continue:"Weiter",merge_back:"Zurück",merge_confirm_heading:"Zusammenführung bestätigen",merge_confirm_warning:"Dies kann nicht rückgängig gemacht werden: der Kandidat wird endgültig gelöscht.",merge_confirm_button:"Zusammenführung bestätigen",invoice_title:"Rechnung",invoice_date:"Rechnungsdatum",invoice_due_date:"Fälligkeitsdatum",invoice_subtotal:"Zwischensumme",invoice_tax:"MwSt.",invoice_total:"Gesamt",invoice_customer:"Kunde",invoice_supplier:"Lieferant",email_from:"Von",email_to:"An",email_cc:"Cc",email_date:"Datum",email_show_headers:"Technische Header anzeigen"},es:{required:"Este campo es obligatorio",select_placeholder:"Seleccionar una opción",search_placeholder:"Buscar...",upload_file:"Subir archivo",choose_file:"Elegir archivo",clear:"Borrar",today:"Hoy",invalid_email:"Por favor, introduzca una dirección de correo electrónico válida",invalid_url:"Por favor, introduzca una URL válida",invalid_number:"Por favor, introduzca un número válido",drop_file_here:"Suelte el archivo aquí o",browse:"explorar",file_too_large:"El archivo es demasiado grande",invalid_image:"Seleccione un archivo de imagen",search_results:"Resultados de búsqueda",no_results:"No se encontraron resultados",load_failed_retry:"Error al cargar — reintentar",column_resize:"Ajustar ancho de columna (doble clic para ajustar)",loading:"Cargando...",submit:"Guardar",cancel:"Cancelar",remove:"Eliminar",add:"Añadir",yes:"Sí",no:"No",table_of:"de",download:"Descargar",value_empty:"—",table_filter_clear_all:"Borrar todos los filtros",table_new_record:"Nuevo registro",table_export_excel:"Exportar a Excel",readonly_access:"Tienes acceso de solo lectura",doc_view_switch:"Cambiar vista",doc_view_tree:"Vista de árbol",doc_upload:"Subir",doc_upload_to:"Subir a",doc_view_list:"Vista de lista",filter_sorting:"Ordenación",filter_ascending:"Ascendente",filter_descending:"Descendente",filter_section:"Filtro",filter_apply:"Aplicar",filter_clear:"Borrar",filter_contains:"Contiene",filter_starts_with:"Empieza por",filter_equals:"Igual a",filter_has_value:"Tiene valor",filter_is_empty:"Está vacío",filter_is_not_empty:"No está vacío",filter_exact:"Exacto",filter_range:"Rango",filter_from:"Desde",filter_to:"Hasta",filter_all:"Todos",filter_select_all:"Todos",filter_select_none:"Ninguno",filter_search_value:"Valor de búsqueda...",filter_no_support:"El filtrado no está disponible para este tipo de campo.",textblock_show_more:"Mostrar más",close:"Cerrar",history_until:"hasta",history_badge_tooltip:"Valores anteriores",hyperlink_name:"Texto del enlace (opcional)",merge_search_hint:"Busque el duplicado con el que fusionar",merge_select:"Seleccionar",merge_compare_heading:"Resolver conflictos",merge_column_a:"Actual (se conserva)",merge_column_b:"Candidato (se eliminará)",merge_auto_heading:"Estos campos se tomarán automáticamente del candidato:",merge_no_conflicts:"No se encontraron campos en conflicto",merge_continue:"Continuar",merge_back:"Atrás",merge_confirm_heading:"Confirmar fusión",merge_confirm_warning:"Esto no se puede deshacer: el candidato se eliminará permanentemente.",merge_confirm_button:"Confirmar fusión",invoice_title:"Factura",invoice_date:"Fecha de factura",invoice_due_date:"Fecha de vencimiento",invoice_subtotal:"Subtotal",invoice_tax:"Impuesto",invoice_total:"Total",invoice_customer:"Cliente",invoice_supplier:"Proveedor",email_from:"De",email_to:"Para",email_cc:"Cc",email_date:"Fecha",email_show_headers:"Mostrar encabezados técnicos"},it:{required:"Questo campo è obbligatorio",select_placeholder:"Seleziona un'opzione",search_placeholder:"Cerca...",upload_file:"Carica file",choose_file:"Scegli file",clear:"Cancella",today:"Oggi",invalid_email:"Inserisci un indirizzo email valido",invalid_url:"Inserisci un URL valido",invalid_number:"Inserisci un numero valido",drop_file_here:"Trascina il file qui o",browse:"sfoglia",file_too_large:"Il file è troppo grande",invalid_image:"Seleziona un file immagine",search_results:"Risultati della ricerca",no_results:"Nessun risultato trovato",load_failed_retry:"Caricamento non riuscito — riprova",column_resize:"Ridimensiona colonna (doppio clic per adattare)",loading:"Caricamento...",submit:"Salva",cancel:"Annulla",remove:"Rimuovi",add:"Aggiungi",yes:"Sì",no:"No",table_of:"di",download:"Scarica",value_empty:"—",table_filter_clear_all:"Cancella tutti i filtri",table_new_record:"Nuovo record",table_export_excel:"Esporta in Excel",readonly_access:"Hai accesso in sola lettura",doc_view_switch:"Cambia vista",doc_view_tree:"Vista ad albero",doc_upload:"Carica",doc_upload_to:"Carica in",doc_view_list:"Vista elenco",filter_sorting:"Ordinamento",filter_ascending:"Crescente",filter_descending:"Decrescente",filter_section:"Filtro",filter_apply:"Applica",filter_clear:"Cancella",filter_contains:"Contiene",filter_starts_with:"Inizia con",filter_equals:"Uguale a",filter_has_value:"Ha valore",filter_is_empty:"È vuoto",filter_is_not_empty:"Non è vuoto",filter_exact:"Esatto",filter_range:"Intervallo",filter_from:"Da",filter_to:"A",filter_all:"Tutti",filter_select_all:"Tutti",filter_select_none:"Nessuno",filter_search_value:"Valore di ricerca...",filter_no_support:"Il filtro non è disponibile per questo tipo di campo.",textblock_show_more:"Mostra altro",close:"Chiudi",history_until:"fino a",history_badge_tooltip:"Valori precedenti",hyperlink_name:"Testo del collegamento (opzionale)",merge_search_hint:"Cerca il duplicato con cui unire",merge_select:"Seleziona",merge_compare_heading:"Risolvi i conflitti",merge_column_a:"Attuale (viene mantenuto)",merge_column_b:"Candidato (verrà eliminato)",merge_auto_heading:"Questi campi verranno ripresi automaticamente dal candidato:",merge_no_conflicts:"Nessun campo in conflitto trovato",merge_continue:"Continua",merge_back:"Indietro",merge_confirm_heading:"Conferma unione",merge_confirm_warning:"Questa azione non può essere annullata: il candidato verrà eliminato definitivamente.",merge_confirm_button:"Conferma unione",invoice_title:"Fattura",invoice_date:"Data fattura",invoice_due_date:"Data di scadenza",invoice_subtotal:"Subtotale",invoice_tax:"IVA",invoice_total:"Totale",invoice_customer:"Cliente",invoice_supplier:"Fornitore",email_from:"Da",email_to:"A",email_cc:"Cc",email_date:"Data",email_show_headers:"Mostra intestazioni tecniche"},uk:{required:"Це поле обов'язкове",select_placeholder:"Виберіть варіант",search_placeholder:"Пошук...",upload_file:"Завантажити файл",choose_file:"Вибрати файл",clear:"Очистити",today:"Сьогодні",invalid_email:"Будь ласка, введіть дійсну адресу електронної пошти",invalid_url:"Будь ласка, введіть дійсну URL-адресу",invalid_number:"Будь ласка, введіть дійсне число",drop_file_here:"Перетягніть файл сюди або",browse:"огляд",file_too_large:"Файл занадто великий",invalid_image:"Будь ласка, виберіть файл зображення",search_results:"Результати пошуку",no_results:"Результатів не знайдено",load_failed_retry:"Не вдалося завантажити — повторити",column_resize:"Змінити ширину стовпця (подвійний клік — за вмістом)",loading:"Завантаження...",submit:"Зберегти",cancel:"Скасувати",remove:"Видалити",add:"Додати",yes:"Так",no:"Ні",table_of:"з",download:"Завантажити",value_empty:"—",table_filter_clear_all:"Очистити всі фільтри",table_new_record:"Новий запис",table_export_excel:"Експортувати до Excel",readonly_access:"У вас доступ лише для перегляду",doc_view_switch:"Змінити вигляд",doc_view_tree:"Деревоподібний вигляд",doc_upload:"Завантажити",doc_upload_to:"Завантажити до",doc_view_list:"Список",filter_sorting:"Сортування",filter_ascending:"За зростанням",filter_descending:"За спаданням",filter_section:"Фільтр",filter_apply:"Застосувати",filter_clear:"Очистити",filter_contains:"Містить",filter_starts_with:"Починається з",filter_equals:"Дорівнює",filter_has_value:"Має значення",filter_is_empty:"Порожнє",filter_is_not_empty:"Не порожнє",filter_exact:"Точно",filter_range:"Діапазон",filter_from:"Від",filter_to:"До",filter_all:"Всі",filter_select_all:"Всі",filter_select_none:"Жодного",filter_search_value:"Значення для пошуку...",filter_no_support:"Фільтрування недоступне для цього типу поля.",textblock_show_more:"Показати більше",close:"Закрити",history_until:"до",history_badge_tooltip:"Попередні значення",hyperlink_name:"Текст посилання (необов'язково)",merge_search_hint:"Знайдіть дублікат для об'єднання",merge_select:"Вибрати",merge_compare_heading:"Вирішити конфлікти",merge_column_a:"Поточний (залишається)",merge_column_b:"Кандидат (буде видалено)",merge_auto_heading:"Ці поля будуть автоматично взяті з кандидата:",merge_no_conflicts:"Конфліктних полів не знайдено",merge_continue:"Продовжити",merge_back:"Назад",merge_confirm_heading:"Підтвердити об'єднання",merge_confirm_warning:"Цю дію не можна скасувати: кандидат буде остаточно видалено.",merge_confirm_button:"Підтвердити об'єднання",invoice_title:"Рахунок-фактура",invoice_date:"Дата рахунку",invoice_due_date:"Термін оплати",invoice_subtotal:"Проміжний підсумок",invoice_tax:"ПДВ",invoice_total:"Разом",invoice_customer:"Клієнт",invoice_supplier:"Постачальник",email_from:"Від",email_to:"Кому",email_cc:"Копія",email_date:"Дата",email_show_headers:"Показати технічні заголовки"}};function i(i,l){var r,a,t;const o=(null!=l?l:"en").split("-")[0].toLowerCase();return null!==(t=null!==(a=(null!==(r=e[o])&&void 0!==r?r:e.en)[i])&&void 0!==a?a:e.en[i])&&void 0!==t?t:i}export{i as t}
|
|
1
|
+
const e={nl:{required:"Dit veld is verplicht",select_placeholder:"Selecteer een optie",search_placeholder:"Zoeken...",upload_file:"Bestand uploaden",choose_file:"Bestand kiezen",clear:"Wissen",today:"Vandaag",invalid_email:"Voer een geldig e-mailadres in",invalid_url:"Voer een geldige URL in",invalid_number:"Voer een geldig getal in",drop_file_here:"Sleep bestand hierheen of",browse:"bladeren",file_too_large:"Bestand is te groot",invalid_image:"Selecteer een afbeeldingsbestand",search_results:"Zoekresultaten",no_results:"Geen resultaten gevonden",load_failed_retry:"Laden mislukt — opnieuw proberen",column_resize:"Kolombreedte aanpassen (dubbelklik om passend te maken)",loading:"Laden...",submit:"Opslaan",cancel:"Annuleren",remove:"Verwijderen",add:"Toevoegen",yes:"Ja",no:"Nee",table_of:"van",download:"Downloaden",value_empty:"—",table_filter_clear_all:"Alle filters wissen",table_search:"Zoeken",table_new_record:"Nieuw record",table_export_excel:"Exporteer naar Excel",readonly_access:"Je hebt alleen-leestoegang",doc_view_switch:"Weergave wisselen",doc_view_tree:"Boomweergave",doc_upload:"Uploaden",doc_upload_to:"Uploaden naar",doc_view_list:"Lijstweergave",filter_sorting:"Sortering",filter_ascending:"Oplopend",filter_descending:"Aflopend",filter_section:"Filter",filter_apply:"Toepassen",filter_clear:"Wissen",filter_contains:"Bevat",filter_starts_with:"Begint met",filter_equals:"Gelijk aan",filter_has_value:"Heeft waarde",filter_is_empty:"Is leeg",filter_is_not_empty:"Is niet leeg",filter_exact:"Exact",filter_range:"Bereik",filter_from:"Van",filter_to:"Tot",filter_all:"Alle",filter_select_all:"Alles",filter_select_none:"Geen",filter_search_value:"Zoekwaarde...",filter_no_support:"Geen filtering beschikbaar voor dit veldtype.",textblock_show_more:"Meer tonen",close:"Sluiten",history_until:"tot",history_badge_tooltip:"Vorige waarden",hyperlink_name:"Linktekst (optioneel)",new_folder:"Nieuwe folder",folder_name_placeholder:"Foldernaam",folder_no_slash:"Een foldernaam mag geen '/' bevatten",folder_duplicate:"Er bestaat al een folder met deze naam",doc_empty_drop:"Nog geen documenten — sleep bestanden hierheen",merge_search_hint:"Zoek het duplicaat waarmee je wilt samenvoegen",merge_select:"Selecteer",merge_compare_heading:"Los conflicten op",merge_column_a:"Huidig (blijft behouden)",merge_column_b:"Kandidaat (wordt verwijderd)",merge_auto_heading:"Deze velden worden automatisch overgenomen van de kandidaat:",merge_no_conflicts:"Geen conflicterende velden gevonden",merge_continue:"Doorgaan",merge_back:"Terug",merge_confirm_heading:"Bevestig samenvoegen",merge_confirm_warning:"Dit kan niet ongedaan worden gemaakt: de kandidaat wordt definitief verwijderd.",merge_confirm_button:"Samenvoegen bevestigen",invoice_title:"Factuur",invoice_date:"Factuurdatum",invoice_due_date:"Vervaldatum",invoice_subtotal:"Subtotaal",invoice_tax:"BTW",invoice_total:"Totaal",invoice_customer:"Klant",invoice_supplier:"Leverancier",email_from:"Van",email_to:"Aan",email_cc:"Cc",email_date:"Datum",email_show_headers:"Toon technische headers"},en:{required:"This field is required",select_placeholder:"Select an option",search_placeholder:"Search...",upload_file:"Upload file",choose_file:"Choose file",clear:"Clear",today:"Today",invalid_email:"Please enter a valid email address",invalid_url:"Please enter a valid URL",invalid_number:"Please enter a valid number",drop_file_here:"Drop file here or",browse:"browse",file_too_large:"File is too large",invalid_image:"Please select an image file",search_results:"Search results",no_results:"No results found",load_failed_retry:"Failed to load — retry",column_resize:"Resize column (double-click to fit)",loading:"Loading...",submit:"Save",cancel:"Cancel",remove:"Remove",add:"Add",yes:"Yes",no:"No",table_of:"of",download:"Download",value_empty:"—",table_filter_clear_all:"Clear all filters",table_search:"Search",table_new_record:"New record",table_export_excel:"Export to Excel",readonly_access:"You have read-only access",doc_view_switch:"Switch view",doc_view_tree:"Tree view",doc_upload:"Upload",doc_upload_to:"Upload to",doc_view_list:"List view",filter_sorting:"Sorting",filter_ascending:"Ascending",filter_descending:"Descending",filter_section:"Filter",filter_apply:"Apply",filter_clear:"Clear",filter_contains:"Contains",filter_starts_with:"Starts with",filter_equals:"Equals",filter_has_value:"Has value",filter_is_empty:"Is empty",filter_is_not_empty:"Is not empty",filter_exact:"Exact",filter_range:"Range",filter_from:"From",filter_to:"To",filter_all:"All",filter_select_all:"All",filter_select_none:"None",filter_search_value:"Search value...",filter_no_support:"Filtering is not available for this field type.",textblock_show_more:"Show more",close:"Close",history_until:"until",history_badge_tooltip:"Previous values",hyperlink_name:"Link text (optional)",new_folder:"New folder",folder_name_placeholder:"Folder name",folder_no_slash:"A folder name cannot contain '/'",folder_duplicate:"A folder with this name already exists",doc_empty_drop:"No documents yet — drop files here",merge_search_hint:"Search for the duplicate to merge with",merge_select:"Select",merge_compare_heading:"Resolve conflicts",merge_column_a:"Current (kept)",merge_column_b:"Candidate (will be deleted)",merge_auto_heading:"These fields will be taken from the candidate automatically:",merge_no_conflicts:"No conflicting fields found",merge_continue:"Continue",merge_back:"Back",merge_confirm_heading:"Confirm merge",merge_confirm_warning:"This cannot be undone: the candidate will be permanently deleted.",merge_confirm_button:"Confirm merge",invoice_title:"Invoice",invoice_date:"Invoice date",invoice_due_date:"Due date",invoice_subtotal:"Subtotal",invoice_tax:"Tax",invoice_total:"Total",invoice_customer:"Customer",invoice_supplier:"Supplier",email_from:"From",email_to:"To",email_cc:"Cc",email_date:"Date",email_show_headers:"Show technical headers"},ar:{required:"هذا الحقل مطلوب",select_placeholder:"اختر خياراً",search_placeholder:"بحث...",upload_file:"رفع ملف",choose_file:"اختر ملفاً",clear:"مسح",today:"اليوم",invalid_email:"يرجى إدخال عنوان بريد إلكتروني صحيح",invalid_url:"يرجى إدخال رابط صحيح",invalid_number:"يرجى إدخال رقم صحيح",drop_file_here:"اسحب الملف هنا أو",browse:"تصفح",file_too_large:"الملف كبير جداً",invalid_image:"يرجى اختيار ملف صورة",search_results:"نتائج البحث",no_results:"لم يتم العثور على نتائج",load_failed_retry:"فشل التحميل — إعادة المحاولة",column_resize:"تغيير عرض العمود (انقر نقرًا مزدوجًا للملاءمة)",loading:"جار التحميل...",submit:"حفظ",cancel:"إلغاء",remove:"إزالة",add:"إضافة",yes:"نعم",no:"لا",table_of:"من أصل",download:"تنزيل",value_empty:"—",table_filter_clear_all:"مسح جميع الفلاتر",table_search:"بحث",table_new_record:"سجل جديد",table_export_excel:"تصدير إلى Excel",readonly_access:"لديك حق الوصول للقراءة فقط",doc_view_switch:"تبديل العرض",doc_view_tree:"عرض شجري",doc_upload:"رفع",doc_upload_to:"رفع إلى",doc_view_list:"عرض القائمة",filter_sorting:"الترتيب",filter_ascending:"تصاعدي",filter_descending:"تنازلي",filter_section:"تصفية",filter_apply:"تطبيق",filter_clear:"مسح",filter_contains:"يحتوي على",filter_starts_with:"يبدأ بـ",filter_equals:"يساوي",filter_has_value:"له قيمة",filter_is_empty:"فارغ",filter_is_not_empty:"ليس فارغاً",filter_exact:"دقيق",filter_range:"نطاق",filter_from:"من",filter_to:"إلى",filter_all:"الكل",filter_select_all:"الكل",filter_select_none:"لا شيء",filter_search_value:"قيمة البحث...",filter_no_support:"التصفية غير متاحة لهذا النوع من الحقول.",textblock_show_more:"عرض المزيد",close:"إغلاق",history_until:"حتى",history_badge_tooltip:"القيم السابقة",hyperlink_name:"نص الرابط (اختياري)",merge_search_hint:"ابحث عن السجل المكرر للدمج معه",merge_select:"اختر",merge_compare_heading:"حل التعارضات",merge_column_a:"الحالي (سيتم الاحتفاظ به)",merge_column_b:"المرشح (سيتم حذفه)",merge_auto_heading:"سيتم أخذ هذه الحقول من المرشح تلقائياً:",merge_no_conflicts:"لم يتم العثور على حقول متعارضة",merge_continue:"متابعة",merge_back:"رجوع",merge_confirm_heading:"تأكيد الدمج",merge_confirm_warning:"لا يمكن التراجع عن هذا الإجراء: سيتم حذف المرشح نهائياً.",merge_confirm_button:"تأكيد الدمج",invoice_title:"فاتورة",invoice_date:"تاريخ الفاتورة",invoice_due_date:"تاريخ الاستحقاق",invoice_subtotal:"المجموع الفرعي",invoice_tax:"الضريبة",invoice_total:"الإجمالي",invoice_customer:"العميل",invoice_supplier:"المورد",email_from:"من",email_to:"إلى",email_cc:"نسخة",email_date:"التاريخ",email_show_headers:"إظهار الترويسات التقنية"},fr:{required:"Ce champ est obligatoire",select_placeholder:"Sélectionner une option",search_placeholder:"Rechercher...",upload_file:"Télécharger un fichier",choose_file:"Choisir un fichier",clear:"Effacer",today:"Aujourd'hui",invalid_email:"Veuillez saisir une adresse e-mail valide",invalid_url:"Veuillez saisir une URL valide",invalid_number:"Veuillez saisir un nombre valide",drop_file_here:"Déposez le fichier ici ou",browse:"parcourir",file_too_large:"Le fichier est trop volumineux",invalid_image:"Veuillez sélectionner un fichier image",search_results:"Résultats de recherche",no_results:"Aucun résultat trouvé",load_failed_retry:"Échec du chargement — réessayer",column_resize:"Redimensionner la colonne (double-cliquer pour ajuster)",loading:"Chargement...",submit:"Enregistrer",cancel:"Annuler",remove:"Supprimer",add:"Ajouter",yes:"Oui",no:"Non",table_of:"sur",download:"Télécharger",value_empty:"—",table_filter_clear_all:"Effacer tous les filtres",table_search:"Rechercher",table_new_record:"Nouvel enregistrement",table_export_excel:"Exporter vers Excel",readonly_access:"Vous disposez d'un accès en lecture seule",doc_view_switch:"Changer de vue",doc_view_tree:"Vue arborescente",doc_upload:"Téléverser",doc_upload_to:"Téléverser vers",doc_view_list:"Vue liste",filter_sorting:"Tri",filter_ascending:"Croissant",filter_descending:"Décroissant",filter_section:"Filtre",filter_apply:"Appliquer",filter_clear:"Effacer",filter_contains:"Contient",filter_starts_with:"Commence par",filter_equals:"Égal à",filter_has_value:"A une valeur",filter_is_empty:"Est vide",filter_is_not_empty:"N'est pas vide",filter_exact:"Exact",filter_range:"Plage",filter_from:"De",filter_to:"À",filter_all:"Tous",filter_select_all:"Tous",filter_select_none:"Aucun",filter_search_value:"Valeur de recherche...",filter_no_support:"Le filtrage n'est pas disponible pour ce type de champ.",textblock_show_more:"Voir plus",close:"Fermer",history_until:"jusqu'au",history_badge_tooltip:"Valeurs précédentes",hyperlink_name:"Texte du lien (optionnel)",merge_search_hint:"Rechercher le doublon à fusionner",merge_select:"Sélectionner",merge_compare_heading:"Résoudre les conflits",merge_column_a:"Actuel (conservé)",merge_column_b:"Candidat (sera supprimé)",merge_auto_heading:"Ces champs seront repris automatiquement du candidat :",merge_no_conflicts:"Aucun champ en conflit trouvé",merge_continue:"Continuer",merge_back:"Retour",merge_confirm_heading:"Confirmer la fusion",merge_confirm_warning:"Cette action est irréversible : le candidat sera définitivement supprimé.",merge_confirm_button:"Confirmer la fusion",invoice_title:"Facture",invoice_date:"Date de facture",invoice_due_date:"Date d'échéance",invoice_subtotal:"Sous-total",invoice_tax:"TVA",invoice_total:"Total",invoice_customer:"Client",invoice_supplier:"Fournisseur",email_from:"De",email_to:"À",email_cc:"Cc",email_date:"Date",email_show_headers:"Afficher les en-têtes techniques"},de:{required:"Dieses Feld ist erforderlich",select_placeholder:"Option auswählen",search_placeholder:"Suchen...",upload_file:"Datei hochladen",choose_file:"Datei auswählen",clear:"Löschen",today:"Heute",invalid_email:"Bitte geben Sie eine gültige E-Mail-Adresse ein",invalid_url:"Bitte geben Sie eine gültige URL ein",invalid_number:"Bitte geben Sie eine gültige Zahl ein",drop_file_here:"Datei hier ablegen oder",browse:"durchsuchen",file_too_large:"Datei ist zu groß",invalid_image:"Bitte eine Bilddatei auswählen",search_results:"Suchergebnisse",no_results:"Keine Ergebnisse gefunden",load_failed_retry:"Laden fehlgeschlagen — erneut versuchen",column_resize:"Spaltenbreite anpassen (Doppelklick zum Anpassen)",loading:"Laden...",submit:"Speichern",cancel:"Abbrechen",remove:"Entfernen",add:"Hinzufügen",yes:"Ja",no:"Nein",table_of:"von",download:"Herunterladen",value_empty:"—",table_filter_clear_all:"Alle Filter löschen",table_search:"Suchen",table_new_record:"Neuer Eintrag",table_export_excel:"Als Excel exportieren",readonly_access:"Sie haben nur Lesezugriff",doc_view_switch:"Ansicht wechseln",doc_view_tree:"Baumansicht",doc_upload:"Hochladen",doc_upload_to:"Hochladen nach",doc_view_list:"Listenansicht",filter_sorting:"Sortierung",filter_ascending:"Aufsteigend",filter_descending:"Absteigend",filter_section:"Filter",filter_apply:"Anwenden",filter_clear:"Löschen",filter_contains:"Enthält",filter_starts_with:"Beginnt mit",filter_equals:"Gleich",filter_has_value:"Hat Wert",filter_is_empty:"Ist leer",filter_is_not_empty:"Ist nicht leer",filter_exact:"Genau",filter_range:"Bereich",filter_from:"Von",filter_to:"Bis",filter_all:"Alle",filter_select_all:"Alle",filter_select_none:"Keine",filter_search_value:"Suchwert...",filter_no_support:"Filterung ist für diesen Feldtyp nicht verfügbar.",textblock_show_more:"Mehr anzeigen",close:"Schließen",history_until:"bis",history_badge_tooltip:"Vorherige Werte",hyperlink_name:"Linktext (optional)",merge_search_hint:"Suchen Sie das Duplikat, mit dem zusammengeführt werden soll",merge_select:"Auswählen",merge_compare_heading:"Konflikte lösen",merge_column_a:"Aktuell (bleibt erhalten)",merge_column_b:"Kandidat (wird gelöscht)",merge_auto_heading:"Diese Felder werden automatisch vom Kandidaten übernommen:",merge_no_conflicts:"Keine widersprüchlichen Felder gefunden",merge_continue:"Weiter",merge_back:"Zurück",merge_confirm_heading:"Zusammenführung bestätigen",merge_confirm_warning:"Dies kann nicht rückgängig gemacht werden: der Kandidat wird endgültig gelöscht.",merge_confirm_button:"Zusammenführung bestätigen",invoice_title:"Rechnung",invoice_date:"Rechnungsdatum",invoice_due_date:"Fälligkeitsdatum",invoice_subtotal:"Zwischensumme",invoice_tax:"MwSt.",invoice_total:"Gesamt",invoice_customer:"Kunde",invoice_supplier:"Lieferant",email_from:"Von",email_to:"An",email_cc:"Cc",email_date:"Datum",email_show_headers:"Technische Header anzeigen"},es:{required:"Este campo es obligatorio",select_placeholder:"Seleccionar una opción",search_placeholder:"Buscar...",upload_file:"Subir archivo",choose_file:"Elegir archivo",clear:"Borrar",today:"Hoy",invalid_email:"Por favor, introduzca una dirección de correo electrónico válida",invalid_url:"Por favor, introduzca una URL válida",invalid_number:"Por favor, introduzca un número válido",drop_file_here:"Suelte el archivo aquí o",browse:"explorar",file_too_large:"El archivo es demasiado grande",invalid_image:"Seleccione un archivo de imagen",search_results:"Resultados de búsqueda",no_results:"No se encontraron resultados",load_failed_retry:"Error al cargar — reintentar",column_resize:"Ajustar ancho de columna (doble clic para ajustar)",loading:"Cargando...",submit:"Guardar",cancel:"Cancelar",remove:"Eliminar",add:"Añadir",yes:"Sí",no:"No",table_of:"de",download:"Descargar",value_empty:"—",table_filter_clear_all:"Borrar todos los filtros",table_search:"Buscar",table_new_record:"Nuevo registro",table_export_excel:"Exportar a Excel",readonly_access:"Tienes acceso de solo lectura",doc_view_switch:"Cambiar vista",doc_view_tree:"Vista de árbol",doc_upload:"Subir",doc_upload_to:"Subir a",doc_view_list:"Vista de lista",filter_sorting:"Ordenación",filter_ascending:"Ascendente",filter_descending:"Descendente",filter_section:"Filtro",filter_apply:"Aplicar",filter_clear:"Borrar",filter_contains:"Contiene",filter_starts_with:"Empieza por",filter_equals:"Igual a",filter_has_value:"Tiene valor",filter_is_empty:"Está vacío",filter_is_not_empty:"No está vacío",filter_exact:"Exacto",filter_range:"Rango",filter_from:"Desde",filter_to:"Hasta",filter_all:"Todos",filter_select_all:"Todos",filter_select_none:"Ninguno",filter_search_value:"Valor de búsqueda...",filter_no_support:"El filtrado no está disponible para este tipo de campo.",textblock_show_more:"Mostrar más",close:"Cerrar",history_until:"hasta",history_badge_tooltip:"Valores anteriores",hyperlink_name:"Texto del enlace (opcional)",merge_search_hint:"Busque el duplicado con el que fusionar",merge_select:"Seleccionar",merge_compare_heading:"Resolver conflictos",merge_column_a:"Actual (se conserva)",merge_column_b:"Candidato (se eliminará)",merge_auto_heading:"Estos campos se tomarán automáticamente del candidato:",merge_no_conflicts:"No se encontraron campos en conflicto",merge_continue:"Continuar",merge_back:"Atrás",merge_confirm_heading:"Confirmar fusión",merge_confirm_warning:"Esto no se puede deshacer: el candidato se eliminará permanentemente.",merge_confirm_button:"Confirmar fusión",invoice_title:"Factura",invoice_date:"Fecha de factura",invoice_due_date:"Fecha de vencimiento",invoice_subtotal:"Subtotal",invoice_tax:"Impuesto",invoice_total:"Total",invoice_customer:"Cliente",invoice_supplier:"Proveedor",email_from:"De",email_to:"Para",email_cc:"Cc",email_date:"Fecha",email_show_headers:"Mostrar encabezados técnicos"},it:{required:"Questo campo è obbligatorio",select_placeholder:"Seleziona un'opzione",search_placeholder:"Cerca...",upload_file:"Carica file",choose_file:"Scegli file",clear:"Cancella",today:"Oggi",invalid_email:"Inserisci un indirizzo email valido",invalid_url:"Inserisci un URL valido",invalid_number:"Inserisci un numero valido",drop_file_here:"Trascina il file qui o",browse:"sfoglia",file_too_large:"Il file è troppo grande",invalid_image:"Seleziona un file immagine",search_results:"Risultati della ricerca",no_results:"Nessun risultato trovato",load_failed_retry:"Caricamento non riuscito — riprova",column_resize:"Ridimensiona colonna (doppio clic per adattare)",loading:"Caricamento...",submit:"Salva",cancel:"Annulla",remove:"Rimuovi",add:"Aggiungi",yes:"Sì",no:"No",table_of:"di",download:"Scarica",value_empty:"—",table_filter_clear_all:"Cancella tutti i filtri",table_search:"Cerca",table_new_record:"Nuovo record",table_export_excel:"Esporta in Excel",readonly_access:"Hai accesso in sola lettura",doc_view_switch:"Cambia vista",doc_view_tree:"Vista ad albero",doc_upload:"Carica",doc_upload_to:"Carica in",doc_view_list:"Vista elenco",filter_sorting:"Ordinamento",filter_ascending:"Crescente",filter_descending:"Decrescente",filter_section:"Filtro",filter_apply:"Applica",filter_clear:"Cancella",filter_contains:"Contiene",filter_starts_with:"Inizia con",filter_equals:"Uguale a",filter_has_value:"Ha valore",filter_is_empty:"È vuoto",filter_is_not_empty:"Non è vuoto",filter_exact:"Esatto",filter_range:"Intervallo",filter_from:"Da",filter_to:"A",filter_all:"Tutti",filter_select_all:"Tutti",filter_select_none:"Nessuno",filter_search_value:"Valore di ricerca...",filter_no_support:"Il filtro non è disponibile per questo tipo di campo.",textblock_show_more:"Mostra altro",close:"Chiudi",history_until:"fino a",history_badge_tooltip:"Valori precedenti",hyperlink_name:"Testo del collegamento (opzionale)",merge_search_hint:"Cerca il duplicato con cui unire",merge_select:"Seleziona",merge_compare_heading:"Risolvi i conflitti",merge_column_a:"Attuale (viene mantenuto)",merge_column_b:"Candidato (verrà eliminato)",merge_auto_heading:"Questi campi verranno ripresi automaticamente dal candidato:",merge_no_conflicts:"Nessun campo in conflitto trovato",merge_continue:"Continua",merge_back:"Indietro",merge_confirm_heading:"Conferma unione",merge_confirm_warning:"Questa azione non può essere annullata: il candidato verrà eliminato definitivamente.",merge_confirm_button:"Conferma unione",invoice_title:"Fattura",invoice_date:"Data fattura",invoice_due_date:"Data di scadenza",invoice_subtotal:"Subtotale",invoice_tax:"IVA",invoice_total:"Totale",invoice_customer:"Cliente",invoice_supplier:"Fornitore",email_from:"Da",email_to:"A",email_cc:"Cc",email_date:"Data",email_show_headers:"Mostra intestazioni tecniche"},uk:{required:"Це поле обов'язкове",select_placeholder:"Виберіть варіант",search_placeholder:"Пошук...",upload_file:"Завантажити файл",choose_file:"Вибрати файл",clear:"Очистити",today:"Сьогодні",invalid_email:"Будь ласка, введіть дійсну адресу електронної пошти",invalid_url:"Будь ласка, введіть дійсну URL-адресу",invalid_number:"Будь ласка, введіть дійсне число",drop_file_here:"Перетягніть файл сюди або",browse:"огляд",file_too_large:"Файл занадто великий",invalid_image:"Будь ласка, виберіть файл зображення",search_results:"Результати пошуку",no_results:"Результатів не знайдено",load_failed_retry:"Не вдалося завантажити — повторити",column_resize:"Змінити ширину стовпця (подвійний клік — за вмістом)",loading:"Завантаження...",submit:"Зберегти",cancel:"Скасувати",remove:"Видалити",add:"Додати",yes:"Так",no:"Ні",table_of:"з",download:"Завантажити",value_empty:"—",table_filter_clear_all:"Очистити всі фільтри",table_search:"Пошук",table_new_record:"Новий запис",table_export_excel:"Експортувати до Excel",readonly_access:"У вас доступ лише для перегляду",doc_view_switch:"Змінити вигляд",doc_view_tree:"Деревоподібний вигляд",doc_upload:"Завантажити",doc_upload_to:"Завантажити до",doc_view_list:"Список",filter_sorting:"Сортування",filter_ascending:"За зростанням",filter_descending:"За спаданням",filter_section:"Фільтр",filter_apply:"Застосувати",filter_clear:"Очистити",filter_contains:"Містить",filter_starts_with:"Починається з",filter_equals:"Дорівнює",filter_has_value:"Має значення",filter_is_empty:"Порожнє",filter_is_not_empty:"Не порожнє",filter_exact:"Точно",filter_range:"Діапазон",filter_from:"Від",filter_to:"До",filter_all:"Всі",filter_select_all:"Всі",filter_select_none:"Жодного",filter_search_value:"Значення для пошуку...",filter_no_support:"Фільтрування недоступне для цього типу поля.",textblock_show_more:"Показати більше",close:"Закрити",history_until:"до",history_badge_tooltip:"Попередні значення",hyperlink_name:"Текст посилання (необов'язково)",merge_search_hint:"Знайдіть дублікат для об'єднання",merge_select:"Вибрати",merge_compare_heading:"Вирішити конфлікти",merge_column_a:"Поточний (залишається)",merge_column_b:"Кандидат (буде видалено)",merge_auto_heading:"Ці поля будуть автоматично взяті з кандидата:",merge_no_conflicts:"Конфліктних полів не знайдено",merge_continue:"Продовжити",merge_back:"Назад",merge_confirm_heading:"Підтвердити об'єднання",merge_confirm_warning:"Цю дію не можна скасувати: кандидат буде остаточно видалено.",merge_confirm_button:"Підтвердити об'єднання",invoice_title:"Рахунок-фактура",invoice_date:"Дата рахунку",invoice_due_date:"Термін оплати",invoice_subtotal:"Проміжний підсумок",invoice_tax:"ПДВ",invoice_total:"Разом",invoice_customer:"Клієнт",invoice_supplier:"Постачальник",email_from:"Від",email_to:"Кому",email_cc:"Копія",email_date:"Дата",email_show_headers:"Показати технічні заголовки"}};function i(i,l){var r,a,t;const o=(null!=l?l:"en").split("-")[0].toLowerCase();return null!==(t=null!==(a=(null!==(r=e[o])&&void 0!==r?r:e.en)[i])&&void 0!==a?a:e.en[i])&&void 0!==t?t:i}export{i as t}
|