@lumeer/pivot 0.0.13 → 0.2.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 (49) hide show
  1. package/fesm2022/lumeer-pivot.mjs +56 -43
  2. package/fesm2022/lumeer-pivot.mjs.map +1 -1
  3. package/index.d.ts +332 -5
  4. package/lumeer-pivot-0.2.0.tgz +0 -0
  5. package/package.json +4 -6
  6. package/esm2022/lib/directives/lmr-templates.directive.mjs +0 -27
  7. package/esm2022/lib/lmr-pivot-table.component.mjs +0 -147
  8. package/esm2022/lib/lmr-pivot-table.module.mjs +0 -63
  9. package/esm2022/lib/lmr-simple-pivot-table.component.mjs +0 -101
  10. package/esm2022/lib/pipes/cell-has-value.pipe.mjs +0 -35
  11. package/esm2022/lib/pipes/contrast-color.pipe.mjs +0 -41
  12. package/esm2022/lib/pipes/filter-visible-cells.pipe.mjs +0 -35
  13. package/esm2022/lib/pipes/is-cell-expandable.pipe.mjs +0 -35
  14. package/esm2022/lib/pipes/is-cell-expanded.pipe.mjs +0 -37
  15. package/esm2022/lib/pipes/is-cell-rows-expandable.pipe.mjs +0 -35
  16. package/esm2022/lib/pipes/pivot-data-empty.pipe.mjs +0 -38
  17. package/esm2022/lib/util/lmr-pivot-config.mjs +0 -17
  18. package/esm2022/lib/util/lmr-pivot-constants.mjs +0 -12
  19. package/esm2022/lib/util/lmr-pivot-data.mjs +0 -2
  20. package/esm2022/lib/util/lmr-pivot-state.mjs +0 -156
  21. package/esm2022/lib/util/lmr-pivot-table.mjs +0 -2
  22. package/esm2022/lib/util/lmr-simple-pivot-config.mjs +0 -2
  23. package/esm2022/lib/util/pivot-data-converter.mjs +0 -507
  24. package/esm2022/lib/util/pivot-table-converter.mjs +0 -1017
  25. package/esm2022/lib/util/pivot-util.mjs +0 -75
  26. package/esm2022/lumeer-pivot.mjs +0 -5
  27. package/esm2022/public-api.mjs +0 -13
  28. package/lib/directives/lmr-templates.directive.d.ts +0 -14
  29. package/lib/lmr-pivot-table.component.d.ts +0 -49
  30. package/lib/lmr-pivot-table.module.d.ts +0 -18
  31. package/lib/lmr-simple-pivot-table.component.d.ts +0 -38
  32. package/lib/pipes/cell-has-value.pipe.d.ts +0 -8
  33. package/lib/pipes/contrast-color.pipe.d.ts +0 -11
  34. package/lib/pipes/filter-visible-cells.pipe.d.ts +0 -9
  35. package/lib/pipes/is-cell-expandable.pipe.d.ts +0 -8
  36. package/lib/pipes/is-cell-expanded.pipe.d.ts +0 -9
  37. package/lib/pipes/is-cell-rows-expandable.pipe.d.ts +0 -8
  38. package/lib/pipes/pivot-data-empty.pipe.d.ts +0 -8
  39. package/lib/util/lmr-pivot-config.d.ts +0 -84
  40. package/lib/util/lmr-pivot-constants.d.ts +0 -11
  41. package/lib/util/lmr-pivot-data.d.ts +0 -50
  42. package/lib/util/lmr-pivot-state.d.ts +0 -14
  43. package/lib/util/lmr-pivot-table.d.ts +0 -25
  44. package/lib/util/lmr-simple-pivot-config.d.ts +0 -9
  45. package/lib/util/pivot-data-converter.d.ts +0 -46
  46. package/lib/util/pivot-table-converter.d.ts +0 -74
  47. package/lib/util/pivot-util.d.ts +0 -12
  48. package/lumeer-pivot-0.0.13.tgz +0 -0
  49. package/public-api.d.ts +0 -9
@@ -1,156 +0,0 @@
1
- import { isNullOrUndefined } from '@lumeer/utils';
2
- export function isCellExpandable(cell) {
3
- return isCellColumnsExpandable(cell) || isCellRowsExpandable(cell);
4
- }
5
- export function isCellColumnsExpandable(cell) {
6
- return cell?.expandable && cell?.childIndexes?.length > 1;
7
- }
8
- export function isCellRowsExpandable(cell) {
9
- return cell?.expandable && cell?.rowIndexes?.length > 1;
10
- }
11
- export function toggleExpanded(cell, columnIndex, state) {
12
- if (cell.originalRowIndex) {
13
- return toggleExpandedState(state, cell.originalRowIndex, columnIndex);
14
- }
15
- return state;
16
- }
17
- export function areCellsSame(c1, c2) {
18
- return c1?.summary === c2?.summary && c1?.value === c2?.value;
19
- }
20
- function toggleExpandedState(state, rowIndex, columnIndex) {
21
- if (isNullOrUndefined(rowIndex) || isNullOrUndefined(columnIndex) || rowIndex < 0 || columnIndex < 0) {
22
- return state;
23
- }
24
- const cellsCopy = [...(state?.cells || [])];
25
- const rowCopy = [...(cellsCopy[rowIndex] || [])];
26
- rowCopy[columnIndex] = { ...rowCopy[columnIndex], collapsed: !rowCopy[columnIndex]?.collapsed };
27
- cellsCopy[rowIndex] = rowCopy;
28
- return { ...state, cells: cellsCopy };
29
- }
30
- export function filterVisibleCells(cells, state, parentIndex = 0) {
31
- const cellsChildIndexesMap = createCellsChildIndexesMap(cells);
32
- return cells.reduce((currentRows, row, index) => {
33
- const firstCell = row[0];
34
- if (!firstCell) {
35
- return currentRows;
36
- }
37
- const originalRowIndex = parentIndex + index;
38
- if (firstCell.isAttributeHeader || firstCell.isSummary || firstCell.isValue) {
39
- currentRows.push(setOriginalRowIndexForHeaders(row, originalRowIndex));
40
- for (let i = 1; i < firstCell.rowSpan; i++) {
41
- currentRows.push(setOriginalRowIndexForHeaders(cells[index + i], originalRowIndex + i));
42
- }
43
- return currentRows;
44
- }
45
- if (isRowVisible(index, cellsChildIndexesMap, 0, state)) {
46
- if (row.some(cell => isCellColumnsExpandable(cell))) {
47
- const isCollapsed = state?.[index]?.[0]?.collapsed;
48
- if (isCollapsed) {
49
- const firstDataHeaderIndex = takeIf(row.findIndex(cell => cell.isValue), result => result >= 0) ?? 1;
50
- const rowCopy = [...row];
51
- rowCopy[0] = {
52
- ...row[0],
53
- colSpan: firstDataHeaderIndex,
54
- rowSpan: 1,
55
- originalRowIndex,
56
- };
57
- for (let i = 1; i < firstDataHeaderIndex; i++) {
58
- rowCopy[i] = undefined;
59
- }
60
- currentRows.push(rowCopy);
61
- }
62
- else {
63
- const nestedCells = sliceMatrix(cells, index, index + firstCell.rowSpan - 1, 1, cells[0].length - 1);
64
- const nestedState = sliceMatrix(state, index, index + firstCell.rowSpan - 1, 1, cells[0].length - 1);
65
- const nestedFilteredRows = filterVisibleCells(nestedCells, nestedState, originalRowIndex);
66
- const changedCell = {
67
- ...row[0],
68
- rowSpan: nestedFilteredRows.length,
69
- originalRowIndex,
70
- };
71
- const newRows = appendCellToMatrix(changedCell, nestedFilteredRows);
72
- currentRows.push(...newRows);
73
- }
74
- }
75
- else {
76
- currentRows.push(setOriginalRowIndexForHeaders(row, originalRowIndex));
77
- for (let i = 1; i < firstCell.rowSpan; i++) {
78
- currentRows.push(setOriginalRowIndexForHeaders(cells[index + i], originalRowIndex + i));
79
- }
80
- }
81
- }
82
- return currentRows;
83
- }, []);
84
- }
85
- function setOriginalRowIndexForHeaders(row, originalRowIndex) {
86
- const newRow = [];
87
- for (let i = 0; i < row.length; i++) {
88
- const cell = row[i];
89
- if (!cell) {
90
- newRow.push(cell);
91
- }
92
- else if (cell.isValue) {
93
- return [...newRow, ...row.slice(i)];
94
- }
95
- else {
96
- newRow.push({ ...cell, originalRowIndex });
97
- }
98
- }
99
- return newRow;
100
- }
101
- function appendCellToMatrix(cell, rows) {
102
- return rows.map((row, index) => index > 0 ? [undefined, ...row] : [cell, ...row]);
103
- }
104
- function takeIf(value, predicate) {
105
- return predicate(value) ? value : undefined;
106
- }
107
- function sliceMatrix(cells, fromRow, toRow, fromColumn, toColumn) {
108
- const slicedMatrix = [];
109
- for (let i = fromRow; i <= toRow; i++) {
110
- const row = (cells?.[i] || []).slice(fromColumn, toColumn + 1);
111
- slicedMatrix.push(row);
112
- }
113
- return slicedMatrix;
114
- }
115
- function createCellsChildIndexesMap(rowCells) {
116
- const firstCells = rowCells.map(rowCells => rowCells[0]);
117
- return createRowsChildIndexesMap(firstCells);
118
- }
119
- function createRowsChildIndexesMap(rowCells) {
120
- return (rowCells || []).reduce((map, cell, index) => {
121
- if (!cell?.expandable) {
122
- return map;
123
- }
124
- for (const childIndex of (cell?.rowIndexes || [])) {
125
- if (!map[childIndex])
126
- map[childIndex] = [];
127
- map[childIndex].push(index);
128
- }
129
- return map;
130
- }, []);
131
- }
132
- function isRowVisible(index, childIndexesMap, columnIndex, state) {
133
- const childIndexes = childIndexesMap?.[index] || [];
134
- return !childIndexes.length || childIndexes.some(childIndex => !state?.[childIndex]?.[columnIndex]?.collapsed);
135
- }
136
- export function collapseAllCells(table) {
137
- const cells = [];
138
- const tableCells = table?.cells || [];
139
- for (let i = 0; i < tableCells.length; i++) {
140
- const row = tableCells[i];
141
- for (let j = 0; j < row.length; j++) {
142
- const cell = row[j];
143
- if (cell?.isValue || cell?.isAttributeHeader || cell?.isHeader) {
144
- break;
145
- }
146
- if (isCellExpandable(cell)) {
147
- if (!cells[i]) {
148
- cells[i] = [];
149
- }
150
- cells[i][j] = { collapsed: true };
151
- }
152
- }
153
- }
154
- return { cells };
155
- }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1yLXBpdm90LXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG1yLXBpdm90LXRhYmxlL3NyYy9saWIvdXRpbC9sbXItcGl2b3Qtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBVWhELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUF1QjtJQUN0RCxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBdUI7SUFDN0QsT0FBTyxJQUFJLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQXVCO0lBQzFELE9BQU8sSUFBSSxFQUFFLFVBQVUsSUFBSSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBdUIsRUFBRSxXQUFtQixFQUFFLEtBQXlCO0lBQ3BHLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQXFCLEVBQUUsRUFBcUI7SUFDdkUsT0FBTyxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFBO0FBQy9ELENBQUM7QUFFRCxT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RyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsaUJBQWlCLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUMvRCxNQUFNO1lBQ1IsQ0FBQztZQUNELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNkLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sRUFBQyxLQUFLLEVBQUMsQ0FBQTtBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMbXJQaXZvdFRhYmxlLCBMbXJQaXZvdFRhYmxlQ2VsbH0gZnJvbSAnLi9sbXItcGl2b3QtdGFibGUnO1xuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSAnQGx1bWVlci91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG1yUGl2b3RUYWJsZVN0YXRlIHtcbiAgY2VsbHM/OiBMbXJQaXZvdFRhYmxlQ2VsbFN0YXRlW11bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExtclBpdm90VGFibGVDZWxsU3RhdGUge1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDZWxsRXhwYW5kYWJsZShjZWxsOiBMbXJQaXZvdFRhYmxlQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNDZWxsQ29sdW1uc0V4cGFuZGFibGUoY2VsbCkgfHwgaXNDZWxsUm93c0V4cGFuZGFibGUoY2VsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NlbGxDb2x1bW5zRXhwYW5kYWJsZShjZWxsOiBMbXJQaXZvdFRhYmxlQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbD8uZXhwYW5kYWJsZSAmJiBjZWxsPy5jaGlsZEluZGV4ZXM/Lmxlbmd0aCA+IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NlbGxSb3dzRXhwYW5kYWJsZShjZWxsOiBMbXJQaXZvdFRhYmxlQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbD8uZXhwYW5kYWJsZSAmJiBjZWxsPy5yb3dJbmRleGVzPy5sZW5ndGggPiAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRXhwYW5kZWQoY2VsbDogTG1yUGl2b3RUYWJsZUNlbGwsIGNvbHVtbkluZGV4OiBudW1iZXIsIHN0YXRlOiBMbXJQaXZvdFRhYmxlU3RhdGUpOiBMbXJQaXZvdFRhYmxlU3RhdGUge1xuICBpZiAoY2VsbC5vcmlnaW5hbFJvd0luZGV4KSB7XG4gICAgcmV0dXJuIHRvZ2dsZUV4cGFuZGVkU3RhdGUoc3RhdGUsIGNlbGwub3JpZ2luYWxSb3dJbmRleCwgY29sdW1uSW5kZXgpXG4gIH1cbiAgcmV0dXJuIHN0YXRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVDZWxsc1NhbWUoYzE6IExtclBpdm90VGFibGVDZWxsLCBjMjogTG1yUGl2b3RUYWJsZUNlbGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGMxPy5zdW1tYXJ5ID09PSBjMj8uc3VtbWFyeSAmJiBjMT8udmFsdWUgPT09IGMyPy52YWx1ZVxufVxuXG5mdW5jdGlvbiB0b2dnbGVFeHBhbmRlZFN0YXRlKHN0YXRlOiBMbXJQaXZvdFRhYmxlU3RhdGUsIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBMbXJQaXZvdFRhYmxlU3RhdGUge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocm93SW5kZXgpIHx8IGlzTnVsbE9yVW5kZWZpbmVkKGNvbHVtbkluZGV4KSB8fCByb3dJbmRleCA8IDAgfHwgY29sdW1uSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlXG4gIH1cblxuICBjb25zdCBjZWxsc0NvcHkgPSBbLi4uKHN0YXRlPy5jZWxscyB8fCBbXSldXG4gIGNvbnN0IHJvd0NvcHkgPSBbLi4uKGNlbGxzQ29weVtyb3dJbmRleF0gfHwgW10pXVxuICByb3dDb3B5W2NvbHVtbkluZGV4XSA9IHsuLi5yb3dDb3B5W2NvbHVtbkluZGV4XSwgY29sbGFwc2VkOiAhcm93Q29weVtjb2x1bW5JbmRleF0/LmNvbGxhcHNlZH1cbiAgY2VsbHNDb3B5W3Jvd0luZGV4XSA9IHJvd0NvcHlcbiAgcmV0dXJuIHsuLi5zdGF0ZSwgY2VsbHM6IGNlbGxzQ29weX1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclZpc2libGVDZWxscyhjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLCBzdGF0ZTogTG1yUGl2b3RUYWJsZUNlbGxTdGF0ZVtdW10sIHBhcmVudEluZGV4OiBudW1iZXIgPSAwKTogTG1yUGl2b3RUYWJsZUNlbGxbXVtdIHtcbiAgY29uc3QgY2VsbHNDaGlsZEluZGV4ZXNNYXAgPSBjcmVhdGVDZWxsc0NoaWxkSW5kZXhlc01hcChjZWxscyk7XG4gIHJldHVybiBjZWxscy5yZWR1Y2U8TG1yUGl2b3RUYWJsZUNlbGxbXVtdPigoY3VycmVudFJvd3MsIHJvdywgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaXJzdENlbGwgPSByb3dbMF1cbiAgICBpZiAoIWZpcnN0Q2VsbCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRSb3dzXG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbmFsUm93SW5kZXggPSBwYXJlbnRJbmRleCArIGluZGV4XG4gICAgaWYgKGZpcnN0Q2VsbC5pc0F0dHJpYnV0ZUhlYWRlciB8fCBmaXJzdENlbGwuaXNTdW1tYXJ5IHx8IGZpcnN0Q2VsbC5pc1ZhbHVlKSB7XG4gICAgICBjdXJyZW50Um93cy5wdXNoKHNldE9yaWdpbmFsUm93SW5kZXhGb3JIZWFkZXJzKHJvdywgb3JpZ2luYWxSb3dJbmRleCkpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0Q2VsbC5yb3dTcGFuOyBpKyspIHtcbiAgICAgICAgY3VycmVudFJvd3MucHVzaChzZXRPcmlnaW5hbFJvd0luZGV4Rm9ySGVhZGVycyhjZWxsc1tpbmRleCArIGldLCBvcmlnaW5hbFJvd0luZGV4ICsgaSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudFJvd3NcbiAgICB9XG5cbiAgICBpZiAoaXNSb3dWaXNpYmxlKGluZGV4LCBjZWxsc0NoaWxkSW5kZXhlc01hcCwgMCwgc3RhdGUpKSB7XG4gICAgICBpZiAocm93LnNvbWUoY2VsbCA9PiBpc0NlbGxDb2x1bW5zRXhwYW5kYWJsZShjZWxsKSkpIHtcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBzdGF0ZT8uW2luZGV4XT8uWzBdPy5jb2xsYXBzZWRcbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3REYXRhSGVhZGVySW5kZXggPSB0YWtlSWYocm93LmZpbmRJbmRleChjZWxsID0+IGNlbGwuaXNWYWx1ZSksIHJlc3VsdCA9PiByZXN1bHQgPj0gMCkgPz8gMVxuICAgICAgICAgIGNvbnN0IHJvd0NvcHkgPSBbLi4ucm93XVxuICAgICAgICAgIHJvd0NvcHlbMF0gPSB7XG4gICAgICAgICAgICAuLi5yb3dbMF0sXG4gICAgICAgICAgICBjb2xTcGFuOiBmaXJzdERhdGFIZWFkZXJJbmRleCxcbiAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICBvcmlnaW5hbFJvd0luZGV4LFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF0YUhlYWRlckluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIHJvd0NvcHlbaV0gPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudFJvd3MucHVzaChyb3dDb3B5KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZENlbGxzID0gc2xpY2VNYXRyaXgoY2VsbHMsIGluZGV4LCBpbmRleCArIGZpcnN0Q2VsbC5yb3dTcGFuIC0gMSwgMSwgY2VsbHNbMF0ubGVuZ3RoIC0gMSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWRTdGF0ZSA9IHNsaWNlTWF0cml4KHN0YXRlLCBpbmRleCwgaW5kZXggKyBmaXJzdENlbGwucm93U3BhbiAtIDEsIDEsIGNlbGxzWzBdLmxlbmd0aCAtIDEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRmlsdGVyZWRSb3dzID0gZmlsdGVyVmlzaWJsZUNlbGxzKG5lc3RlZENlbGxzLCBuZXN0ZWRTdGF0ZSwgb3JpZ2luYWxSb3dJbmRleClcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkQ2VsbCA9IHtcbiAgICAgICAgICAgIC4uLnJvd1swXSxcbiAgICAgICAgICAgIHJvd1NwYW46IG5lc3RlZEZpbHRlcmVkUm93cy5sZW5ndGgsXG4gICAgICAgICAgICBvcmlnaW5hbFJvd0luZGV4LFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdSb3dzID0gYXBwZW5kQ2VsbFRvTWF0cml4KGNoYW5nZWRDZWxsLCBuZXN0ZWRGaWx0ZXJlZFJvd3MpO1xuICAgICAgICAgIGN1cnJlbnRSb3dzLnB1c2goLi4ubmV3Um93cylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFJvd3MucHVzaChzZXRPcmlnaW5hbFJvd0luZGV4Rm9ySGVhZGVycyhyb3csIG9yaWdpbmFsUm93SW5kZXgpKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0Q2VsbC5yb3dTcGFuOyBpKyspIHtcbiAgICAgICAgICBjdXJyZW50Um93cy5wdXNoKHNldE9yaWdpbmFsUm93SW5kZXhGb3JIZWFkZXJzKGNlbGxzW2luZGV4ICsgaV0sIG9yaWdpbmFsUm93SW5kZXggKyBpKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50Um93c1xuICB9LCBbXSlcbn1cblxuZnVuY3Rpb24gc2V0T3JpZ2luYWxSb3dJbmRleEZvckhlYWRlcnMocm93OiBMbXJQaXZvdFRhYmxlQ2VsbFtdLCBvcmlnaW5hbFJvd0luZGV4OiBudW1iZXIpOiBMbXJQaXZvdFRhYmxlQ2VsbFtdIHtcbiAgY29uc3QgbmV3Um93ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2VsbCA9IHJvd1tpXTtcbiAgICBpZiAoIWNlbGwpIHtcbiAgICAgIG5ld1Jvdy5wdXNoKGNlbGwpO1xuICAgIH0gZWxzZSBpZiAoY2VsbC5pc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gWy4uLm5ld1JvdywgLi4ucm93LnNsaWNlKGkpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Um93LnB1c2goey4uLmNlbGwsIG9yaWdpbmFsUm93SW5kZXh9KVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3Um93XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENlbGxUb01hdHJpeChjZWxsOiBMbXJQaXZvdFRhYmxlQ2VsbCwgcm93czogTG1yUGl2b3RUYWJsZUNlbGxbXVtdKTogTG1yUGl2b3RUYWJsZUNlbGxbXVtdIHtcbiAgcmV0dXJuIHJvd3MubWFwKChyb3csIGluZGV4KSA9PiBpbmRleCA+IDAgPyBbdW5kZWZpbmVkLCAuLi5yb3ddIDogW2NlbGwsIC4uLnJvd10pXG59XG5cbmZ1bmN0aW9uIHRha2VJZjxUPih2YWx1ZTogVCwgcHJlZGljYXRlOiAodjogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcHJlZGljYXRlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHNsaWNlTWF0cml4PFQ+KGNlbGxzOiBUW11bXSwgZnJvbVJvdzogbnVtYmVyLCB0b1JvdzogbnVtYmVyLCBmcm9tQ29sdW1uOiBudW1iZXIsIHRvQ29sdW1uOiBudW1iZXIpOiBUW11bXSB7XG4gIGNvbnN0IHNsaWNlZE1hdHJpeDogVFtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IGZyb21Sb3c7IGkgPD0gdG9Sb3c7IGkrKykge1xuICAgIGNvbnN0IHJvdzogVFtdID0gKGNlbGxzPy5baV0gfHwgW10pLnNsaWNlKGZyb21Db2x1bW4sIHRvQ29sdW1uICsgMSk7XG4gICAgc2xpY2VkTWF0cml4LnB1c2gocm93KTtcbiAgfVxuXG4gIHJldHVybiBzbGljZWRNYXRyaXg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNlbGxzQ2hpbGRJbmRleGVzTWFwKHJvd0NlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10pOiBudW1iZXJbXVtdIHtcbiAgY29uc3QgZmlyc3RDZWxscyA9IHJvd0NlbGxzLm1hcChyb3dDZWxscyA9PiByb3dDZWxsc1swXSk7XG4gIHJldHVybiBjcmVhdGVSb3dzQ2hpbGRJbmRleGVzTWFwKGZpcnN0Q2VsbHMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSb3dzQ2hpbGRJbmRleGVzTWFwKHJvd0NlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdKTogbnVtYmVyW11bXSB7XG4gIHJldHVybiAocm93Q2VsbHMgfHwgW10pLnJlZHVjZSgobWFwLCBjZWxsLCBpbmRleCkgPT4ge1xuICAgIGlmICghY2VsbD8uZXhwYW5kYWJsZSkge1xuICAgICAgcmV0dXJuIG1hcFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGRJbmRleCBvZiAoY2VsbD8ucm93SW5kZXhlcyB8fCBbXSkpIHtcbiAgICAgIGlmICghbWFwW2NoaWxkSW5kZXhdKVxuICAgICAgICBtYXBbY2hpbGRJbmRleF0gPSBbXVxuICAgICAgbWFwW2NoaWxkSW5kZXhdLnB1c2goaW5kZXgpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBpc1Jvd1Zpc2libGUoaW5kZXg6IG51bWJlciwgY2hpbGRJbmRleGVzTWFwOiBudW1iZXJbXVtdLCBjb2x1bW5JbmRleDogbnVtYmVyLCBzdGF0ZTogTG1yUGl2b3RUYWJsZUNlbGxTdGF0ZVtdW10pOiBib29sZWFuIHtcbiAgY29uc3QgY2hpbGRJbmRleGVzID0gY2hpbGRJbmRleGVzTWFwPy5baW5kZXhdIHx8IFtdXG4gIHJldHVybiAhY2hpbGRJbmRleGVzLmxlbmd0aCB8fCBjaGlsZEluZGV4ZXMuc29tZShjaGlsZEluZGV4ID0+ICFzdGF0ZT8uW2NoaWxkSW5kZXhdPy5bY29sdW1uSW5kZXhdPy5jb2xsYXBzZWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZUFsbENlbGxzKHRhYmxlOiBMbXJQaXZvdFRhYmxlKTogTG1yUGl2b3RUYWJsZVN0YXRlIHtcbiAgY29uc3QgY2VsbHM6IExtclBpdm90VGFibGVDZWxsU3RhdGVbXVtdID0gW107XG4gIGNvbnN0IHRhYmxlQ2VsbHMgPSB0YWJsZT8uY2VsbHMgfHwgW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGVDZWxscy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJvdyA9IHRhYmxlQ2VsbHNbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGNlbGwgPSByb3dbal07XG4gICAgICBpZiAoY2VsbD8uaXNWYWx1ZSB8fCBjZWxsPy5pc0F0dHJpYnV0ZUhlYWRlciB8fCBjZWxsPy5pc0hlYWRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc0NlbGxFeHBhbmRhYmxlKGNlbGwpKSB7XG4gICAgICAgIGlmICghY2VsbHNbaV0pIHtcbiAgICAgICAgICBjZWxsc1tpXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNlbGxzW2ldW2pdID0ge2NvbGxhcHNlZDogdHJ1ZX07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7Y2VsbHN9XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1yLXBpdm90LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG1yLXBpdm90LXRhYmxlL3NyYy9saWIvdXRpbC9sbXItcGl2b3QtdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBMdW1lZXI6IE1vZGVybiBEYXRhIERlZmluaXRpb24gYW5kIFByb2Nlc3NpbmcgUGxhdGZvcm1cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIHNpbmNlIDIwMTcgTHVtZWVyLmlvLCBzLnIuby4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cbmltcG9ydCB7Q29uc3RyYWludCwgRGF0YVJlc291cmNlfSBmcm9tICdAbHVtZWVyL2RhdGEtZmlsdGVycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG1yUGl2b3RUYWJsZSB7XG4gIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG1yUGl2b3RUYWJsZUNlbGwge1xuICB2YWx1ZTogYW55O1xuICBkYXRhUmVzb3VyY2VzPzogRGF0YVJlc291cmNlW107XG4gIGNvbnN0cmFpbnQ/OiBDb25zdHJhaW50O1xuICBzdW1tYXJ5Pzogc3RyaW5nO1xuICByb3dTcGFuOiBudW1iZXI7XG4gIGNvbFNwYW46IG51bWJlcjtcbiAgY3NzQ2xhc3M6IHN0cmluZztcbiAgaXNWYWx1ZT86IGJvb2xlYW47XG4gIGlzSGVhZGVyPzogYm9vbGVhbjtcbiAgaXNBdHRyaWJ1dGVIZWFkZXI/OiBib29sZWFuO1xuICBpc1N1bW1hcnk/OiBib29sZWFuO1xuICBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgc3RpY2t5VG9wPzogYm9vbGVhbjtcbiAgc3RpY2t5U3RhcnQ/OiBib29sZWFuO1xuICByb3dJbmRleGVzPzogbnVtYmVyW107XG4gIGNoaWxkSW5kZXhlcz86IG51bWJlcltdO1xuICBvcmlnaW5hbFJvd0luZGV4PzogbnVtYmVyO1xuICBleHBhbmRhYmxlPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1yLXNpbXBsZS1waXZvdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sbXItcGl2b3QtdGFibGUvc3JjL2xpYi91dGlsL2xtci1zaW1wbGUtcGl2b3QtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xtclBpdm90Q29sdW1uQXR0cmlidXRlLCBMbXJQaXZvdFJvd0F0dHJpYnV0ZSwgTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZX0gZnJvbSAnLi9sbXItcGl2b3QtY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBMbXJTaW1wbGVQaXZvdENvbmZpZyB7XG4gIHJvd0F0dHJpYnV0ZXM6IExtclNpbXBsZVBpdm90Um93QXR0cmlidXRlW107XG4gIGNvbHVtbkF0dHJpYnV0ZXM6IExtclNpbXBsZVBpdm90Q29sdW1uQXR0cmlidXRlW107XG4gIHZhbHVlQXR0cmlidXRlczogTG1yU2ltcGxlUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdO1xufVxuXG5leHBvcnQgdHlwZSBMbXJTaW1wbGVQaXZvdFJvd0F0dHJpYnV0ZSA9IE9taXQ8TG1yUGl2b3RSb3dBdHRyaWJ1dGUsICdyZXNvdXJjZVR5cGUnIHwgJ3Jlc291cmNlSWQnIHwgJ3Jlc291cmNlSW5kZXgnPlxuZXhwb3J0IHR5cGUgTG1yU2ltcGxlUGl2b3RDb2x1bW5BdHRyaWJ1dGUgPSBPbWl0PExtclBpdm90Q29sdW1uQXR0cmlidXRlLCAncmVzb3VyY2VUeXBlJyB8ICdyZXNvdXJjZUlkJyB8ICdyZXNvdXJjZUluZGV4Jz5cbmV4cG9ydCB0eXBlIExtclNpbXBsZVBpdm90VmFsdWVBdHRyaWJ1dGUgPSBPbWl0PExtclBpdm90VmFsdWVBdHRyaWJ1dGUsICdyZXNvdXJjZVR5cGUnIHwgJ3Jlc291cmNlSWQnIHwgJ3Jlc291cmNlSW5kZXgnPlxuIl19