@quillsql/react 2.13.37 → 2.13.39

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 (101) hide show
  1. package/dist/cjs/Chart.d.ts +2 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +1 -2
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +68 -57
  6. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  7. package/dist/cjs/ReportBuilder.js +69 -51
  8. package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -1
  9. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  10. package/dist/cjs/components/Chart/ChartTooltip.js +3 -3
  11. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  12. package/dist/cjs/components/Chart/InternalChart.js +7 -1
  13. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  14. package/dist/cjs/components/Chart/LineChart.js +4 -4
  15. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  16. package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
  17. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
  18. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  19. package/dist/cjs/components/ReportBuilder/convert.js +73 -21
  20. package/dist/cjs/components/UiComponents.d.ts +2 -1
  21. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  22. package/dist/cjs/components/UiComponents.js +11 -4
  23. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  24. package/dist/cjs/hooks/useExport.js +4 -5
  25. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +19 -11
  26. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  27. package/dist/cjs/internals/ReportBuilder/PivotForm.js +62 -48
  28. package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
  29. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +28 -31
  30. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  31. package/dist/cjs/internals/ReportBuilder/PivotModal.js +315 -633
  32. package/dist/cjs/models/Pivot.d.ts +27 -7
  33. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  34. package/dist/cjs/utils/astProcessing.js +2 -2
  35. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  36. package/dist/cjs/utils/dashboard.js +36 -11
  37. package/dist/cjs/utils/merge.d.ts.map +1 -1
  38. package/dist/cjs/utils/merge.js +2 -1
  39. package/dist/cjs/utils/pivotConstructor.d.ts +1 -0
  40. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  41. package/dist/cjs/utils/pivotConstructor.js +37 -7
  42. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  43. package/dist/cjs/utils/pivotProcessing.js +10 -14
  44. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  45. package/dist/cjs/utils/queryConstructor.js +421 -134
  46. package/dist/cjs/utils/report.d.ts.map +1 -1
  47. package/dist/cjs/utils/report.js +2 -2
  48. package/dist/cjs/utils/textProcessing.d.ts +1 -1
  49. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  50. package/dist/cjs/utils/textProcessing.js +3 -0
  51. package/dist/esm/Chart.d.ts +2 -1
  52. package/dist/esm/Chart.d.ts.map +1 -1
  53. package/dist/esm/Chart.js +1 -2
  54. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  55. package/dist/esm/ChartBuilder.js +68 -57
  56. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  57. package/dist/esm/ReportBuilder.js +69 -51
  58. package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -1
  59. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  60. package/dist/esm/components/Chart/ChartTooltip.js +3 -3
  61. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  62. package/dist/esm/components/Chart/InternalChart.js +7 -1
  63. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  64. package/dist/esm/components/Chart/LineChart.js +4 -4
  65. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  66. package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
  67. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
  68. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  69. package/dist/esm/components/ReportBuilder/convert.js +74 -22
  70. package/dist/esm/components/UiComponents.d.ts +2 -1
  71. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  72. package/dist/esm/components/UiComponents.js +11 -4
  73. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  74. package/dist/esm/hooks/useExport.js +4 -5
  75. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +19 -11
  76. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  77. package/dist/esm/internals/ReportBuilder/PivotForm.js +63 -49
  78. package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
  79. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +28 -31
  80. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  81. package/dist/esm/internals/ReportBuilder/PivotModal.js +327 -635
  82. package/dist/esm/models/Pivot.d.ts +27 -7
  83. package/dist/esm/models/Pivot.d.ts.map +1 -1
  84. package/dist/esm/utils/astProcessing.js +2 -2
  85. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  86. package/dist/esm/utils/dashboard.js +36 -11
  87. package/dist/esm/utils/merge.d.ts.map +1 -1
  88. package/dist/esm/utils/merge.js +2 -1
  89. package/dist/esm/utils/pivotConstructor.d.ts +1 -0
  90. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  91. package/dist/esm/utils/pivotConstructor.js +37 -8
  92. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  93. package/dist/esm/utils/pivotProcessing.js +10 -14
  94. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  95. package/dist/esm/utils/queryConstructor.js +421 -134
  96. package/dist/esm/utils/report.d.ts.map +1 -1
  97. package/dist/esm/utils/report.js +2 -2
  98. package/dist/esm/utils/textProcessing.d.ts +1 -1
  99. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  100. package/dist/esm/utils/textProcessing.js +3 -0
  101. package/package.json +1 -1
@@ -2,12 +2,8 @@ import { ColumnInternal } from './Columns';
2
2
  /**
3
3
  * Represents the metadata of a pivot table.
4
4
  */
5
- export type Pivot = {
6
- aggregationType: 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
7
- valueField: string;
8
- valueField2?: string;
9
- valueField2Type?: string;
10
- valueFieldType?: string;
5
+ export type Pivot = SingleAggregationPivot | MultiAggregationPivot;
6
+ interface BasePivot {
11
7
  rowField?: string;
12
8
  rowFieldType?: string;
13
9
  columnField?: string;
@@ -20,7 +16,30 @@ export type Pivot = {
20
16
  triggerButtonText?: string;
21
17
  rowLimit?: number;
22
18
  columnValues?: string[];
23
- };
19
+ }
20
+ interface SingleAggregationPivot extends BasePivot {
21
+ aggregationType: AggregationType;
22
+ valueField?: string;
23
+ valueField2?: string;
24
+ valueField2Type?: string;
25
+ valueFieldType?: string;
26
+ aggregations?: never;
27
+ }
28
+ interface MultiAggregationPivot extends BasePivot {
29
+ aggregationType?: never;
30
+ valueField?: never;
31
+ valueField2?: never;
32
+ valueField2Type?: never;
33
+ valueFieldType?: never;
34
+ aggregations: {
35
+ valueField?: string;
36
+ valueFieldType?: string;
37
+ valueField2?: string;
38
+ valueField2Type?: string;
39
+ aggregationType: AggregationType;
40
+ }[];
41
+ }
42
+ export type AggregationType = 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
24
43
  export type PivotInfo = {
25
44
  pivot: Pivot;
26
45
  possibleRowFields: string[];
@@ -34,4 +53,5 @@ export type PivotData = {
34
53
  pivotQuery: string;
35
54
  comparisonPivotQuery?: string;
36
55
  };
56
+ export {};
37
57
  //# sourceMappingURL=Pivot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,eAAe,EACX,KAAK,GACL,SAAS,GACT,KAAK,GACL,KAAK,GACL,OAAO,GACP,KAAK,GACL,YAAY,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
1
+ {"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAGnE,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,UAAU,sBAAuB,SAAQ,SAAS;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AACD,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,YAAY,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,eAAe,CAAC;KAClC,EAAE,CAAC;CACL;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,CAAC;AAEjG,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
@@ -171,7 +171,7 @@ export function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
171
171
  }
172
172
  export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
173
173
  const referencedColumns = {};
174
- if (ast.columns === '*' || ast.columns[0].expr.column === '*') {
174
+ if (ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*') {
175
175
  // Be sure to select everything from stars
176
176
  const tableList = ast.from.map((table) => recursiveSearchByKey(table, 'table'));
177
177
  tableList.forEach((table) => {
@@ -510,7 +510,7 @@ export function getTablesHelper(ast, allTables) {
510
510
  for (const table in referencedColumns) {
511
511
  referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
512
512
  }
513
- const referencedTablesAndColumns = Object.keys(referencedColumns).map((tableName) => {
513
+ const referencedTablesAndColumns = onlyReferenceTables.map((tableName) => {
514
514
  return {
515
515
  name: tableName,
516
516
  columns: referencedColumns[tableName]?.map((column) => {
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CAyE9B;AAuID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CA+F9B;AA0ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
@@ -46,7 +46,19 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
46
46
  let pivotTable;
47
47
  let pivotError;
48
48
  try {
49
- pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
49
+ pivotTable = await getPivotTable({
50
+ ...item,
51
+ pivot: item.pivot ? {
52
+ ...item.pivot,
53
+ aggregations: item.pivot.aggregations ?? [{
54
+ valueField: item.pivot.valueField,
55
+ valueFieldType: item.pivot.valueFieldType,
56
+ valueField2: item.pivot.valueField2,
57
+ valueField2Type: item.pivot.valueField2Type,
58
+ aggregationType: item.pivot.aggregationType,
59
+ }]
60
+ } : undefined,
61
+ }, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
50
62
  }
51
63
  catch (e) {
52
64
  pivotTable = undefined;
@@ -74,7 +86,17 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
74
86
  pivot: pivotError
75
87
  ? undefined
76
88
  : item.pivot
77
- ? { ...item.pivot, columnValues: item.distinctStrings }
89
+ ? {
90
+ ...item.pivot,
91
+ aggregations: item.pivot.aggregations ?? [{
92
+ valueField: item.pivot.valueField,
93
+ valueFieldType: item.pivot.valueFieldType,
94
+ valueField2: item.pivot.valueField2,
95
+ valueField2Type: item.pivot.valueField2Type,
96
+ aggregationType: item.pivot.aggregationType,
97
+ }],
98
+ columnValues: item.distinctStrings
99
+ }
78
100
  : undefined,
79
101
  yAxisFields: pivotTable
80
102
  ? extractPivotedYAxis(pivotTable, item)
@@ -125,15 +147,18 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
125
147
  dataTypeID: fieldTypeToDataTypeID(pivot.rowFieldType || 'string'),
126
148
  });
127
149
  }
128
- if (pivot.valueField) {
129
- columns.push({
130
- field: pivot.valueField,
131
- label: snakeCaseToTitleCase(processColumnName(pivot.valueField)),
132
- format: pivot.valueFieldType || 'string',
133
- jsType: convertFieldTypeToJSType(pivot.valueFieldType || 'string'),
134
- fieldType: pivot.valueFieldType || 'string',
135
- dataTypeID: fieldTypeToDataTypeID(pivot.valueFieldType || 'string'),
136
- });
150
+ for (const agg of pivot.aggregations ?? []) {
151
+ if (agg.valueField) {
152
+ columns.push({
153
+ field: agg.valueField,
154
+ label: snakeCaseToTitleCase(processColumnName(agg.valueField)),
155
+ //FIXME: valueFieldType is not always the same as the format
156
+ format: agg.valueFieldType ?? 'whole_number',
157
+ jsType: agg.valueFieldType ?? 'number',
158
+ fieldType: agg.valueFieldType ?? 'number',
159
+ dataTypeID: fieldTypeToDataTypeID(agg.valueFieldType ?? 'number'),
160
+ });
161
+ }
137
162
  }
138
163
  return {
139
164
  rows: [],
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
@@ -1,6 +1,7 @@
1
1
  import { add, startOfDay, startOfMonth, startOfWeek, startOfYear, } from 'date-fns';
2
2
  import { isStringType } from './columnProcessing';
3
3
  import { utcToZonedTime } from 'date-fns-tz';
4
+ // FIXME: Update all of this as part of restoring date comparisons
4
5
  export function mergeComparisonRange(resp) {
5
6
  if (resp.chartType === 'table')
6
7
  return resp;
@@ -88,7 +89,7 @@ function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType
88
89
  return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
89
90
  }
90
91
  function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
91
- if (!pivot.rowField || !pivot.valueField) {
92
+ if (!pivot.rowField || !pivot.aggregations?.some((agg) => agg.valueField)) {
92
93
  return rows;
93
94
  }
94
95
  return rows.map((row) => {
@@ -19,4 +19,5 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
19
19
  comparisonPivotQuery?: string;
20
20
  getPivotRowCount?: boolean;
21
21
  }): Promise<PivotData>;
22
+ export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
22
23
  //# sourceMappingURL=pivotConstructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAiVrB"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAkWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAUnD"}
@@ -6,7 +6,7 @@ import { parseValueFromBigQueryDates } from './dataProcessing';
6
6
  import { getComparisonInterval } from './dates';
7
7
  import { mergeComparisonPivotColumns, mergeComparisonPivotRows } from './merge';
8
8
  import { additionalProcessingOnPivotQuery, generatePivotQuery, generateRowCountQuery, } from './queryConstructor';
9
- import { snakeCaseToTitleCase } from './textProcessing';
9
+ import { matchCasing, snakeCaseToTitleCase } from './textProcessing';
10
10
  export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, }) {
11
11
  let sqlQuery = pivotQuery;
12
12
  let comparisonPivotSql = comparisonPivotQuery;
@@ -15,7 +15,23 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
15
15
  pivot.columnField &&
16
16
  !pivot.columnValues &&
17
17
  !distinctStrings) {
18
- throw 'No distinct strings provided for column field';
18
+ if (!report?.rows) {
19
+ throw new Error('No distinct strings provided for column field');
20
+ }
21
+ else {
22
+ distinctStrings = Array.from(new Set(report.rows
23
+ .map((row) => row[pivot.columnField])
24
+ .filter((value) => value !== null && value !== undefined)));
25
+ }
26
+ }
27
+ if (!pivot.aggregations?.length && pivot.aggregationType) {
28
+ pivot.aggregations = [{
29
+ aggregationType: pivot.aggregationType,
30
+ valueField: pivot.valueField,
31
+ valueFieldType: pivot.valueFieldType,
32
+ valueField2: pivot.valueField2,
33
+ valueField2Type: pivot.valueField2Type,
34
+ }];
19
35
  }
20
36
  let comparisonInterval = undefined;
21
37
  if (dateFilter && dateFilter.comparisonRange) {
@@ -28,7 +44,7 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
28
44
  const rowColumn = report?.columns.find((column) => column.field === pivot.rowField);
29
45
  pivot.rowFieldType = rowColumn?.format || 'string';
30
46
  }
31
- const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
47
+ const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined && value !== '');
32
48
  const pivotColumnFields = filteredDistinctStrings?.slice(0, MAX_PIVOT_UNIQUE_VALUES);
33
49
  if (!pivotQuery && report) {
34
50
  if (!report.itemQuery) {
@@ -121,12 +137,12 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
121
137
  });
122
138
  }
123
139
  const columns = responseFields
124
- ?.map((field) => ({
140
+ ?.map((field, index) => ({
125
141
  field: processColumnName(field.name),
126
142
  label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
127
143
  format: field.name === pivot.rowField
128
144
  ? 'string'
129
- : (pivot.valueFieldType ?? pivot.aggregationType === 'percentage')
145
+ : (pivot.aggregations?.[index]?.aggregationType === 'percentage')
130
146
  ? 'percent'
131
147
  : 'whole_number',
132
148
  fieldType: field.fieldType,
@@ -214,11 +230,12 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
214
230
  // });
215
231
  // }
216
232
  // for the case of count agg on no value field
217
- columns?.forEach((column) => {
233
+ columns?.forEach((column, index) => {
218
234
  if (column.label &&
219
235
  ['null', 'undefined'].includes(column.label.toLowerCase()) &&
220
- !pivot.valueField &&
221
- pivot.aggregationType === 'count') {
236
+ !pivot.columnField &&
237
+ !pivot.aggregations?.[index]?.valueField &&
238
+ pivot.aggregations?.[index]?.aggregationType === 'count') {
222
239
  column.label = 'Count';
223
240
  }
224
241
  });
@@ -240,3 +257,15 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
240
257
  comparisonPivotQuery: comparisonPivotSql,
241
258
  };
242
259
  }
260
+ export function disambiguatedValueField(pivot) {
261
+ // console.log(pivot);
262
+ if (pivot.aggregations && pivot.aggregations.length > 0) {
263
+ if (pivot.aggregations.length === 1) {
264
+ return pivot.aggregations[0]?.valueField ?? pivot.valueField;
265
+ }
266
+ else {
267
+ return `${pivot.aggregations[0].valueField}_${matchCasing(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
268
+ }
269
+ }
270
+ return pivot.valueField;
271
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6B7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CA8BP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
1
+ {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAoCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
@@ -45,7 +45,7 @@ function generateTwoDPivotQuery(pivot, query, columns) {
45
45
  FROM original_query GROUP BY ${pivot.rowField}`;
46
46
  }
47
47
  export function isValidPivot(pivot) {
48
- if (!pivot.rowField && !pivot.valueField) {
48
+ if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
49
49
  return {
50
50
  valid: false,
51
51
  reason: 'Row field cannot be empty without a value field',
@@ -57,17 +57,7 @@ export function isValidPivot(pivot) {
57
57
  reason: 'Row field cannot be empty when column field is present',
58
58
  };
59
59
  }
60
- else if (!pivot.aggregationType) {
61
- return { valid: false, reason: 'Aggregation type cannot be empty' };
62
- }
63
- else if (pivot.aggregationType === 'percentage' &&
64
- (!pivot.valueField2 || !pivot.valueField)) {
65
- return {
66
- valid: false,
67
- reason: 'Percentage aggregation requires two value fields',
68
- };
69
- }
70
- else if (!pivot.valueField && pivot.aggregationType !== 'count') {
60
+ else if (pivot.aggregations?.some((a) => a.aggregationType !== 'count' && !a.valueField)) {
71
61
  return {
72
62
  valid: false,
73
63
  reason: 'Value field cannot be empty when aggregation is not "count"',
@@ -105,9 +95,9 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
105
95
  rowFields.push(column.field);
106
96
  }
107
97
  }
108
- // value fields can be numbers
98
+ // value fields can be numbers or bools
109
99
  // TODO: should "format" be used as the indicator, or fieldType?
110
- if (NUMBER_FORMAT_TYPES.includes(column.format)) {
100
+ if (NUMBER_FORMAT_TYPES.includes(column.format) || column.jsType === 'bool') {
111
101
  if (!isIdColumn(column.field)) {
112
102
  valueFields.push(column.field);
113
103
  }
@@ -142,6 +132,12 @@ export function cleanPivot(pivot, possibleColumns) {
142
132
  !possibleColumns.columnFields.includes(pivot.columnField)) {
143
133
  pivot.columnField = undefined;
144
134
  }
135
+ if (pivot.aggregationType) {
136
+ pivot.aggregations = [{
137
+ valueField: pivot.valueField,
138
+ aggregationType: pivot.aggregationType,
139
+ }];
140
+ }
145
141
  return pivot;
146
142
  }
147
143
  export const isPivotPossible = (fields, pivot) => {
@@ -1 +1 @@
1
- {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA6aD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAmD5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
1
+ {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA8uBD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAgE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}