@inandu-solutions/grid-react 0.1.3 → 0.1.4

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.
Files changed (39) hide show
  1. package/dist/components/InanduGrid.d.ts +99 -0
  2. package/dist/core/aggregate.d.ts +5 -0
  3. package/dist/core/columns.d.ts +11 -0
  4. package/dist/core/constants.d.ts +14 -0
  5. package/dist/core/dom.d.ts +8 -0
  6. package/dist/core/export/csv.d.ts +2 -0
  7. package/dist/core/export/download.d.ts +2 -0
  8. package/dist/core/export/markup.d.ts +2 -0
  9. package/dist/core/export/pdf.d.ts +3 -0
  10. package/dist/core/filter.d.ts +26 -0
  11. package/dist/core/format.d.ts +24 -0
  12. package/dist/core/i18n/en.d.ts +46 -0
  13. package/dist/core/i18n/es.d.ts +46 -0
  14. package/dist/core/i18n/fr.d.ts +46 -0
  15. package/dist/core/i18n/index.d.ts +8 -0
  16. package/dist/core/i18n/it.d.ts +46 -0
  17. package/dist/core/i18n/zh.d.ts +46 -0
  18. package/dist/core/index.d.ts +17 -0
  19. package/dist/core/parse.d.ts +14 -0
  20. package/dist/core/sort.d.ts +1 -0
  21. package/dist/core/tree.d.ts +28 -0
  22. package/dist/core/types.d.ts +46 -0
  23. package/dist/hooks/useInanduGrid.d.ts +197 -0
  24. package/dist/html2canvas-BE2ZQbtv.js +4021 -0
  25. package/dist/html2canvas-o9-HsXBE.cjs +5 -0
  26. package/dist/inandu-grid-react.cjs +2 -0
  27. package/dist/inandu-grid-react.js +1684 -0
  28. package/dist/index.d.ts +11 -0
  29. package/dist/index.es-BqzICVsf.cjs +5 -0
  30. package/dist/index.es-CPZG9pTc.js +5752 -0
  31. package/dist/jspdf.es.min-D_8zJvYC.cjs +78 -0
  32. package/dist/jspdf.es.min-DiTFVZBc.js +18250 -0
  33. package/dist/purify.es-3_UFdOhH.js +805 -0
  34. package/dist/purify.es-DXMFKXT6.cjs +3 -0
  35. package/dist/style.css +350 -0
  36. package/dist/utils/exporters.d.ts +29 -0
  37. package/dist/utils/measureColumn.d.ts +15 -0
  38. package/dist/utils/translate.d.ts +10 -0
  39. package/package.json +1 -1
@@ -0,0 +1,1684 @@
1
+ import { useEffect as e, useMemo as t, useRef as n, useState as r } from "react";
2
+ import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
3
+ //#region src/core/format.ts
4
+ var s = /^(\d+)?\.(\d+)-(\d+)$/;
5
+ function c(e, t, n) {
6
+ let r = {}, i = n ? s.exec(n) : null;
7
+ return i ? (i[1] && (r.minimumIntegerDigits = Number(i[1])), r.minimumFractionDigits = Number(i[2]), r.maximumFractionDigits = Number(i[3])) : r.maximumFractionDigits = 3, new Intl.NumberFormat(t || void 0, r).format(e);
8
+ }
9
+ function l(e) {
10
+ return e instanceof Date ? e : typeof e == "string" ? new Date(e.replace(/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2})/, "$1T$2")) : new Date(e);
11
+ }
12
+ var u = /YYYY|sss|MM|DD|HH|mm|ss/g;
13
+ function d(e, t) {
14
+ let n = (e, t = 2) => String(e).padStart(t, "0");
15
+ return t.replace(u, (t) => {
16
+ switch (t) {
17
+ case "YYYY": return String(e.getFullYear());
18
+ case "MM": return n(e.getMonth() + 1);
19
+ case "DD": return n(e.getDate());
20
+ case "HH": return n(e.getHours());
21
+ case "mm": return n(e.getMinutes());
22
+ case "ss": return n(e.getSeconds());
23
+ case "sss": return n(e.getMilliseconds(), 3);
24
+ default: return t;
25
+ }
26
+ });
27
+ }
28
+ function f(e, t, n, r, i = c) {
29
+ if (e == null) return "";
30
+ switch (t) {
31
+ case "number": {
32
+ let t = typeof e == "number" ? e : Number(e);
33
+ return Number.isNaN(t) ? String(e) : i(t, r, n || void 0);
34
+ }
35
+ case "date": {
36
+ let t = l(e);
37
+ return Number.isNaN(t.getTime()) ? String(e) : d(t, n || "YYYY-MM-DD");
38
+ }
39
+ case "boolean": {
40
+ let [t, r] = (n || "true|false").split("|");
41
+ return e ? t : r;
42
+ }
43
+ default: return String(e);
44
+ }
45
+ }
46
+ //#endregion
47
+ //#region src/core/sort.ts
48
+ function p(e, t, n) {
49
+ return e == null && t == null ? 0 : e == null ? -1 : t == null ? 1 : e instanceof Date && t instanceof Date ? e.getTime() - t.getTime() : typeof e == "number" && typeof t == "number" ? e - t : String(e).localeCompare(String(t), n || void 0);
50
+ }
51
+ //#endregion
52
+ //#region src/core/tree.ts
53
+ function ee(e, t) {
54
+ let { getChildren: n, isExpanded: r, match: i, compare: a } = t, o = [], s = /* @__PURE__ */ new Map(), c = (e) => {
55
+ if (!i) return !0;
56
+ let t = s.get(e);
57
+ if (t !== void 0) return t;
58
+ let r = i(e);
59
+ if (!r) {
60
+ let t = n(e);
61
+ r = !!t && t.some(c);
62
+ }
63
+ return s.set(e, r), r;
64
+ }, l = (e, t) => {
65
+ let s = i ? e.filter(c) : [...e];
66
+ a && (s = s.slice().sort(a));
67
+ for (let e of s) {
68
+ let a = n(e), s = (a ? i ? a.filter(c) : a : []).length > 0, u = s && (i ? !0 : r(e));
69
+ o.push({
70
+ row: e,
71
+ depth: t,
72
+ expandable: s,
73
+ expanded: u
74
+ }), u && l(a, t + 1);
75
+ }
76
+ };
77
+ return l(e, 0), o;
78
+ }
79
+ function te(e, t) {
80
+ let n = [], r = (e) => {
81
+ for (let i of e) {
82
+ n.push(i);
83
+ let e = t(i);
84
+ e && e.length && r(e);
85
+ }
86
+ };
87
+ return r(e), n;
88
+ }
89
+ //#endregion
90
+ //#region src/core/filter.ts
91
+ function m(e) {
92
+ return e ? Object.values(e).some((e) => Array.isArray(e) ? !0 : !!e) : !1;
93
+ }
94
+ function h(e, t, n, r, i) {
95
+ let a = t[e.field()];
96
+ if (n.values !== void 0) return n.values.includes(f(a, e.type(), e.format(), r, i));
97
+ switch (e.type()) {
98
+ case "number": {
99
+ let e = !!n.min, t = !!n.max;
100
+ if (!e && !t) return !0;
101
+ let r = typeof a == "number" ? a : Number(a);
102
+ return !(a == null || Number.isNaN(r) || e && r < Number(n.min) || t && r > Number(n.max));
103
+ }
104
+ case "date": {
105
+ let e = !!n.from, t = !!n.to;
106
+ if (!e && !t) return !0;
107
+ if (a == null) return !1;
108
+ let r = l(a);
109
+ if (Number.isNaN(r.getTime()) || e && r < new Date(n.from)) return !1;
110
+ if (t) {
111
+ let e = new Date(n.to);
112
+ if (e.setHours(23, 59, 59, 999), r > e) return !1;
113
+ }
114
+ return !0;
115
+ }
116
+ case "boolean": return !n.bool || !!a == (n.bool === "true");
117
+ default: {
118
+ let t = (n.text ?? "").trim().toLowerCase();
119
+ return !t || f(a, e.type(), e.format(), r, i).toLowerCase().includes(t);
120
+ }
121
+ }
122
+ }
123
+ //#endregion
124
+ //#region src/core/aggregate.ts
125
+ var g = {
126
+ sum: "Σ",
127
+ avg: "x̄",
128
+ min: "min",
129
+ max: "max",
130
+ count: "#"
131
+ };
132
+ function _(e, t) {
133
+ let n = {};
134
+ for (let r of t) {
135
+ let t = r.field(), i = r.aggregate();
136
+ if (i === "count") {
137
+ n[t] = e.length;
138
+ continue;
139
+ }
140
+ let a = e.map((e) => e[t]).filter((e) => e != null && e !== "" && typeof e != "boolean").map((e) => Number(e)).filter((e) => Number.isFinite(e));
141
+ if (a.length === 0) {
142
+ n[t] = 0;
143
+ continue;
144
+ }
145
+ switch (i) {
146
+ case "sum":
147
+ n[t] = a.reduce((e, t) => e + t, 0);
148
+ break;
149
+ case "avg":
150
+ n[t] = a.reduce((e, t) => e + t, 0) / a.length;
151
+ break;
152
+ case "min":
153
+ n[t] = a.reduce((e, t) => t < e ? t : e, Infinity);
154
+ break;
155
+ case "max": n[t] = a.reduce((e, t) => t > e ? t : e, -Infinity);
156
+ }
157
+ }
158
+ return n;
159
+ }
160
+ //#endregion
161
+ //#region src/core/parse.ts
162
+ function v(e, t) {
163
+ switch (t) {
164
+ case "number": {
165
+ if (e === "" || e === void 0) return;
166
+ let t = Number(e);
167
+ return Number.isNaN(t) ? void 0 : t;
168
+ }
169
+ case "date": {
170
+ let t = typeof e == "string" ? /^(\d{4})-(\d{2})-(\d{2})$/.exec(e) : null, n = t ? new Date(Number(t[1]), Number(t[2]) - 1, Number(t[3])) : new Date(e);
171
+ return Number.isNaN(n.getTime()) ? void 0 : n;
172
+ }
173
+ case "boolean": return !!e;
174
+ default: return e;
175
+ }
176
+ }
177
+ function ne(e, t) {
178
+ return t === "boolean" ? e.trim().toLowerCase() === "true" : v(e, t);
179
+ }
180
+ //#endregion
181
+ //#region src/core/dom.ts
182
+ function re(e) {
183
+ return e.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
184
+ }
185
+ //#endregion
186
+ //#region src/core/export/csv.ts
187
+ function ie(e) {
188
+ return /[",\r\n]/.test(e) ? "\"" + e.replace(/"/g, "\"\"") + "\"" : e;
189
+ }
190
+ //#endregion
191
+ //#region src/core/export/markup.ts
192
+ function y(e) {
193
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
194
+ }
195
+ //#endregion
196
+ //#region src/core/export/pdf.ts
197
+ function ae(e, t, n) {
198
+ if (e.getTextWidth(t) <= n) return t;
199
+ let r = t;
200
+ for (; r.length > 0 && e.getTextWidth(r + "…") > n;) r = r.slice(0, -1);
201
+ return r + "…";
202
+ }
203
+ //#endregion
204
+ //#region src/core/export/download.ts
205
+ function b(e, t, n) {
206
+ let r = e instanceof Blob ? e : new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
207
+ a.href = i, a.download = t, a.click(), URL.revokeObjectURL(i);
208
+ }
209
+ //#endregion
210
+ //#region src/core/i18n/en.ts
211
+ var x = {
212
+ MsgNoData: "No data",
213
+ MsgFirstPage: "First page",
214
+ MsgPreviousPage: "Previous page",
215
+ MsgNextPage: "Next page",
216
+ MsgLastPage: "Last page",
217
+ MsgSortBy: "Sort by {{column}}",
218
+ MsgPageOf: "Page {{page}} of {{total}}",
219
+ MsgFilterPlaceholder: "Search",
220
+ MsgFilterColumn: "Filter {{column}}",
221
+ MsgFilterMin: "Min",
222
+ MsgFilterMax: "Max",
223
+ MsgFilterFrom: "From",
224
+ MsgFilterTo: "To",
225
+ MsgAll: "All",
226
+ MsgCancelFilter: "Cancel filter",
227
+ MsgCancelAllFilters: "Clear filters",
228
+ MsgGroupByHint: "Drag a column header here to group by it",
229
+ MsgGroupedBy: "Grouped by {{column}}",
230
+ MsgGroupHeader: "{{column}}: {{value}} ({{count}})",
231
+ MsgCancelGrouping: "Cancel grouping",
232
+ MsgSelectAll: "Select all rows",
233
+ MsgSelectRow: "Select row {{index}}",
234
+ MsgExportCsv: "Export CSV",
235
+ MsgExportExcel: "Export Excel",
236
+ MsgExportPdf: "Export PDF",
237
+ MsgPrint: "Print",
238
+ MsgToggleColumns: "Columns",
239
+ MsgToggleColumn: "Toggle {{column}}",
240
+ MsgEditCell: "Edit {{column}}",
241
+ MsgEditRow: "Edit",
242
+ MsgSaveRow: "Save",
243
+ MsgCancelRowEdit: "Cancel",
244
+ MsgDeleteRow: "Delete",
245
+ MsgAddRow: "Add row",
246
+ MsgLoading: "Loading…",
247
+ MsgDragRow: "Drag to reorder row",
248
+ MsgAutosizeColumn: "Double-click to fit column to content",
249
+ MsgExpandDetail: "Expand row details",
250
+ MsgCollapseDetail: "Collapse row details",
251
+ MsgDeleteSelected: "Delete selected ({{count}})",
252
+ MsgValidationRequired: "This field is required",
253
+ MsgValidationMin: "Must be at least {{min}}",
254
+ MsgValidationMax: "Must be at most {{max}}",
255
+ MsgValidationPattern: "Invalid format"
256
+ }, S = {
257
+ MsgNoData: "Sin datos",
258
+ MsgFirstPage: "Primera página",
259
+ MsgPreviousPage: "Página anterior",
260
+ MsgNextPage: "Página siguiente",
261
+ MsgLastPage: "Última página",
262
+ MsgSortBy: "Ordenar por {{column}}",
263
+ MsgPageOf: "Página {{page}} de {{total}}",
264
+ MsgFilterPlaceholder: "Buscar",
265
+ MsgFilterColumn: "Filtrar {{column}}",
266
+ MsgFilterMin: "Mín",
267
+ MsgFilterMax: "Máx",
268
+ MsgFilterFrom: "Desde",
269
+ MsgFilterTo: "Hasta",
270
+ MsgAll: "Todos",
271
+ MsgCancelFilter: "Cancelar filtro",
272
+ MsgCancelAllFilters: "Cancelar filtros",
273
+ MsgGroupByHint: "Arrastra el encabezado de una columna aquí para agrupar por ella",
274
+ MsgGroupedBy: "Agrupado por {{column}}",
275
+ MsgGroupHeader: "{{column}}: {{value}} ({{count}})",
276
+ MsgCancelGrouping: "Cancelar agrupación",
277
+ MsgSelectAll: "Seleccionar todas las filas",
278
+ MsgSelectRow: "Seleccionar fila {{index}}",
279
+ MsgExportCsv: "Exportar CSV",
280
+ MsgExportExcel: "Exportar Excel",
281
+ MsgExportPdf: "Exportar PDF",
282
+ MsgPrint: "Imprimir",
283
+ MsgToggleColumns: "Columnas",
284
+ MsgToggleColumn: "Mostrar u ocultar {{column}}",
285
+ MsgEditCell: "Editar {{column}}",
286
+ MsgEditRow: "Editar",
287
+ MsgSaveRow: "Guardar",
288
+ MsgCancelRowEdit: "Cancelar",
289
+ MsgDeleteRow: "Eliminar",
290
+ MsgAddRow: "Agregar fila",
291
+ MsgLoading: "Cargando…",
292
+ MsgDragRow: "Arrastrar para reordenar fila",
293
+ MsgAutosizeColumn: "Doble clic para ajustar la columna al contenido",
294
+ MsgExpandDetail: "Expandir detalle de fila",
295
+ MsgCollapseDetail: "Contraer detalle de fila",
296
+ MsgDeleteSelected: "Eliminar seleccionados ({{count}})",
297
+ MsgValidationRequired: "Este campo es obligatorio",
298
+ MsgValidationMin: "Debe ser como mínimo {{min}}",
299
+ MsgValidationMax: "Debe ser como máximo {{max}}",
300
+ MsgValidationPattern: "Formato inválido"
301
+ }, C = {
302
+ MsgNoData: "Aucune donnée",
303
+ MsgFirstPage: "Première page",
304
+ MsgPreviousPage: "Page précédente",
305
+ MsgNextPage: "Page suivante",
306
+ MsgLastPage: "Dernière page",
307
+ MsgSortBy: "Trier par {{column}}",
308
+ MsgPageOf: "Page {{page}} sur {{total}}",
309
+ MsgFilterPlaceholder: "Rechercher",
310
+ MsgFilterColumn: "Filtrer {{column}}",
311
+ MsgFilterMin: "Min",
312
+ MsgFilterMax: "Max",
313
+ MsgFilterFrom: "De",
314
+ MsgFilterTo: "À",
315
+ MsgAll: "Tous",
316
+ MsgCancelFilter: "Annuler le filtre",
317
+ MsgCancelAllFilters: "Effacer les filtres",
318
+ MsgGroupByHint: "Faites glisser l'en-tête d'une colonne ici pour regrouper par celle-ci",
319
+ MsgGroupedBy: "Regroupé par {{column}}",
320
+ MsgGroupHeader: "{{column}} : {{value}} ({{count}})",
321
+ MsgCancelGrouping: "Annuler le regroupement",
322
+ MsgSelectAll: "Sélectionner toutes les lignes",
323
+ MsgSelectRow: "Sélectionner la ligne {{index}}",
324
+ MsgExportCsv: "Exporter CSV",
325
+ MsgExportExcel: "Exporter Excel",
326
+ MsgExportPdf: "Exporter PDF",
327
+ MsgPrint: "Imprimer",
328
+ MsgToggleColumns: "Colonnes",
329
+ MsgToggleColumn: "Afficher/masquer {{column}}",
330
+ MsgEditCell: "Modifier {{column}}",
331
+ MsgEditRow: "Modifier",
332
+ MsgSaveRow: "Enregistrer",
333
+ MsgCancelRowEdit: "Annuler",
334
+ MsgDeleteRow: "Supprimer",
335
+ MsgAddRow: "Ajouter une ligne",
336
+ MsgLoading: "Chargement…",
337
+ MsgDragRow: "Glisser pour réordonner la ligne",
338
+ MsgAutosizeColumn: "Double-cliquez pour ajuster la colonne au contenu",
339
+ MsgExpandDetail: "Développer les détails de la ligne",
340
+ MsgCollapseDetail: "Réduire les détails de la ligne",
341
+ MsgDeleteSelected: "Supprimer la sélection ({{count}})",
342
+ MsgValidationRequired: "Ce champ est obligatoire",
343
+ MsgValidationMin: "Doit être au moins {{min}}",
344
+ MsgValidationMax: "Doit être au plus {{max}}",
345
+ MsgValidationPattern: "Format invalide"
346
+ }, oe = {
347
+ MsgNoData: "Nessun dato",
348
+ MsgFirstPage: "Prima pagina",
349
+ MsgPreviousPage: "Pagina precedente",
350
+ MsgNextPage: "Pagina successiva",
351
+ MsgLastPage: "Ultima pagina",
352
+ MsgSortBy: "Ordina per {{column}}",
353
+ MsgPageOf: "Pagina {{page}} di {{total}}",
354
+ MsgFilterPlaceholder: "Cerca",
355
+ MsgFilterColumn: "Filtra {{column}}",
356
+ MsgFilterMin: "Min",
357
+ MsgFilterMax: "Max",
358
+ MsgFilterFrom: "Da",
359
+ MsgFilterTo: "A",
360
+ MsgAll: "Tutti",
361
+ MsgCancelFilter: "Annulla filtro",
362
+ MsgCancelAllFilters: "Cancella filtri",
363
+ MsgGroupByHint: "Trascina qui l'intestazione di una colonna per raggruppare per essa",
364
+ MsgGroupedBy: "Raggruppato per {{column}}",
365
+ MsgGroupHeader: "{{column}}: {{value}} ({{count}})",
366
+ MsgCancelGrouping: "Annulla raggruppamento",
367
+ MsgSelectAll: "Seleziona tutte le righe",
368
+ MsgSelectRow: "Seleziona riga {{index}}",
369
+ MsgExportCsv: "Esporta CSV",
370
+ MsgExportExcel: "Esporta Excel",
371
+ MsgExportPdf: "Esporta PDF",
372
+ MsgPrint: "Stampa",
373
+ MsgToggleColumns: "Colonne",
374
+ MsgToggleColumn: "Mostra/nascondi {{column}}",
375
+ MsgEditCell: "Modifica {{column}}",
376
+ MsgEditRow: "Modifica",
377
+ MsgSaveRow: "Salva",
378
+ MsgCancelRowEdit: "Annulla",
379
+ MsgDeleteRow: "Elimina",
380
+ MsgAddRow: "Aggiungi riga",
381
+ MsgLoading: "Caricamento…",
382
+ MsgDragRow: "Trascina per riordinare la riga",
383
+ MsgAutosizeColumn: "Doppio clic per adattare la colonna al contenuto",
384
+ MsgExpandDetail: "Espandi dettagli riga",
385
+ MsgCollapseDetail: "Comprimi dettagli riga",
386
+ MsgDeleteSelected: "Elimina selezionati ({{count}})",
387
+ MsgValidationRequired: "Questo campo è obbligatorio",
388
+ MsgValidationMin: "Deve essere almeno {{min}}",
389
+ MsgValidationMax: "Deve essere al massimo {{max}}",
390
+ MsgValidationPattern: "Formato non valido"
391
+ }, se = {
392
+ MsgNoData: "暂无数据",
393
+ MsgFirstPage: "首页",
394
+ MsgPreviousPage: "上一页",
395
+ MsgNextPage: "下一页",
396
+ MsgLastPage: "末页",
397
+ MsgSortBy: "按{{column}}排序",
398
+ MsgPageOf: "第 {{page}} 页,共 {{total}} 页",
399
+ MsgFilterPlaceholder: "搜索",
400
+ MsgFilterColumn: "筛选{{column}}",
401
+ MsgFilterMin: "最小",
402
+ MsgFilterMax: "最大",
403
+ MsgFilterFrom: "从",
404
+ MsgFilterTo: "到",
405
+ MsgAll: "全部",
406
+ MsgCancelFilter: "取消筛选",
407
+ MsgCancelAllFilters: "清除所有筛选",
408
+ MsgGroupByHint: "将列标题拖到此处以按其分组",
409
+ MsgGroupedBy: "按{{column}}分组",
410
+ MsgGroupHeader: "{{column}}: {{value}} ({{count}})",
411
+ MsgCancelGrouping: "取消分组",
412
+ MsgSelectAll: "选择所有行",
413
+ MsgSelectRow: "选择第 {{index}} 行",
414
+ MsgExportCsv: "导出 CSV",
415
+ MsgExportExcel: "导出 Excel",
416
+ MsgExportPdf: "导出 PDF",
417
+ MsgPrint: "打印",
418
+ MsgToggleColumns: "列",
419
+ MsgToggleColumn: "显示/隐藏{{column}}",
420
+ MsgEditCell: "编辑{{column}}",
421
+ MsgEditRow: "编辑",
422
+ MsgSaveRow: "保存",
423
+ MsgCancelRowEdit: "取消",
424
+ MsgDeleteRow: "删除",
425
+ MsgAddRow: "添加行",
426
+ MsgLoading: "加载中…",
427
+ MsgDragRow: "拖动以重新排序行",
428
+ MsgAutosizeColumn: "双击以使列适应内容",
429
+ MsgExpandDetail: "展开行详情",
430
+ MsgCollapseDetail: "收起行详情",
431
+ MsgDeleteSelected: "删除所选 ({{count}})",
432
+ MsgValidationRequired: "此字段为必填项",
433
+ MsgValidationMin: "不得小于 {{min}}",
434
+ MsgValidationMax: "不得大于 {{max}}",
435
+ MsgValidationPattern: "格式无效"
436
+ }, w = {
437
+ en: x,
438
+ es: S,
439
+ fr: C,
440
+ it: oe,
441
+ zh: se
442
+ };
443
+ //#endregion
444
+ //#region src/utils/translate.ts
445
+ function T(e, t) {
446
+ return t ? e.replace(/\{\{(\w+)\}\}/g, (e, n) => n in t ? String(t[n]) : e) : e;
447
+ }
448
+ function ce(e) {
449
+ let t = w[e.split("-")[0]] ?? x;
450
+ return (e, n) => T(t[e] ?? x[e], n);
451
+ }
452
+ //#endregion
453
+ //#region src/hooks/useInanduGrid.ts
454
+ function le(e) {
455
+ return {
456
+ field: () => e.field,
457
+ type: () => e.type ?? "string",
458
+ format: () => e.format ?? "",
459
+ order: () => e.order,
460
+ aggregate: () => e.aggregate ?? ""
461
+ };
462
+ }
463
+ function ue({ rows: i, columns: a, locale: o = "en", lang: s, pageSize: c = 0, selectable: u = !1, deleteConfirmMessage: d, bulkDeleteConfirmMessage: g, onRowSave: re, onRowCreate: ie, onRowDelete: y, onRowsDelete: ae, onCellsPaste: b, onRowOrderChange: x, treeChildrenKey: S, treeDefaultExpanded: C = "none", singleDetailExpand: oe = !1, virtualScroll: se = !1, extraRowFilter: w }) {
464
+ let [T, ue] = r([]), [E, D] = r({}), [O, de] = r(""), [fe, k] = r(0), [A, pe] = r(void 0), [j, me] = r(/* @__PURE__ */ new Set()), [M, he] = r(void 0), [ge, _e] = r(!1), [N, P] = r({}), [F, I] = r({}), [ve, ye] = r(!1), [L, be] = r(/* @__PURE__ */ new Set()), [xe, Se] = r(void 0), [Ce, R] = r(void 0), [z, we] = r({}), [Te, Ee] = r({}), [De, Oe] = r(void 0), [ke, B] = r(/* @__PURE__ */ new Set()), [Ae, V] = r(/* @__PURE__ */ new Set()), je = n(void 0), H = t(() => ce(s ?? o), [s, o]), U = t(() => {
465
+ if (!xe) return a;
466
+ let e = new Map(a.map((e) => [e.field, e])), t = [];
467
+ for (let n of xe) {
468
+ let r = e.get(n);
469
+ r && (t.push(r), e.delete(n));
470
+ }
471
+ return t.push(...e.values()), t;
472
+ }, [a, xe]), W = t(() => L.size === 0 ? U : U.filter((e) => !L.has(e.field)), [U, L]), Me = t(() => U.filter((e) => e.hideable !== !1), [U]);
473
+ function Ne(e) {
474
+ let t = U.map((e) => e.field), n = new Set(t), r = e.filter((e) => n.has(e)), i = new Set(r), a = t.filter((e) => !i.has(e));
475
+ Se([...r, ...a]);
476
+ }
477
+ function Pe(e) {
478
+ R(e);
479
+ }
480
+ function Fe(e) {
481
+ let t = Ce;
482
+ if (R(void 0), !t || t === e) return;
483
+ let n = U.find((e) => e.field === t);
484
+ if (!n || n.reorder === !1) return;
485
+ let r = U.map((e) => e.field), i = r.indexOf(t), a = r.indexOf(e);
486
+ i !== -1 && a !== -1 && (r.splice(i, 1), i < a && a--, r.splice(a, 0, t), Ne(r));
487
+ }
488
+ function Ie(e) {
489
+ return L.has(e);
490
+ }
491
+ function Le(e) {
492
+ if (L.has(e)) {
493
+ be((t) => {
494
+ let n = new Set(t);
495
+ return n.delete(e), n;
496
+ });
497
+ return;
498
+ }
499
+ W.length <= 1 || be((t) => new Set(t).add(e));
500
+ }
501
+ let Re = t(() => W.filter((e) => e.editable), [W]);
502
+ function ze(e) {
503
+ k(0), de(e);
504
+ }
505
+ let G = t(() => new Map(W.map((e) => [e.field, le(e)])), [W]), K = t(() => W.filter((e) => e.aggregate).map((e) => G.get(e.field)), [W, G]);
506
+ function Be(e, t) {
507
+ k(0), D((n) => ({
508
+ ...n,
509
+ [e]: t
510
+ }));
511
+ }
512
+ function Ve() {
513
+ k(0), D({});
514
+ }
515
+ let q = t(() => {
516
+ let e = i, t = O.trim().toLowerCase();
517
+ t && (e = e.filter((e) => W.some((n) => {
518
+ let r = G.get(n.field);
519
+ return f(e[n.field], r.type(), r.format(), o).toLowerCase().includes(t);
520
+ })));
521
+ let n = Object.entries(E).filter(([, e]) => m(e));
522
+ return n.length > 0 && (e = e.filter((e) => n.every(([t, n]) => {
523
+ let r = G.get(t);
524
+ return !r || h(r, e, n, o);
525
+ }))), w && (e = e.filter(w)), T.length > 0 && (e = [...e].sort((e, t) => {
526
+ for (let { field: n, direction: r } of T) {
527
+ let i = r === "asc" ? 1 : -1, a = p(e[n], t[n], o) * i;
528
+ if (a !== 0) return a;
529
+ }
530
+ return 0;
531
+ })), e;
532
+ }, [
533
+ i,
534
+ W,
535
+ G,
536
+ O,
537
+ E,
538
+ T,
539
+ o,
540
+ w
541
+ ]), He = t(() => {
542
+ if (!A) return null;
543
+ let e = G.get(A);
544
+ if (!e) return null;
545
+ let t = /* @__PURE__ */ new Map();
546
+ for (let n of q) {
547
+ let r = f(n[A], e.type(), e.format(), o), i = t.get(r);
548
+ i ? i.push(n) : t.set(r, [n]);
549
+ }
550
+ return Array.from(t.entries()).map(([e, t]) => ({
551
+ key: e,
552
+ rows: t,
553
+ aggregates: _(t, K)
554
+ }));
555
+ }, [
556
+ q,
557
+ A,
558
+ G,
559
+ K,
560
+ o
561
+ ]), Ue = t(() => _(q, K), [q, K]), J = !!S && !A && !se;
562
+ function Y(e) {
563
+ let t = S ? e[S] : void 0;
564
+ return Array.isArray(t) ? t : void 0;
565
+ }
566
+ let We = t(() => {
567
+ if (!J) return [];
568
+ let e = O.trim().toLowerCase(), t = Object.entries(E).filter(([, e]) => m(e));
569
+ return ee(i, {
570
+ getChildren: Y,
571
+ isExpanded: (e) => ke.has(e),
572
+ match: e || t.length > 0 || w ? (n) => e && !W.some((t) => {
573
+ let r = G.get(t.field);
574
+ return f(n[t.field], r.type(), r.format(), o).toLowerCase().includes(e);
575
+ }) || !t.every(([e, t]) => {
576
+ let r = G.get(e);
577
+ return !r || h(r, n, t, o);
578
+ }) ? !1 : !w || w(n) : void 0,
579
+ compare: T.length > 0 ? (e, t) => {
580
+ for (let { field: n, direction: r } of T) {
581
+ let i = p(e[n], t[n], o) * (r === "asc" ? 1 : -1);
582
+ if (i !== 0) return i;
583
+ }
584
+ return 0;
585
+ } : void 0
586
+ });
587
+ }, [
588
+ J,
589
+ i,
590
+ S,
591
+ W,
592
+ G,
593
+ O,
594
+ E,
595
+ T,
596
+ ke,
597
+ o,
598
+ w
599
+ ]);
600
+ e(() => {
601
+ if (!J || je.current === i) return;
602
+ if (je.current = i, C === "none") {
603
+ B(/* @__PURE__ */ new Set());
604
+ return;
605
+ }
606
+ let e = /* @__PURE__ */ new Set();
607
+ if (C === "all") for (let t of te(i, Y)) Y(t)?.length && e.add(t);
608
+ else {
609
+ let t = (n, r) => {
610
+ if (!(r >= C)) for (let i of n) {
611
+ let n = Y(i);
612
+ n?.length && (e.add(i), t(n, r + 1));
613
+ }
614
+ };
615
+ t(i, 0);
616
+ }
617
+ B(e);
618
+ }, [
619
+ J,
620
+ i,
621
+ C
622
+ ]);
623
+ function Ge(e) {
624
+ return ke.has(e);
625
+ }
626
+ function Ke(e) {
627
+ B((t) => {
628
+ let n = new Set(t);
629
+ return n.has(e) ? n.delete(e) : n.add(e), n;
630
+ });
631
+ }
632
+ function qe(e) {
633
+ if (!e) {
634
+ B(/* @__PURE__ */ new Set());
635
+ return;
636
+ }
637
+ let t = /* @__PURE__ */ new Set();
638
+ for (let e of te(i, Y)) Y(e)?.length && t.add(e);
639
+ B(t);
640
+ }
641
+ let Je = se && !A, Ye = c > 0 && !A && !J && !Je, Xe = Ye ? Math.max(1, Math.ceil(q.length / c)) : 1, Ze = Math.min(fe, Xe - 1), Qe = t(() => {
642
+ if (J) return We.map((e) => e.row);
643
+ if (!Ye) return q;
644
+ let e = Ze * c;
645
+ return q.slice(e, e + c);
646
+ }, [
647
+ J,
648
+ We,
649
+ q,
650
+ Ye,
651
+ c,
652
+ Ze
653
+ ]), $e = A ? q : Qe;
654
+ function et(e) {
655
+ return j.has(e);
656
+ }
657
+ function tt(e) {
658
+ me((t) => {
659
+ let n = new Set(t);
660
+ return n.has(e) ? n.delete(e) : n.add(e), n;
661
+ });
662
+ }
663
+ let nt = $e.length > 0 && $e.every((e) => j.has(e)), rt = !nt && $e.some((e) => j.has(e));
664
+ function it() {
665
+ let e = !nt;
666
+ me((t) => {
667
+ let n = new Set(t);
668
+ for (let t of $e) e ? n.add(t) : n.delete(t);
669
+ return n;
670
+ });
671
+ }
672
+ function at() {
673
+ me(/* @__PURE__ */ new Set());
674
+ }
675
+ function ot(e, t = !1) {
676
+ k(0), ue((n) => {
677
+ let r = n.findIndex((t) => t.field === e);
678
+ if (t) {
679
+ if (r === -1) return [...n, {
680
+ field: e,
681
+ direction: "asc"
682
+ }];
683
+ let t = [...n];
684
+ return t[r] = {
685
+ field: e,
686
+ direction: n[r].direction === "asc" ? "desc" : "asc"
687
+ }, t;
688
+ }
689
+ return n.length === 1 && n[0].field === e ? [{
690
+ field: e,
691
+ direction: n[0].direction === "asc" ? "desc" : "asc"
692
+ }] : [{
693
+ field: e,
694
+ direction: "asc"
695
+ }];
696
+ });
697
+ }
698
+ function st(e) {
699
+ return T.find((t) => t.field === e)?.direction;
700
+ }
701
+ function ct(e) {
702
+ if (T.length < 2) return;
703
+ let t = T.findIndex((t) => t.field === e);
704
+ return t === -1 ? void 0 : t + 1;
705
+ }
706
+ function lt(e) {
707
+ return M === e;
708
+ }
709
+ function ut(e) {
710
+ return ge ? !0 : M !== void 0 && M !== e;
711
+ }
712
+ function X(e, t) {
713
+ let n = t.type ?? "string";
714
+ if (n === "boolean") return !!e[t.field];
715
+ if (n === "date") {
716
+ let n = l(e[t.field]);
717
+ if (Number.isNaN(n.getTime())) return "";
718
+ let r = (e) => String(e).padStart(2, "0");
719
+ return `${n.getFullYear()}-${r(n.getMonth() + 1)}-${r(n.getDate())}`;
720
+ }
721
+ let r = e[t.field];
722
+ return r == null ? "" : String(r);
723
+ }
724
+ function Z(e) {
725
+ let t = {};
726
+ for (let n of Re) t[n.field] = X(e, n);
727
+ he(e), P(t), I({});
728
+ }
729
+ function dt() {
730
+ he(void 0), P({}), I({});
731
+ }
732
+ function ft(e, t) {
733
+ P((n) => ({
734
+ ...n,
735
+ [e]: t
736
+ }));
737
+ }
738
+ function pt(e, t, n, r) {
739
+ if (e.required && (t === "" || t == null)) return H("MsgValidationRequired");
740
+ if ((e.type ?? "string") === "number" && typeof n == "number") {
741
+ if (e.min !== void 0 && n < e.min) return H("MsgValidationMin", { min: e.min });
742
+ if (e.max !== void 0 && n > e.max) return H("MsgValidationMax", { max: e.max });
743
+ }
744
+ if (e.pattern && typeof t == "string" && t !== "") {
745
+ let n;
746
+ try {
747
+ n = new RegExp(e.pattern);
748
+ } catch {
749
+ n = void 0;
750
+ }
751
+ if (n && !n.test(t)) return H("MsgValidationPattern");
752
+ }
753
+ return e.validator ? e.validator(n, r) : null;
754
+ }
755
+ function mt(e, t, n = {}) {
756
+ return pt(e, t, t, n);
757
+ }
758
+ async function Q(e) {
759
+ let t = {};
760
+ for (let n of Re) t[n.field] = v(e[n.field], n.type ?? "string");
761
+ let n = {}, r = {}, i = [];
762
+ for (let a of Re) {
763
+ let o = a.field, s = pt(a, e[o], t[o], t);
764
+ if (s) {
765
+ n[o] = s;
766
+ continue;
767
+ }
768
+ if (!a.asyncValidator) {
769
+ t[o] !== void 0 && (r[o] = t[o]);
770
+ continue;
771
+ }
772
+ i.push(a.asyncValidator(t[o], t).then((e) => {
773
+ e ? n[o] = e : t[o] !== void 0 && (r[o] = t[o]);
774
+ }));
775
+ }
776
+ if (i.length > 0) {
777
+ ye(!0);
778
+ try {
779
+ await Promise.all(i);
780
+ } finally {
781
+ ye(!1);
782
+ }
783
+ }
784
+ return {
785
+ errors: n,
786
+ values: r
787
+ };
788
+ }
789
+ async function ht(e) {
790
+ if (M !== e) return;
791
+ let { errors: t, values: n } = await Q(N);
792
+ if (M === e) {
793
+ if (Object.keys(t).length > 0) {
794
+ I(t);
795
+ return;
796
+ }
797
+ he(void 0), P({}), I({}), re?.({
798
+ row: e,
799
+ values: n
800
+ });
801
+ }
802
+ }
803
+ function gt(e) {
804
+ (!d || window.confirm(d)) && y?.(e);
805
+ }
806
+ function _t() {
807
+ if (g && !window.confirm(g)) return;
808
+ let e = Array.from(j);
809
+ at(), ae?.(e);
810
+ }
811
+ function vt() {
812
+ _e(!0), P({}), I({});
813
+ }
814
+ function yt() {
815
+ _e(!1), P({}), I({});
816
+ }
817
+ async function bt() {
818
+ if (!ge) return;
819
+ let { errors: e, values: t } = await Q(N);
820
+ if (ge) {
821
+ if (Object.keys(e).length > 0) {
822
+ I(e);
823
+ return;
824
+ }
825
+ _e(!1), P({}), I({}), ie?.(t);
826
+ }
827
+ }
828
+ function xt(e, t) {
829
+ let n = Qe[e], r = G.get(t);
830
+ return !n || !r ? "" : f(n[t], r.type(), r.format(), o);
831
+ }
832
+ function St(e, t, n) {
833
+ let r = W.findIndex((e) => e.field === t);
834
+ if (e === -1 || r === -1) return;
835
+ let i = [];
836
+ n.replace(/\r\n$|\r$|\n$/, "").split(/\r\n|\r|\n/).map((e) => e.split(" ")).forEach((t, n) => {
837
+ let a = Qe[e + n];
838
+ a && t.forEach((e, t) => {
839
+ let n = W[r + t];
840
+ n && n.editable && i.push({
841
+ row: a,
842
+ field: n.field,
843
+ value: ne(e, n.type ?? "string")
844
+ });
845
+ });
846
+ }), i.length > 0 && b?.(i);
847
+ }
848
+ function Ct(e) {
849
+ return z[e] === void 0 ? U.find((t) => t.field === e)?.width ?? 80 : z[e];
850
+ }
851
+ function wt(e) {
852
+ return z[e] !== void 0;
853
+ }
854
+ function Tt(e, t) {
855
+ U.some((t) => t.field === e) && we((n) => ({
856
+ ...n,
857
+ [e]: Math.max(30, t)
858
+ }));
859
+ }
860
+ function Et(e) {
861
+ Oe(e);
862
+ }
863
+ function $(e) {
864
+ return Ae.has(e);
865
+ }
866
+ function Dt(e) {
867
+ V((t) => {
868
+ let n = oe ? /* @__PURE__ */ new Set() : new Set(t);
869
+ return t.has(e) ? n.delete(e) : n.add(e), n;
870
+ });
871
+ }
872
+ function Ot(e) {
873
+ let t = De;
874
+ if (Oe(void 0), !t || t === e) return;
875
+ let n = [...q], r = n.indexOf(t), i = n.indexOf(e);
876
+ r !== -1 && i !== -1 && (n.splice(r, 1), r < i && i--, n.splice(i, 0, t), x?.(n));
877
+ }
878
+ function kt(e) {
879
+ let t = Te[e];
880
+ if (t === "left" || t === "right") return t;
881
+ if (t !== "none") return U.find((t) => t.field === e)?.pinned;
882
+ }
883
+ function At(e, t) {
884
+ Ee((n) => ({
885
+ ...n,
886
+ [e]: t ?? "none"
887
+ }));
888
+ }
889
+ function jt(e) {
890
+ let t = u ? 36 : 0;
891
+ for (let n of W) {
892
+ if (n.field === e) break;
893
+ kt(n.field) === "left" && (t += Ct(n.field));
894
+ }
895
+ return t;
896
+ }
897
+ function Mt(e) {
898
+ let t = 0, n = !1;
899
+ for (let r of W) {
900
+ if (r.field === e) {
901
+ n = !0;
902
+ continue;
903
+ }
904
+ n && kt(r.field) === "right" && (t += Ct(r.field));
905
+ }
906
+ return t;
907
+ }
908
+ return {
909
+ visibleColumns: W,
910
+ allColumns: U,
911
+ stickyOffset: jt,
912
+ stickyOffsetRight: Mt,
913
+ columnPinnedSide: kt,
914
+ setColumnPinned: At,
915
+ hideableColumns: Me,
916
+ isColumnHidden: Ie,
917
+ toggleColumnVisibility: Le,
918
+ setColumnOrder: Ne,
919
+ draggingField: Ce,
920
+ onColumnDragStart: Pe,
921
+ onColumnDrop: Fe,
922
+ effectiveWidth: Ct,
923
+ isColumnResized: wt,
924
+ setColumnWidth: Tt,
925
+ draggingRow: De,
926
+ onRowDragStart: Et,
927
+ onRowDrop: Ot,
928
+ hasTreeData: J,
929
+ treeRows: We,
930
+ isTreeRowExpanded: Ge,
931
+ toggleTreeRow: Ke,
932
+ setAllTreeRowsExpanded: qe,
933
+ isRowExpanded: $,
934
+ toggleRowExpanded: Dt,
935
+ hasVirtualScroll: Je,
936
+ visibleRows: Qe,
937
+ exportRows: $e,
938
+ sortedRows: q,
939
+ filteredRowCount: q.length,
940
+ locale: o,
941
+ sortCriteria: T,
942
+ setSort: ue,
943
+ toggleSort: ot,
944
+ sortDirectionFor: st,
945
+ sortPriorityFor: ct,
946
+ filterValues: E,
947
+ setFilterValue: Be,
948
+ clearAllFilters: Ve,
949
+ filterQuery: O,
950
+ setFilterQuery: ze,
951
+ page: Ze,
952
+ setPage: k,
953
+ pageCount: Ye ? Xe : 1,
954
+ groupByField: A,
955
+ setGroupByField: pe,
956
+ groups: He,
957
+ totals: Ue,
958
+ selectedRows: j,
959
+ isRowSelected: et,
960
+ toggleRowSelection: tt,
961
+ allSelected: nt,
962
+ someSelected: rt,
963
+ toggleSelectAll: it,
964
+ clearSelection: at,
965
+ editableColumns: Re,
966
+ editingRow: M,
967
+ isAddingRow: ge,
968
+ rowDraft: N,
969
+ fieldErrors: F,
970
+ isValidating: ve,
971
+ isEditingRow: lt,
972
+ isAnotherRowEditing: ut,
973
+ startEditingRow: Z,
974
+ cancelRowEdit: dt,
975
+ setRowDraftValue: ft,
976
+ saveRow: ht,
977
+ deleteRow: gt,
978
+ deleteSelectedRows: _t,
979
+ startAddingRow: vt,
980
+ cancelAddRow: yt,
981
+ saveNewRow: bt,
982
+ validateCell: mt,
983
+ copyCellText: xt,
984
+ pasteAt: St
985
+ };
986
+ }
987
+ //#endregion
988
+ //#region src/utils/exporters.ts
989
+ function E(e) {
990
+ return e.headerText || e.field;
991
+ }
992
+ function D(e, t, n) {
993
+ return f(t[e.field], e.type ?? "string", e.format ?? "", n);
994
+ }
995
+ function O(e, t, n) {
996
+ return "" + [t.map((e) => ie(E(e))).join(","), ...e.map((e) => t.map((t) => ie(D(t, e, n))).join(","))].join("\r\n");
997
+ }
998
+ function de(e, t, n, r = "inandu-grid") {
999
+ b(O(e, t, n), `${r}-export.csv`, "text/csv;charset=utf-8;");
1000
+ }
1001
+ function fe(e, t, n) {
1002
+ let r = (e, t) => {
1003
+ let n = t[e.field];
1004
+ return e.type === "number" && typeof n == "number" && Number.isFinite(n) ? n : void 0;
1005
+ }, i = (e, t) => {
1006
+ let i = r(e, t);
1007
+ return i === void 0 ? `<Cell><Data ss:Type="String">${y(D(e, t, n))}</Data></Cell>` : `<Cell><Data ss:Type="Number">${i}</Data></Cell>`;
1008
+ }, a = `<Row ss:StyleID="header">${t.map((e) => `<Cell><Data ss:Type="String">${y(E(e))}</Data></Cell>`).join("")}</Row>`, o = e.map((e) => `<Row>${t.map((t) => i(t, e)).join("")}</Row>`).join("");
1009
+ return "<?xml version=\"1.0\"?><?mso-application progid=\"Excel.Sheet\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"header\"><Font ss:Bold=\"1\"/></Style></Styles><Worksheet ss:Name=\"Sheet1\"><Table>" + a + o + "</Table></Worksheet></Workbook>";
1010
+ }
1011
+ function k(e, t, n, r = "inandu-grid") {
1012
+ b(fe(e, t, n), `${r}-export.xls`, "application/vnd.ms-excel");
1013
+ }
1014
+ function A(e, t, n, r = "inandu-grid") {
1015
+ let i = t.map((e) => `<th>${y(E(e))}</th>`).join(""), a = e.map((e) => `<tr>${t.map((t) => `<td>${y(D(t, e, n))}</td>`).join("")}</tr>`).join(""), o = `<!doctype html><html><head><meta charset="utf-8"><title>${y(r)}</title><style>table{border-collapse:collapse;width:100%}th,td{border:1px solid #333;padding:4px 8px;text-align:left}th{background:#eee}</style></head><body><table><thead><tr>${i}</tr></thead><tbody>${a}</tbody></table></body></html>`, s = window.open("", "_blank");
1016
+ s && (s.document.write(o), s.document.close(), s.focus(), setTimeout(() => s.print(), 0));
1017
+ }
1018
+ async function pe(e, t, n, r = "inandu-grid") {
1019
+ let { jsPDF: i } = await import("./jspdf.es.min-DiTFVZBc.js"), a = t.map(E), o = new i({ orientation: "landscape" }), s = o.internal.pageSize.getWidth() - 20, c = o.internal.pageSize.getHeight() - 10, l = s / (t.length || 1), u = 10, d = (e, t) => {
1020
+ o.setFont("helvetica", t ? "bold" : "normal");
1021
+ let n = 10;
1022
+ e.forEach((e) => {
1023
+ o.text(ae(o, e, l - 4), n + 2, u + 6), n += l;
1024
+ }), u += 8;
1025
+ };
1026
+ d(a, !0);
1027
+ for (let r of e) u + 8 > c && (o.addPage(), u = 10, d(a, !0)), d(t.map((e) => D(e, r, n)), !1);
1028
+ b(o.output("blob"), `${r}-export.pdf`);
1029
+ }
1030
+ //#endregion
1031
+ //#region src/utils/measureColumn.ts
1032
+ function j(e, t, n) {
1033
+ let r = typeof CSS < "u" && CSS.escape ? CSS.escape(t) : re(t), i = Array.from(e.querySelectorAll(`td[data-field="${r}"]`)), a = e.querySelector(`th[data-field="${r}"]`), o = i[0] ?? a ?? e, s = getComputedStyle(o), c = document.createElement("span");
1034
+ c.style.cssText = "position:absolute;left:-9999px;top:-9999px;visibility:hidden;white-space:pre;pointer-events:none", c.style.font = s.font || `${s.fontStyle} ${s.fontWeight} ${s.fontSize}/${s.lineHeight} ${s.fontFamily}`, c.style.letterSpacing = s.letterSpacing, document.body.appendChild(c);
1035
+ let l = (parseFloat(s.paddingLeft) || 0) + (parseFloat(s.paddingRight) || 0) + 2, u = 0;
1036
+ c.textContent = n || t, u = Math.max(u, c.offsetWidth + 44);
1037
+ for (let e of i) c.textContent = (e.textContent ?? "").replace(/\s+/g, " ").trim(), u = Math.max(u, c.offsetWidth + l);
1038
+ return c.remove(), i.length || a ? Math.ceil(u) : 0;
1039
+ }
1040
+ //#endregion
1041
+ //#region src/components/InanduGrid.tsx
1042
+ function me({ rows: s, columns: c, locale: l = "en", lang: u, pageSize: d = 0, selectable: p = !1, onSelectionChange: ee, exportable: te = !1, exportFilenameBase: m = "inandu-grid", deletable: h = !1, deleteConfirmMessage: _, bulkDeleteConfirmMessage: v, creatable: ne = !1, onRowSave: re, onRowCreate: ie, onRowDelete: y, onRowsDelete: ae, clipboard: b = !1, onCellsPaste: x, columnToggle: S = !1, rowReorder: C = !1, onRowOrderChange: oe, treeChildrenKey: se, treeDefaultExpanded: w = "none", renderDetail: T, singleDetailExpand: le = !1, extraRowFilter: E, virtualScroll: D = !1, virtualRowHeight: O = 40, height: fe = 400, overscan: me = 4, autosize: N = !1 }) {
1043
+ let { visibleColumns: F, hideableColumns: I, isColumnHidden: ve, toggleColumnVisibility: ye, onColumnDragStart: L, onColumnDrop: be, effectiveWidth: xe, isColumnResized: Se, setColumnWidth: Ce, visibleRows: R, exportRows: z, filteredRowCount: we, toggleSort: Te, sortDirectionFor: Ee, sortPriorityFor: De, filterValues: Oe, setFilterValue: ke, filterQuery: B, setFilterQuery: Ae, page: V, setPage: je, pageCount: H, groupByField: U, setGroupByField: W, groups: Me, totals: Ne, selectedRows: Pe, isRowSelected: Fe, toggleRowSelection: Ie, allSelected: Le, someSelected: Re, toggleSelectAll: ze, editableColumns: G, isAddingRow: K, rowDraft: Be, fieldErrors: Ve, isValidating: q, isEditingRow: He, isAnotherRowEditing: Ue, startEditingRow: J, cancelRowEdit: Y, setRowDraftValue: We, saveRow: Ge, deleteRow: Ke, deleteSelectedRows: qe, startAddingRow: Je, cancelAddRow: Ye, saveNewRow: Xe, copyCellText: Ze, pasteAt: Qe, stickyOffset: $e, stickyOffsetRight: et, columnPinnedSide: tt, draggingRow: nt, onRowDragStart: rt, onRowDrop: it, hasTreeData: at, treeRows: ot, isTreeRowExpanded: st, toggleTreeRow: ct, isRowExpanded: lt, toggleRowExpanded: ut, hasVirtualScroll: X } = ue({
1044
+ rows: s,
1045
+ columns: c,
1046
+ locale: l,
1047
+ lang: u,
1048
+ pageSize: d,
1049
+ selectable: p,
1050
+ deleteConfirmMessage: _,
1051
+ bulkDeleteConfirmMessage: v,
1052
+ onRowSave: re,
1053
+ onRowCreate: ie,
1054
+ onRowDelete: y,
1055
+ onRowsDelete: ae,
1056
+ onCellsPaste: x,
1057
+ onRowOrderChange: oe,
1058
+ treeChildrenKey: se,
1059
+ treeDefaultExpanded: w,
1060
+ singleDetailExpand: le,
1061
+ extraRowFilter: E,
1062
+ virtualScroll: D
1063
+ }), Z = t(() => ce(u ?? l), [u, l]), [dt, ft] = r(void 0), [pt, mt] = r(void 0), [Q, ht] = r(null), [gt, _t] = r(0), vt = n(null);
1064
+ e(() => {
1065
+ ee?.(Array.from(Pe));
1066
+ }, [Pe, ee]), e(() => {
1067
+ if (!Q) return;
1068
+ let e = (e) => {
1069
+ Ce(Q.field, Q.startWidth + (e.clientX - Q.startX));
1070
+ }, t = () => ht(null);
1071
+ return window.addEventListener("mousemove", e), window.addEventListener("mouseup", t), () => {
1072
+ window.removeEventListener("mousemove", e), window.removeEventListener("mouseup", t);
1073
+ };
1074
+ }, [Q, Ce]);
1075
+ function yt(e, t) {
1076
+ e.preventDefault(), ht({
1077
+ field: t,
1078
+ startX: e.clientX,
1079
+ startWidth: xe(t)
1080
+ });
1081
+ }
1082
+ function bt(e, t) {
1083
+ if (!N || !vt.current) return;
1084
+ e.preventDefault(), e.stopPropagation();
1085
+ let n = j(vt.current, t.field, t.headerText ?? t.field);
1086
+ n > 0 && Ce(t.field, Math.min(600, n));
1087
+ }
1088
+ let xt = F.filter((e) => e.aggregate), St = F.filter((e) => e.groupable !== !1), Ct = Me ? Me.length === 0 : R.length === 0, wt = G.length > 0 || h || ne, Tt = C && !U && !X, Et = !!T && !U && !X, $ = +!!Et + +!!Tt + +!!p + +!!wt, Dt = X ? Math.max(0, Math.floor(gt / O) - me) : 0, Ot = X ? Math.min(R.length, Math.ceil((gt + fe) / O) + me) : R.length, kt = X ? R.slice(Dt, Ot) : R, At = Dt * O, jt = (R.length - Ot) * O;
1089
+ function Mt(e, t) {
1090
+ ke(e, {
1091
+ ...Oe[e],
1092
+ ...t
1093
+ });
1094
+ }
1095
+ function Nt(e) {
1096
+ let t = e.width !== void 0 || Se(e.field) ? { width: xe(e.field) } : {}, n = tt(e.field);
1097
+ return n === "left" ? {
1098
+ ...t,
1099
+ position: "sticky",
1100
+ left: $e(e.field),
1101
+ zIndex: 1
1102
+ } : n === "right" ? {
1103
+ ...t,
1104
+ position: "sticky",
1105
+ right: et(e.field),
1106
+ zIndex: 1
1107
+ } : t;
1108
+ }
1109
+ function Pt(e, t) {
1110
+ L(t), e.dataTransfer.setData("text/plain", t);
1111
+ }
1112
+ function Ft(e, t) {
1113
+ e.preventDefault(), ft(t);
1114
+ }
1115
+ function It(e, t) {
1116
+ e.preventDefault(), ft(void 0), be(t);
1117
+ }
1118
+ let Lt = p ? {
1119
+ position: "sticky",
1120
+ left: 0,
1121
+ zIndex: 1
1122
+ } : void 0;
1123
+ function Rt(e, t) {
1124
+ let n = e.aggregate, r = t[e.field];
1125
+ if (!n || r === void 0) return "";
1126
+ let i = n === "count" ? String(r) : f(r, "number", e.format ?? "", l);
1127
+ return `${e.headerText ?? e.field} ${g[n]}: ${i}`;
1128
+ }
1129
+ function zt(e) {
1130
+ if (!b || !(e.ctrlKey || e.metaKey)) return;
1131
+ let t = e.key.toLowerCase();
1132
+ if (t !== "c" && t !== "v") return;
1133
+ let n = e.target;
1134
+ if (n instanceof HTMLInputElement || n instanceof HTMLTextAreaElement || n instanceof HTMLSelectElement) return;
1135
+ let r = n.closest("td[data-field]"), i = r?.getAttribute("data-field"), a = r?.closest("tr")?.getAttribute("data-row-index");
1136
+ if (!r || !i || a == null) return;
1137
+ let o = Number(a);
1138
+ e.preventDefault(), t === "c" ? navigator.clipboard?.writeText(Ze(o, i))?.catch(() => void 0) : navigator.clipboard?.readText()?.then((e) => Qe(o, i, e)).catch(() => void 0);
1139
+ }
1140
+ let Bt = {
1141
+ columns: F,
1142
+ locale: l,
1143
+ t: Z,
1144
+ selectable: p,
1145
+ selectColumnStyle: Lt,
1146
+ columnStyle: Nt,
1147
+ isRowSelected: Fe,
1148
+ toggleRowSelection: Ie,
1149
+ hasRowActions: wt,
1150
+ editableColumns: G,
1151
+ isEditingRow: He,
1152
+ isAnotherRowEditing: Ue,
1153
+ startEditingRow: J,
1154
+ cancelRowEdit: Y,
1155
+ saveRow: Ge,
1156
+ deleteRow: Ke,
1157
+ deletable: h,
1158
+ rowDraft: Be,
1159
+ fieldErrors: Ve,
1160
+ isValidating: q,
1161
+ setRowDraftValue: We
1162
+ };
1163
+ return /* @__PURE__ */ o("div", {
1164
+ className: "inandu-grid-react",
1165
+ children: [
1166
+ /* @__PURE__ */ a("div", {
1167
+ className: "inandu-grid-search",
1168
+ children: /* @__PURE__ */ a("input", {
1169
+ "aria-label": Z("MsgFilterPlaceholder"),
1170
+ type: "text",
1171
+ placeholder: `${Z("MsgFilterPlaceholder")}…`,
1172
+ value: B,
1173
+ onChange: (e) => Ae(e.target.value)
1174
+ })
1175
+ }),
1176
+ /* @__PURE__ */ o("div", {
1177
+ className: "inandu-grid-toolbar",
1178
+ children: [
1179
+ te && /* @__PURE__ */ o(i, { children: [
1180
+ /* @__PURE__ */ a("button", {
1181
+ type: "button",
1182
+ onClick: () => de(z, F, l, m),
1183
+ children: Z("MsgExportCsv")
1184
+ }),
1185
+ /* @__PURE__ */ a("button", {
1186
+ type: "button",
1187
+ onClick: () => k(z, F, l, m),
1188
+ children: Z("MsgExportExcel")
1189
+ }),
1190
+ /* @__PURE__ */ a("button", {
1191
+ type: "button",
1192
+ onClick: () => void pe(z, F, l, m),
1193
+ children: Z("MsgExportPdf")
1194
+ }),
1195
+ /* @__PURE__ */ a("button", {
1196
+ type: "button",
1197
+ onClick: () => A(z, F, l, m),
1198
+ children: Z("MsgPrint")
1199
+ })
1200
+ ] }),
1201
+ ne && G.length > 0 && !K && /* @__PURE__ */ a("button", {
1202
+ type: "button",
1203
+ onClick: Je,
1204
+ children: Z("MsgAddRow")
1205
+ }),
1206
+ p && h && Pe.size > 0 && /* @__PURE__ */ a("button", {
1207
+ type: "button",
1208
+ onClick: qe,
1209
+ children: Z("MsgDeleteSelected", { count: Pe.size })
1210
+ }),
1211
+ S && /* @__PURE__ */ o("details", {
1212
+ className: "inandu-grid-column-toggle",
1213
+ children: [/* @__PURE__ */ a("summary", { children: Z("MsgToggleColumns") }), /* @__PURE__ */ a("ul", { children: I.map((e) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ o("label", { children: [
1214
+ /* @__PURE__ */ a("input", {
1215
+ "aria-label": Z("MsgToggleColumn", { column: e.headerText ?? e.field }),
1216
+ type: "checkbox",
1217
+ checked: !ve(e.field),
1218
+ onChange: () => ye(e.field)
1219
+ }),
1220
+ " ",
1221
+ e.headerText ?? e.field
1222
+ ] }) }, e.field)) })]
1223
+ })
1224
+ ]
1225
+ }),
1226
+ St.length > 0 && /* @__PURE__ */ a("div", {
1227
+ className: "inandu-grid-group-by",
1228
+ children: /* @__PURE__ */ o("label", { children: [
1229
+ U ? Z("MsgGroupedBy", { column: St.find((e) => e.field === U)?.headerText ?? U }) : Z("MsgGroupByHint"),
1230
+ " ",
1231
+ /* @__PURE__ */ o("select", {
1232
+ "aria-label": "Group by",
1233
+ value: U ?? "",
1234
+ onChange: (e) => W(e.target.value || void 0),
1235
+ children: [/* @__PURE__ */ a("option", {
1236
+ value: "",
1237
+ children: Z("MsgCancelGrouping")
1238
+ }), St.map((e) => /* @__PURE__ */ a("option", {
1239
+ value: e.field,
1240
+ children: e.headerText ?? e.field
1241
+ }, e.field))]
1242
+ })
1243
+ ] })
1244
+ }),
1245
+ /* @__PURE__ */ a("div", {
1246
+ className: X ? "inandu-grid-viewport" : void 0,
1247
+ style: X ? {
1248
+ height: fe,
1249
+ overflow: "auto"
1250
+ } : void 0,
1251
+ onScroll: X ? (e) => _t(e.currentTarget.scrollTop) : void 0,
1252
+ children: /* @__PURE__ */ o("table", {
1253
+ ref: vt,
1254
+ className: "inandu-grid",
1255
+ onKeyDown: zt,
1256
+ children: [
1257
+ /* @__PURE__ */ o("thead", { children: [/* @__PURE__ */ o("tr", { children: [
1258
+ Et && /* @__PURE__ */ a("th", {}),
1259
+ Tt && /* @__PURE__ */ a("th", {}),
1260
+ p && /* @__PURE__ */ a("th", {
1261
+ style: Lt,
1262
+ children: /* @__PURE__ */ a("input", {
1263
+ "aria-label": Z("MsgSelectAll"),
1264
+ type: "checkbox",
1265
+ checked: Le,
1266
+ ref: (e) => {
1267
+ e && (e.indeterminate = Re);
1268
+ },
1269
+ onChange: ze
1270
+ })
1271
+ }),
1272
+ F.map((e) => {
1273
+ let t = Ee(e.field), n = De(e.field);
1274
+ return /* @__PURE__ */ o("th", {
1275
+ "data-field": e.field,
1276
+ style: Nt(e),
1277
+ className: dt === e.field ? "inandu-drag-over" : void 0,
1278
+ draggable: e.reorder !== !1,
1279
+ onDragStart: (t) => Pt(t, e.field),
1280
+ onDragOver: (t) => Ft(t, e.field),
1281
+ onDragLeave: () => ft((t) => t === e.field ? void 0 : t),
1282
+ onDrop: (t) => It(t, e.field),
1283
+ onClick: (t) => Te(e.field, t.shiftKey),
1284
+ "aria-label": Z("MsgSortBy", { column: e.headerText ?? e.field }),
1285
+ children: [
1286
+ e.headerText ?? e.field,
1287
+ t ? t === "asc" ? " ▲" : " ▼" : "",
1288
+ n !== void 0 && /* @__PURE__ */ a("sup", {
1289
+ className: "inandu-grid-sort-priority",
1290
+ children: n
1291
+ }),
1292
+ /* @__PURE__ */ a("span", {
1293
+ className: "inandu-grid-resize-handle",
1294
+ onMouseDown: (t) => yt(t, e.field),
1295
+ onDoubleClick: (t) => bt(t, e),
1296
+ onClick: (e) => e.stopPropagation(),
1297
+ draggable: !1
1298
+ })
1299
+ ]
1300
+ }, e.field);
1301
+ }),
1302
+ wt && /* @__PURE__ */ a("th", {})
1303
+ ] }), /* @__PURE__ */ o("tr", {
1304
+ className: "inandu-grid-filter-row",
1305
+ children: [
1306
+ Et && /* @__PURE__ */ a("th", {}),
1307
+ Tt && /* @__PURE__ */ a("th", {}),
1308
+ p && /* @__PURE__ */ a("th", { style: Lt }),
1309
+ F.map((e) => /* @__PURE__ */ a("th", {
1310
+ style: Nt(e),
1311
+ children: /* @__PURE__ */ a(P, {
1312
+ column: e,
1313
+ value: Oe[e.field],
1314
+ onChange: (t) => Mt(e.field, t),
1315
+ t: Z
1316
+ })
1317
+ }, e.field)),
1318
+ wt && /* @__PURE__ */ a("th", {})
1319
+ ]
1320
+ })] }),
1321
+ /* @__PURE__ */ o("tbody", { children: [K && /* @__PURE__ */ a(he, {
1322
+ ...Bt,
1323
+ onSave: () => void Xe(),
1324
+ onCancel: Ye
1325
+ }), Ct ? /* @__PURE__ */ a("tr", { children: /* @__PURE__ */ a("td", {
1326
+ colSpan: F.length + $,
1327
+ children: Z("MsgNoData")
1328
+ }) }) : at ? ot.map((e, t) => /* @__PURE__ */ a(_e, {
1329
+ node: e,
1330
+ rowIndex: t,
1331
+ isTreeRowExpanded: st,
1332
+ toggleTreeRow: ct,
1333
+ ...Bt
1334
+ }, e.row.id == null ? t : String(e.row.id))) : Me ? Me.map((e) => /* @__PURE__ */ a(ge, {
1335
+ group: e,
1336
+ aggregateColumns: xt,
1337
+ aggregateLabel: Rt,
1338
+ extraColumnCount: $,
1339
+ ...Bt
1340
+ }, e.key)) : /* @__PURE__ */ o(i, { children: [
1341
+ X && At > 0 && /* @__PURE__ */ a("tr", {
1342
+ "aria-hidden": "true",
1343
+ children: /* @__PURE__ */ a("td", {
1344
+ style: {
1345
+ height: At,
1346
+ padding: 0,
1347
+ border: "none"
1348
+ },
1349
+ colSpan: F.length + $
1350
+ })
1351
+ }),
1352
+ kt.map((e, t) => {
1353
+ let n = Dt + t;
1354
+ return /* @__PURE__ */ a(M, {
1355
+ row: e,
1356
+ rowIndex: n,
1357
+ clipboard: b,
1358
+ hasRowDragHandle: Tt,
1359
+ isDragOverRow: nt !== void 0 && pt === e,
1360
+ onRowDragStart: () => rt(e),
1361
+ onRowDragOver: () => mt(e),
1362
+ onRowDragLeave: () => mt((t) => t === e ? void 0 : t),
1363
+ onRowDrop: () => it(e),
1364
+ hasMasterDetail: Et,
1365
+ isRowExpanded: lt(e),
1366
+ toggleRowExpanded: () => ut(e),
1367
+ renderDetail: T,
1368
+ extraColumnCount: $,
1369
+ ...Bt
1370
+ }, e.id == null ? n : String(e.id));
1371
+ }),
1372
+ X && jt > 0 && /* @__PURE__ */ a("tr", {
1373
+ "aria-hidden": "true",
1374
+ children: /* @__PURE__ */ a("td", {
1375
+ style: {
1376
+ height: jt,
1377
+ padding: 0,
1378
+ border: "none"
1379
+ },
1380
+ colSpan: F.length + $
1381
+ })
1382
+ })
1383
+ ] })] }),
1384
+ xt.length > 0 && !X && /* @__PURE__ */ a("tfoot", { children: /* @__PURE__ */ o("tr", {
1385
+ className: "inandu-grid-totals-row",
1386
+ children: [
1387
+ Et && /* @__PURE__ */ a("td", {}),
1388
+ Tt && /* @__PURE__ */ a("td", {}),
1389
+ p && /* @__PURE__ */ a("td", { style: Lt }),
1390
+ F.map((e) => /* @__PURE__ */ a("td", {
1391
+ style: Nt(e),
1392
+ children: e.aggregate ? Rt(e, Ne) : ""
1393
+ }, e.field)),
1394
+ wt && /* @__PURE__ */ a("td", {})
1395
+ ]
1396
+ }) })
1397
+ ]
1398
+ })
1399
+ }),
1400
+ d > 0 && !U && !X && /* @__PURE__ */ o("div", {
1401
+ className: "inandu-grid-pagination",
1402
+ children: [
1403
+ /* @__PURE__ */ o("button", {
1404
+ type: "button",
1405
+ disabled: V === 0,
1406
+ onClick: () => je(V - 1),
1407
+ children: ["‹ ", Z("MsgPreviousPage")]
1408
+ }),
1409
+ /* @__PURE__ */ o("span", { children: [
1410
+ Z("MsgPageOf", {
1411
+ page: V + 1,
1412
+ total: H
1413
+ }),
1414
+ " (",
1415
+ we,
1416
+ ")"
1417
+ ] }),
1418
+ /* @__PURE__ */ o("button", {
1419
+ type: "button",
1420
+ disabled: V >= H - 1,
1421
+ onClick: () => je(V + 1),
1422
+ children: [Z("MsgNextPage"), " ›"]
1423
+ })
1424
+ ]
1425
+ })
1426
+ ]
1427
+ });
1428
+ }
1429
+ function M({ row: e, rowIndex: t, columns: n, locale: r, t: s, selectable: c, selectColumnStyle: l, columnStyle: u, isRowSelected: d, toggleRowSelection: p, hasRowActions: ee, editableColumns: te, isEditingRow: m, isAnotherRowEditing: h, startEditingRow: g, cancelRowEdit: _, saveRow: v, deleteRow: ne, deletable: re, rowDraft: ie, fieldErrors: y, isValidating: ae, setRowDraftValue: b, clipboard: x = !1, hasRowDragHandle: S = !1, isDragOverRow: C = !1, onRowDragStart: oe, onRowDragOver: se, onRowDragLeave: w, onRowDrop: T, hasMasterDetail: ce = !1, isRowExpanded: le = !1, toggleRowExpanded: ue, renderDetail: E, extraColumnCount: D = 0 }) {
1430
+ let O = m(e), de = s(le ? "MsgCollapseDetail" : "MsgExpandDetail");
1431
+ return /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ o("tr", {
1432
+ "data-row-index": t,
1433
+ className: C ? "inandu-drag-over" : void 0,
1434
+ onDragOver: S ? (e) => {
1435
+ e.preventDefault(), se?.();
1436
+ } : void 0,
1437
+ onDragLeave: S ? w : void 0,
1438
+ onDrop: S ? (e) => {
1439
+ e.preventDefault(), T?.();
1440
+ } : void 0,
1441
+ children: [
1442
+ ce && /* @__PURE__ */ a("td", { children: /* @__PURE__ */ a("button", {
1443
+ type: "button",
1444
+ className: "inandu-grid-detail-toggle",
1445
+ "aria-label": de,
1446
+ title: de,
1447
+ onClick: ue,
1448
+ children: le ? "▾" : "▸"
1449
+ }) }),
1450
+ S && /* @__PURE__ */ a("td", { children: /* @__PURE__ */ a("span", {
1451
+ className: "inandu-grid-row-drag-handle",
1452
+ "aria-label": s("MsgDragRow"),
1453
+ draggable: !0,
1454
+ onDragStart: (e) => {
1455
+ oe?.(), e.dataTransfer.setData("text/plain", "row");
1456
+ },
1457
+ children: "⋮⋮"
1458
+ }) }),
1459
+ c && /* @__PURE__ */ a("td", {
1460
+ style: l,
1461
+ children: /* @__PURE__ */ a("input", {
1462
+ "aria-label": s("MsgSelectRow", { index: t + 1 }),
1463
+ type: "checkbox",
1464
+ checked: d(e),
1465
+ onChange: () => p(e)
1466
+ })
1467
+ }),
1468
+ n.map((t) => /* @__PURE__ */ a("td", {
1469
+ style: u(t),
1470
+ "data-field": t.field,
1471
+ tabIndex: x ? 0 : void 0,
1472
+ children: O && t.editable ? /* @__PURE__ */ a(N, {
1473
+ column: t,
1474
+ value: ie[t.field],
1475
+ error: y[t.field],
1476
+ onChange: (e) => b(t.field, e),
1477
+ t: s
1478
+ }) : f(e[t.field], t.type ?? "string", t.format ?? "", r)
1479
+ }, t.field)),
1480
+ ee && /* @__PURE__ */ a("td", {
1481
+ className: "inandu-grid-row-actions",
1482
+ children: O ? /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("button", {
1483
+ type: "button",
1484
+ disabled: ae,
1485
+ onClick: () => v(e),
1486
+ children: s("MsgSaveRow")
1487
+ }), /* @__PURE__ */ a("button", {
1488
+ type: "button",
1489
+ disabled: ae,
1490
+ onClick: _,
1491
+ children: s("MsgCancelRowEdit")
1492
+ })] }) : /* @__PURE__ */ o(i, { children: [te.length > 0 && /* @__PURE__ */ a("button", {
1493
+ type: "button",
1494
+ disabled: h(e),
1495
+ onClick: () => g(e),
1496
+ children: s("MsgEditRow")
1497
+ }), re && /* @__PURE__ */ a("button", {
1498
+ type: "button",
1499
+ disabled: h(e),
1500
+ onClick: () => ne(e),
1501
+ children: s("MsgDeleteRow")
1502
+ })] })
1503
+ })
1504
+ ]
1505
+ }), ce && le && /* @__PURE__ */ a("tr", {
1506
+ className: "inandu-grid-detail-row",
1507
+ children: /* @__PURE__ */ a("td", {
1508
+ colSpan: n.length + D,
1509
+ children: E?.(e)
1510
+ })
1511
+ })] });
1512
+ }
1513
+ function he({ columns: e, t, selectable: n, selectColumnStyle: r, columnStyle: i, hasRowActions: s, rowDraft: c, fieldErrors: l, isValidating: u, setRowDraftValue: d, onSave: f, onCancel: p }) {
1514
+ return /* @__PURE__ */ o("tr", {
1515
+ className: "inandu-grid-new-row",
1516
+ children: [
1517
+ n && /* @__PURE__ */ a("td", { style: r }),
1518
+ e.map((e) => /* @__PURE__ */ a("td", {
1519
+ style: i(e),
1520
+ children: e.editable ? /* @__PURE__ */ a(N, {
1521
+ column: e,
1522
+ value: c[e.field],
1523
+ error: l[e.field],
1524
+ onChange: (t) => d(e.field, t),
1525
+ t
1526
+ }) : null
1527
+ }, e.field)),
1528
+ s && /* @__PURE__ */ o("td", {
1529
+ className: "inandu-grid-row-actions",
1530
+ children: [/* @__PURE__ */ a("button", {
1531
+ type: "button",
1532
+ disabled: u,
1533
+ onClick: f,
1534
+ children: t("MsgSaveRow")
1535
+ }), /* @__PURE__ */ a("button", {
1536
+ type: "button",
1537
+ disabled: u,
1538
+ onClick: p,
1539
+ children: t("MsgCancelRowEdit")
1540
+ })]
1541
+ })
1542
+ ]
1543
+ });
1544
+ }
1545
+ function ge({ group: e, columns: t, aggregateColumns: n, aggregateLabel: r, extraColumnCount: s, ...c }) {
1546
+ return /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("tr", {
1547
+ className: "inandu-grid-group-row",
1548
+ children: /* @__PURE__ */ o("td", {
1549
+ colSpan: t.length + s,
1550
+ children: [
1551
+ /* @__PURE__ */ a("strong", { children: e.key }),
1552
+ " (",
1553
+ e.rows.length,
1554
+ ")",
1555
+ n.length > 0 && /* @__PURE__ */ a("span", {
1556
+ className: "inandu-grid-group-aggregates",
1557
+ children: n.map((t) => /* @__PURE__ */ o("span", { children: [" · ", r(t, e.aggregates)] }, t.field))
1558
+ })
1559
+ ]
1560
+ })
1561
+ }), e.rows.map((n, r) => /* @__PURE__ */ a(M, {
1562
+ row: n,
1563
+ rowIndex: r,
1564
+ columns: t,
1565
+ ...c
1566
+ }, n.id == null ? `${e.key}:${r}` : String(n.id)))] });
1567
+ }
1568
+ function _e({ node: e, rowIndex: t, columns: n, locale: r, t: i, selectable: s, selectColumnStyle: c, columnStyle: l, isRowSelected: u, toggleRowSelection: d, hasRowActions: p, isTreeRowExpanded: ee, toggleTreeRow: te }) {
1569
+ let { row: m, depth: h, expandable: g } = e, _ = ee(m), v = i(_ ? "MsgCollapseDetail" : "MsgExpandDetail");
1570
+ return /* @__PURE__ */ o("tr", {
1571
+ "aria-level": h + 1,
1572
+ "aria-expanded": g ? _ : void 0,
1573
+ children: [
1574
+ s && /* @__PURE__ */ a("td", {
1575
+ style: c,
1576
+ children: /* @__PURE__ */ a("input", {
1577
+ "aria-label": i("MsgSelectRow", { index: t + 1 }),
1578
+ type: "checkbox",
1579
+ checked: u(m),
1580
+ onChange: () => d(m)
1581
+ })
1582
+ }),
1583
+ n.map((e, t) => /* @__PURE__ */ a("td", {
1584
+ style: l(e),
1585
+ children: t === 0 ? /* @__PURE__ */ o("span", {
1586
+ className: "inandu-grid-tree-cell",
1587
+ style: { paddingInlineStart: h * 16 },
1588
+ children: [g ? /* @__PURE__ */ a("button", {
1589
+ type: "button",
1590
+ className: "inandu-grid-tree-toggle",
1591
+ "aria-label": v,
1592
+ title: v,
1593
+ onClick: () => te(m),
1594
+ children: _ ? "▾" : "▸"
1595
+ }) : /* @__PURE__ */ a("span", {
1596
+ className: "inandu-grid-tree-toggle-spacer",
1597
+ "aria-hidden": "true"
1598
+ }), f(m[e.field], e.type ?? "string", e.format ?? "", r)]
1599
+ }) : f(m[e.field], e.type ?? "string", e.format ?? "", r)
1600
+ }, e.field)),
1601
+ p && /* @__PURE__ */ a("td", { className: "inandu-grid-row-actions" })
1602
+ ]
1603
+ });
1604
+ }
1605
+ function N({ column: e, value: t, error: n, onChange: r, t: i }) {
1606
+ let s = e.type ?? "string", c = i("MsgEditCell", { column: e.headerText ?? e.field });
1607
+ return /* @__PURE__ */ o("span", {
1608
+ className: "inandu-grid-edit-cell",
1609
+ children: [s === "boolean" ? /* @__PURE__ */ a("input", {
1610
+ "aria-label": c,
1611
+ type: "checkbox",
1612
+ checked: !!t,
1613
+ onChange: (e) => r(e.target.checked)
1614
+ }) : s === "date" ? /* @__PURE__ */ a("input", {
1615
+ "aria-label": c,
1616
+ type: "date",
1617
+ value: typeof t == "string" ? t : "",
1618
+ onChange: (e) => r(e.target.value)
1619
+ }) : /* @__PURE__ */ a("input", {
1620
+ "aria-label": c,
1621
+ type: s === "number" ? "number" : "text",
1622
+ value: typeof t == "string" ? t : "",
1623
+ onChange: (e) => r(e.target.value)
1624
+ }), n && /* @__PURE__ */ a("span", {
1625
+ className: "inandu-grid-field-error",
1626
+ children: n
1627
+ })]
1628
+ });
1629
+ }
1630
+ function P({ column: e, value: t, onChange: n, t: r }) {
1631
+ let i = e.type ?? "string", s = r("MsgFilterColumn", { column: e.headerText ?? e.field });
1632
+ return i === "number" ? /* @__PURE__ */ o("span", {
1633
+ className: "inandu-grid-filter-range",
1634
+ children: [/* @__PURE__ */ a("input", {
1635
+ "aria-label": `${s} ${r("MsgFilterMin")}`,
1636
+ type: "number",
1637
+ value: t?.min ?? "",
1638
+ onChange: (e) => n({ min: e.target.value })
1639
+ }), /* @__PURE__ */ a("input", {
1640
+ "aria-label": `${s} ${r("MsgFilterMax")}`,
1641
+ type: "number",
1642
+ value: t?.max ?? "",
1643
+ onChange: (e) => n({ max: e.target.value })
1644
+ })]
1645
+ }) : i === "date" ? /* @__PURE__ */ o("span", {
1646
+ className: "inandu-grid-filter-range",
1647
+ children: [/* @__PURE__ */ a("input", {
1648
+ "aria-label": `${s} ${r("MsgFilterFrom")}`,
1649
+ type: "date",
1650
+ value: t?.from ?? "",
1651
+ onChange: (e) => n({ from: e.target.value })
1652
+ }), /* @__PURE__ */ a("input", {
1653
+ "aria-label": `${s} ${r("MsgFilterTo")}`,
1654
+ type: "date",
1655
+ value: t?.to ?? "",
1656
+ onChange: (e) => n({ to: e.target.value })
1657
+ })]
1658
+ }) : i === "boolean" ? /* @__PURE__ */ o("select", {
1659
+ "aria-label": s,
1660
+ value: t?.bool ?? "",
1661
+ onChange: (e) => n({ bool: e.target.value }),
1662
+ children: [
1663
+ /* @__PURE__ */ a("option", {
1664
+ value: "",
1665
+ children: r("MsgAll")
1666
+ }),
1667
+ /* @__PURE__ */ a("option", {
1668
+ value: "true",
1669
+ children: "true"
1670
+ }),
1671
+ /* @__PURE__ */ a("option", {
1672
+ value: "false",
1673
+ children: "false"
1674
+ })
1675
+ ]
1676
+ }) : /* @__PURE__ */ a("input", {
1677
+ "aria-label": s,
1678
+ type: "text",
1679
+ value: t?.text ?? "",
1680
+ onChange: (e) => n({ text: e.target.value })
1681
+ });
1682
+ }
1683
+ //#endregion
1684
+ export { g as AGGREGATE_SYMBOLS, w as INANDU_GRID_TRANSLATIONS, me as InanduGrid, O as buildCsv, fe as buildExcelXml, p as compareCellValues, _ as computeGroupAggregates, ce as createTranslator, x as en, S as es, de as exportCsv, k as exportExcel, pe as exportPdf, f as formatCellValue, C as fr, T as interpolate, oe as it, h as matchesColumnFilter, j as measureColumnContentWidth, A as printTable, ue as useInanduGrid, se as zh };