@medyat/vue-data-table 1.0.0 → 1.0.1

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.
@@ -0,0 +1,2904 @@
1
+ import { Fragment as e, computed as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineAsyncComponent as c, defineComponent as l, h as u, inject as d, mergeModels as f, normalizeClass as p, onBeforeUnmount as m, onMounted as h, onUpdated as g, openBlock as _, reactive as v, ref as y, renderList as b, renderSlot as x, resolveDynamicComponent as S, shallowRef as C, toDisplayString as w, toRaw as T, toValue as E, unref as D, useModel as O, watch as ee, withCtx as k } from "vue";
2
+ import { PhArrowUpRight as te, PhArrowsOutSimple as ne, PhCaretRight as re, PhCheck as ie, PhDotsThree as A, PhFile as ae, PhFunnel as oe, PhMagnifyingGlass as j, PhMinus as se, PhPackage as ce, PhSlidersHorizontal as le, PhStar as ue, PhWarningCircle as de, PhX as fe, PhXCircle as pe } from "@phosphor-icons/vue";
3
+ import { columnOrderingFeature as me, columnPinningFeature as he, columnResizingFeature as ge, columnSizingFeature as _e, columnVisibilityFeature as ve, tableFeatures as ye, useTable as be } from "@tanstack/vue-table";
4
+ import { AlertDialogCancel as xe, AlertDialogContent as Se, AlertDialogDescription as Ce, AlertDialogOverlay as we, AlertDialogPortal as Te, AlertDialogRoot as Ee, AlertDialogTitle as De, DropdownMenuContent as Oe, DropdownMenuItem as M, DropdownMenuPortal as ke, DropdownMenuRoot as Ae, DropdownMenuSeparator as je, DropdownMenuTrigger as Me, PopoverContent as Ne, PopoverPortal as Pe, PopoverRoot as Fe, PopoverTrigger as Ie, SwitchRoot as Le, SwitchThumb as Re, ToggleGroupItem as ze, ToggleGroupRoot as Be } from "reka-ui";
5
+ var Ve = /* @__PURE__ */ new Map();
6
+ function N(e, t, n, r) {
7
+ let i = `${e}|${t}|${n ? JSON.stringify(n) : ""}`, a = Ve.get(i);
8
+ return a === void 0 && (a = r(), Ve.set(i, a)), a;
9
+ }
10
+ var He = /^(\d{4})-(\d{2})-(\d{2})$/;
11
+ function P(e) {
12
+ if (e instanceof Date) return e;
13
+ let t = He.exec(e);
14
+ return t ? new Date(+t[1], t[2] - 1, +t[3]) : new Date(e);
15
+ }
16
+ var F = 864e5, Ue = (e) => new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime();
17
+ function We(e) {
18
+ let t = (t) => N("n", e, t, () => new Intl.NumberFormat(e, t)), n = (t) => N("d", e, t, () => new Intl.DateTimeFormat(e, t)), r = (e) => e.includes("-") ? e.replace(/-/g, "−") : e, i = t({ maximumFractionDigits: 0 }), a = (e) => {
19
+ let t = /* @__PURE__ */ new Map();
20
+ return (n) => {
21
+ let r = t.get(n);
22
+ return r || t.set(n, r = e(n)), r;
23
+ };
24
+ }, o = a((e) => t({
25
+ minimumFractionDigits: e,
26
+ maximumFractionDigits: e
27
+ })), s = a((e) => t({
28
+ style: "percent",
29
+ minimumFractionDigits: e,
30
+ maximumFractionDigits: e
31
+ })), c = (t) => N("r", e, { style: t }, () => new Intl.RelativeTimeFormat(e, {
32
+ numeric: "auto",
33
+ style: t
34
+ }));
35
+ return {
36
+ locale: e,
37
+ int: (e) => r(i.format(e)),
38
+ decimal: (e, t = 2) => r(o(t).format(e)),
39
+ percent: (e, t = 0) => r(s(t).format(e / 100)),
40
+ compact: (e) => r(t({
41
+ notation: "compact",
42
+ maximumFractionDigits: 0
43
+ }).format(e)),
44
+ date: (e, t = /* @__PURE__ */ new Date()) => {
45
+ let r = P(e), i = r.getFullYear() === t.getFullYear();
46
+ return n(i ? {
47
+ month: "short",
48
+ day: "numeric"
49
+ } : {
50
+ month: "short",
51
+ day: "numeric",
52
+ year: "numeric"
53
+ }).format(r);
54
+ },
55
+ dateTime: (e, t = /* @__PURE__ */ new Date()) => {
56
+ let r = P(e), i = r.getFullYear() === t.getFullYear();
57
+ return n({
58
+ month: "short",
59
+ day: "numeric",
60
+ ...i ? {} : { year: "numeric" },
61
+ hour: "2-digit",
62
+ minute: "2-digit"
63
+ }).format(r);
64
+ },
65
+ dateTimeFull: (e) => n({
66
+ dateStyle: "medium",
67
+ timeStyle: "long"
68
+ }).format(P(e)),
69
+ relative: (e, t = /* @__PURE__ */ new Date(), n = "long") => {
70
+ let r = P(e).getTime() - t.getTime(), i = Math.abs(r), a = c(n);
71
+ return i < 6e4 ? a.format(0, "second") : i < 36e5 ? a.format(Math.round(r / 6e4), "minute") : i < F ? a.format(Math.round(r / 36e5), "hour") : i < 30 * F ? a.format(Math.round(r / F), "day") : i < 365 * F ? a.format(Math.round(r / (30 * F)), "month") : a.format(Math.round(r / (365 * F)), "year");
72
+ },
73
+ daysLate: (e, t = /* @__PURE__ */ new Date()) => Math.max(0, Math.floor((Ue(t) - Ue(P(e))) / F)),
74
+ list: (t) => N("l", e, void 0, () => new Intl.ListFormat(e, { type: "unit" })).format(t),
75
+ collator: () => N("c", e, void 0, () => new Intl.Collator(e, {
76
+ numeric: !0,
77
+ sensitivity: "base"
78
+ })),
79
+ plural: () => N("p", e, void 0, () => new Intl.PluralRules(e))
80
+ };
81
+ }
82
+ var Ge = /* @__PURE__ */ new Map();
83
+ function Ke(e) {
84
+ let t = Ge.get(e);
85
+ return t || (t = We(e), Ge.set(e, t)), t;
86
+ }
87
+ //#endregion
88
+ //#region src/core/cells/format.ts
89
+ var I = (e) => e == null || e === "" || Array.isArray(e) && e.length === 0, L = (e, t) => e?.find((e) => e.value === t)?.label ?? String(t);
90
+ function qe(e) {
91
+ try {
92
+ return new URL(e).host;
93
+ } catch {
94
+ return e;
95
+ }
96
+ }
97
+ function Je(e, t) {
98
+ return typeof e.currency == "function" ? e.currency(t) : e.currency;
99
+ }
100
+ function Ye(e, t, n, r) {
101
+ if (I(n)) return e.emptyText ?? "—";
102
+ let { fmt: i, i18n: a } = r;
103
+ switch (e.type) {
104
+ case "int": return i.int(Number(n));
105
+ case "float": return i.decimal(Number(n), e.decimalPlaces ?? 2);
106
+ case "percentage": return i.percent(Number(n), e.decimalPlaces ?? 0);
107
+ case "star": return a.t("cell.rating", {
108
+ value: Number(n),
109
+ max: e.max ?? 5
110
+ });
111
+ case "currency": return `${i.decimal(Number(n), e.decimalPlaces ?? 2)} ${Je(e, t)}`;
112
+ case "url": return qe(String(n));
113
+ case "boolean": return a.t(n ? "common.yes" : "common.no");
114
+ case "select": return L(e.options, n);
115
+ case "multiselect": return i.list(n.map((t) => L(e.options, t)));
116
+ case "ajax": return r.labels.label(e.id, e.remote, n);
117
+ case "user": {
118
+ let t = Array.isArray(n) ? n : [n];
119
+ return i.list(t.map((t) => e.options?.find((e) => e.value === t)?.label ?? r.labels.label(e.id, e.remote, t)));
120
+ }
121
+ case "date": return Number.isNaN(P(n).getTime()) ? String(n) : i.date(n, r.today);
122
+ case "datetime": return Number.isNaN(P(n).getTime()) ? String(n) : e.relative ? i.relative(n, r.today) : i.dateTime(n, r.today);
123
+ case "object": return e.summary ? e.summary(n, t) : a.t("cell.fields", { count: typeof n == "object" && n ? Object.keys(n).length : 0 });
124
+ case "array": return i.list(n.map((t) => Xe(e.itemType, t, i)));
125
+ default: return String(n);
126
+ }
127
+ }
128
+ function Xe(e, t, n) {
129
+ return e === "int" ? n.int(Number(t)) : e === "float" ? n.decimal(Number(t)) : String(t);
130
+ }
131
+ //#endregion
132
+ //#region src/core/cells/remoteLabels.ts
133
+ var Ze = class {
134
+ cache = /* @__PURE__ */ new Map();
135
+ pending = /* @__PURE__ */ new Map();
136
+ inFlight = /* @__PURE__ */ new Map();
137
+ scheduled = !1;
138
+ version = C(0);
139
+ option(e, t, n) {
140
+ this.version.value;
141
+ let r = this.cache.get(e)?.get(n);
142
+ if (r || !t) return r;
143
+ if (!this.inFlight.get(e)?.has(n)) {
144
+ let r = this.pending.get(e);
145
+ r || this.pending.set(e, r = {
146
+ remote: t,
147
+ ids: /* @__PURE__ */ new Set()
148
+ }), r.ids.add(n), this.schedule();
149
+ }
150
+ }
151
+ label(e, t, n) {
152
+ return this.option(e, t, n)?.label ?? String(n);
153
+ }
154
+ seed(e, t) {
155
+ let n = this.cache.get(e);
156
+ n || this.cache.set(e, n = /* @__PURE__ */ new Map());
157
+ for (let e of t) n.set(e.value, e);
158
+ this.version.value++;
159
+ }
160
+ schedule() {
161
+ this.scheduled || (this.scheduled = !0, queueMicrotask(() => {
162
+ this.scheduled = !1;
163
+ for (let [e, { remote: t, ids: n }] of this.pending) {
164
+ this.pending.delete(e);
165
+ let r = [...n], i = this.inFlight.get(e);
166
+ i || this.inFlight.set(e, i = /* @__PURE__ */ new Set()), r.forEach((e) => i.add(e)), t.resolve(r, { signal: new AbortController().signal }).then((t) => this.seed(e, t)).catch(() => {}).finally(() => r.forEach((e) => i.delete(e)));
167
+ }
168
+ }));
169
+ }
170
+ }, R = (e) => ({
171
+ align: "right",
172
+ width: e,
173
+ skeleton: "number",
174
+ sortable: !0,
175
+ filterable: !0,
176
+ searchable: !1,
177
+ numeric: !0
178
+ }), z = (e, t = !0) => ({
179
+ align: "left",
180
+ width: e,
181
+ skeleton: "text",
182
+ sortable: !0,
183
+ filterable: !0,
184
+ searchable: t,
185
+ numeric: !1
186
+ }), B = (e) => ({
187
+ align: "left",
188
+ width: e,
189
+ skeleton: "badge",
190
+ sortable: !0,
191
+ filterable: !0,
192
+ searchable: !1,
193
+ numeric: !1
194
+ }), V = {
195
+ int: R(112),
196
+ float: R(112),
197
+ percentage: R(112),
198
+ star: {
199
+ ...z(112, !1),
200
+ skeleton: "text"
201
+ },
202
+ currency: R(148),
203
+ string: z({
204
+ min: 160,
205
+ fr: 1.2
206
+ }),
207
+ text: z({
208
+ min: 160,
209
+ fr: 1.2
210
+ }),
211
+ uppercase: z({
212
+ min: 160,
213
+ fr: 1.2
214
+ }),
215
+ lowercase: z({
216
+ min: 160,
217
+ fr: 1.2
218
+ }),
219
+ phone: z(156),
220
+ color: { ...z(132, !1) },
221
+ email: z(200),
222
+ url: { ...z(180, !1) },
223
+ id: z(128),
224
+ boolean: B(96),
225
+ select: B(140),
226
+ multiselect: {
227
+ ...B(180),
228
+ sortable: !1
229
+ },
230
+ ajax: B(180),
231
+ user: {
232
+ ...B(156),
233
+ skeleton: "person"
234
+ },
235
+ date: z(132, !1),
236
+ datetime: z(156, !1),
237
+ object: {
238
+ ...z(180, !1),
239
+ sortable: !1,
240
+ filterable: !1
241
+ },
242
+ array: {
243
+ ...z(160, !1),
244
+ sortable: !1
245
+ }
246
+ };
247
+ function Qe(e) {
248
+ return e.width === void 0 ? e.type === "percentage" && e.display === "bar" ? 156 : e.primary ? e.type === "id" ? 136 : {
249
+ min: 200,
250
+ fr: 1.6
251
+ } : V[e.type].width : e.width;
252
+ }
253
+ var $e = (e) => V[e].numeric;
254
+ function et(e) {
255
+ return e.align ?? V[e.type].align;
256
+ }
257
+ var tt = {
258
+ int: "number",
259
+ float: "number",
260
+ percentage: "percentage",
261
+ star: "rating",
262
+ currency: "currency",
263
+ string: "text",
264
+ text: "longText",
265
+ uppercase: "text",
266
+ lowercase: "text",
267
+ phone: "phone",
268
+ color: "colour",
269
+ email: "email",
270
+ url: "link",
271
+ id: "id",
272
+ boolean: "boolean",
273
+ select: "option",
274
+ multiselect: "options",
275
+ ajax: "relation",
276
+ user: "person",
277
+ date: "date",
278
+ datetime: "datetime",
279
+ object: "object",
280
+ array: "list"
281
+ }, nt = (e) => `type.${tt[e]}`;
282
+ //#endregion
283
+ //#region src/core/columns/readPath.ts
284
+ function H(e, t) {
285
+ let n = e;
286
+ for (let e of t.split(".")) {
287
+ if (n == null) return;
288
+ n = n[e];
289
+ }
290
+ return n;
291
+ }
292
+ //#endregion
293
+ //#region src/core/export/cells.ts
294
+ function U(e, t, n, r) {
295
+ if (I(n)) return "";
296
+ switch (e.type) {
297
+ case "currency": return r.fmt.decimal(Number(n), e.decimalPlaces ?? 2);
298
+ case "date":
299
+ case "datetime": return n instanceof Date ? n.toISOString() : String(n);
300
+ case "multiselect": return n.map((t) => L(e.options, t)).join("; ");
301
+ case "string":
302
+ case "text":
303
+ case "uppercase":
304
+ case "lowercase":
305
+ case "email":
306
+ case "url":
307
+ case "phone":
308
+ case "id": return String(n);
309
+ default: return Ye(e, t, n, r);
310
+ }
311
+ }
312
+ var rt = /* @__PURE__ */ new Map();
313
+ function it(e) {
314
+ let t = rt.get(e);
315
+ if (t === void 0) {
316
+ let n = new Intl.DateTimeFormat(e, {
317
+ year: "numeric",
318
+ month: "2-digit",
319
+ day: "2-digit"
320
+ }).formatToParts(new Date(2026, 9, 24)), r = {
321
+ year: "yyyy",
322
+ month: "mm",
323
+ day: "dd"
324
+ };
325
+ t = n.map((e) => r[e.type] ?? e.value).join(""), rt.set(e, t);
326
+ }
327
+ return t;
328
+ }
329
+ var at = (e) => e > 0 ? `#,##0.${"0".repeat(e)}` : "#,##0", ot = (e) => new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds()));
330
+ function st(e, t, n, r) {
331
+ if (I(n)) return { value: null };
332
+ switch (e.type) {
333
+ case "int":
334
+ case "star": return {
335
+ value: Number(n),
336
+ type: Number,
337
+ format: "#,##0"
338
+ };
339
+ case "float": return {
340
+ value: Number(n),
341
+ type: Number,
342
+ format: at(e.decimalPlaces ?? 2)
343
+ };
344
+ case "percentage": return {
345
+ value: Number(n),
346
+ type: Number,
347
+ format: `${at(e.decimalPlaces ?? 0)}"%"`
348
+ };
349
+ case "currency": {
350
+ let t = typeof e.currency == "string" ? ` "${e.currency}"` : "";
351
+ return {
352
+ value: Number(n),
353
+ type: Number,
354
+ format: at(e.decimalPlaces ?? 2) + t
355
+ };
356
+ }
357
+ case "date":
358
+ case "datetime": {
359
+ let t = P(n);
360
+ if (Number.isNaN(t.getTime())) return {
361
+ value: String(n),
362
+ type: String
363
+ };
364
+ let i = it(r.i18n.locale);
365
+ return {
366
+ value: ot(t),
367
+ type: Date,
368
+ format: e.type === "date" ? i : `${i} hh:mm`
369
+ };
370
+ }
371
+ default: {
372
+ let i = U(e, t, n, r);
373
+ return {
374
+ value: i === "" ? null : i,
375
+ type: String
376
+ };
377
+ }
378
+ }
379
+ }
380
+ function ct(e, t) {
381
+ return e.type === "select" ? e.options.map((e) => e.label) : e.type === "boolean" ? [t.i18n.t("common.yes"), t.i18n.t("common.no")] : null;
382
+ }
383
+ //#endregion
384
+ //#region src/core/export/write.ts
385
+ var lt = {
386
+ fontWeight: "bold",
387
+ textColor: "#15171C",
388
+ backgroundColor: "#E8EAEE",
389
+ borderColor: "#B4B9C2",
390
+ borderStyle: "thin",
391
+ alignVertical: "center"
392
+ }, ut = 16, dt = (e) => e.replace(/[[\]:*?/\\]/g, " ").slice(0, 31) || "Sheet1";
393
+ function ft(e) {
394
+ let t = 0;
395
+ for (let n of e) t = Math.max(t, ...n.split("\n").map((e) => e.length));
396
+ return Math.round(Math.min(60, Math.max(8, t + 2)) * (ut / 11));
397
+ }
398
+ function pt(e) {
399
+ let t = e.env.fmt.decimal(1.5, 1).includes(",") ? ";" : ",", n = (e) => e.includes(t) || /["\r\n]/.test(e) ? `"${e.replace(/"/g, "\"\"")}"` : e;
400
+ return [e.columns.map((e) => n(e.header)), ...e.rows.map((t) => e.columns.map((r) => n(U(r, t, e.read(t, r), e.env))))].map((e) => e.join(t)).join("\r\n");
401
+ }
402
+ async function mt(e) {
403
+ let [{ default: t }, n] = await Promise.all([import("write-excel-file/browser"), import("write-excel-file/utility")]), { columns: r, rows: i, env: a } = e, o = [r.map((e) => ({
404
+ value: e.header,
405
+ ...lt
406
+ })), ...i.map((t) => r.map((n) => st(n, t, e.read(t, n), a)))], s = i.slice(0, 200), c = r.map((t) => ({ width: ft([t.header, ...s.map((n) => U(t, n, e.read(n, t), a))]) })), l = r.flatMap((e, t) => {
407
+ let n = ct(e, a);
408
+ return n ? [{
409
+ column: t + 1,
410
+ header: e.header,
411
+ values: n
412
+ }] : [];
413
+ }), u = dt(a.i18n.t("export.optionsSheet")), d = `'${u.replace(/'/g, "''")}'`, f = i.length ? l.map((e, t) => {
414
+ let r = n.getCellAddress(0, t).replace(/\d+$/, "");
415
+ return `<dataValidation type="list" allowBlank="1" showErrorMessage="1" sqref="${n.getCellAddress(1, e.column - 1) + ":" + n.getCellAddress(i.length, e.column - 1)}"><formula1>${n.sanitizeTextContent(`${d}!$${r}$2:$${r}$${e.values.length + 1}`)}</formula1></dataValidation>`;
416
+ }) : [], p = Math.max(0, ...l.map((e) => e.values.length)), m = [l.map((e) => ({
417
+ value: e.header,
418
+ ...lt
419
+ })), ...Array.from({ length: p }, (e, t) => l.map((e) => ({ value: e.values[t] ?? null })))], h = { files: { transform: { "xl/worksheets/sheet{id}.xml": { transform: (e, t, r) => {
420
+ if (r.sheetIndex !== 0 || !f.length) return e;
421
+ let i = n.getOrderOfSiblings("xl/worksheets/sheet{id}.xml", "worksheet"), a = `<dataValidations count="${f.length}">${f.join("")}</dataValidations>`;
422
+ return n.insertElementMarkupAccordingToOrderOfSiblings(e, a, i, "worksheet");
423
+ } } } } }, g = {
424
+ sheet: dt(e.name),
425
+ data: o,
426
+ columns: c,
427
+ stickyRowsCount: 1
428
+ };
429
+ return t(l.length ? [g, {
430
+ sheet: u,
431
+ data: m,
432
+ columns: l.map((e) => ({ width: ft([e.header, ...e.values]) }))
433
+ }] : [g], {
434
+ features: [h],
435
+ fontSize: ut
436
+ }).toBlob();
437
+ }
438
+ function ht(e, t) {
439
+ let n = document.createElement("a");
440
+ n.href = URL.createObjectURL(e), n.download = t, n.click(), setTimeout(() => URL.revokeObjectURL(n.href), 1e3);
441
+ }
442
+ async function gt(e) {
443
+ ht(e.format === "csv" ? new Blob(["" + pt(e)], { type: "text/csv;charset=utf-8" }) : await mt(e), `${e.name}.${e.format}`);
444
+ }
445
+ var _t = ye({
446
+ columnSizingFeature: _e,
447
+ columnResizingFeature: ge,
448
+ columnOrderingFeature: me,
449
+ columnPinningFeature: he,
450
+ columnVisibilityFeature: ve
451
+ }), vt = (e) => typeof e == "number" ? `${e}px` : `minmax(${e.min}px, ${e.fr}fr)`, yt = (e) => typeof e == "number" ? e : e.min, bt = (e) => `--dt-off-${e.replace(/[^a-zA-Z0-9_-]/g, "_")}`, xt = (e) => !!(e.alwaysVisible || e.primary || e.required);
452
+ function St(e) {
453
+ let n = t(() => E(e.columns)), r = t(() => new Map(n.value.map((e) => [e.id, e]))), i = t(() => E(e.rowKey) ?? "id"), a = t(() => E(e.layout)), o = t(() => E(e.fixedStart) ?? n.value.filter((e) => e.primary).map((e) => e.id)), s = (t) => {
454
+ let n = Qe(t), r = E(e.scale) ?? 1;
455
+ return typeof n == "number" ? Math.round(n * r) : {
456
+ ...n,
457
+ min: Math.round(n.min * r)
458
+ };
459
+ }, c = (e) => Math.min(e.minWidth ?? 80, yt(s(e))), l = (e, t) => {
460
+ let n = r.value.get(e);
461
+ return Math.min(n?.maxWidth ?? Infinity, Math.max(n ? c(n) : 80, Math.round(t)));
462
+ }, u = t(() => n.value.map((e) => {
463
+ let t = e.id;
464
+ return {
465
+ id: t,
466
+ accessorFn: e.accessor ?? ((e) => H(e, t)),
467
+ size: yt(s(e)),
468
+ minSize: c(e),
469
+ maxSize: e.maxWidth,
470
+ enableHiding: !xt(e)
471
+ };
472
+ })), d = (e) => e?.filter((e) => r.value.has(e)), f = (e) => {
473
+ let t = o.value.filter((e) => r.value.has(e)), i = [...t, ...(d(e?.pinned?.left) ?? []).filter((e) => !t.includes(e))], a = (d(e?.pinned?.right) ?? []).filter((e) => !t.includes(e)), s = {};
474
+ for (let t of n.value) {
475
+ let n = t.id;
476
+ s[n] = xt(t) || (e?.visible ? e.visible.includes(n) : !t.hidden);
477
+ }
478
+ let c = {};
479
+ for (let [t, n] of Object.entries(e?.widths ?? {})) r.value.has(t) && (c[t] = l(t, n));
480
+ return {
481
+ columnPinning: {
482
+ start: i,
483
+ end: a
484
+ },
485
+ columnVisibility: s,
486
+ columnOrder: d(e?.order) ?? [],
487
+ columnSizing: c
488
+ };
489
+ }, p = t(() => f(a.value)), m = be({
490
+ features: _t,
491
+ columns: u,
492
+ data: t(() => E(e.rows)),
493
+ getRowId: (e) => String(H(e, i.value)),
494
+ initialState: p.value,
495
+ columnResizeMode: "onChange"
496
+ }), h = t(() => new Map(m.getFlatHeaders().map((e) => [e.column.id, e]))), g = (e, t, n) => ({
497
+ id: e.id,
498
+ def: r.value.get(e.id),
499
+ pinned: t,
500
+ pinEdge: n,
501
+ offsetVar: bt(e.id),
502
+ header: h.value.get(e.id)
503
+ }), _ = t(() => !!E(e.phone)), v = (e) => !!r.value.get(e.id)?.primary, y = t(() => _.value ? m.getVisibleLeafColumns().filter(v) : m.getStartVisibleLeafColumns()), b = t(() => _.value ? m.getVisibleLeafColumns().filter((e) => !v(e)) : m.getCenterVisibleLeafColumns()), x = t(() => _.value ? [] : m.getEndVisibleLeafColumns()), S = (e) => _.value ? v(e) : e.getIsPinned() !== !1, C = t(() => y.value.map((e, t, n) => g(e, "start", t === n.length - 1))), w = t(() => b.value.map((e) => g(e, null, !1))), T = t(() => x.value.map((e, t) => g(e, "end", t === 0))), D = t(() => [
504
+ ...C.value,
505
+ ...w.value,
506
+ ...T.value
507
+ ]), O = (e, t) => {
508
+ let n = m.atoms.columnSizing.get()[e.id] !== void 0;
509
+ return t || n ? e.getSize() : s(r.value.get(e.id));
510
+ }, ee = t(() => [
511
+ ...y.value.map((t, n, r) => vt(O(t, !(e.flexLastStart && n === r.length - 1)))),
512
+ ...b.value.map((e) => vt(O(e, !1))),
513
+ "auto",
514
+ ...x.value.map((e) => vt(O(e, !0)))
515
+ ].join(" ")), k = t(() => {
516
+ let e = {}, t = 0;
517
+ for (let n of y.value) e[bt(n.id)] = `${t}px`, t += n.getSize();
518
+ for (let t of x.value) e[bt(t.id)] = `${t.getAfter("end")}px`;
519
+ return e;
520
+ }), te = t(() => m.getVisibleLeafColumns().reduce((e, t) => e + yt(O(t, S(t))), 0)), ne = t(() => {
521
+ let e = (e) => {
522
+ let t = e.getIsPinned();
523
+ return t === "start" ? 0 : t === "end" ? 2 : 1;
524
+ };
525
+ return [...m.getOrderColumnsFn()(m.getAllLeafColumns())].sort((t, n) => e(t) - e(n)).map((e) => {
526
+ let t = e.getIsPinned();
527
+ return {
528
+ id: e.id,
529
+ def: r.value.get(e.id),
530
+ visible: e.getIsVisible(),
531
+ pinned: t === !1 ? null : t,
532
+ canHide: e.getCanHide(),
533
+ fixed: o.value.includes(e.id)
534
+ };
535
+ });
536
+ }), re = t(() => ({
537
+ shown: m.getVisibleLeafColumns().length,
538
+ total: m.getAllLeafColumns().length
539
+ })), ie = (e, t) => {
540
+ let n = m.getOrderColumnsFn()(m.getAllLeafColumns()), r = n.findIndex((t) => t.id === e), i = n[r];
541
+ if (!i) return;
542
+ let a = i.getIsPinned(), o = r + t;
543
+ for (; o >= 0 && o < n.length && !(n[o].getIsVisible() && n[o].getIsPinned() === a);) o += t;
544
+ let s = n[o];
545
+ if (!s) return;
546
+ let c = n.map((e) => e.id);
547
+ c[r] = s.id, c[o] = i.id, m.setColumnOrder(c);
548
+ }, A = (e) => {
549
+ let t = f(e);
550
+ m.setColumnOrder(t.columnOrder), m.setColumnVisibility(t.columnVisibility), m.setColumnPinning(t.columnPinning), m.setColumnSizing(t.columnSizing);
551
+ }, ae = (e) => {
552
+ let t = e.order.filter((t) => e.visible.includes(t) && !o.value.includes(t)), n = t.slice(0, e.start);
553
+ A({
554
+ order: e.order,
555
+ visible: e.visible,
556
+ widths: j.value.widths,
557
+ pinned: {
558
+ left: n,
559
+ right: e.end ? t.slice(n.length).slice(-e.end) : []
560
+ }
561
+ });
562
+ }, oe = (e = a.value) => A(e), j = t(() => {
563
+ let e = m.atoms.columnPinning.get();
564
+ return {
565
+ order: m.getOrderColumnsFn()(m.getAllLeafColumns()).map((e) => e.id),
566
+ visible: m.getVisibleLeafColumns().map((e) => e.id),
567
+ widths: Object.fromEntries(Object.entries(m.atoms.columnSizing.get()).map(([e, t]) => [e, l(e, t)])),
568
+ pinned: {
569
+ left: [...e.start],
570
+ right: [...e.end]
571
+ }
572
+ };
573
+ });
574
+ return {
575
+ columns: D,
576
+ start: C,
577
+ center: w,
578
+ end: T,
579
+ panel: ne,
580
+ counts: re,
581
+ move: ie,
582
+ reset: oe,
583
+ apply: A,
584
+ arrange: ae,
585
+ state: j,
586
+ resolve: (e) => {
587
+ let t = f(e), r = n.value.map((e) => e.id);
588
+ return {
589
+ order: [...t.columnOrder, ...r.filter((e) => !t.columnOrder.includes(e))],
590
+ visible: r.filter((e) => t.columnVisibility[e]),
591
+ widths: t.columnSizing,
592
+ pinned: {
593
+ left: t.columnPinning.start,
594
+ right: t.columnPinning.end
595
+ }
596
+ };
597
+ },
598
+ colsVar: ee,
599
+ offsetVars: k,
600
+ minWidth: te,
601
+ resizing: t(() => {
602
+ let e = m.atoms.columnResizing.get().isResizingColumn;
603
+ return e ? {
604
+ id: e,
605
+ size: m.getColumn(e)?.getSize() ?? 0
606
+ } : null;
607
+ }),
608
+ rowId: (e) => String(H(e, i.value)),
609
+ widthOf: (e) => m.getColumn(e)?.getSize() ?? 0,
610
+ setWidth: (e, t) => m.setColumnSizing((n) => ({
611
+ ...n,
612
+ [e]: l(e, t)
613
+ })),
614
+ resetWidth: (e) => m.getColumn(e)?.resetSize(),
615
+ setVisible: (e, t) => m.getColumn(e)?.toggleVisibility(t),
616
+ setOrder: (e) => m.setColumnOrder(e)
617
+ };
618
+ }
619
+ //#endregion
620
+ //#region src/core/i18n/en.ts
621
+ var Ct = {
622
+ "common.cancel": "Cancel",
623
+ "common.apply": "Apply",
624
+ "common.clear": "Clear",
625
+ "common.reset": "Reset",
626
+ "common.retry": "Retry",
627
+ "common.close": "Close",
628
+ "common.done": "Done",
629
+ "common.undo": "Undo",
630
+ "common.redo": "Redo",
631
+ "common.dismiss": "Dismiss",
632
+ "common.back": "Back",
633
+ "common.more": "More",
634
+ "common.loading": "Loading…",
635
+ "common.yes": "Yes",
636
+ "common.no": "No",
637
+ "common.me": "Me",
638
+ "common.unassigned": "Unassigned",
639
+ "common.any": "Any",
640
+ "common.empty": "—",
641
+ "common.plusMore": "+{count}",
642
+ "common.copyLink": "Copy link",
643
+ "common.save": "Save",
644
+ "kbd.mod": "⌘ / Ctrl",
645
+ "toolbar.search": "Search {entity.other}…",
646
+ "toolbar.filter": "Filter",
647
+ "toolbar.display": "Display",
648
+ "toolbar.more": "More actions",
649
+ "toolbar.export.one": "Export {count} row",
650
+ "toolbar.export.other": "Export {count} rows",
651
+ "toolbar.exportSelected.one": "Export {count} selected row",
652
+ "toolbar.exportSelected.other": "Export {count} selected rows",
653
+ "toolbar.csv": "CSV",
654
+ "toolbar.xlsx": "Excel (.xlsx)",
655
+ "export.optionsSheet": "Options",
656
+ "toolbar.import": "Import…",
657
+ "toolbar.print": "Print",
658
+ "toolbar.refresh": "Refresh",
659
+ "toolbar.autoRefresh": "Auto-refresh",
660
+ "toolbar.live": "Live",
661
+ "toolbar.updatedJustNow": "Updated just now",
662
+ "toolbar.updatedAgo": "Updated {time}",
663
+ "filter.addFilter": "Add filter",
664
+ "filter.clearAll": "Clear all",
665
+ "filter.selectValue": "Select…",
666
+ "filter.removeAria": "Remove {column} filter",
667
+ "filter.valueAria": "{column} {op} {value}. Edit value",
668
+ "filter.chooseValueAria": "{column}: choose a value",
669
+ "filter.sheetNote": "Filters only change what you see — hidden rows keep their edits.",
670
+ "picker.search": "Filter by…",
671
+ "picker.filtered": "Filtered",
672
+ "picker.filteredHint": "opens its chip",
673
+ "picker.suggested": "Suggested",
674
+ "picker.allColumns": "All columns",
675
+ "picker.noMatch": "No columns match",
676
+ "type.number": "Number",
677
+ "type.percentage": "Percentage",
678
+ "type.rating": "Rating",
679
+ "type.currency": "Currency",
680
+ "type.text": "Text",
681
+ "type.longText": "Long text",
682
+ "type.phone": "Phone",
683
+ "type.colour": "Colour",
684
+ "type.email": "Email",
685
+ "type.link": "Link",
686
+ "type.id": "Record ID",
687
+ "type.boolean": "Yes / No",
688
+ "type.option": "Option",
689
+ "type.options": "Options",
690
+ "type.relation": "Relation",
691
+ "type.person": "Person",
692
+ "type.date": "Date",
693
+ "type.datetime": "Date & time",
694
+ "type.object": "Object",
695
+ "type.list": "List",
696
+ "op.eq": "is",
697
+ "op.neq": "is not",
698
+ "op.gt": "is greater than",
699
+ "op.gte": "is at least",
700
+ "op.lt": "is less than",
701
+ "op.lte": "is at most",
702
+ "op.between": "is between",
703
+ "op.contains": "contains",
704
+ "op.not_contains": "doesn't contain",
705
+ "op.starts_with": "starts with",
706
+ "op.ends_with": "ends with",
707
+ "op.in.one": "is",
708
+ "op.in.other": "is any of",
709
+ "op.not_in.one": "is not",
710
+ "op.not_in.other": "is none of",
711
+ "op.before": "is before",
712
+ "op.after": "is after",
713
+ "op.within": "is within",
714
+ "op.is_empty": "is empty",
715
+ "op.is_not_empty": "is not empty",
716
+ "op.isMe": "is me",
717
+ "op.star.gte": "at least",
718
+ "op.star.lte": "at most",
719
+ "date.today": "Today",
720
+ "date.this_week": "This week",
721
+ "date.next_7_days": "Next 7 days",
722
+ "date.this_month": "This month",
723
+ "date.last_30_days": "Last 30 days",
724
+ "date.this_quarter": "This quarter",
725
+ "date.overdue": "Overdue",
726
+ "date.customRange": "Custom range",
727
+ "date.from": "From",
728
+ "date.to": "To",
729
+ "date.presetsRelative": "Presets stay relative — “This month” rolls over by itself.",
730
+ "number.and": "and",
731
+ "number.boundsIncluded": "Bounds included",
732
+ "number.min": "Min",
733
+ "number.max": "Max",
734
+ "option.search": "Search options…",
735
+ "option.searchNoun": "Search {noun.other}",
736
+ "option.only": "Only",
737
+ "option.selected.one": "{count} selected",
738
+ "option.selected.other": "{count} selected",
739
+ "remote.searching": "Searching…",
740
+ "remote.noResults": "No results",
741
+ "remote.loadMore": "Load more",
742
+ "chip.values": "{count} values",
743
+ "chip.noun": "{count} {noun.other}",
744
+ "chip.people": "{count} people",
745
+ "views.title": "Views",
746
+ "views.find": "Find a view…",
747
+ "views.system": "System views",
748
+ "views.builtIn": "Built in",
749
+ "views.mine": "My views",
750
+ "views.onlyYou": "Only you",
751
+ "views.default": "Default",
752
+ "views.edited": "Edited",
753
+ "views.new": "New view",
754
+ "views.rename": "Rename",
755
+ "views.duplicate": "Duplicate",
756
+ "views.setDefault": "Set as default",
757
+ "views.delete": "Delete",
758
+ "views.delete.title": "Delete “{name}”?",
759
+ "views.delete.body": "This can't be undone.",
760
+ "views.systemNote": "System views offer only Duplicate and Set as default.",
761
+ "views.saveChanges": "Save changes",
762
+ "views.updates": "Updates “{name}”",
763
+ "views.saveAsNew": "Save as new view…",
764
+ "views.keepsUnchanged": "Keeps “{name}” unchanged",
765
+ "views.discard": "Discard changes",
766
+ "views.saveAsMine": "Save as my view…",
767
+ "views.editedName": "“{name}” edited",
768
+ "views.dialogTitle": "Save as new view",
769
+ "views.dialogBody": "It appears under My views. Only you can see it.",
770
+ "views.name": "Name",
771
+ "views.filters": "Filters",
772
+ "views.sort": "Sort",
773
+ "views.columns": "Columns",
774
+ "views.columnsSummary": "{shown} of {total}",
775
+ "views.pinnedSummary": "{name} pinned",
776
+ "views.makeDefault": "Make this my default view",
777
+ "views.save": "Save view",
778
+ "views.copyName": "{name} copy",
779
+ "views.err.required": "Enter a name.",
780
+ "views.err.taken": "You already have a view with this name.",
781
+ "views.err.tooLong": "Use 60 characters or fewer.",
782
+ "views.noMatch": "No views match",
783
+ "display.density": "Density",
784
+ "display.comfortable": "Comfortable",
785
+ "display.standard": "Standard",
786
+ "display.compact": "Compact",
787
+ "display.columns": "Columns",
788
+ "display.sort": "Sort",
789
+ "display.verticalLines": "Vertical grid lines",
790
+ "display.savedForYou": "Saved for you only",
791
+ "columns.shownOf": "{shown} of {total} shown",
792
+ "columns.pinned": "Pinned",
793
+ "columns.alwaysShown": "Always shown",
794
+ "columns.hideAll": "Hide all",
795
+ "columns.showAll": "Show all",
796
+ "columns.reorder": "Reorder {column}",
797
+ "columns.dragInstructions": "Press space to pick up a column, use the up and down arrow keys to move it, then press space again to drop it. Press escape to cancel.",
798
+ "columns.dragStart": "Picked up {column}. Position {position} of {total}.",
799
+ "columns.dragOver": "{column} moved to position {position} of {total}.",
800
+ "columns.dragEnd": "{column} dropped at position {position} of {total}.",
801
+ "columns.dragCancel": "Reordering cancelled. {column} returned to its place.",
802
+ "columns.find": "Find a column",
803
+ "columns.title": "Column preferences",
804
+ "columns.desc": "Show, hide and reorder the table's columns.",
805
+ "columns.pin.start.title": "Pin first columns",
806
+ "columns.pin.start.desc": "Keep the first columns in view while scrolling sideways.",
807
+ "columns.pin.start.0": "None",
808
+ "columns.pin.start.1": "First column",
809
+ "columns.pin.start.2": "First two columns",
810
+ "columns.pin.end.title": "Pin last columns",
811
+ "columns.pin.end.desc": "Keep the last columns in view while scrolling sideways.",
812
+ "columns.pin.end.0": "None",
813
+ "columns.pin.end.1": "Last column",
814
+ "columns.pin.end.2": "Last two columns",
815
+ "header.sortAsc": "Sort ascending",
816
+ "header.sortDesc": "Sort descending",
817
+ "header.clearSort": "Clear sort",
818
+ "sort.addHint": "⇧ + click a header to add · up to 3",
819
+ "header.filterBy": "Filter by this column…",
820
+ "header.moveLeft": "Move left",
821
+ "header.moveRight": "Move right",
822
+ "header.hide": "Hide column",
823
+ "header.optionsAria": "{column} column options",
824
+ "row.open": "Open",
825
+ "row.openNewTab": "Open in new tab",
826
+ "row.actionsAria": "Actions for {id}",
827
+ "row.selectAria": "Select {id}",
828
+ "row.selectPageAria": "Select all rows on this page",
829
+ "row.copyId": "Copy {column}",
830
+ "selection.selected": "{count} selected",
831
+ "selection.clear": "Clear selection",
832
+ "expand.showAria": "Show details for {id}",
833
+ "page.rows": "Rows {from}–{to}",
834
+ "page.of": "of {total}",
835
+ "page.countTotal": "Count total",
836
+ "page.counting": "Counting…",
837
+ "page.counted": "counted {time}",
838
+ "page.end": "end of results",
839
+ "page.zero": "0 rows",
840
+ "page.none": "No rows",
841
+ "page.noneOnPage": "No rows on this page",
842
+ "page.previousPage": "Go to previous page",
843
+ "page.perPage": "Rows per page",
844
+ "page.previous": "Previous",
845
+ "page.next": "Next",
846
+ "page.scrollPos": "Rows {from}–{to}",
847
+ "page.nav": "Pages",
848
+ "state.emptyTitle": "No {entity.other} yet",
849
+ "state.noResults.one": "No {entity.other} match this filter",
850
+ "state.noResults.other": "No {entity.other} match these {count} filters",
851
+ "state.noResultsSearch": "No {entity.other} match “{q}”",
852
+ "state.noResultsBoth": "No {entity.other} match “{q}” and {count} filters",
853
+ "state.removeFilter": "Remove “{column}”",
854
+ "state.clearAllFilters": "Clear all filters",
855
+ "state.clearSearch": "Clear search",
856
+ "state.errorTitle": "Couldn't load {entity.other}",
857
+ "state.errorKept": "Your filters are kept.",
858
+ "state.tryAgain": "Try again",
859
+ "state.copyErrorId": "Copy error ID",
860
+ "state.stale": "Couldn't refresh. Showing data from {time}.",
861
+ "state.updating": "Updating…",
862
+ "state.stillLoading": "Still loading…",
863
+ "cell.late": "{count}d late",
864
+ "cell.rating": "{value} of {max}",
865
+ "cell.fields": "{count} fields",
866
+ "cell.copy": "Copy",
867
+ "cell.copied": "Copied",
868
+ "cell.expandText": "Show full text",
869
+ "bulk.moreAria": "More bulk actions",
870
+ "bulk.aria": "Bulk actions",
871
+ "sheet.find": "Find in grid",
872
+ "sheet.findCount": "{index} of {total}",
873
+ "sheet.all": "All",
874
+ "sheet.changed": "Changed",
875
+ "sheet.errors": "Errors",
876
+ "sheet.addRow": "Add row",
877
+ "sheet.import": "Import Excel",
878
+ "sheet.export": "Export",
879
+ "sheet.exportAll": "Export all rows ({count})",
880
+ "sheet.exportVisible": "Export visible rows ({count})",
881
+ "sheet.changes": "{cells} changes in {rows} rows",
882
+ "sheet.newRows.one": "{count} new row",
883
+ "sheet.newRows.other": "{count} new rows",
884
+ "sheet.newShort": "{count} new",
885
+ "sheet.noChanges": "No changes",
886
+ "sheet.rows": "{count} rows",
887
+ "sheet.errorsGoTo.one": "{count} error — go to",
888
+ "sheet.errorsGoTo.other": "{count} errors — go to",
889
+ "sheet.discard": "Discard",
890
+ "sheet.save": "Save changes",
891
+ "sheet.agg.count": "Count",
892
+ "sheet.agg.sum": "Sum",
893
+ "sheet.agg.avg": "Average",
894
+ "sheet.cells": "{rows} × {cols} cells",
895
+ "sheet.keyTooltip": "Match key — an existing {key} updates that record, a new {key} creates one",
896
+ "sheet.addedRow": "Added row",
897
+ "sheet.required": "Required",
898
+ "sheet.notANumber": "Enter a number",
899
+ "sheet.notADate": "Enter a date",
900
+ "sheet.hasErrors": "Has errors",
901
+ "sheet.valueAria": "Value of {column} for {key}",
902
+ "sheet.statusAria": "Sheet status",
903
+ "sheet.was": "Was {value}",
904
+ "sheet.duplicateKey": "{key} is already in row {row}",
905
+ "sheet.notAnOption": "“{value}” isn't an option",
906
+ "sheet.useOption": "Use {option}",
907
+ "sheet.noFormulas": "Formulas aren't supported",
908
+ "sheet.notMatchFilter": "Doesn't match filters",
909
+ "sheet.menu.cut": "Cut",
910
+ "sheet.menu.copy": "Copy",
911
+ "sheet.menu.paste": "Paste",
912
+ "sheet.menu.fillDown": "Fill down",
913
+ "sheet.menu.clear": "Clear contents",
914
+ "sheet.menu.insertAbove": "Insert row above",
915
+ "sheet.menu.insertBelow": "Insert row below",
916
+ "sheet.menu.remove": "Remove from list",
917
+ "sheet.menu.open": "Open {entity.one}",
918
+ "sheet.removed.one": "Row {row} removed from this list. The {entity.one} isn't deleted.",
919
+ "sheet.removed.other": "{count} rows removed from this list. The {entity.other} aren't deleted.",
920
+ "sheet.pasted": "Pasted {rows} rows × {cols} columns",
921
+ "sheet.pasteIssues.one": "{count} value isn't an option",
922
+ "sheet.pasteIssues.other": "{count} values aren't options",
923
+ "sheet.pasteErrors.one": "{count} cell has an error",
924
+ "sheet.pasteErrors.other": "{count} cells have errors",
925
+ "sheet.review": "Review",
926
+ "sheet.fillPreview": "Fill {count} cells with {value}",
927
+ "sheet.limitPaste": "This paste would make {count} rows. The limit is {max}.",
928
+ "sheet.limitFile": "This file would make {count} rows. The limit is {max}.",
929
+ "sheet.nextError": "Next error (F8)",
930
+ "sheet.prevError": "Previous error (⇧F8)",
931
+ "sheet.nextErrorHidden": "Next error is hidden by filters",
932
+ "sheet.showIt": "Show it",
933
+ "sheet.loading": "Loading {entity.other}…",
934
+ "sheet.loadingCount": "{loaded} of {total}",
935
+ "sheet.firstN": "Showing the first {max} {entity.other}. Narrow the selection to edit the rest.",
936
+ "sheet.saving": "Saving… {sent} of {total} rows",
937
+ "sheet.savingIndeterminate": "Saving…",
938
+ "sheet.savingButton": "Saving…",
939
+ "sheet.savingReadOnly": "Read-only while saving",
940
+ "sheet.saveChanges": "Save changes",
941
+ "sheet.discardButton": "Discard",
942
+ "sheet.saved": "{count} rows saved",
943
+ "sheet.savedDetail": "{created} created · {updated} updated",
944
+ "sheet.partly.title": "{count} rows couldn't be saved.",
945
+ "sheet.partly.body": "{count} rows were saved.",
946
+ "sheet.copyErrors": "Copy errors",
947
+ "sheet.err.row": "Row",
948
+ "sheet.err.column": "Column",
949
+ "sheet.err.message": "Message",
950
+ "sheet.selectionSummary": "Selection summary",
951
+ "sheet.showRows": "Show rows",
952
+ "sheet.errDialog.title.one": "{count} row has errors",
953
+ "sheet.errDialog.title.other": "{count} rows have errors",
954
+ "sheet.errDialog.body": "It won't be sent. The other {count} changed rows will be saved.",
955
+ "sheet.errDialog.fix": "Fix first",
956
+ "sheet.errDialog.save": "Save {count} rows",
957
+ "sheet.leave.title": "Leave without saving?",
958
+ "sheet.leave.body": "{cells} changes in {rows} rows will be lost.",
959
+ "sheet.leave.stay": "Stay",
960
+ "sheet.leave.discard": "Discard changes",
961
+ "sheet.discard.title": "Discard {cells} changes in {rows} rows?",
962
+ "sheet.discard.body": "The sheet goes back to how it was loaded. This can't be undone.",
963
+ "sheet.discard.keep": "Keep editing",
964
+ "sheet.readOnly.title": "Editing needs a larger screen.",
965
+ "sheet.readOnly.body": "You can search and look at {entity.other} here; changes are made on a computer.",
966
+ "sheet.readOnly.badge": "Read-only",
967
+ "sheet.readOnly.total": "{count} {entity.other}",
968
+ "import.title": "Import from Excel",
969
+ "import.body": "Rows are matched by {key}: a known {key} updates its {entity.one}, a new {key} becomes a new row. Everything lands in the grid for review first.",
970
+ "import.failed": "Couldn't read the file",
971
+ "import.drop": "Drop an .xlsx or .csv file, or choose one",
972
+ "import.xlsxOnly": "Only .xlsx and .csv files can be read. Save an old .xls file as .xlsx in Excel first.",
973
+ "import.sheetInfo": "Sheet “{sheet}” · {count} rows",
974
+ "import.headerRow": "Header row",
975
+ "import.headerRowN": "Row {n}",
976
+ "import.replace": "Replace file",
977
+ "import.matchBy": "Match rows by",
978
+ "import.excelColumn": "Excel column",
979
+ "import.field": "Field",
980
+ "import.firstValue": "First value",
981
+ "import.matchKey": "match key",
982
+ "import.skip": "Don't import",
983
+ "import.chooseField": "Choose a field",
984
+ "import.summary": "{updates} rows in the list will be updated · {news} {key}s not in the list",
985
+ "import.seeNew": "See {key}s not in the list",
986
+ "import.addNew": "Add the {count} {key}s not in the list as rows",
987
+ "import.apply": "Apply to grid",
988
+ "import.keyRequired": "Choose the column that holds {key}.",
989
+ "import.done": "Imported {count} rows · {updated} updated · {news} added",
990
+ "mobile.filters": "Filters",
991
+ "mobile.showResults": "Show results",
992
+ "mobile.sort": "Sort",
993
+ "mobile.chipAria": "{summary}. Open filters",
994
+ "mobile.backToFilters": "Back to filters",
995
+ "mobile.operator": "Operator",
996
+ "sr.loaded": "{count} rows loaded",
997
+ "sr.total": "{count} {entity.other}",
998
+ "sr.sorted": "Sorted by {column}, {dir}",
999
+ "sr.asc": "ascending",
1000
+ "sr.desc": "descending",
1001
+ "sr.filterAdded": "Filter added: {summary}",
1002
+ "sr.filterRemoved": "{column} filter removed",
1003
+ "sr.view": "View {name}",
1004
+ "sr.viewEdited": "View {name}, edited",
1005
+ "sr.expanded": "{label} expanded, {count} rows",
1006
+ "sr.savingPercent": "Saving, {percent} percent",
1007
+ "sr.loadingPercent": "Loading, {percent} percent",
1008
+ "sr.pasted": "Pasted {rows} rows by {cols} columns."
1009
+ }, wt = {
1010
+ en: Ct,
1011
+ tr: {
1012
+ "common.cancel": "Vazgeç",
1013
+ "common.apply": "Uygula",
1014
+ "common.clear": "Temizle",
1015
+ "common.reset": "Sıfırla",
1016
+ "common.retry": "Tekrar dene",
1017
+ "common.close": "Kapat",
1018
+ "common.done": "Bitti",
1019
+ "common.undo": "Geri al",
1020
+ "common.redo": "Yinele",
1021
+ "common.dismiss": "Kapat",
1022
+ "common.back": "Geri",
1023
+ "common.more": "Daha fazla",
1024
+ "common.loading": "Yükleniyor…",
1025
+ "common.yes": "Evet",
1026
+ "common.no": "Hayır",
1027
+ "common.me": "Ben",
1028
+ "common.unassigned": "Atanmamış",
1029
+ "common.any": "Tümü",
1030
+ "common.empty": "—",
1031
+ "common.plusMore": "+{count}",
1032
+ "common.copyLink": "Bağlantıyı kopyala",
1033
+ "common.save": "Kaydet",
1034
+ "kbd.mod": "⌘ / Ctrl",
1035
+ "toolbar.search": "Ara: {entity.other}…",
1036
+ "toolbar.filter": "Filtrele",
1037
+ "toolbar.display": "Görünüm ayarları",
1038
+ "toolbar.more": "Diğer işlemler",
1039
+ "toolbar.export.one": "{count} satırı dışa aktar",
1040
+ "toolbar.export.other": "{count} satırı dışa aktar",
1041
+ "toolbar.exportSelected.one": "Seçili {count} satırı dışa aktar",
1042
+ "toolbar.exportSelected.other": "Seçili {count} satırı dışa aktar",
1043
+ "toolbar.csv": "CSV",
1044
+ "toolbar.xlsx": "Excel (.xlsx)",
1045
+ "export.optionsSheet": "Seçenekler",
1046
+ "toolbar.import": "İçe aktar…",
1047
+ "toolbar.print": "Yazdır",
1048
+ "toolbar.refresh": "Yenile",
1049
+ "toolbar.autoRefresh": "Otomatik yenile",
1050
+ "toolbar.live": "Canlı",
1051
+ "toolbar.updatedJustNow": "Az önce güncellendi",
1052
+ "toolbar.updatedAgo": "{time} güncellendi",
1053
+ "filter.addFilter": "Filtre ekle",
1054
+ "filter.clearAll": "Tümünü temizle",
1055
+ "filter.selectValue": "Seçin…",
1056
+ "filter.removeAria": "{column} filtresini kaldır",
1057
+ "filter.valueAria": "{column} {op} {value}. Değeri düzenle",
1058
+ "filter.chooseValueAria": "{column}: bir değer seçin",
1059
+ "filter.sheetNote": "Filtreler yalnızca görüneni değiştirir; gizlenen satırlardaki düzenlemeler korunur.",
1060
+ "picker.search": "Filtrelenecek alan…",
1061
+ "picker.filtered": "Filtrelenen",
1062
+ "picker.filteredHint": "çipini açar",
1063
+ "picker.suggested": "Önerilen",
1064
+ "picker.allColumns": "Tüm sütunlar",
1065
+ "picker.noMatch": "Eşleşen sütun yok",
1066
+ "type.number": "Sayı",
1067
+ "type.percentage": "Yüzde",
1068
+ "type.rating": "Puan",
1069
+ "type.currency": "Para",
1070
+ "type.text": "Metin",
1071
+ "type.longText": "Uzun metin",
1072
+ "type.phone": "Telefon",
1073
+ "type.colour": "Renk",
1074
+ "type.email": "E-posta",
1075
+ "type.link": "Bağlantı",
1076
+ "type.id": "Kayıt no",
1077
+ "type.boolean": "Evet / Hayır",
1078
+ "type.option": "Seçenek",
1079
+ "type.options": "Seçenekler",
1080
+ "type.relation": "İlişki",
1081
+ "type.person": "Kişi",
1082
+ "type.date": "Tarih",
1083
+ "type.datetime": "Tarih ve saat",
1084
+ "type.object": "Nesne",
1085
+ "type.list": "Liste",
1086
+ "op.eq": "eşittir",
1087
+ "op.neq": "eşit değil",
1088
+ "op.gt": "büyüktür",
1089
+ "op.gte": "en az",
1090
+ "op.lt": "küçüktür",
1091
+ "op.lte": "en çok",
1092
+ "op.between": "arasında",
1093
+ "op.contains": "içerir",
1094
+ "op.not_contains": "içermez",
1095
+ "op.starts_with": "ile başlar",
1096
+ "op.ends_with": "ile biter",
1097
+ "op.in.one": "eşittir",
1098
+ "op.in.other": "şunlardan biri",
1099
+ "op.not_in.one": "eşit değil",
1100
+ "op.not_in.other": "şunlardan hiçbiri",
1101
+ "op.before": "öncesinde",
1102
+ "op.after": "sonrasında",
1103
+ "op.within": "aralığında",
1104
+ "op.is_empty": "boş",
1105
+ "op.is_not_empty": "boş değil",
1106
+ "op.isMe": "ben",
1107
+ "op.star.gte": "en az",
1108
+ "op.star.lte": "en çok",
1109
+ "date.today": "Bugün",
1110
+ "date.this_week": "Bu hafta",
1111
+ "date.next_7_days": "Önümüzdeki 7 gün",
1112
+ "date.this_month": "Bu ay",
1113
+ "date.last_30_days": "Son 30 gün",
1114
+ "date.this_quarter": "Bu çeyrek",
1115
+ "date.overdue": "Gecikmiş",
1116
+ "date.customRange": "Özel aralık",
1117
+ "date.from": "Başlangıç",
1118
+ "date.to": "Bitiş",
1119
+ "date.presetsRelative": "Hazır aralıklar göreli kalır: “Bu ay” ay değişince kendiliğinden kayar.",
1120
+ "number.and": "ile",
1121
+ "number.boundsIncluded": "Uçlar dahil",
1122
+ "number.min": "En az",
1123
+ "number.max": "En çok",
1124
+ "option.search": "Seçeneklerde ara…",
1125
+ "option.searchNoun": "Ara: {noun.other}",
1126
+ "option.only": "Yalnızca",
1127
+ "option.selected.one": "{count} seçili",
1128
+ "option.selected.other": "{count} seçili",
1129
+ "remote.searching": "Aranıyor…",
1130
+ "remote.noResults": "Sonuç yok",
1131
+ "remote.loadMore": "Daha fazla yükle",
1132
+ "chip.values": "{count} değer",
1133
+ "chip.noun": "{count} {noun.one}",
1134
+ "chip.people": "{count} kişi",
1135
+ "views.title": "Görünümler",
1136
+ "views.find": "Görünüm bul…",
1137
+ "views.system": "Sistem görünümleri",
1138
+ "views.builtIn": "Hazır",
1139
+ "views.mine": "Görünümlerim",
1140
+ "views.onlyYou": "Yalnızca siz",
1141
+ "views.default": "Varsayılan",
1142
+ "views.edited": "Değişti",
1143
+ "views.new": "Yeni görünüm",
1144
+ "views.rename": "Yeniden adlandır",
1145
+ "views.duplicate": "Kopyala",
1146
+ "views.setDefault": "Varsayılan yap",
1147
+ "views.delete": "Sil",
1148
+ "views.delete.title": "“{name}” silinsin mi?",
1149
+ "views.delete.body": "Bu işlem geri alınamaz.",
1150
+ "views.systemNote": "Sistem görünümlerinde yalnızca Kopyala ve Varsayılan yap var.",
1151
+ "views.saveChanges": "Değişiklikleri kaydet",
1152
+ "views.updates": "“{name}” güncellenir",
1153
+ "views.saveAsNew": "Yeni görünüm olarak kaydet…",
1154
+ "views.keepsUnchanged": "“{name}” olduğu gibi kalır",
1155
+ "views.discard": "Değişiklikleri at",
1156
+ "views.saveAsMine": "Görünümüm olarak kaydet…",
1157
+ "views.editedName": "“{name}” değişti",
1158
+ "views.dialogTitle": "Yeni görünüm olarak kaydet",
1159
+ "views.dialogBody": "Görünümlerim altında yer alır. Yalnızca siz görürsünüz.",
1160
+ "views.name": "Ad",
1161
+ "views.filters": "Filtreler",
1162
+ "views.sort": "Sıralama",
1163
+ "views.columns": "Sütunlar",
1164
+ "views.columnsSummary": "{total} sütundan {shown}",
1165
+ "views.pinnedSummary": "{name} sabit",
1166
+ "views.makeDefault": "Varsayılan görünümüm olsun",
1167
+ "views.save": "Görünümü kaydet",
1168
+ "views.copyName": "{name} kopyası",
1169
+ "views.err.required": "Bir ad girin.",
1170
+ "views.err.taken": "Bu adda bir görünümünüz zaten var.",
1171
+ "views.err.tooLong": "En fazla 60 karakter kullanın.",
1172
+ "views.noMatch": "Eşleşen görünüm yok",
1173
+ "display.density": "Yoğunluk",
1174
+ "display.comfortable": "Rahat",
1175
+ "display.standard": "Standart",
1176
+ "display.compact": "Sıkı",
1177
+ "display.columns": "Sütunlar",
1178
+ "display.sort": "Sıralama",
1179
+ "display.verticalLines": "Dikey çizgiler",
1180
+ "display.savedForYou": "Yalnızca sizin için kaydedilir",
1181
+ "columns.shownOf": "{total} sütundan {shown} görünür",
1182
+ "columns.pinned": "Sabit",
1183
+ "columns.alwaysShown": "Her zaman görünür",
1184
+ "columns.hideAll": "Tümünü gizle",
1185
+ "columns.showAll": "Tümünü göster",
1186
+ "columns.reorder": "{column} sütununu taşı",
1187
+ "columns.dragInstructions": "Sütunu almak için boşluk tuşuna basın, yukarı ve aşağı ok tuşlarıyla taşıyın, bırakmak için yeniden boşluk tuşuna basın. İptal için Escape'e basın.",
1188
+ "columns.dragStart": "{column} alındı. Sıra {position} / {total}.",
1189
+ "columns.dragOver": "{column} {position} / {total} sırasına taşındı.",
1190
+ "columns.dragEnd": "{column} {position} / {total} sırasına bırakıldı.",
1191
+ "columns.dragCancel": "Taşıma iptal edildi. {column} yerine döndü.",
1192
+ "columns.find": "Sütun bul",
1193
+ "columns.title": "Sütun tercihleri",
1194
+ "columns.desc": "Tablodaki sütunları gösterin, gizleyin ve sıralayın.",
1195
+ "columns.pin.start.title": "İlk sütunları sabitle",
1196
+ "columns.pin.start.desc": "Yatay kaydırırken ilk sütunlar görünür kalsın.",
1197
+ "columns.pin.start.0": "Hiçbiri",
1198
+ "columns.pin.start.1": "İlk sütun",
1199
+ "columns.pin.start.2": "İlk iki sütun",
1200
+ "columns.pin.end.title": "Son sütunları sabitle",
1201
+ "columns.pin.end.desc": "Yatay kaydırırken son sütunlar görünür kalsın.",
1202
+ "columns.pin.end.0": "Hiçbiri",
1203
+ "columns.pin.end.1": "Son sütun",
1204
+ "columns.pin.end.2": "Son iki sütun",
1205
+ "header.sortAsc": "Artan sırala",
1206
+ "header.sortDesc": "Azalan sırala",
1207
+ "header.clearSort": "Sıralamayı kaldır",
1208
+ "sort.addHint": "Eklemek için ⇧ + başlığa tıklayın · en çok 3",
1209
+ "header.filterBy": "Bu sütuna göre filtrele…",
1210
+ "header.moveLeft": "Sola taşı",
1211
+ "header.moveRight": "Sağa taşı",
1212
+ "header.hide": "Sütunu gizle",
1213
+ "header.optionsAria": "{column} sütun seçenekleri",
1214
+ "row.open": "Aç",
1215
+ "row.openNewTab": "Yeni sekmede aç",
1216
+ "row.actionsAria": "{id} işlemleri",
1217
+ "row.selectAria": "{id} seç",
1218
+ "row.selectPageAria": "Bu sayfadaki tüm satırları seç",
1219
+ "row.copyId": "{column} kopyala",
1220
+ "selection.selected": "{count} seçili",
1221
+ "selection.clear": "Seçimi temizle",
1222
+ "expand.showAria": "{id} detaylarını göster",
1223
+ "page.rows": "Satır {from}–{to}",
1224
+ "page.of": "/ {total}",
1225
+ "page.countTotal": "Toplamı say",
1226
+ "page.counting": "Sayılıyor…",
1227
+ "page.counted": "{time} sayıldı",
1228
+ "page.end": "sonuçların sonu",
1229
+ "page.zero": "0 satır",
1230
+ "page.none": "Satır yok",
1231
+ "page.noneOnPage": "Bu sayfada satır yok",
1232
+ "page.previousPage": "Önceki sayfaya git",
1233
+ "page.perPage": "Sayfa başına satır",
1234
+ "page.previous": "Önceki",
1235
+ "page.next": "Sonraki",
1236
+ "page.scrollPos": "Satır {from}–{to}",
1237
+ "page.nav": "Sayfalar",
1238
+ "state.emptyTitle": "Henüz kayıt yok: {entity.other}",
1239
+ "state.noResults.one": "Bu filtreye uyan {entity.one} yok",
1240
+ "state.noResults.other": "Bu {count} filtreye uyan {entity.one} yok",
1241
+ "state.noResultsSearch": "“{q}” ile eşleşen {entity.one} yok",
1242
+ "state.noResultsBoth": "“{q}” ve {count} filtreyle eşleşen {entity.one} yok",
1243
+ "state.removeFilter": "“{column}” filtresini kaldır",
1244
+ "state.clearAllFilters": "Tüm filtreleri temizle",
1245
+ "state.clearSearch": "Aramayı temizle",
1246
+ "state.errorTitle": "Yüklenemedi: {entity.other}",
1247
+ "state.errorKept": "Filtreleriniz korunuyor.",
1248
+ "state.tryAgain": "Tekrar dene",
1249
+ "state.copyErrorId": "Hata kimliğini kopyala",
1250
+ "state.stale": "Yenilenemedi. {time} verisi gösteriliyor.",
1251
+ "state.updating": "Güncelleniyor…",
1252
+ "state.stillLoading": "Hâlâ yükleniyor…",
1253
+ "cell.late": "{count} gün gecikti",
1254
+ "cell.rating": "{max} üzerinden {value}",
1255
+ "cell.fields": "{count} alan",
1256
+ "cell.copy": "Kopyala",
1257
+ "cell.copied": "Kopyalandı",
1258
+ "cell.expandText": "Tam metni göster",
1259
+ "bulk.moreAria": "Diğer toplu işlemler",
1260
+ "bulk.aria": "Toplu işlemler",
1261
+ "sheet.find": "Tabloda bul",
1262
+ "sheet.findCount": "{index} / {total}",
1263
+ "sheet.all": "Tümü",
1264
+ "sheet.changed": "Değişen",
1265
+ "sheet.errors": "Hatalı",
1266
+ "sheet.addRow": "Satır ekle",
1267
+ "sheet.import": "Excel'den al",
1268
+ "sheet.export": "Dışa aktar",
1269
+ "sheet.exportAll": "Tüm satırları dışa aktar ({count})",
1270
+ "sheet.exportVisible": "Görünen satırları dışa aktar ({count})",
1271
+ "sheet.changes": "{rows} satırda {cells} değişiklik",
1272
+ "sheet.newRows.one": "{count} yeni satır",
1273
+ "sheet.newRows.other": "{count} yeni satır",
1274
+ "sheet.newShort": "{count} yeni",
1275
+ "sheet.noChanges": "Değişiklik yok",
1276
+ "sheet.rows": "{count} satır",
1277
+ "sheet.errorsGoTo.one": "{count} hata — git",
1278
+ "sheet.errorsGoTo.other": "{count} hata — git",
1279
+ "sheet.discard": "Vazgeç",
1280
+ "sheet.save": "Değişiklikleri kaydet",
1281
+ "sheet.agg.count": "Adet",
1282
+ "sheet.agg.sum": "Toplam",
1283
+ "sheet.agg.avg": "Ortalama",
1284
+ "sheet.cells": "{rows} × {cols} hücre",
1285
+ "sheet.keyTooltip": "Eşleşme anahtarı — var olan {key} o kaydı günceller, yeni {key} yeni kayıt oluşturur",
1286
+ "sheet.addedRow": "Eklenen satır",
1287
+ "sheet.required": "Zorunlu",
1288
+ "sheet.notANumber": "Sayı girin",
1289
+ "sheet.notADate": "Tarih girin",
1290
+ "sheet.hasErrors": "Hata var",
1291
+ "sheet.valueAria": "{key} için {column} değeri",
1292
+ "sheet.statusAria": "Tablo durumu",
1293
+ "sheet.was": "Önceki: {value}",
1294
+ "sheet.duplicateKey": "{key} zaten {row}. satırda",
1295
+ "sheet.notAnOption": "“{value}” bir seçenek değil",
1296
+ "sheet.useOption": "{option} kullan",
1297
+ "sheet.noFormulas": "Formül desteklenmiyor",
1298
+ "sheet.notMatchFilter": "Filtrelere uymuyor",
1299
+ "sheet.menu.cut": "Kes",
1300
+ "sheet.menu.copy": "Kopyala",
1301
+ "sheet.menu.paste": "Yapıştır",
1302
+ "sheet.menu.fillDown": "Aşağı doldur",
1303
+ "sheet.menu.clear": "İçeriği temizle",
1304
+ "sheet.menu.insertAbove": "Üste satır ekle",
1305
+ "sheet.menu.insertBelow": "Alta satır ekle",
1306
+ "sheet.menu.remove": "Listeden çıkar",
1307
+ "sheet.menu.open": "{entity.one} aç",
1308
+ "sheet.removed.one": "{row}. satır listeden çıkarıldı. Kayıt silinmedi.",
1309
+ "sheet.removed.other": "{count} satır listeden çıkarıldı. Kayıtlar silinmedi.",
1310
+ "sheet.pasted": "{rows} satır × {cols} sütun yapıştırıldı",
1311
+ "sheet.pasteIssues.one": "{count} değer seçeneklerde yok",
1312
+ "sheet.pasteIssues.other": "{count} değer seçeneklerde yok",
1313
+ "sheet.pasteErrors.one": "{count} hücrede hata var",
1314
+ "sheet.pasteErrors.other": "{count} hücrede hata var",
1315
+ "sheet.review": "İncele",
1316
+ "sheet.fillPreview": "{count} hücreyi {value} ile doldur",
1317
+ "sheet.limitPaste": "Bu yapıştırmayla {count} satır olur. Sınır {max}.",
1318
+ "sheet.limitFile": "Bu dosyayla {count} satır olur. Sınır {max}.",
1319
+ "sheet.nextError": "Sonraki hata (F8)",
1320
+ "sheet.prevError": "Önceki hata (⇧F8)",
1321
+ "sheet.nextErrorHidden": "Sonraki hata filtreler yüzünden gizli",
1322
+ "sheet.showIt": "Göster",
1323
+ "sheet.loading": "Yükleniyor: {entity.other}…",
1324
+ "sheet.loadingCount": "{total} kayıttan {loaded}",
1325
+ "sheet.firstN": "İlk {max} kayıt gösteriliyor. Kalanları düzenlemek için seçimi daraltın.",
1326
+ "sheet.saving": "Kaydediliyor… {total} satırdan {sent}",
1327
+ "sheet.savingIndeterminate": "Kaydediliyor…",
1328
+ "sheet.savingButton": "Kaydediliyor…",
1329
+ "sheet.savingReadOnly": "Kaydedilirken salt okunur",
1330
+ "sheet.saveChanges": "Değişiklikleri kaydet",
1331
+ "sheet.discardButton": "Vazgeç",
1332
+ "sheet.saved": "{count} satır kaydedildi",
1333
+ "sheet.savedDetail": "{created} oluşturuldu · {updated} güncellendi",
1334
+ "sheet.partly.title": "{count} satır kaydedilemedi.",
1335
+ "sheet.partly.body": "{count} satır kaydedildi.",
1336
+ "sheet.copyErrors": "Hataları kopyala",
1337
+ "sheet.err.row": "Satır",
1338
+ "sheet.err.column": "Sütun",
1339
+ "sheet.err.message": "Mesaj",
1340
+ "sheet.selectionSummary": "Seçim özeti",
1341
+ "sheet.showRows": "Gösterilen satırlar",
1342
+ "sheet.errDialog.title.one": "{count} satırda hata var",
1343
+ "sheet.errDialog.title.other": "{count} satırda hata var",
1344
+ "sheet.errDialog.body": "Bu satır gönderilmeyecek. Değişen diğer {count} satır kaydedilecek.",
1345
+ "sheet.errDialog.fix": "Önce düzelt",
1346
+ "sheet.errDialog.save": "{count} satırı kaydet",
1347
+ "sheet.leave.title": "Kaydetmeden çıkılsın mı?",
1348
+ "sheet.leave.body": "{rows} satırdaki {cells} değişiklik kaybolacak.",
1349
+ "sheet.leave.stay": "Kal",
1350
+ "sheet.leave.discard": "Değişiklikleri at",
1351
+ "sheet.discard.title": "{rows} satırdaki {cells} değişiklik atılsın mı?",
1352
+ "sheet.discard.body": "Tablo yüklendiği hâline döner. Bu geri alınamaz.",
1353
+ "sheet.discard.keep": "Düzenlemeye devam et",
1354
+ "sheet.readOnly.title": "Düzenleme için daha büyük bir ekran gerekiyor.",
1355
+ "sheet.readOnly.body": "Burada arayıp kayıtlara bakabilirsiniz; değişiklikler bilgisayardan yapılır.",
1356
+ "sheet.readOnly.badge": "Salt okunur",
1357
+ "sheet.readOnly.total": "{count} {entity.one}",
1358
+ "import.title": "Excel'den içe aktar",
1359
+ "import.body": "Satırlar {key} ile eşleşir: bilinen {key} kaydını günceller, yeni {key} yeni satır olur. Her şey önce incelemeniz için tabloya gelir.",
1360
+ "import.failed": "Dosya okunamadı",
1361
+ "import.drop": ".xlsx veya .csv dosyasını bırakın ya da seçin",
1362
+ "import.xlsxOnly": "Yalnızca .xlsx ve .csv dosyaları okunabilir. Eski .xls dosyasını önce Excel'de .xlsx olarak kaydedin.",
1363
+ "import.sheetInfo": "“{sheet}” sayfası · {count} satır",
1364
+ "import.headerRow": "Başlık satırı",
1365
+ "import.headerRowN": "{n}. satır",
1366
+ "import.replace": "Dosyayı değiştir",
1367
+ "import.matchBy": "Satırları eşleştir",
1368
+ "import.excelColumn": "Excel sütunu",
1369
+ "import.field": "Alan",
1370
+ "import.firstValue": "İlk değer",
1371
+ "import.matchKey": "eşleşme anahtarı",
1372
+ "import.skip": "Alma",
1373
+ "import.chooseField": "Alan seçin",
1374
+ "import.summary": "Listedeki {updates} satır güncellenir · listede olmayan {news} {key}",
1375
+ "import.seeNew": "Listede olmayan {key} değerlerini gör",
1376
+ "import.addNew": "Listede olmayan {count} {key} satır olarak eklensin",
1377
+ "import.apply": "Tabloya uygula",
1378
+ "import.keyRequired": "{key} değerlerini içeren sütunu seçin.",
1379
+ "import.done": "{count} satır alındı · {updated} güncellendi · {news} eklendi",
1380
+ "mobile.filters": "Filtreler",
1381
+ "mobile.showResults": "Sonuçları göster",
1382
+ "mobile.sort": "Sıralama",
1383
+ "mobile.chipAria": "{summary}. Filtreleri aç",
1384
+ "mobile.backToFilters": "Filtrelere dön",
1385
+ "mobile.operator": "Operatör",
1386
+ "sr.loaded": "{count} satır yüklendi",
1387
+ "sr.total": "{count} {entity.one}",
1388
+ "sr.sorted": "{column} sütununa göre {dir} sıralandı",
1389
+ "sr.asc": "artan",
1390
+ "sr.desc": "azalan",
1391
+ "sr.filterAdded": "Filtre eklendi: {summary}",
1392
+ "sr.filterRemoved": "{column} filtresi kaldırıldı",
1393
+ "sr.view": "Görünüm: {name}",
1394
+ "sr.viewEdited": "Görünüm: {name}, değişti",
1395
+ "sr.expanded": "{label} açıldı, {count} satır",
1396
+ "sr.savingPercent": "Kaydediliyor, yüzde {percent}",
1397
+ "sr.loadingPercent": "Yükleniyor, yüzde {percent}",
1398
+ "sr.pasted": "{rows} satır × {cols} sütun yapıştırıldı."
1399
+ }
1400
+ }, Tt = () => typeof navigator < "u" && navigator.language || "en", Et = (e, t) => {
1401
+ let [n, ...r] = t.split("."), i = e[n];
1402
+ for (let e of r) i = i && typeof i == "object" ? i[e] : void 0;
1403
+ return i == null || typeof i == "object" ? void 0 : String(i);
1404
+ }, Dt = (e, t) => e.replace(/\{([A-Za-z0-9_.]+)\}/g, (e, n) => Et(t, n) ?? e), Ot = (e) => {
1405
+ let t = {};
1406
+ for (let [n, r] of Object.entries(e)) if (r && typeof r == "object") for (let [e, i] of Object.entries(r)) t[`${n}.${e}`] = i;
1407
+ else (typeof r == "string" || typeof r == "number") && (t[n] = r);
1408
+ return t;
1409
+ };
1410
+ function kt(e = {}) {
1411
+ let t = e.locale ?? Tt(), n = { ...wt[t.split("-")[0].toLowerCase()] ?? Ct };
1412
+ for (let [t, r] of Object.entries(e.messages ?? {})) r !== void 0 && (n[t] = r);
1413
+ let r = new Intl.PluralRules(t);
1414
+ return {
1415
+ locale: t,
1416
+ t: (e, t = {}) => {
1417
+ let i = e;
1418
+ if (typeof t.count == "number") {
1419
+ let a = r.select(t.count) === "one" ? "one" : "other";
1420
+ `${e}.${a}` in n && (i = `${e}.${a}`);
1421
+ }
1422
+ let a = n[i];
1423
+ return a === void 0 ? e : Dt(typeof a == "function" ? a(Ot(t)) : a, t);
1424
+ },
1425
+ has: (e) => e in n
1426
+ };
1427
+ }
1428
+ //#endregion
1429
+ //#region src/core/plugin.ts
1430
+ var At = Symbol("medyat:data-table");
1431
+ function jt(e = {}) {
1432
+ let t = kt({
1433
+ locale: e.locale,
1434
+ messages: e.messages
1435
+ });
1436
+ return {
1437
+ locale: t.locale,
1438
+ i18n: t,
1439
+ viewsAdapter: e.viewsAdapter ?? null,
1440
+ preferences: e.preferences ?? null
1441
+ };
1442
+ }
1443
+ function Mt(e = {}) {
1444
+ return { install(t) {
1445
+ t.provide(At, jt(e));
1446
+ } };
1447
+ }
1448
+ var Nt;
1449
+ function W() {
1450
+ return d(At, null) ?? (Nt ??= jt());
1451
+ }
1452
+ //#endregion
1453
+ //#region src/core/cells/renderCell.ts
1454
+ var Pt = (e) => typeof e == "object" ? "dt-tone-custom" : `dt-tone-${e ?? "gray"}`, Ft = (e) => typeof e == "object" ? {
1455
+ "--dt-tone-light": e.light,
1456
+ "--dt-tone-dark": e.dark
1457
+ } : void 0, It = [
1458
+ "blue",
1459
+ "green",
1460
+ "amber",
1461
+ "violet",
1462
+ "pink",
1463
+ "teal"
1464
+ ];
1465
+ function Lt(e) {
1466
+ let t = 0;
1467
+ for (let n of String(e)) t = t * 31 + n.charCodeAt(0) >>> 0;
1468
+ return It[t % It.length];
1469
+ }
1470
+ var Rt = (e) => e.split(/\s+/).filter(Boolean).slice(0, 2).map((e) => e[0].toLocaleUpperCase()).join("");
1471
+ function G(e, t, n) {
1472
+ return u("span", {
1473
+ class: ["dt-badge", Pt(e)],
1474
+ style: Ft(e)
1475
+ }, [n ? u(n, {
1476
+ class: "dt-badge-icon",
1477
+ size: 11,
1478
+ weight: "bold",
1479
+ "aria-hidden": "true"
1480
+ }) : u("span", {
1481
+ class: "dt-badge-dot",
1482
+ "aria-hidden": "true"
1483
+ }), u("span", { class: "dt-badge-label" }, t)]);
1484
+ }
1485
+ var zt = (e, t, n = "dt-more") => u("span", {
1486
+ class: n,
1487
+ "data-dt-tip": t
1488
+ }, `+${e}`), K = (e) => u("span", { class: "dt-mono" }, e);
1489
+ function Bt(e) {
1490
+ return u("span", {
1491
+ class: ["dt-avatar", `dt-tone-${Lt(e.value)}`],
1492
+ style: e.avatarUrl ? { backgroundImage: `url("${e.avatarUrl}")` } : void 0,
1493
+ "aria-hidden": "true"
1494
+ }, e.avatarUrl ? "" : e.initials ?? Rt(e.label));
1495
+ }
1496
+ function Vt(e, t, n) {
1497
+ return u("span", {
1498
+ class: "dt-stars",
1499
+ role: "img",
1500
+ "aria-label": n,
1501
+ "data-dt-tip": n
1502
+ }, Array.from({ length: t }, (t, n) => u(ue, {
1503
+ size: 14,
1504
+ weight: n < e ? "fill" : "regular",
1505
+ class: n < e ? "is-on" : void 0
1506
+ })));
1507
+ }
1508
+ function Ht(e, t) {
1509
+ return u("span", { class: "dt-bar" }, [u("span", {
1510
+ class: "dt-bar-track",
1511
+ "aria-hidden": "true"
1512
+ }, [u("span", {
1513
+ class: "dt-bar-fill",
1514
+ style: { width: `${Math.max(0, Math.min(100, e))}%` }
1515
+ })]), u("span", { class: "dt-bar-label" }, t)]);
1516
+ }
1517
+ var q = (e, t, n = !1) => u("a", {
1518
+ class: "dt-link",
1519
+ href: e,
1520
+ tabindex: -1,
1521
+ ...n && {
1522
+ target: "_blank",
1523
+ rel: "noopener"
1524
+ }
1525
+ }, [t]);
1526
+ function Ut(e, t) {
1527
+ if (e.type !== "color" || e.display !== "fill" || typeof t != "string") return;
1528
+ let n = /^#?([0-9a-f]{6})$/i.exec(t);
1529
+ if (!n) return { background: t };
1530
+ let r = parseInt(n[1], 16);
1531
+ return {
1532
+ background: t,
1533
+ color: (.2126 * (r >> 16 & 255) + .7152 * (r >> 8 & 255) + .0722 * (r & 255)) / 255 > .55 ? "var(--dt-fill-text-dark)" : "var(--dt-fill-text-light)"
1534
+ };
1535
+ }
1536
+ function Wt(e, t, n) {
1537
+ return t.map((t) => e.options?.find((e) => e.value === t) ?? n.labels.option(e.id, e.remote, t) ?? {
1538
+ value: t,
1539
+ label: String(t)
1540
+ });
1541
+ }
1542
+ function Gt(e, t, n, r) {
1543
+ let i = Ye(e, t, n, r);
1544
+ if (e.cell) return e.cell({
1545
+ row: t,
1546
+ value: n,
1547
+ formatted: i,
1548
+ column: {
1549
+ id: e.id,
1550
+ type: e.type
1551
+ },
1552
+ density: r.density
1553
+ });
1554
+ if (I(n)) return e.type === "user" ? u("span", { class: "dt-user is-empty" }, [u("span", {
1555
+ class: "dt-avatar is-empty",
1556
+ "aria-hidden": "true"
1557
+ }), r.i18n.t("common.unassigned")]) : u("span", { class: "dt-empty" }, i);
1558
+ let { fmt: a, i18n: o } = r;
1559
+ switch (e.type) {
1560
+ case "int":
1561
+ case "float": return i;
1562
+ case "percentage": return e.display === "bar" ? Ht(Number(n), i) : i;
1563
+ case "star": return Vt(Number(n), e.max ?? 5, i);
1564
+ case "currency": return [a.decimal(Number(n), e.decimalPlaces ?? 2), u("span", { class: "dt-ccy" }, Je(e, t))];
1565
+ case "string":
1566
+ case "uppercase":
1567
+ case "lowercase":
1568
+ case "email": return i;
1569
+ case "phone": return r.coarse ? q(`tel:${i}`, i) : i;
1570
+ case "text": {
1571
+ let e = i.split("\n")[0];
1572
+ return u("span", { class: "dt-text" }, [u("span", { class: "dt-text-first" }, e), u("button", {
1573
+ type: "button",
1574
+ class: "dt-text-expand",
1575
+ tabindex: -1,
1576
+ "aria-label": o.t("cell.expandText"),
1577
+ "data-dt-tip": i
1578
+ }, [u(ne, {
1579
+ size: 14,
1580
+ "aria-hidden": "true"
1581
+ })])]);
1582
+ }
1583
+ case "color": return e.display === "fill" ? K(i) : [u("span", {
1584
+ class: "dt-swatch",
1585
+ style: { background: i },
1586
+ "aria-hidden": "true"
1587
+ }), K(i)];
1588
+ case "url": return q(String(n), [qe(String(n)), u(te, {
1589
+ size: 12,
1590
+ class: "dt-link-icon",
1591
+ "aria-hidden": "true"
1592
+ })], !0);
1593
+ case "id": {
1594
+ let n = e.href?.(t);
1595
+ return n ? q(n, K(i)) : K(i);
1596
+ }
1597
+ case "boolean": return n ? G("green", i, ie) : G(e.falseTone === "destructive" ? "red" : "gray", i, e.falseTone === "destructive" ? fe : se);
1598
+ case "select": {
1599
+ let t = e.options.find((e) => e.value === n);
1600
+ return t ? G(t.tone, t.label) : G("gray", String(n));
1601
+ }
1602
+ case "multiselect": {
1603
+ let t = n, r = t.slice(0, 2).map((t) => {
1604
+ let n = e.options.find((e) => e.value === t);
1605
+ return n ? G(n.tone, n.label) : G("gray", String(t));
1606
+ });
1607
+ return u("span", { class: "dt-badges" }, [...r, t.length > 2 ? zt(t.length - 2, a.list(t.slice(2).map((t) => L(e.options, t)))) : null]);
1608
+ }
1609
+ case "ajax": {
1610
+ let n = e.href?.(t);
1611
+ return n ? q(n, i) : i;
1612
+ }
1613
+ case "user": {
1614
+ let t = Wt(e, Array.isArray(n) ? n : [n], r);
1615
+ return t.length === 1 ? u("span", { class: "dt-user" }, [Bt(t[0]), u("span", { class: "dt-user-name" }, t[0].label)]) : u("span", { class: "dt-user dt-avatars" }, [...t.slice(0, 3).map(Bt), t.length > 3 ? zt(t.length - 3, a.list(t.slice(3).map((e) => e.label)), "dt-more dt-more-pill") : null]);
1616
+ }
1617
+ case "date":
1618
+ case "datetime": {
1619
+ let s = (typeof e.overdue == "function" ? e.overdue(t) : e.overdue) ? a.daysLate(n, r.today) : 0, c = e.type === "datetime" ? a.dateTimeFull(n) : void 0;
1620
+ return s > 0 ? u("span", {
1621
+ class: "dt-late",
1622
+ "data-dt-tip": c
1623
+ }, `${i} · ${o.t("cell.late", { count: s })}`) : c ? u("span", { "data-dt-tip": c }, i) : i;
1624
+ }
1625
+ case "object": return [u("span", {
1626
+ class: "dt-struct",
1627
+ "aria-hidden": "true"
1628
+ }, "{ }"), i];
1629
+ case "array": {
1630
+ let t = n, r = t.slice(0, 3).map((t) => Xe(e.itemType, t, a));
1631
+ return [
1632
+ u("span", {
1633
+ class: "dt-struct",
1634
+ "aria-hidden": "true"
1635
+ }, "[ ]"),
1636
+ r.join(", "),
1637
+ t.length > 3 ? [" ", zt(t.length - 3, i)] : null
1638
+ ];
1639
+ }
1640
+ }
1641
+ }
1642
+ //#endregion
1643
+ //#region src/core/format/parse.ts
1644
+ var Kt = /* @__PURE__ */ new Map();
1645
+ function qt(e) {
1646
+ let t = Kt.get(e);
1647
+ if (!t) {
1648
+ let n = new Intl.NumberFormat(e).formatToParts(12345.6);
1649
+ t = {
1650
+ group: n.find((e) => e.type === "group")?.value ?? ",",
1651
+ decimal: n.find((e) => e.type === "decimal")?.value ?? "."
1652
+ }, Kt.set(e, t);
1653
+ }
1654
+ return t;
1655
+ }
1656
+ function Jt(e, t) {
1657
+ let n = t.replace(/[\s%\u00a0A-Za-z₺€$£]/g, "").replace("−", "-");
1658
+ if (n === "" || n === "-") return null;
1659
+ let r = n.lastIndexOf(","), i = n.lastIndexOf("."), a = r >= 0 && i >= 0 ? r > i ? "," : "." : qt(e).decimal;
1660
+ n = n.split(a === "," ? "." : ",").join(""), a === "," && (n = n.replace(",", "."));
1661
+ let o = Number(n);
1662
+ return Number.isFinite(o) ? o : null;
1663
+ }
1664
+ //#endregion
1665
+ //#region src/core/filters/model.ts
1666
+ var J = ["is_empty", "is_not_empty"], Yt = [
1667
+ "eq",
1668
+ "neq",
1669
+ "gt",
1670
+ "gte",
1671
+ "lt",
1672
+ "lte",
1673
+ "between",
1674
+ ...J
1675
+ ], Xt = [
1676
+ "contains",
1677
+ "not_contains",
1678
+ "eq",
1679
+ "neq",
1680
+ "starts_with",
1681
+ "ends_with",
1682
+ ...J
1683
+ ], Y = [
1684
+ "in",
1685
+ "not_in",
1686
+ ...J
1687
+ ], Zt = [
1688
+ "within",
1689
+ "eq",
1690
+ "before",
1691
+ "after",
1692
+ ...J
1693
+ ], Qt = [
1694
+ "contains",
1695
+ "eq",
1696
+ "neq",
1697
+ "starts_with",
1698
+ ...J
1699
+ ], $t = {
1700
+ int: Yt,
1701
+ float: Yt,
1702
+ percentage: [
1703
+ "eq",
1704
+ "gt",
1705
+ "gte",
1706
+ "lt",
1707
+ "lte",
1708
+ "between",
1709
+ ...J
1710
+ ],
1711
+ star: [
1712
+ "gte",
1713
+ "lte",
1714
+ "eq",
1715
+ ...J
1716
+ ],
1717
+ currency: Yt,
1718
+ string: Xt,
1719
+ text: [
1720
+ "contains",
1721
+ "not_contains",
1722
+ ...J
1723
+ ],
1724
+ uppercase: Qt,
1725
+ lowercase: Qt,
1726
+ phone: [
1727
+ "contains",
1728
+ "starts_with",
1729
+ ...J
1730
+ ],
1731
+ color: Y,
1732
+ email: [
1733
+ "contains",
1734
+ "eq",
1735
+ "ends_with",
1736
+ ...J
1737
+ ],
1738
+ url: ["contains", ...J],
1739
+ id: [
1740
+ "in",
1741
+ "contains",
1742
+ ...J
1743
+ ],
1744
+ boolean: ["eq", ...J],
1745
+ select: Y,
1746
+ multiselect: Y,
1747
+ ajax: Y,
1748
+ user: Y,
1749
+ date: Zt,
1750
+ datetime: Zt,
1751
+ object: [],
1752
+ array: ["contains", ...J]
1753
+ }, en = {
1754
+ int: "between",
1755
+ float: "between",
1756
+ percentage: "between",
1757
+ currency: "between",
1758
+ star: "gte",
1759
+ id: "in",
1760
+ boolean: "eq",
1761
+ date: "within",
1762
+ datetime: "within"
1763
+ }, tn = (e) => e.filter?.operators ?? $t[e.type], nn = (e) => e.filter?.defaultOperator ?? en[e.type] ?? tn(e)[0] ?? "is_empty";
1764
+ function X(e, t) {
1765
+ return e === "is_empty" || e === "is_not_empty" ? "none" : e === "in" || e === "not_in" ? "list" : e === "between" ? "range" : e === "within" ? "dateRange" : e === "before" || e === "after" || t === "date" || t === "datetime" ? "date" : t === "boolean" ? "boolean" : e === "gt" || e === "gte" || e === "lt" || e === "lte" || t === "int" || t === "float" || t === "percentage" || t === "currency" || t === "star" ? "number" : "text";
1766
+ }
1767
+ function rn(e, t) {
1768
+ let n = X(e, t);
1769
+ return n === "none" || n === "boolean" ? null : n === "list" ? t === "id" ? "text" : "options" : n === "text" ? "text" : n === "date" || n === "dateRange" ? "date" : t === "star" ? "star" : "number";
1770
+ }
1771
+ var an = (e) => !!e && typeof e == "object";
1772
+ function on(e, t) {
1773
+ let n = e.value;
1774
+ switch (X(e.op, t)) {
1775
+ case "none": return !0;
1776
+ case "list": return Array.isArray(n) && n.length > 0;
1777
+ case "range": return Array.isArray(n) && (n[0] !== null && n[0] !== void 0 || n[1] !== null && n[1] !== void 0);
1778
+ case "text": return typeof n == "string" && n !== "";
1779
+ case "number": return typeof n == "number" && Number.isFinite(n);
1780
+ case "boolean": return typeof n == "boolean";
1781
+ case "date": return typeof n == "string" && n !== "" || an(n) && n.preset === "today";
1782
+ case "dateRange": return an(n) && (typeof n.preset == "string" || typeof n.from == "string" && typeof n.to == "string");
1783
+ }
1784
+ }
1785
+ function sn(e) {
1786
+ let t = {
1787
+ column: e.column,
1788
+ op: e.op
1789
+ };
1790
+ return e.value !== void 0 && X(e.op, "string") !== "none" && (t.value = e.value), e.currency && (t.currency = e.currency), t;
1791
+ }
1792
+ function cn(e, t, n) {
1793
+ let r = X(t, n), i = r !== "none" && r === X(e.op, n);
1794
+ return {
1795
+ ...e,
1796
+ op: t,
1797
+ value: i ? e.value : void 0
1798
+ };
1799
+ }
1800
+ function ln(e, t, n, r = 1) {
1801
+ return t === "in" || t === "not_in" ? e.t(`op.${t}`, { count: Math.max(1, r) }) : n === "star" && (t === "gte" || t === "lte") ? e.t(`op.star.${t}`) : e.t(`op.${t}`);
1802
+ }
1803
+ var Z = (e) => `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}-${String(e.getDate()).padStart(2, "0")}`, Q = (e, t) => new Date(e.getFullYear(), e.getMonth(), e.getDate() + t), un = (e) => {
1804
+ try {
1805
+ let t = new Intl.Locale(e);
1806
+ return t.getWeekInfo?.().firstDay ?? t.weekInfo?.firstDay ?? 1;
1807
+ } catch {
1808
+ return 1;
1809
+ }
1810
+ };
1811
+ function dn(e, t, n = /* @__PURE__ */ new Date()) {
1812
+ let r = new Date(n.getFullYear(), n.getMonth(), n.getDate());
1813
+ switch (e) {
1814
+ case "today": return {
1815
+ from: Z(r),
1816
+ to: Z(r)
1817
+ };
1818
+ case "this_week": {
1819
+ let e = Q(r, -((r.getDay() - un(t) % 7 + 7) % 7));
1820
+ return {
1821
+ from: Z(e),
1822
+ to: Z(Q(e, 6))
1823
+ };
1824
+ }
1825
+ case "next_7_days": return {
1826
+ from: Z(r),
1827
+ to: Z(Q(r, 7))
1828
+ };
1829
+ case "this_month": return {
1830
+ from: Z(new Date(r.getFullYear(), r.getMonth(), 1)),
1831
+ to: Z(new Date(r.getFullYear(), r.getMonth() + 1, 0))
1832
+ };
1833
+ case "last_30_days": return {
1834
+ from: Z(Q(r, -30)),
1835
+ to: Z(r)
1836
+ };
1837
+ case "this_quarter": {
1838
+ let e = Math.floor(r.getMonth() / 3) * 3;
1839
+ return {
1840
+ from: Z(new Date(r.getFullYear(), e, 1)),
1841
+ to: Z(new Date(r.getFullYear(), e + 3, 0))
1842
+ };
1843
+ }
1844
+ case "overdue": return {
1845
+ from: null,
1846
+ to: Z(Q(r, -1))
1847
+ };
1848
+ }
1849
+ }
1850
+ var fn = (e) => e instanceof Date ? Z(e) : typeof e == "string" && e.length >= 10 ? e.slice(0, 10) : null, pn = (e, t) => typeof e == "string" ? e.slice(0, 10) : Z(t), mn = (e) => e == null || e === "" || Array.isArray(e) && e.length === 0, hn = (e, t) => String(e).toLocaleLowerCase(t);
1851
+ function gn(e, t, n) {
1852
+ let r = n.now ?? /* @__PURE__ */ new Date();
1853
+ switch (e.op) {
1854
+ case "is_empty": return mn(t);
1855
+ case "is_not_empty": return !mn(t);
1856
+ }
1857
+ if (mn(t)) return !1;
1858
+ switch (e.op) {
1859
+ case "eq":
1860
+ case "neq": {
1861
+ let r = fn(t), i = typeof e.value == "string" && r && /^\d{4}-\d{2}-\d{2}/.test(e.value) ? r === e.value.slice(0, 10) : typeof t == "string" && typeof e.value == "string" ? hn(t, n.locale) === hn(e.value, n.locale) : t === e.value || String(t) === String(e.value);
1862
+ return e.op === "eq" ? i : !i;
1863
+ }
1864
+ case "gt": return Number(t) > e.value;
1865
+ case "gte": return Number(t) >= e.value;
1866
+ case "lt": return Number(t) < e.value;
1867
+ case "lte": return Number(t) <= e.value;
1868
+ case "between": {
1869
+ let n = Number(t), [r, i] = e.value;
1870
+ return (r === null || n >= r) && (i === null || n <= i);
1871
+ }
1872
+ case "contains":
1873
+ case "not_contains":
1874
+ case "starts_with":
1875
+ case "ends_with": {
1876
+ let r = hn(e.value, n.locale), i = (Array.isArray(t) ? t : [t]).some((t) => {
1877
+ let i = hn(t, n.locale);
1878
+ return e.op === "starts_with" ? i.startsWith(r) : e.op === "ends_with" ? i.endsWith(r) : i.includes(r);
1879
+ });
1880
+ return e.op === "not_contains" ? !i : i;
1881
+ }
1882
+ case "in":
1883
+ case "not_in": {
1884
+ let n = new Set(e.value.map(String)), r = (Array.isArray(t) ? t : [t]).some((e) => n.has(String(e)));
1885
+ return e.op === "in" ? r : !r;
1886
+ }
1887
+ case "before": return (fn(t) ?? "") < pn(e.value, r);
1888
+ case "after": return (fn(t) ?? "") > pn(e.value, r);
1889
+ case "within": {
1890
+ let i = fn(t);
1891
+ if (!i) return !1;
1892
+ let a = "preset" in e.value ? dn(e.value.preset, n.locale, r) : e.value;
1893
+ return (a.from === null || i >= a.from) && (a.to === null || i <= a.to);
1894
+ }
1895
+ }
1896
+ }
1897
+ var _n = (e, t) => Math.abs(t) >= 1e3 ? e.compact(t) : e.decimal(t, Number.isInteger(t) ? 0 : 2);
1898
+ function vn(e, t, n) {
1899
+ let { i18n: r, fmt: i } = n, a = t.type, o = e.value, s = a === "percentage" ? "%" : e.currency ? ` ${e.currency}` : "", c = (e) => `${_n(i, e)}${s}`;
1900
+ switch (X(e.op, a)) {
1901
+ case "none": return { text: "" };
1902
+ case "boolean": return { text: r.t(o ? "common.yes" : "common.no") };
1903
+ case "number": return { text: typeof o == "number" ? c(o) : "" };
1904
+ case "text": return typeof o == "string" && o ? {
1905
+ text: `“${o}”`,
1906
+ full: o
1907
+ } : { text: "" };
1908
+ case "range": {
1909
+ if (!Array.isArray(o)) return { text: "" };
1910
+ let [e, t] = o;
1911
+ return e != null && t != null ? { text: `${_n(i, e)} – ${c(t)}` } : e == null ? t == null ? { text: "" } : { text: `≤ ${c(t)}` } : { text: `≥ ${c(e)}` };
1912
+ }
1913
+ case "date": return typeof o == "string" && o ? { text: i.date(o, n.today) } : an(o) && o.preset === "today" ? { text: r.t("date.today") } : { text: "" };
1914
+ case "dateRange": {
1915
+ if (!an(o)) return { text: "" };
1916
+ if (typeof o.preset == "string") return { text: r.t(`date.${o.preset}`) };
1917
+ let e = String(o.from), t = String(o.to), a = e.slice(0, 7) === t.slice(0, 7) ? String(Number(t.slice(8, 10))) : i.date(t, n.today);
1918
+ return { text: `${i.date(e, n.today)} – ${a}` };
1919
+ }
1920
+ case "list": {
1921
+ let e = Array.isArray(o) ? o : [];
1922
+ if (e.length === 0) return { text: "" };
1923
+ let i = e.map((e) => e === "@me" ? r.t("common.me") : n.labelOf(e));
1924
+ if (a === "user") {
1925
+ let t = e.map((e, t) => ({
1926
+ value: e,
1927
+ label: i[t]
1928
+ }));
1929
+ return {
1930
+ text: e.length === 1 ? i[0] : r.t("chip.people", { count: e.length }),
1931
+ full: i.join(", "),
1932
+ people: t
1933
+ };
1934
+ }
1935
+ if (e.length <= 2) return {
1936
+ text: i.join(", "),
1937
+ full: i.join(", ")
1938
+ };
1939
+ let s = t.filterNoun;
1940
+ return {
1941
+ text: s ? r.t("chip.noun", {
1942
+ count: e.length,
1943
+ noun: s
1944
+ }) : r.t("chip.values", { count: e.length }),
1945
+ full: i.join(", ")
1946
+ };
1947
+ }
1948
+ }
1949
+ }
1950
+ //#endregion
1951
+ //#region src/core/interaction/isInteractive.ts
1952
+ var yn = "a[href], button, input, select, textarea, summary, label, [role=\"button\"], [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"], [role=\"switch\"], [contenteditable=\"true\"]";
1953
+ function bn(e, t) {
1954
+ if (!(e instanceof Element)) return !1;
1955
+ let n = e.closest(yn);
1956
+ return n !== null && n !== t && t.contains(n);
1957
+ }
1958
+ var xn = (e) => e instanceof HTMLInputElement || e instanceof HTMLTextAreaElement || e instanceof HTMLSelectElement || e?.getAttribute("role") === "combobox" || e?.isContentEditable === !0, Sn = () => (globalThis.getSelection?.()?.toString().length ?? 0) > 0;
1959
+ function Cn(e, t, n) {
1960
+ return !(e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || bn(e.target, t) || Sn() || n && Math.hypot(e.clientX - n.x, e.clientY - n.y) > 4);
1961
+ }
1962
+ //#endregion
1963
+ //#region src/core/interaction/kbd.ts
1964
+ var $ = typeof navigator < "u" && /Mac|iPhone|iPad/.test(navigator.platform), wn = {
1965
+ left: $ ? "⌥⇧←" : "Alt+Shift+←",
1966
+ right: $ ? "⌥⇧→" : "Alt+Shift+→"
1967
+ }, Tn = $ ? "⌘S" : "Ctrl+S", En = $ ? "⌘Z" : "Ctrl+Z", Dn = $ ? "⌘⇧Z" : "Ctrl+Y", On = $ ? "⌘F" : "Ctrl+F", kn = $ ? "⌘D" : "Ctrl+D", An = $ ? "⌘−" : "Ctrl+−", jn = (e, t) => e.filter((e) => e.inline && e.icon && (!e.when || e.when(t))).slice(0, 2), Mn = ["aria-label", "data-dt-tip"], Nn = [
1968
+ "aria-label",
1969
+ "aria-disabled",
1970
+ "data-dt-tip",
1971
+ "onClick"
1972
+ ], Pn = ["aria-label", "data-dt-tip"], Fn = /* @__PURE__ */ l({
1973
+ __name: "CellActions",
1974
+ props: {
1975
+ actions: {},
1976
+ row: {}
1977
+ },
1978
+ setup(c) {
1979
+ let l = c, { i18n: u } = W(), d = t(() => l.actions.filter((e) => e.when?.(l.row) ?? !0)), f = t(() => d.value.some((e) => e.reveal === "always")), m = t(() => d.value.length > 2 ? d.value.slice(0, 1) : d.value), h = t(() => d.value.length > 2 ? d.value.slice(1) : []), g = (e) => e.disabled?.(l.row) ?? !1, v = (e) => {
1980
+ let t = g(e);
1981
+ return typeof t == "string" ? `${e.label} — ${t}` : e.label;
1982
+ }, y = (e) => {
1983
+ g(e) || e.run?.(T(l.row));
1984
+ };
1985
+ return (t, c) => d.value.length ? (_(), i("span", {
1986
+ key: 0,
1987
+ class: p(["dt-cell-actions", { "is-always": f.value }])
1988
+ }, [(_(!0), i(e, null, b(m.value, (t) => (_(), i(e, { key: t.id }, [t.menu?.length ? (_(), n(D(Ae), { key: 0 }, {
1989
+ default: k(() => [s(D(Me), { "as-child": "" }, {
1990
+ default: k(() => [a("button", {
1991
+ type: "button",
1992
+ class: p(["dt-cell-action", { "is-destructive": t.destructive }]),
1993
+ tabindex: "-1",
1994
+ "aria-label": t.label,
1995
+ "data-dt-tip": t.label
1996
+ }, [(_(), n(S(t.icon), {
1997
+ size: 14,
1998
+ "aria-hidden": "true"
1999
+ }))], 10, Mn)]),
2000
+ _: 2
2001
+ }, 1024), s(D(ke), null, {
2002
+ default: k(() => [s(D(Oe), {
2003
+ class: "dt-menu dt-menu-cell",
2004
+ align: "end",
2005
+ "side-offset": 4
2006
+ }, {
2007
+ default: k(() => [(_(!0), i(e, null, b(t.menu, (e) => (_(), n(D(M), {
2008
+ key: e.id,
2009
+ class: p(["dt-menu-item", { "is-destructive": e.destructive }]),
2010
+ disabled: !!g(e),
2011
+ onSelect: (t) => y(e)
2012
+ }, {
2013
+ default: k(() => [(_(), n(S(e.icon), {
2014
+ size: 16,
2015
+ "aria-hidden": "true"
2016
+ })), o(" " + w(e.label), 1)]),
2017
+ _: 2
2018
+ }, 1032, [
2019
+ "class",
2020
+ "disabled",
2021
+ "onSelect"
2022
+ ]))), 128))]),
2023
+ _: 2
2024
+ }, 1024)]),
2025
+ _: 2
2026
+ }, 1024)]),
2027
+ _: 2
2028
+ }, 1024)) : (_(), i("button", {
2029
+ key: 1,
2030
+ type: "button",
2031
+ class: p(["dt-cell-action", { "is-destructive": t.destructive }]),
2032
+ tabindex: "-1",
2033
+ "aria-label": t.label,
2034
+ "aria-disabled": g(t) ? "true" : void 0,
2035
+ "data-dt-tip": v(t),
2036
+ onClick: (e) => y(t)
2037
+ }, [(_(), n(S(t.icon), {
2038
+ size: 14,
2039
+ "aria-hidden": "true"
2040
+ }))], 10, Nn))], 64))), 128)), h.value.length ? (_(), n(D(Ae), { key: 0 }, {
2041
+ default: k(() => [s(D(Me), { "as-child": "" }, {
2042
+ default: k(() => [a("button", {
2043
+ type: "button",
2044
+ class: "dt-cell-action",
2045
+ tabindex: "-1",
2046
+ "aria-label": D(u).t("common.more"),
2047
+ "data-dt-tip": D(u).t("common.more")
2048
+ }, [s(D(A), {
2049
+ size: 14,
2050
+ weight: "bold",
2051
+ "aria-hidden": "true"
2052
+ })], 8, Pn)]),
2053
+ _: 1
2054
+ }), s(D(ke), null, {
2055
+ default: k(() => [s(D(Oe), {
2056
+ class: "dt-menu dt-menu-cell",
2057
+ align: "end",
2058
+ "side-offset": 4
2059
+ }, {
2060
+ default: k(() => [(_(!0), i(e, null, b(h.value, (e) => (_(), n(D(M), {
2061
+ key: e.id,
2062
+ class: p(["dt-menu-item", { "is-destructive": e.destructive }]),
2063
+ disabled: !!g(e),
2064
+ onSelect: (t) => y(e)
2065
+ }, {
2066
+ default: k(() => [(_(), n(S(e.icon), {
2067
+ size: 16,
2068
+ "aria-hidden": "true"
2069
+ })), o(" " + w(e.label), 1)]),
2070
+ _: 2
2071
+ }, 1032, [
2072
+ "class",
2073
+ "disabled",
2074
+ "onSelect"
2075
+ ]))), 128))]),
2076
+ _: 1
2077
+ })]),
2078
+ _: 1
2079
+ })]),
2080
+ _: 1
2081
+ })) : r("", !0)], 2)) : r("", !0);
2082
+ }
2083
+ }), In = {
2084
+ key: 0,
2085
+ class: "dt-row-more-space",
2086
+ "aria-hidden": "true"
2087
+ }, Ln = ["aria-label"], Rn = ["href"], zn = ["href"], Bn = { class: "dt-menu-text" }, Vn = {
2088
+ key: 0,
2089
+ class: "dt-menu-sub"
2090
+ }, Hn = {
2091
+ key: 1,
2092
+ class: "dt-kbd"
2093
+ }, Un = /* @__PURE__ */ l({
2094
+ __name: "RowMenu",
2095
+ props: {
2096
+ row: {},
2097
+ label: {},
2098
+ primaryHeader: {},
2099
+ href: {},
2100
+ actions: {},
2101
+ open: { type: Boolean }
2102
+ },
2103
+ emits: [
2104
+ "update:open",
2105
+ "open",
2106
+ "copy"
2107
+ ],
2108
+ setup(c, { emit: l }) {
2109
+ let u = c, d = l, { i18n: f } = W(), m = t(() => {
2110
+ let e = new Set(jn(u.actions, u.row)), t = u.actions.filter((t) => !e.has(t) && (!t.when || t.when(u.row)));
2111
+ return [...t.filter((e) => !e.destructive), ...t.filter((e) => e.destructive)];
2112
+ }), h = t(() => !!u.href || !!u.primaryHeader || m.value.length > 0), g = t(() => m.value.findIndex((e) => e.destructive)), v = (e) => {
2113
+ let t = e.disabled?.(u.row);
2114
+ return typeof t == "string" ? t : e.description ?? null;
2115
+ }, y = (e) => !!e.disabled?.(u.row), x = (e) => {
2116
+ y(e) || e.run(T(u.row));
2117
+ }, C = (e) => {
2118
+ e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey && d("open", e);
2119
+ };
2120
+ return (t, l) => h.value ? (_(), n(D(Ae), {
2121
+ key: 1,
2122
+ open: c.open,
2123
+ "onUpdate:open": l[1] ||= (e) => d("update:open", e)
2124
+ }, {
2125
+ default: k(() => [s(D(Me), { "as-child": "" }, {
2126
+ default: k(() => [a("button", {
2127
+ type: "button",
2128
+ class: "dt-row-more",
2129
+ "aria-label": D(f).t("row.actionsAria", { id: c.label })
2130
+ }, [s(D(A), {
2131
+ size: 16,
2132
+ weight: "bold",
2133
+ "aria-hidden": "true"
2134
+ })], 8, Ln)]),
2135
+ _: 1
2136
+ }), s(D(ke), null, {
2137
+ default: k(() => [s(D(Oe), {
2138
+ class: "dt-menu dt-row-menu",
2139
+ align: "end",
2140
+ "side-offset": 4
2141
+ }, {
2142
+ default: k(() => [
2143
+ c.href ? (_(), i(e, { key: 0 }, [s(D(M), {
2144
+ "as-child": "",
2145
+ class: "dt-menu-item"
2146
+ }, {
2147
+ default: k(() => [a("a", {
2148
+ href: c.href,
2149
+ onClick: C
2150
+ }, [o(w(D(f).t("row.open")) + " ", 1), l[2] ||= a("kbd", { class: "dt-kbd" }, "↵", -1)], 8, Rn)]),
2151
+ _: 1
2152
+ }), s(D(M), {
2153
+ "as-child": "",
2154
+ class: "dt-menu-item"
2155
+ }, {
2156
+ default: k(() => [a("a", {
2157
+ href: c.href,
2158
+ target: "_blank",
2159
+ rel: "noopener"
2160
+ }, w(D(f).t("row.openNewTab")), 9, zn)]),
2161
+ _: 1
2162
+ })], 64)) : r("", !0),
2163
+ c.primaryHeader ? (_(), n(D(M), {
2164
+ key: 1,
2165
+ class: "dt-menu-item",
2166
+ onSelect: l[0] ||= (e) => d("copy")
2167
+ }, {
2168
+ default: k(() => [o(w(D(f).t("row.copyId", { column: c.primaryHeader })), 1)]),
2169
+ _: 1
2170
+ })) : r("", !0),
2171
+ (c.href || c.primaryHeader) && m.value.length ? (_(), n(D(je), {
2172
+ key: 2,
2173
+ class: "dt-menu-sep"
2174
+ })) : r("", !0),
2175
+ (_(!0), i(e, null, b(m.value, (t, o) => (_(), i(e, { key: t.id }, [t.separatorBefore || o === g.value ? (_(), n(D(je), {
2176
+ key: 0,
2177
+ class: "dt-menu-sep"
2178
+ })) : r("", !0), s(D(M), {
2179
+ class: p(["dt-menu-item", {
2180
+ "is-destructive": t.destructive,
2181
+ "is-two-line": v(t)
2182
+ }]),
2183
+ disabled: y(t),
2184
+ onSelect: (e) => x(t)
2185
+ }, {
2186
+ default: k(() => [
2187
+ t.icon ? (_(), n(S(t.icon), {
2188
+ key: 0,
2189
+ size: 16,
2190
+ "aria-hidden": "true"
2191
+ })) : r("", !0),
2192
+ a("span", Bn, [a("span", null, w(t.label), 1), v(t) ? (_(), i("span", Vn, w(v(t)), 1)) : r("", !0)]),
2193
+ t.shortcut ? (_(), i("kbd", Hn, w(t.shortcut), 1)) : r("", !0)
2194
+ ]),
2195
+ _: 2
2196
+ }, 1032, [
2197
+ "class",
2198
+ "disabled",
2199
+ "onSelect"
2200
+ ])], 64))), 128))
2201
+ ]),
2202
+ _: 1
2203
+ })]),
2204
+ _: 1
2205
+ })]),
2206
+ _: 1
2207
+ }, 8, ["open"])) : (_(), i("span", In));
2208
+ }
2209
+ }), Wn = l({
2210
+ name: "DtRow",
2211
+ props: {
2212
+ row: {
2213
+ type: Object,
2214
+ required: !0
2215
+ },
2216
+ index: {
2217
+ type: Number,
2218
+ required: !0
2219
+ },
2220
+ rowIndex: {
2221
+ type: Number,
2222
+ required: !0
2223
+ },
2224
+ columns: {
2225
+ type: Array,
2226
+ required: !0
2227
+ },
2228
+ env: {
2229
+ type: Object,
2230
+ required: !0
2231
+ },
2232
+ secondaryVisible: {
2233
+ type: Boolean,
2234
+ default: !1
2235
+ },
2236
+ label: {
2237
+ type: String,
2238
+ default: ""
2239
+ },
2240
+ selectable: {
2241
+ type: Boolean,
2242
+ default: !1
2243
+ },
2244
+ selected: {
2245
+ type: Boolean,
2246
+ default: !1
2247
+ },
2248
+ selectEdge: {
2249
+ type: Boolean,
2250
+ default: !1
2251
+ },
2252
+ expandable: {
2253
+ type: Boolean,
2254
+ default: !1
2255
+ },
2256
+ canExpand: {
2257
+ type: Boolean,
2258
+ default: !1
2259
+ },
2260
+ expanded: {
2261
+ type: Boolean,
2262
+ default: !1
2263
+ },
2264
+ subrowId: {
2265
+ type: String,
2266
+ default: void 0
2267
+ },
2268
+ menu: {
2269
+ type: Boolean,
2270
+ default: !1
2271
+ },
2272
+ menuOpen: {
2273
+ type: Boolean,
2274
+ default: !1
2275
+ },
2276
+ menuEdge: {
2277
+ type: Boolean,
2278
+ default: !1
2279
+ },
2280
+ rowActions: {
2281
+ type: Array,
2282
+ default: () => []
2283
+ },
2284
+ error: {
2285
+ type: Array,
2286
+ default: () => []
2287
+ },
2288
+ uid: {
2289
+ type: String,
2290
+ default: ""
2291
+ },
2292
+ href: {
2293
+ type: String,
2294
+ default: void 0
2295
+ },
2296
+ primaryHeader: {
2297
+ type: String,
2298
+ default: void 0
2299
+ },
2300
+ style: {
2301
+ type: Object,
2302
+ default: void 0
2303
+ }
2304
+ },
2305
+ emits: [
2306
+ "select",
2307
+ "expand",
2308
+ "menu-open",
2309
+ "open",
2310
+ "copy"
2311
+ ],
2312
+ setup(e, { emit: t }) {
2313
+ let n = null, r = () => {
2314
+ if (n) for (let e of n.querySelectorAll("[tabindex=\"-1\"]")) e.removeAttribute("tabindex");
2315
+ };
2316
+ h(r), g(r);
2317
+ let i = (t, n) => e.env.i18n.t(t, n), a = () => e.error.join("\n"), o = () => `${e.uid}-err`, s = () => u("span", {
2318
+ id: o(),
2319
+ class: "dt-row-error",
2320
+ role: "img",
2321
+ "aria-label": a(),
2322
+ "data-dt-tip": a()
2323
+ }, [u(de, {
2324
+ size: 14,
2325
+ weight: "fill",
2326
+ "aria-hidden": "true"
2327
+ })]), c = (t) => {
2328
+ let n = t.disabled?.(e.row), r = typeof n == "string" ? n : null, i = t.description ? `${e.uid}-${t.id}` : void 0;
2329
+ return u("span", { class: "dt-row-inline-wrap" }, [u("button", {
2330
+ type: "button",
2331
+ class: "dt-row-inline",
2332
+ disabled: !!n,
2333
+ "aria-label": t.label,
2334
+ "aria-describedby": i,
2335
+ "data-dt-tip": r ?? (t.description ? `${t.label} — ${t.description}` : t.label),
2336
+ onClick: () => void t.run(T(e.row))
2337
+ }, [u(t.icon, {
2338
+ size: 16,
2339
+ "aria-hidden": "true"
2340
+ })]), i ? u("span", {
2341
+ id: i,
2342
+ class: "dt-sr-only"
2343
+ }, t.description) : null]);
2344
+ }, l = (n) => {
2345
+ let r = n.def, a = r.accessor ? r.accessor(e.row) : qn(e.row, n.id), o = et(r), c = Gt(r, e.row, a, e.env), l = r.primary && r.type !== "id" && r.type !== "ajax" ? r.href?.(e.row) : void 0;
2346
+ l && (c = u("a", {
2347
+ class: "dt-link dt-primary-link",
2348
+ href: l
2349
+ }, [c]));
2350
+ let d = r.actions, f = u("span", { class: "dt-cell-content" }, [c]), p = e.secondaryVisible && r.secondary ? u("span", { class: "dt-secondary" }, r.secondary(e.row) ?? "") : null, m = d?.length ? u(Fn, {
2351
+ actions: d,
2352
+ row: e.row
2353
+ }) : null, h = r.primary && e.expandable, g = e.error.length && !e.menu && n.id === e.columns[0]?.id ? s() : null, _ = h ? [
2354
+ e.canExpand ? u("button", {
2355
+ type: "button",
2356
+ class: ["dt-expand", { "is-open": e.expanded }],
2357
+ "aria-expanded": e.expanded ? "true" : "false",
2358
+ "aria-controls": e.subrowId,
2359
+ "aria-label": i("expand.showAria", { id: e.label }),
2360
+ onClick: () => t("expand")
2361
+ }, [u(re, {
2362
+ size: 14,
2363
+ "aria-hidden": "true"
2364
+ })]) : u("span", {
2365
+ class: "dt-expand-space",
2366
+ "aria-hidden": "true"
2367
+ }),
2368
+ g,
2369
+ u("span", { class: "dt-cell-main" }, [f, p]),
2370
+ m
2371
+ ] : g ? [
2372
+ g,
2373
+ u("span", { class: "dt-cell-main" }, [f, p]),
2374
+ m
2375
+ ] : [
2376
+ f,
2377
+ p,
2378
+ m
2379
+ ];
2380
+ return u("div", {
2381
+ class: [
2382
+ "dt-cell",
2383
+ `is-${o}`,
2384
+ {
2385
+ "is-numeric": $e(r.type),
2386
+ "is-primary": r.primary,
2387
+ "has-expand": h || !!g,
2388
+ "is-pinned-start": n.pinned === "start",
2389
+ "is-pinned-end": n.pinned === "end",
2390
+ "is-pin-edge": n.pinEdge
2391
+ }
2392
+ ],
2393
+ style: {
2394
+ ...n.pinned === "start" ? { left: `var(${n.offsetVar})` } : n.pinned === "end" ? { right: `var(${n.offsetVar})` } : null,
2395
+ ...Ut(r, a)
2396
+ },
2397
+ role: "cell",
2398
+ "data-col": n.id
2399
+ }, _);
2400
+ }, d = () => u("label", {
2401
+ class: [
2402
+ "dt-cell",
2403
+ "dt-cell-select",
2404
+ "is-pinned-start",
2405
+ { "is-pin-edge": e.selectEdge }
2406
+ ],
2407
+ style: { left: "0px" },
2408
+ role: "cell"
2409
+ }, [u("input", {
2410
+ type: "checkbox",
2411
+ class: "dt-checkbox dt-select-box",
2412
+ checked: e.selected,
2413
+ "aria-label": i("row.selectAria", { id: e.label }),
2414
+ onClick: (n) => t("select", !e.selected, n.shiftKey)
2415
+ })]), f = () => u("div", {
2416
+ class: [
2417
+ "dt-cell",
2418
+ "dt-cell-menu",
2419
+ "is-pinned-end",
2420
+ { "is-pin-edge": e.menuEdge }
2421
+ ],
2422
+ style: { right: "0px" },
2423
+ role: "cell"
2424
+ }, [
2425
+ e.error.length ? s() : null,
2426
+ ...jn(e.rowActions, e.row).map(c),
2427
+ u(Un, {
2428
+ row: e.row,
2429
+ label: e.label,
2430
+ primaryHeader: e.primaryHeader,
2431
+ href: e.href,
2432
+ actions: e.rowActions,
2433
+ open: e.menuOpen,
2434
+ "onUpdate:open": (e) => t("menu-open", e),
2435
+ onOpen: (e) => t("open", e),
2436
+ onCopy: () => t("copy")
2437
+ })
2438
+ ]);
2439
+ return () => u("div", {
2440
+ ref: (e) => n = e,
2441
+ class: ["dt-row", {
2442
+ "is-selected": e.selected,
2443
+ "is-expanded": e.expanded,
2444
+ "is-error": e.error.length > 0
2445
+ }],
2446
+ role: "row",
2447
+ "aria-rowindex": e.rowIndex,
2448
+ "aria-describedby": e.error.length ? o() : void 0,
2449
+ "data-dt-tip": e.error.length ? a() : void 0,
2450
+ "data-index": e.index,
2451
+ style: e.style
2452
+ }, [
2453
+ e.selectable ? d() : null,
2454
+ ...Kn(e.columns, l),
2455
+ e.menu ? f() : null
2456
+ ]);
2457
+ }
2458
+ }), Gn = () => u("div", {
2459
+ class: "dt-cell dt-cell-fill",
2460
+ role: "presentation",
2461
+ "aria-hidden": "true"
2462
+ });
2463
+ function Kn(e, t) {
2464
+ let n = e.findIndex((e) => e.pinned === "end"), r = n < 0 ? e.length : n;
2465
+ return [
2466
+ ...e.slice(0, r).map(t),
2467
+ Gn(),
2468
+ ...e.slice(r).map(t)
2469
+ ];
2470
+ }
2471
+ function qn(e, t) {
2472
+ let n = e;
2473
+ for (let e of t.split(".")) {
2474
+ if (n == null) return;
2475
+ n = n[e];
2476
+ }
2477
+ return n;
2478
+ }
2479
+ //#endregion
2480
+ //#region src/core/grid/SkeletonRow.ts
2481
+ var Jn = [
2482
+ 72,
2483
+ 58,
2484
+ 80,
2485
+ 64,
2486
+ 55,
2487
+ 76,
2488
+ 61,
2489
+ 69
2490
+ ], Yn = l({
2491
+ name: "DtSkeletonRow",
2492
+ props: {
2493
+ index: {
2494
+ type: Number,
2495
+ required: !0
2496
+ },
2497
+ columns: {
2498
+ type: Array,
2499
+ required: !0
2500
+ },
2501
+ style: {
2502
+ type: Object,
2503
+ default: void 0
2504
+ },
2505
+ gutter: {
2506
+ type: Boolean,
2507
+ default: !1
2508
+ }
2509
+ },
2510
+ setup(e) {
2511
+ let t = () => u("div", {
2512
+ class: "dt-cell dt-gutter is-pinned-start",
2513
+ style: { left: "0px" },
2514
+ role: "rowheader"
2515
+ }, [u("span", {
2516
+ class: "dt-sk dt-sk-bar",
2517
+ style: { width: "24px" }
2518
+ })]);
2519
+ return () => u("div", {
2520
+ class: "dt-row dt-row-skeleton",
2521
+ role: "row",
2522
+ "aria-hidden": "true",
2523
+ style: e.style
2524
+ }, [e.gutter ? t() : null, ...Kn(e.columns, (t) => {
2525
+ let n = e.columns.indexOf(t), r = V[t.def.type].skeleton, i = `${Jn[(e.index + n) % Jn.length]}%`;
2526
+ return u("div", {
2527
+ class: [
2528
+ "dt-cell",
2529
+ `is-${et(t.def)}`,
2530
+ {
2531
+ "is-pinned-start": t.pinned === "start",
2532
+ "is-pinned-end": t.pinned === "end",
2533
+ "is-pin-edge": t.pinEdge
2534
+ }
2535
+ ],
2536
+ style: t.pinned === "start" ? { left: `var(${t.offsetVar})` } : t.pinned === "end" ? { right: `var(${t.offsetVar})` } : void 0,
2537
+ role: "gridcell"
2538
+ }, r === "person" ? [u("span", { class: "dt-sk dt-sk-circle" }), u("span", {
2539
+ class: "dt-sk dt-sk-bar",
2540
+ style: { width: i }
2541
+ })] : r === "badge" ? u("span", { class: "dt-sk dt-sk-pill" }) : r === "number" ? u("span", { class: "dt-sk dt-sk-bar dt-sk-num" }) : u("span", {
2542
+ class: "dt-sk dt-sk-bar",
2543
+ style: { width: i }
2544
+ }));
2545
+ })]);
2546
+ }
2547
+ }), Xn = 400;
2548
+ function Zn(e) {
2549
+ let t = y(""), n = y({}), r = y(!1), i, a = null, o = (e) => {
2550
+ let t = e?.closest("[data-dt-tip]");
2551
+ if (t && t.dataset.dtTip) return {
2552
+ el: t,
2553
+ text: t.dataset.dtTip
2554
+ };
2555
+ let n = e?.closest(".dt-cell-content, .dt-head-label");
2556
+ return n && n.scrollWidth > n.clientWidth + 1 ? {
2557
+ el: n,
2558
+ text: n.textContent?.trim() ?? ""
2559
+ } : null;
2560
+ }, s = () => {
2561
+ clearTimeout(i), i = void 0, a = null, r.value = !1;
2562
+ }, c = (e, i, a) => {
2563
+ let o = e.getBoundingClientRect();
2564
+ t.value = i;
2565
+ let s = a !== void 0 && o.width > 320 ? a : o.left + o.width / 2;
2566
+ n.value = {
2567
+ left: `${Math.round(s)}px`,
2568
+ top: `${Math.round(o.bottom + 6)}px`
2569
+ }, r.value = !0;
2570
+ }, l = (e) => {
2571
+ let t = o(e.target);
2572
+ if (!t || t.el === a) return;
2573
+ s(), a = t.el;
2574
+ let n = e.clientX;
2575
+ i = setTimeout(() => c(t.el, t.text, n), Xn);
2576
+ }, u = (e) => {
2577
+ a && !a.contains(e.relatedTarget) && s();
2578
+ }, d = (e) => {
2579
+ let t = o(e.target);
2580
+ t && (s(), a = t.el, c(t.el, t.text));
2581
+ };
2582
+ return h(() => {
2583
+ let t = e.value;
2584
+ t && (t.addEventListener("mouseover", l), t.addEventListener("mouseout", u), t.addEventListener("focusin", d), t.addEventListener("focusout", s), t.addEventListener("scroll", s, !0), t.addEventListener("mousedown", s));
2585
+ }), m(() => {
2586
+ let t = e.value;
2587
+ s(), t?.removeEventListener("mouseover", l), t?.removeEventListener("mouseout", u), t?.removeEventListener("focusin", d), t?.removeEventListener("focusout", s), t?.removeEventListener("scroll", s, !0), t?.removeEventListener("mousedown", s);
2588
+ }), {
2589
+ open: r,
2590
+ text: t,
2591
+ style: n,
2592
+ hide: s
2593
+ };
2594
+ }
2595
+ //#endregion
2596
+ //#region src/core/preferences/usePreferences.ts
2597
+ function Qn(e, t, n) {
2598
+ let r = v({ ...n }), i = () => E(e), a = (e) => {
2599
+ e && (e.density && (r.density = e.density), typeof e.verticalLines == "boolean" && (r.verticalLines = e.verticalLines), typeof e.pageSize == "number" && (r.pageSize = e.pageSize), "defaultViewId" in e && (r.defaultViewId = e.defaultViewId ?? null));
2600
+ }, o = Promise.resolve();
2601
+ if (t) {
2602
+ let e = t.get(i());
2603
+ e instanceof Promise ? o = e.then(a).catch(() => {}) : a(e);
2604
+ }
2605
+ let s = (e) => {
2606
+ Object.assign(r, e), t && Promise.resolve(t.set(i(), e)).catch(() => {});
2607
+ };
2608
+ return {
2609
+ prefs: r,
2610
+ set: s,
2611
+ reset: () => s({
2612
+ density: n.density,
2613
+ verticalLines: n.verticalLines,
2614
+ pageSize: n.pageSize
2615
+ }),
2616
+ ready: o,
2617
+ persistent: t !== null
2618
+ };
2619
+ }
2620
+ //#endregion
2621
+ //#region src/core/states/StateMessage.vue?vue&type=script&setup=true&lang.ts
2622
+ var $n = ["role"], er = {
2623
+ class: "dt-state-icon",
2624
+ "aria-hidden": "true"
2625
+ }, tr = { class: "dt-state-title" }, nr = {
2626
+ key: 0,
2627
+ class: "dt-state-actions"
2628
+ }, rr = /* @__PURE__ */ l({
2629
+ __name: "StateMessage",
2630
+ props: {
2631
+ kind: {},
2632
+ title: {},
2633
+ lines: {}
2634
+ },
2635
+ setup(t) {
2636
+ let o = {
2637
+ empty: ce,
2638
+ noResults: oe,
2639
+ noResultsSearch: j,
2640
+ error: de,
2641
+ noRowsOnPage: ae
2642
+ }[t.kind];
2643
+ return (s, c) => (_(), i("div", {
2644
+ class: p(["dt-state", `is-${t.kind}`]),
2645
+ role: t.kind === "error" ? "alert" : "status"
2646
+ }, [
2647
+ a("span", er, [(_(), n(S(D(o)), { size: 20 }))]),
2648
+ a("strong", tr, w(t.title), 1),
2649
+ (_(!0), i(e, null, b(t.lines ?? [], (e) => (_(), i("p", {
2650
+ key: e,
2651
+ class: "dt-state-line"
2652
+ }, w(e), 1))), 128)),
2653
+ s.$slots.default ? (_(), i("div", nr, [x(s.$slots, "default")])) : r("", !0),
2654
+ x(s.$slots, "after")
2655
+ ], 10, $n));
2656
+ }
2657
+ }), ir = ["aria-label", "data-dt-tip"], ar = { key: 0 }, or = { class: "dt-pop-label" }, sr = { class: "dt-pop-item" }, cr = { class: "dt-pop-value" }, lr = { class: "dt-pop-foot" }, ur = /* @__PURE__ */ l({
2658
+ __name: "DisplayPopover",
2659
+ props: /*@__PURE__*/ f({
2660
+ density: {},
2661
+ verticalLines: { type: Boolean },
2662
+ columns: {},
2663
+ counts: {},
2664
+ persistent: { type: Boolean },
2665
+ iconOnly: { type: Boolean }
2666
+ }, {
2667
+ open: {
2668
+ type: Boolean,
2669
+ default: !1
2670
+ },
2671
+ openModifiers: {}
2672
+ }),
2673
+ emits: /*@__PURE__*/ f([
2674
+ "update:density",
2675
+ "update:verticalLines",
2676
+ "columns-save",
2677
+ "reset"
2678
+ ], ["update:open"]),
2679
+ setup(t, { emit: l }) {
2680
+ let u = c(() => import("./ColumnsDialog-dngip-aF.js")), d = y(!1), f = l, m = O(t, "open"), { i18n: h } = W(), g = [
2681
+ "comfortable",
2682
+ "standard",
2683
+ "compact"
2684
+ ], v = y(!1), x = y(null), S = () => {
2685
+ m.value = !1, d.value = !0, v.value = !0;
2686
+ }, C = (e) => {
2687
+ e.preventDefault(), x.value?.focus();
2688
+ };
2689
+ return (c, l) => (_(), i(e, null, [s(D(Fe), {
2690
+ open: m.value,
2691
+ "onUpdate:open": l[3] ||= (e) => m.value = e
2692
+ }, {
2693
+ default: k(() => [s(D(Ie), { "as-child": "" }, {
2694
+ default: k(() => [a("button", {
2695
+ ref_key: "trigger",
2696
+ ref: x,
2697
+ type: "button",
2698
+ class: p(["dt-btn has-icon", { "dt-btn-icon": t.iconOnly }]),
2699
+ "aria-label": D(h).t("toolbar.display"),
2700
+ "data-dt-tip": t.iconOnly ? D(h).t("toolbar.display") : void 0
2701
+ }, [s(D(le), {
2702
+ size: 16,
2703
+ "aria-hidden": "true"
2704
+ }), t.iconOnly ? r("", !0) : (_(), i("span", ar, w(D(h).t("toolbar.display")), 1))], 10, ir)]),
2705
+ _: 1
2706
+ }), s(D(Pe), null, {
2707
+ default: k(() => [s(D(Ne), {
2708
+ class: "dt-pop dt-display",
2709
+ align: "end",
2710
+ "side-offset": 4
2711
+ }, {
2712
+ default: k(() => [
2713
+ a("div", or, w(D(h).t("display.density")), 1),
2714
+ s(D(Be), {
2715
+ class: "dt-seg dt-seg-sm dt-display-density",
2716
+ type: "single",
2717
+ "model-value": t.density,
2718
+ "onUpdate:modelValue": l[0] ||= (e) => e && f("update:density", e)
2719
+ }, {
2720
+ default: k(() => [(_(), i(e, null, b(g, (e) => s(D(ze), {
2721
+ key: e,
2722
+ class: "dt-seg-item",
2723
+ value: e
2724
+ }, {
2725
+ default: k(() => [o(w(D(h).t(`display.${e}`)), 1)]),
2726
+ _: 2
2727
+ }, 1032, ["value"])), 64))]),
2728
+ _: 1
2729
+ }, 8, ["model-value"]),
2730
+ a("label", sr, [o(w(D(h).t("display.verticalLines")) + " ", 1), s(D(Le), {
2731
+ class: "dt-switch dt-pop-end",
2732
+ "model-value": t.verticalLines,
2733
+ "onUpdate:modelValue": l[1] ||= (e) => f("update:verticalLines", e)
2734
+ }, {
2735
+ default: k(() => [s(D(Re), { class: "dt-switch-thumb" })]),
2736
+ _: 1
2737
+ }, 8, ["model-value"])]),
2738
+ l[6] ||= a("div", { class: "dt-pop-sep" }, null, -1),
2739
+ a("button", {
2740
+ type: "button",
2741
+ class: "dt-pop-item",
2742
+ onClick: S
2743
+ }, [
2744
+ o(w(D(h).t("display.columns")) + " ", 1),
2745
+ a("span", cr, w(D(h).t("columns.shownOf", t.counts)), 1),
2746
+ s(D(re), {
2747
+ size: 14,
2748
+ "aria-hidden": "true"
2749
+ })
2750
+ ]),
2751
+ a("div", lr, [a("span", null, w(t.persistent ? D(h).t("display.savedForYou") : ""), 1), a("button", {
2752
+ type: "button",
2753
+ class: "dt-pop-action",
2754
+ onClick: l[2] ||= (e) => f("reset")
2755
+ }, w(D(h).t("common.reset")), 1)])
2756
+ ]),
2757
+ _: 1
2758
+ })]),
2759
+ _: 1
2760
+ })]),
2761
+ _: 1
2762
+ }, 8, ["open"]), d.value ? (_(), n(D(u), {
2763
+ key: 0,
2764
+ open: v.value,
2765
+ "onUpdate:open": l[4] ||= (e) => v.value = e,
2766
+ columns: t.columns,
2767
+ onSave: l[5] ||= (e) => f("columns-save", e),
2768
+ onCloseAutoFocus: C
2769
+ }, null, 8, ["open", "columns"])) : r("", !0)], 64));
2770
+ }
2771
+ }), dr = { class: "dt-input-icon" }, fr = [
2772
+ "value",
2773
+ "placeholder",
2774
+ "aria-label"
2775
+ ], pr = { class: "dt-input-end" }, mr = ["aria-label"], hr = {
2776
+ key: 1,
2777
+ class: "dt-kbd",
2778
+ "aria-hidden": "true"
2779
+ }, gr = /* @__PURE__ */ l({
2780
+ __name: "SearchBox",
2781
+ props: {
2782
+ modelValue: {},
2783
+ placeholder: {},
2784
+ collapsed: { type: Boolean },
2785
+ kbd: {},
2786
+ phone: { type: Boolean }
2787
+ },
2788
+ emits: ["update:modelValue"],
2789
+ setup(e, { expose: t, emit: o }) {
2790
+ let c = e, l = o, { i18n: u } = W(), d = y(null), f = y(c.modelValue), h;
2791
+ ee(() => c.modelValue, (e) => f.value = e);
2792
+ let g = (e, t = !1) => {
2793
+ f.value = e, clearTimeout(h), t ? l("update:modelValue", e) : h = setTimeout(() => l("update:modelValue", e), 250);
2794
+ };
2795
+ m(() => clearTimeout(h));
2796
+ let v = (e) => {
2797
+ e.key === "Escape" && (e.preventDefault(), f.value ? g("", !0) : d.value?.blur());
2798
+ };
2799
+ return t({ focus: () => d.value?.focus() }), (t, o) => (_(), i("label", { class: p(["dt-input dt-search has-icon", { "is-collapsed": e.collapsed && !f.value }]) }, [
2800
+ a("span", dr, [s(D(j), {
2801
+ size: e.phone ? 18 : 16,
2802
+ "aria-hidden": "true"
2803
+ }, null, 8, ["size"])]),
2804
+ a("input", {
2805
+ ref_key: "input",
2806
+ ref: d,
2807
+ type: "search",
2808
+ value: f.value,
2809
+ placeholder: e.placeholder,
2810
+ "aria-label": e.placeholder,
2811
+ autocomplete: "off",
2812
+ onInput: o[0] ||= (e) => g(e.target.value),
2813
+ onKeydown: v
2814
+ }, null, 40, fr),
2815
+ a("span", pr, [f.value ? (_(), i("button", {
2816
+ key: 0,
2817
+ type: "button",
2818
+ class: "dt-input-clear",
2819
+ "aria-label": D(u).t("common.clear"),
2820
+ onClick: o[1] ||= (e) => g("", !0)
2821
+ }, [e.phone ? (_(), n(D(pe), {
2822
+ key: 0,
2823
+ size: 20,
2824
+ weight: "fill",
2825
+ "aria-hidden": "true"
2826
+ })) : (_(), n(D(fe), {
2827
+ key: 1,
2828
+ size: 14,
2829
+ "aria-hidden": "true"
2830
+ }))], 8, mr)) : e.phone ? r("", !0) : (_(), i("kbd", hr, w(e.kbd ?? "/"), 1))])
2831
+ ], 2));
2832
+ }
2833
+ }), _r = { class: "dt-dialog-actions" }, vr = /* @__PURE__ */ l({
2834
+ __name: "ConfirmDialog",
2835
+ props: /*@__PURE__*/ f({
2836
+ title: {},
2837
+ body: {},
2838
+ confirmLabel: {},
2839
+ cancelLabel: {},
2840
+ danger: { type: Boolean }
2841
+ }, {
2842
+ open: {
2843
+ type: Boolean,
2844
+ default: !1
2845
+ },
2846
+ openModifiers: {}
2847
+ }),
2848
+ emits: /*@__PURE__*/ f(["confirm"], ["update:open"]),
2849
+ setup(e, { emit: t }) {
2850
+ let i = t, c = O(e, "open"), { i18n: l } = W(), u = () => {
2851
+ i("confirm"), c.value = !1;
2852
+ };
2853
+ return (t, i) => (_(), n(D(Ee), {
2854
+ open: c.value,
2855
+ "onUpdate:open": i[0] ||= (e) => c.value = e
2856
+ }, {
2857
+ default: k(() => [s(D(Te), null, {
2858
+ default: k(() => [s(D(we), { class: "dt-scrim" }), s(D(Se), { class: "dt-dialog dt-dialog-confirm" }, {
2859
+ default: k(() => [
2860
+ s(D(De), { class: "dt-dialog-title" }, {
2861
+ default: k(() => [o(w(e.title), 1)]),
2862
+ _: 1
2863
+ }),
2864
+ e.body ? (_(), n(D(Ce), {
2865
+ key: 0,
2866
+ class: "dt-dialog-body"
2867
+ }, {
2868
+ default: k(() => [o(w(e.body), 1)]),
2869
+ _: 1
2870
+ })) : r("", !0),
2871
+ a("div", _r, [s(D(xe), { class: "dt-btn" }, {
2872
+ default: k(() => [o(w(e.cancelLabel ?? D(l).t("common.cancel")), 1)]),
2873
+ _: 1
2874
+ }), a("button", {
2875
+ type: "button",
2876
+ class: p(["dt-btn", e.danger ? "dt-btn-danger" : "dt-btn-primary"]),
2877
+ onClick: u
2878
+ }, w(e.confirmLabel), 3)])
2879
+ ]),
2880
+ _: 1
2881
+ })]),
2882
+ _: 1
2883
+ })]),
2884
+ _: 1
2885
+ }, 8, ["open"]));
2886
+ }
2887
+ }), yr = (e) => e == null || e === "";
2888
+ function br(e, t) {
2889
+ let n = (e, t) => {
2890
+ let n = yr(e), r = yr(t);
2891
+ return n && r ? 0 : n ? 1 : r ? -1 : null;
2892
+ };
2893
+ if (V[e.type].numeric || e.type === "boolean" || e.type === "star") return (e, t) => n(e, t) ?? Number(e) - Number(t);
2894
+ if (e.type === "date" || e.type === "datetime") return (e, t) => n(e, t) ?? new Date(e).getTime() - new Date(t).getTime();
2895
+ let r = Ke(t).collator();
2896
+ return (e, t) => n(e, t) ?? r.compare(String(e), String(t));
2897
+ }
2898
+ //#endregion
2899
+ //#region src/types/query.ts
2900
+ var xr = "@me";
2901
+ //#endregion
2902
+ export { nt as $, gn as A, Gt as B, Cn as C, rn as D, nn as E, sn as F, kt as G, jt as H, Jt as I, U as J, St as K, Bt as L, tn as M, X as N, on as O, vn as P, $e as Q, G as R, bn as S, cn as T, Mt as U, At as V, W, V as X, H as Y, et as Z, An as _, ur as a, P as at, $ as b, Zn as c, Kn as d, Ze as et, jn as f, Dn as g, wn as h, gr as i, Ke as it, ln as j, Z as k, Yn as l, On as m, br as n, I as nt, rr as o, kn as p, gt as q, vr as r, L as rt, Qn as s, xr as t, Ye as tt, Wn as u, Tn as v, xn as w, yn as x, En as y, Ut as z };
2903
+
2904
+ //# sourceMappingURL=query-CGNWUi2E.js.map