@ryuzaki13/react-foundation-lib 2.22.0 → 2.23.0

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 (85) hide show
  1. package/dist/analytical-table/buildAnalyticalTableModel.d.ts +5 -2
  2. package/dist/analytical-table/buildAnalyticalTableModel.d.ts.map +1 -1
  3. package/dist/analytical-table/{calculations.d.ts → definition/calculations.d.ts} +1 -1
  4. package/dist/analytical-table/definition/calculations.d.ts.map +1 -0
  5. package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts +4 -0
  6. package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -0
  7. package/dist/analytical-table/definition/types.d.ts +70 -0
  8. package/dist/analytical-table/definition/types.d.ts.map +1 -0
  9. package/dist/analytical-table/definition/validateAnalyticalView.d.ts +5 -0
  10. package/dist/analytical-table/definition/validateAnalyticalView.d.ts.map +1 -0
  11. package/dist/analytical-table/{dateColumns.d.ts → dynamic-columns/dateColumns.d.ts} +2 -1
  12. package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -0
  13. package/dist/analytical-table/dynamic-columns/index.d.ts +3 -0
  14. package/dist/analytical-table/dynamic-columns/index.d.ts.map +1 -0
  15. package/dist/analytical-table/{dateColumnTypes.d.ts → dynamic-columns/types.d.ts} +3 -3
  16. package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -0
  17. package/dist/analytical-table/index.d.ts +7 -5
  18. package/dist/analytical-table/index.d.ts.map +1 -1
  19. package/dist/analytical-table/index.js +348 -187
  20. package/dist/analytical-table/index.js.map +1 -1
  21. package/dist/analytical-table/projections/expansion.d.ts +4 -0
  22. package/dist/analytical-table/projections/expansion.d.ts.map +1 -0
  23. package/dist/analytical-table/{exportProjection.d.ts → projections/exportProjection.d.ts} +1 -1
  24. package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -0
  25. package/dist/analytical-table/projections/indexAnalyticalRows.d.ts +4 -0
  26. package/dist/analytical-table/projections/indexAnalyticalRows.d.ts.map +1 -0
  27. package/dist/analytical-table/projections/resolveRowsProjection.d.ts +4 -0
  28. package/dist/analytical-table/projections/resolveRowsProjection.d.ts.map +1 -0
  29. package/dist/analytical-table/{exportTypes.d.ts → projections/types.d.ts} +2 -2
  30. package/dist/analytical-table/projections/types.d.ts.map +1 -0
  31. package/dist/analytical-table/{aggregation.d.ts → runtime/aggregation.d.ts} +1 -1
  32. package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -0
  33. package/dist/analytical-table/runtime/buildGroupedModel.d.ts +11 -0
  34. package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -0
  35. package/dist/analytical-table/runtime/createAnalyticalTableRuntime.d.ts +10 -0
  36. package/dist/analytical-table/runtime/createAnalyticalTableRuntime.d.ts.map +1 -0
  37. package/dist/analytical-table/runtime/filtering.d.ts +7 -0
  38. package/dist/analytical-table/runtime/filtering.d.ts.map +1 -0
  39. package/dist/analytical-table/runtime/grouping.d.ts +10 -0
  40. package/dist/analytical-table/runtime/grouping.d.ts.map +1 -0
  41. package/dist/analytical-table/runtime/hierarchy.d.ts +20 -0
  42. package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -0
  43. package/dist/analytical-table/runtime/sorting.d.ts +5 -0
  44. package/dist/analytical-table/runtime/sorting.d.ts.map +1 -0
  45. package/dist/analytical-table/runtime/totals.d.ts +12 -0
  46. package/dist/analytical-table/runtime/totals.d.ts.map +1 -0
  47. package/dist/analytical-table/runtime/types.d.ts +71 -0
  48. package/dist/analytical-table/runtime/types.d.ts.map +1 -0
  49. package/dist/analytical-table/{valueComparison.d.ts → runtime/valueComparison.d.ts} +1 -1
  50. package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -0
  51. package/dist/analytical-table/types.d.ts +4 -7
  52. package/dist/analytical-table/types.d.ts.map +1 -1
  53. package/dist/chunks/{formatters-DNrfrzK0.js → formatters-D1ob2OkI.js} +19 -19
  54. package/dist/chunks/{formatters-DNrfrzK0.js.map → formatters-D1ob2OkI.js.map} +1 -1
  55. package/dist/error-report/index.js +1 -1
  56. package/dist/formatters/index.js +1 -1
  57. package/dist/odata-service/formatters.d.ts +2 -2
  58. package/dist/table/index.js.map +1 -1
  59. package/dist/table/useTableRowSelection.d.ts +1 -1
  60. package/dist/table/useTableRowSelection.d.ts.map +1 -1
  61. package/package.json +1 -1
  62. package/src/analytical-table/README.mdx +232 -143
  63. package/dist/analytical-table/aggregation.d.ts.map +0 -1
  64. package/dist/analytical-table/calculationTypes.d.ts +0 -11
  65. package/dist/analytical-table/calculationTypes.d.ts.map +0 -1
  66. package/dist/analytical-table/calculations.d.ts.map +0 -1
  67. package/dist/analytical-table/columnTypes.d.ts +0 -30
  68. package/dist/analytical-table/columnTypes.d.ts.map +0 -1
  69. package/dist/analytical-table/dataTypes.d.ts +0 -14
  70. package/dist/analytical-table/dataTypes.d.ts.map +0 -1
  71. package/dist/analytical-table/dateColumnTypes.d.ts.map +0 -1
  72. package/dist/analytical-table/dateColumns.d.ts.map +0 -1
  73. package/dist/analytical-table/expansion.d.ts +0 -4
  74. package/dist/analytical-table/expansion.d.ts.map +0 -1
  75. package/dist/analytical-table/exportProjection.d.ts.map +0 -1
  76. package/dist/analytical-table/exportTypes.d.ts.map +0 -1
  77. package/dist/analytical-table/filtering.d.ts +0 -4
  78. package/dist/analytical-table/filtering.d.ts.map +0 -1
  79. package/dist/analytical-table/indexAnalyticalRows.d.ts +0 -4
  80. package/dist/analytical-table/indexAnalyticalRows.d.ts.map +0 -1
  81. package/dist/analytical-table/modelTypes.d.ts +0 -43
  82. package/dist/analytical-table/modelTypes.d.ts.map +0 -1
  83. package/dist/analytical-table/valueComparison.d.ts.map +0 -1
  84. package/dist/analytical-table/viewTypes.d.ts +0 -24
  85. package/dist/analytical-table/viewTypes.d.ts.map +0 -1
@@ -1,11 +1,11 @@
1
- import { ct as e, dt as t, ft as n, lt as r, mt as i, ot as a, pt as o, st as s } from "../chunks/formatters-DNrfrzK0.js";
1
+ import { ct as e, dt as t, ft as n, lt as r, mt as i, ot as a, pt as o, st as s } from "../chunks/formatters-D1ob2OkI.js";
2
2
  import { a as c, y as l } from "../chunks/array-D-_yMMUK.js";
3
- import { buildTreeTableRows as u } from "../tree-table/index.js";
3
+ import { compileTableFormula as u } from "../formulas/index.js";
4
4
  import { stableStringify as d } from "../utils/index.js";
5
- import { compileTableFormula as f } from "../formulas/index.js";
6
- import { It as p, Tn as m, dn as h, ln as g } from "../chunks/odata-service-tp2U5yIr.js";
7
- import { t as _ } from "../chunks/string-comparison-BKT7PXmq.js";
8
- //#region src/analytical-table/aggregation.ts
5
+ import { Vt as f, dn as p, en as m, ln as h } from "../chunks/odata-service-tp2U5yIr.js";
6
+ import { t as g } from "../chunks/string-comparison-BKT7PXmq.js";
7
+ import { buildTreeTableRows as _ } from "../tree-table/index.js";
8
+ //#region src/analytical-table/runtime/aggregation.ts
9
9
  function v(e, t) {
10
10
  let n = e.filter((e) => e != null && e !== "");
11
11
  if (t === "count") return n.length;
@@ -20,7 +20,7 @@ function v(e, t) {
20
20
  }
21
21
  }
22
22
  //#endregion
23
- //#region src/analytical-table/calculations.ts
23
+ //#region src/analytical-table/definition/calculations.ts
24
24
  function y(e, t = e.map((e) => e.id)) {
25
25
  let n = new Map(e.map((e) => [e.id, e]));
26
26
  if (n.size !== e.length) throw Error("Идентификаторы аналитических столбцов должны быть уникальны.");
@@ -34,7 +34,7 @@ function y(e, t = e.map((e) => e.id)) {
34
34
  let l = c(t.formula?.dependencies ?? t.calculate?.dependencies ?? []);
35
35
  for (let e of l) s(e);
36
36
  if (t.formula) {
37
- let n = f({
37
+ let n = u({
38
38
  formulaId: t.formula.formulaId,
39
39
  keys: t.formula.dependencies
40
40
  });
@@ -43,7 +43,7 @@ function y(e, t = e.map((e) => e.id)) {
43
43
  columnId: e,
44
44
  dependencies: l,
45
45
  compute: (t) => {
46
- let r = n.execute({ ...t });
46
+ let r = n.execute(t);
47
47
  if (!r.ok) throw Error(`Ошибка формулы столбца ${e}: ${r.reason}`);
48
48
  return r.value;
49
49
  }
@@ -67,8 +67,117 @@ function b(e, t) {
67
67
  return n;
68
68
  }
69
69
  //#endregion
70
- //#region src/analytical-table/valueComparison.ts
71
- function x(e, t) {
70
+ //#region src/analytical-table/definition/compileAnalyticalTableDefinition.ts
71
+ function x(e) {
72
+ let t = [...e.columns, ...e.dataFields ?? []], n = y(t);
73
+ return {
74
+ columns: e.columns,
75
+ fieldsById: new Map(t.map((e) => [e.id, e])),
76
+ calculations: n,
77
+ aggregateFields: t.filter((e) => e.aggregate !== void 0),
78
+ isAggregateRow: e.isAggregateRow,
79
+ aggregate: e.aggregate,
80
+ grandTotals: e.grandTotals !== !1,
81
+ grandTotalsScope: e.grandTotalsScope ?? "filtered"
82
+ };
83
+ }
84
+ //#endregion
85
+ //#region src/analytical-table/definition/validateAnalyticalView.ts
86
+ function S(e, t) {
87
+ for (let n of [...t.sorting ?? [], ...t.filters ?? []]) if (!e.fieldsById.has(n.id)) throw Error(`Неизвестный аналитический столбец: ${n.id}`);
88
+ let n = /* @__PURE__ */ new Set();
89
+ for (let e of t.grouping ?? []) {
90
+ if (n.has(e.id)) throw Error("Идентификаторы уровней группировки должны быть уникальны.");
91
+ if (e.keyColumnIds.length === 0) throw Error(`Уровень ${e.id} не содержит ключей группировки.`);
92
+ n.add(e.id);
93
+ }
94
+ }
95
+ //#endregion
96
+ //#region src/analytical-table/projections/indexAnalyticalRows.ts
97
+ function C(e) {
98
+ let t = [], n = [], r = /* @__PURE__ */ new Map(), i = [{
99
+ rows: e,
100
+ visible: !0,
101
+ nextIndex: 0
102
+ }];
103
+ for (; i.length > 0;) {
104
+ let e = i[i.length - 1];
105
+ if (e.nextIndex === e.rows.length) {
106
+ i.pop();
107
+ continue;
108
+ }
109
+ let a = e.rows[e.nextIndex++];
110
+ t.push(a), r.set(a.id, a), e.visible && n.push(a), a.children.length > 0 && i.push({
111
+ rows: a.children,
112
+ visible: e.visible && a.isExpanded,
113
+ nextIndex: 0
114
+ });
115
+ }
116
+ return {
117
+ flatRows: t,
118
+ visibleRows: n,
119
+ rowById: r
120
+ };
121
+ }
122
+ //#endregion
123
+ //#region src/analytical-table/projections/resolveRowsProjection.ts
124
+ function w(e, t) {
125
+ return t === e.rows ? e : {
126
+ ...e,
127
+ rows: t,
128
+ ...C(t)
129
+ };
130
+ }
131
+ //#endregion
132
+ //#region src/analytical-table/projections/expansion.ts
133
+ function T(e, t) {
134
+ let n;
135
+ for (let r = 0; r < e.length; r++) {
136
+ let i = t.get(e[r]);
137
+ i && (n ??= e.slice(), n[r] = i);
138
+ }
139
+ return n ?? e;
140
+ }
141
+ function E(e, t) {
142
+ let n = t === "all", r = new Set(n ? [] : t), i = /* @__PURE__ */ new Map();
143
+ for (let t = e.flatRows.length - 1; t >= 0; t--) {
144
+ let a = e.flatRows[t], o = T(a.children, i), s = a.isExpandable && (n || r.has(a.id));
145
+ (s !== a.isExpanded || o !== a.children) && i.set(a, {
146
+ ...a,
147
+ isExpanded: s,
148
+ children: o
149
+ });
150
+ }
151
+ return i.size === 0 ? e : w(e, T(e.rows, i));
152
+ }
153
+ //#endregion
154
+ //#region src/analytical-table/runtime/totals.ts
155
+ function D(e, t) {
156
+ let n = [], r = (e) => {
157
+ e.sourceRow && t.has(e.id) && n.push(e.sourceRow);
158
+ for (let t of e.children) r(t);
159
+ };
160
+ for (let t of e) r(t);
161
+ return n;
162
+ }
163
+ function O(e) {
164
+ let { definition: t, nodes: n, aggregateRowIds: r, scope: i, groupingPath: a = {} } = e, o = {
165
+ scope: i,
166
+ rows: D(n, r),
167
+ groupingPath: a
168
+ }, s = { ...a };
169
+ for (let e of t.aggregateFields) {
170
+ let t = e.aggregate;
171
+ t !== void 0 && (s[e.id] = typeof t == "function" ? t(o) : v(o.rows.map((t) => t.values[e.id]), t));
172
+ }
173
+ return Object.assign(s, t.aggregate?.(o)), b(s, {
174
+ ...t.calculations,
175
+ steps: t.calculations.steps.filter((e) => !Object.hasOwn(s, e.columnId))
176
+ });
177
+ }
178
+ //#endregion
179
+ //#region src/analytical-table/runtime/valueComparison.ts
180
+ function k(e, t) {
72
181
  return d(t.map((t) => {
73
182
  let n = e[t];
74
183
  return [
@@ -78,23 +187,97 @@ function x(e, t) {
78
187
  ];
79
188
  }));
80
189
  }
81
- function S(e, t, n) {
190
+ function A(e, t, n) {
82
191
  if (Object.is(e, t)) return 0;
83
192
  if (e == null) return 1;
84
193
  if (t == null) return -1;
85
194
  if (n?.compare) return n.compare(e, t);
86
195
  if (n?.valueType === "date") {
87
- let n = g(e), r = g(t);
196
+ let n = h(e), r = h(t);
88
197
  if (n && r) return n.getTime() - r.getTime();
89
198
  }
90
- return typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) : _(String(e), String(t));
199
+ return typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) : g(String(e), String(t));
200
+ }
201
+ //#endregion
202
+ //#region src/analytical-table/runtime/grouping.ts
203
+ function j(e) {
204
+ let { grouping: t, definition: n, source: r } = e, i = (e, a, o, s) => {
205
+ let c = t[a];
206
+ if (!c) return e;
207
+ let l = /* @__PURE__ */ new Map();
208
+ for (let t of e) {
209
+ let e = k(t.values, c.keyColumnIds), n = l.get(e);
210
+ n ? n.push(t) : l.set(e, [t]);
211
+ }
212
+ return Array.from(l, ([e, t]) => {
213
+ let l = [
214
+ ...s,
215
+ c.id,
216
+ e
217
+ ], u = `analytical-group:${d(l)}`;
218
+ if (r.sourceRowIds.has(u)) throw Error(`Идентификатор исходной строки совпал с группой: ${u}`);
219
+ let f = { ...o };
220
+ for (let e of [...c.keyColumnIds, ...c.displayColumnIds ?? []]) f[e] = t[0].values[e];
221
+ return {
222
+ id: u,
223
+ kind: "group",
224
+ groupingLevelId: c.id,
225
+ values: O({
226
+ definition: n,
227
+ nodes: t,
228
+ aggregateRowIds: r.aggregateRowIds,
229
+ scope: "group",
230
+ groupingPath: f
231
+ }),
232
+ children: i(t, a + 1, f, l)
233
+ };
234
+ });
235
+ };
236
+ return i(e.rows, 0, {}, []);
237
+ }
238
+ //#endregion
239
+ //#region src/analytical-table/runtime/buildGroupedModel.ts
240
+ function M(e, t = null, n = 0) {
241
+ return e.map((e) => ({
242
+ id: e.id,
243
+ parentId: t,
244
+ kind: e.kind,
245
+ sourceRow: e.sourceRow,
246
+ original: e.sourceRow?.original,
247
+ values: e.values,
248
+ level: n,
249
+ children: M(e.children, e.id, n + 1),
250
+ isExpandable: e.children.length > 0,
251
+ isExpanded: !1,
252
+ groupingLevelId: e.groupingLevelId
253
+ }));
254
+ }
255
+ function N(e) {
256
+ let { definition: t, source: n, filteredRows: r, grouping: i } = e, a = M(j({
257
+ rows: r,
258
+ grouping: i,
259
+ definition: t,
260
+ source: n
261
+ })), o = t.grandTotals ? O({
262
+ definition: t,
263
+ nodes: t.grandTotalsScope === "all" ? n.rows : r,
264
+ aggregateRowIds: n.aggregateRowIds,
265
+ scope: "grand"
266
+ }) : null;
267
+ return {
268
+ columns: t.columns,
269
+ rows: a,
270
+ ...C(a),
271
+ grandTotals: o,
272
+ diagnostics: n.diagnostics
273
+ };
91
274
  }
92
275
  //#endregion
93
- //#region src/analytical-table/filtering.ts
94
- function C(e, t, n) {
276
+ //#region src/analytical-table/runtime/filtering.ts
277
+ function P(e, t, n) {
95
278
  let r = e.values[t.id];
96
279
  if (n?.filter) return n.filter(r, t, e);
97
- let i = t.value, a = (e) => S(r, e, n), o = r == null || r === "";
280
+ let i = t.value, a = (e) => A(r, e, n), o = r == null || r === "";
98
281
  switch (t.operator ?? "equals") {
99
282
  case "equals": return a(i) === 0;
100
283
  case "notEquals": return a(i) !== 0;
@@ -110,133 +293,111 @@ function C(e, t, n) {
110
293
  case "notEmpty": return !o;
111
294
  }
112
295
  }
113
- //#endregion
114
- //#region src/analytical-table/indexAnalyticalRows.ts
115
- function w(e) {
116
- let t = [], n = [], r = /* @__PURE__ */ new Map(), i = (e, a) => {
117
- for (let o of e) t.push(o), r.set(o.id, o), a && n.push(o), i(o.children, a && o.isExpanded);
118
- };
119
- return i(e, !0), {
120
- flatRows: t,
121
- visibleRows: n,
122
- rowById: r
123
- };
296
+ function F(e, t, n) {
297
+ if (t.length === 0) return e;
298
+ let r = [];
299
+ for (let i of e) {
300
+ let e = i.sourceRow;
301
+ if (e && t.every((t) => P(e, t, n.get(t.id)))) {
302
+ r.push(i);
303
+ continue;
304
+ }
305
+ let a = F(i.children, t, n);
306
+ a.length > 0 && r.push({
307
+ ...i,
308
+ children: a
309
+ });
310
+ }
311
+ return r;
124
312
  }
125
313
  //#endregion
126
- //#region src/analytical-table/buildAnalyticalTableModel.ts
127
- function T(e) {
128
- let { snapshot: t, columns: n, state: r = {} } = e, i = y(n), a = new Map(n.map((e) => [e.id, e])), o = r.grouping ?? [], s = r.sorting ?? [], l = r.filters ?? [];
129
- for (let e of [...s.map((e) => e.id), ...l.map((e) => e.id)]) if (!a.has(e)) throw Error(`Неизвестный аналитический столбец: ${e}`);
130
- if (c(o.map((e) => e.id)).length !== o.length) throw Error("Идентификаторы уровней группировки должны быть уникальны.");
131
- for (let e of o) if (e.keyColumnIds.length === 0) throw Error(`Уровень ${e.id} не содержит ключей группировки.`);
132
- let f = t.rows.map((e) => ({
314
+ //#region src/analytical-table/runtime/hierarchy.ts
315
+ function I(e, t) {
316
+ if (e.rows.some((e) => e.id.length === 0)) throw Error("Идентификатор аналитической строки не может быть пустым.");
317
+ let n = e.rows.map((e) => ({
133
318
  ...e,
134
- values: b(e.values, i)
135
- }));
136
- if (f.some((e) => e.id.length === 0)) throw Error("Идентификатор аналитической строки не может быть пустым.");
137
- let p = u(f, {
319
+ values: b(e.values, t.calculations)
320
+ })), r = _(n, {
138
321
  getRowId: (e) => e.id,
139
322
  getParentRowId: (e) => e.parentId
140
- }), m = new Set(p.rootRowIds), h = e.isAggregateRow ?? ((e) => m.has(e.id)), g = (e) => ({
323
+ }), i = (e) => ({
141
324
  id: e.id,
142
325
  kind: "data",
143
- sourceRow: p.rowById.get(e.id),
144
- values: e.values,
145
- children: (e.children ?? []).map(g)
146
- }), _ = p.rows.map(g), T = (e) => {
147
- let t = [], n = (e) => {
148
- e.sourceRow && h(e.sourceRow) && t.push(e.sourceRow);
149
- for (let t of e.children) n(t);
150
- };
151
- for (let t of e) n(t);
152
- return t;
153
- }, E = (t, r, a) => {
154
- let o = {
155
- scope: r,
156
- rows: T(t),
157
- groupingPath: a
158
- }, s = { ...a };
159
- for (let e of n) e.aggregate && (s[e.id] = typeof e.aggregate == "function" ? e.aggregate(o) : v(o.rows.map((t) => t.values[e.id]), e.aggregate));
160
- return Object.assign(s, e.aggregate?.(o)), b(s, {
161
- ...i,
162
- steps: i.steps.filter((e) => !Object.hasOwn(s, e.columnId))
163
- });
164
- }, D = (e) => e.flatMap((e) => {
165
- let t = e.sourceRow;
166
- if (t && l.every((e) => C(t, e, a.get(e.id)))) return [e];
167
- let n = D(e.children);
168
- return n.length > 0 ? [{
169
- ...e,
170
- children: n
171
- }] : [];
172
- }), O = l.length > 0 ? D(_) : _, k = (e, t, n, r) => {
173
- let i = o[t];
174
- if (!i) return e;
175
- let a = /* @__PURE__ */ new Map();
176
- for (let t of e) {
177
- let e = x(t.values, i.keyColumnIds), n = a.get(e);
178
- n ? n.push(t) : a.set(e, [t]);
179
- }
180
- return Array.from(a, ([e, a]) => {
181
- let o = [
182
- ...r,
183
- i.id,
184
- e
185
- ], s = `analytical-group:${d(o)}`;
186
- if (p.rowById.has(s)) throw Error(`Идентификатор исходной строки совпал с группой: ${s}`);
187
- let c = { ...n };
188
- for (let e of [...i.keyColumnIds, ...i.displayColumnIds ?? []]) c[e] = a[0].values[e];
189
- return {
190
- id: s,
191
- kind: "group",
192
- groupingLevelId: i.id,
193
- values: E(a, "group", c),
194
- children: k(a, t + 1, c, o)
195
- };
196
- });
197
- }, A = k(O, 0, {}, []), j = new Set(r.expandedRowIds === "all" ? [] : r.expandedRowIds ?? []), M = (e) => [...e].sort((e, t) => {
198
- for (let n of s) {
199
- let r = S(e.values[n.id], t.values[n.id], a.get(n.id));
200
- if (r !== 0) return n.desc ? -r : r;
201
- }
202
- return 0;
203
- }), N = (e, t, n) => M(e).map((e) => ({
204
- id: e.id,
205
- parentId: t,
206
- kind: e.kind,
207
- sourceRow: e.sourceRow,
208
- original: e.sourceRow?.original,
326
+ sourceRow: r.rowById.get(e.id),
209
327
  values: e.values,
210
- level: n,
211
- children: N(e.children, e.id, n + 1),
212
- isExpandable: e.children.length > 0,
213
- isExpanded: e.children.length > 0 && (r.expandedRowIds === "all" || j.has(e.id)),
214
- groupingLevelId: e.groupingLevelId
215
- })), P = N(A, null, 0);
328
+ children: (e.children ?? []).map(i)
329
+ }), a = t.isAggregateRow ? Array.from(r.rowById.values()).filter(t.isAggregateRow).map((e) => e.id) : r.rootRowIds;
216
330
  return {
217
- columns: n,
218
- rows: P,
219
- ...w(P),
220
- grandTotals: e.grandTotals === !1 ? null : E(e.grandTotalsScope === "all" ? _ : O, "grand", {}),
331
+ rows: r.rows.map(i),
332
+ sourceRowIds: new Set(r.allRowIds),
333
+ aggregateRowIds: new Set(a),
221
334
  diagnostics: {
222
- orphanRowIds: p.orphanRowIds,
223
- duplicateRowIds: p.duplicateRowIds,
224
- cyclicRowIds: p.cyclicRowIds
335
+ orphanRowIds: r.orphanRowIds,
336
+ duplicateRowIds: r.duplicateRowIds,
337
+ cyclicRowIds: r.cyclicRowIds
225
338
  }
226
339
  };
227
340
  }
228
341
  //#endregion
229
- //#region src/analytical-table/dateColumns.ts
230
- var E = m("yyyy-MM-dd"), D = m("dd.MM.yyyy");
231
- function O(e) {
342
+ //#region src/analytical-table/runtime/sorting.ts
343
+ function L(e, t, n) {
344
+ if (t.length === 0) return e;
345
+ let r = (e, r) => {
346
+ for (let i of t) {
347
+ let t = A(e.values[i.id], r.values[i.id], n.get(i.id));
348
+ if (t !== 0) return i.desc ? -t : t;
349
+ }
350
+ return 0;
351
+ }, i = (e) => {
352
+ if (e.length === 0) return e;
353
+ let t = e.map((e) => {
354
+ let t = i(e.children);
355
+ return t === e.children ? e : {
356
+ ...e,
357
+ children: t
358
+ };
359
+ });
360
+ return t.sort(r), t.every((t, n) => t === e[n]) ? e : t;
361
+ };
362
+ return w(e, i(e.rows));
363
+ }
364
+ //#endregion
365
+ //#region src/analytical-table/runtime/createAnalyticalTableRuntime.ts
366
+ var R = {}, z = Object.freeze([]);
367
+ function B(e) {
368
+ let { definition: t, snapshot: n } = e, r = I(n, t), i = R, a = r.rows, o, s, c;
369
+ return { getModel(e = R) {
370
+ S(t, e);
371
+ let n = e.filters ?? z, l = e.grouping ?? z, u = e.sorting ?? z, d = e.expandedRowIds ?? z, f = !o || n !== (i.filters ?? z), p = !o || l !== (i.grouping ?? z), m = u !== (i.sorting ?? z), h = d !== (i.expandedRowIds ?? z), g = f ? F(r.rows, n, t.fieldsById) : a, _ = !o || f || p, v = _ ? N({
372
+ definition: t,
373
+ source: r,
374
+ filteredRows: g,
375
+ grouping: l
376
+ }) : o, y = !s || _ || m, b = y ? L(v, u, t.fieldsById) : s, x = !c || y || h ? E(y ? b : c ?? b, d) : c;
377
+ return a = g, o = v, s = b, c = x, i = {
378
+ filters: n,
379
+ grouping: l,
380
+ sorting: u,
381
+ expandedRowIds: d
382
+ }, c;
383
+ } };
384
+ }
385
+ //#endregion
386
+ //#region src/analytical-table/buildAnalyticalTableModel.ts
387
+ function V(e) {
388
+ return B({
389
+ definition: x(e),
390
+ snapshot: e.snapshot
391
+ }).getModel(e.state);
392
+ }
393
+ //#endregion
394
+ //#region src/analytical-table/dynamic-columns/dateColumns.ts
395
+ function H(e) {
232
396
  if (typeof e != "string" || e.length !== 10) return null;
233
- let t = h(e, "yyyy-MM-dd");
397
+ let t = p(e, "yyyy-MM-dd");
234
398
  return t?.kind === "date-time" ? t.date : null;
235
399
  }
236
- function k(e) {
237
- return p(e, E);
238
- }
239
- function A(e, a) {
400
+ function U(e, a) {
240
401
  switch (a) {
241
402
  case "day": return t(e);
242
403
  case "week": return o(e, 1);
@@ -245,7 +406,7 @@ function A(e, a) {
245
406
  case "year": return i(e);
246
407
  }
247
408
  }
248
- function j(t, n) {
409
+ function W(t, n) {
249
410
  switch (n) {
250
411
  case "day": return a(t, 1);
251
412
  case "week": return a(t, 7);
@@ -254,22 +415,22 @@ function j(t, n) {
254
415
  case "year": return e(t, 1);
255
416
  }
256
417
  }
257
- function M(e) {
258
- let t = O(e.from), n = O(e.to);
259
- if (!t || !n || k(t) !== e.from || k(n) !== e.to || e.from > e.to) throw Error("Некорректный календарный диапазон аналитических столбцов.");
418
+ function G(e) {
419
+ let t = H(e.from), n = H(e.to);
420
+ if (!t || !n || m(t) !== e.from || m(n) !== e.to || e.from > e.to) throw Error("Некорректный календарный диапазон аналитических столбцов.");
260
421
  let r = e.maxColumns ?? 366;
261
422
  if (!Number.isSafeInteger(r) || r < 1) throw Error("Лимит динамических столбцов должен быть положительным целым числом.");
262
423
  if (!e.id || e.identityColumnIds.length === 0) throw Error("Динамическим столбцам нужны идентификатор и ключи сопоставления фактов.");
263
- let i = [];
264
- for (let o = A(t, e.granularity); o <= n; o = j(o, e.granularity)) {
424
+ let i = [], o = U(t, e.granularity);
425
+ for (; o <= n;) {
265
426
  if (i.length >= r) throw Error(`Превышен лимит динамических столбцов: ${r}`);
266
- let t = k(o), n = k(a(j(o, e.granularity), -1));
427
+ let t = W(o, e.granularity), n = m(o), s = m(a(t, -1));
267
428
  i.push({
268
- id: `${e.id}:${e.granularity}:${t}`,
269
- label: e.granularity === "day" ? p(o, D) : `${t} — ${n}`,
270
- from: t < e.from ? e.from : t,
271
- to: n > e.to ? e.to : n
272
- });
429
+ id: `${e.id}:${e.granularity}:${n}`,
430
+ label: e.granularity === "day" ? f(o) : `${n} — ${s}`,
431
+ from: n < e.from ? e.from : n,
432
+ to: s > e.to ? e.to : s
433
+ }), o = t;
273
434
  }
274
435
  return {
275
436
  options: {
@@ -279,25 +440,29 @@ function M(e) {
279
440
  columns: i
280
441
  };
281
442
  }
282
- function N(e, t) {
443
+ function K(e, t) {
283
444
  if (t.options.identityColumnIds.some((t) => e[t] === void 0 || e[t] === null)) return;
284
- let n = O(e[t.options.dateColumnId]);
445
+ let n = H(e[t.options.dateColumnId]);
285
446
  if (!n) return;
286
- let r = k(n);
287
- if (!(r < t.options.from || r > t.options.to)) return `${t.options.id}:${t.options.granularity}:${k(A(n, t.options.granularity))}`;
288
- }
289
- function P(e) {
290
- let { rows: t, facts: n, plan: r } = e, i = /* @__PURE__ */ new Map();
291
- for (let e of n) {
292
- let t = N(e, r);
293
- if (!t) continue;
294
- let n = x(e, r.options.identityColumnIds), a = i.get(n);
295
- a || (a = /* @__PURE__ */ new Map(), i.set(n, a));
296
- let o = a.get(t);
297
- o ? o.push(e[r.options.measureColumnId]) : a.set(t, [e[r.options.measureColumnId]]);
447
+ let r = m(n);
448
+ if (!(r < t.options.from || r > t.options.to)) return `${t.options.id}:${t.options.granularity}:${m(U(n, t.options.granularity))}`;
449
+ }
450
+ function q(e, t) {
451
+ let n = /* @__PURE__ */ new Map();
452
+ for (let r of e) {
453
+ let e = K(r, t);
454
+ if (!e) continue;
455
+ let i = k(r, t.options.identityColumnIds), a = n.get(i);
456
+ a || (a = /* @__PURE__ */ new Map(), n.set(i, a));
457
+ let o = a.get(e);
458
+ o ? o.push(r[t.options.measureColumnId]) : a.set(e, [r[t.options.measureColumnId]]);
298
459
  }
460
+ return n;
461
+ }
462
+ function J(e) {
463
+ let { rows: t, facts: n, plan: r } = e, i = q(n, r);
299
464
  return t.map((e) => {
300
- let t = i.get(x(e.values, r.options.identityColumnIds)), n = { ...e.values };
465
+ let t = i.get(k(e.values, r.options.identityColumnIds)), n = { ...e.values };
301
466
  for (let e of r.columns) {
302
467
  if (Object.hasOwn(n, e.id)) throw Error(`Динамический столбец перезаписывает исходное поле: ${e.id}`);
303
468
  let i = t?.get(e.id);
@@ -309,56 +474,52 @@ function P(e) {
309
474
  };
310
475
  });
311
476
  }
312
- function F(e, t) {
477
+ function Y(e, t) {
313
478
  let n = /* @__PURE__ */ new Map();
314
479
  for (let r of e) {
315
- let e = N(r, t);
480
+ let e = K(r, t);
316
481
  if (!e) continue;
317
482
  let i = n.get(e);
318
483
  i ? i.push(r[t.options.measureColumnId]) : n.set(e, [r[t.options.measureColumnId]]);
319
484
  }
320
- return Object.fromEntries(t.columns.map((e) => [e.id, n.has(e.id) ? v(n.get(e.id) ?? [], t.options.aggregation) : null]));
485
+ return Object.fromEntries(t.columns.map((e) => {
486
+ let r = n.get(e.id);
487
+ return [e.id, r ? v(r, t.options.aggregation) : null];
488
+ }));
321
489
  }
322
490
  //#endregion
323
- //#region src/analytical-table/expansion.ts
324
- function I(e, t) {
325
- let n = new Set(t === "all" ? [] : t), r = (e) => e.map((e) => ({
326
- ...e,
327
- isExpanded: e.isExpandable && (t === "all" || n.has(e.id)),
328
- children: r(e.children)
329
- })), i = r(e.rows);
330
- return {
331
- ...e,
332
- rows: i,
333
- ...w(i)
334
- };
491
+ //#region src/analytical-table/projections/exportProjection.ts
492
+ function X(e) {
493
+ let t = "analytical-grand-total", n = t, r = 1;
494
+ for (; e.rowById.has(n);) n = `${t}:${r++}`;
495
+ return n;
335
496
  }
336
- //#endregion
337
- //#region src/analytical-table/exportProjection.ts
338
- function L(e) {
339
- let { model: t } = e, n = e.columns ?? t.columns, r = new Set(e.selectedRowIds ?? []), i = (e.scope === "visible" ? t.visibleRows : t.flatRows).filter((t) => (e.includeGroups !== !1 || t.kind !== "group") && (e.scope !== "selected" || r.has(t.id))).map((e) => ({
497
+ function Z(e) {
498
+ let { model: t, scope: n = "all", includeGroups: r = !0, includeGrandTotals: i = !1 } = e, a = e.columns ?? t.columns, o = new Set(e.selectedRowIds ?? []), s = n === "visible" ? t.visibleRows : t.flatRows, c = [];
499
+ for (let e of s) !r && e.kind === "group" || n === "selected" && !o.has(e.id) || c.push({
340
500
  id: e.id,
341
501
  level: e.level,
342
502
  kind: e.kind,
343
- values: n.map((t) => t.format ? t.format(e.values[t.id], e) : e.values[t.id])
344
- }));
345
- return e.includeGrandTotals && t.grandTotals && i.push({
346
- id: "analytical-grand-total",
347
- level: 0,
348
- kind: "grand",
349
- values: n.map((e) => {
350
- let n = t.grandTotals?.[e.id];
351
- return e.formatTotal ? e.formatTotal(n) : n;
352
- })
353
- }), {
354
- columns: n.map((e) => ({
503
+ values: a.map((t) => t.format ? t.format(e.values[t.id], e) : e.values[t.id])
504
+ });
505
+ if (i && t.grandTotals) {
506
+ let e = t.grandTotals;
507
+ c.push({
508
+ id: X(t),
509
+ level: 0,
510
+ kind: "grand",
511
+ values: a.map((t) => t.formatTotal ? t.formatTotal(e[t.id]) : e[t.id])
512
+ });
513
+ }
514
+ return {
515
+ columns: a.map((e) => ({
355
516
  id: e.id,
356
517
  label: e.label ?? e.id
357
518
  })),
358
- rows: i
519
+ rows: c
359
520
  };
360
521
  }
361
522
  //#endregion
362
- export { F as aggregateAnalyticalDateFacts, v as aggregateAnalyticalValues, T as buildAnalyticalTableModel, b as calculateAnalyticalValues, y as createAnalyticalCalculationPlan, M as createAnalyticalDateColumnsPlan, P as projectAnalyticalDateFacts, I as projectAnalyticalTableExpansion, L as projectAnalyticalTableExport };
523
+ export { Y as aggregateAnalyticalDateFacts, v as aggregateAnalyticalValues, V as buildAnalyticalTableModel, b as calculateAnalyticalValues, x as compileAnalyticalTableDefinition, y as createAnalyticalCalculationPlan, G as createAnalyticalDateColumnsPlan, B as createAnalyticalTableRuntime, J as projectAnalyticalDateFacts, E as projectAnalyticalTableExpansion, Z as projectAnalyticalTableExport };
363
524
 
364
525
  //# sourceMappingURL=index.js.map