@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"}
@@ -185,7 +185,7 @@ function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
185
185
  }
186
186
  function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
187
187
  const referencedColumns = {};
188
- if (ast.columns === '*' || ast.columns[0].expr.column === '*') {
188
+ if (ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*') {
189
189
  // Be sure to select everything from stars
190
190
  const tableList = ast.from.map((table) => recursiveSearchByKey(table, 'table'));
191
191
  tableList.forEach((table) => {
@@ -529,7 +529,7 @@ function getTablesHelper(ast, allTables) {
529
529
  for (const table in referencedColumns) {
530
530
  referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
531
531
  }
532
- const referencedTablesAndColumns = Object.keys(referencedColumns).map((tableName) => {
532
+ const referencedTablesAndColumns = onlyReferenceTables.map((tableName) => {
533
533
  return {
534
534
  name: tableName,
535
535
  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"}
@@ -50,7 +50,19 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
50
50
  let pivotTable;
51
51
  let pivotError;
52
52
  try {
53
- pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
53
+ pivotTable = await getPivotTable({
54
+ ...item,
55
+ pivot: item.pivot ? {
56
+ ...item.pivot,
57
+ aggregations: item.pivot.aggregations ?? [{
58
+ valueField: item.pivot.valueField,
59
+ valueFieldType: item.pivot.valueFieldType,
60
+ valueField2: item.pivot.valueField2,
61
+ valueField2Type: item.pivot.valueField2Type,
62
+ aggregationType: item.pivot.aggregationType,
63
+ }]
64
+ } : undefined,
65
+ }, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
54
66
  }
55
67
  catch (e) {
56
68
  pivotTable = undefined;
@@ -78,7 +90,17 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
78
90
  pivot: pivotError
79
91
  ? undefined
80
92
  : item.pivot
81
- ? { ...item.pivot, columnValues: item.distinctStrings }
93
+ ? {
94
+ ...item.pivot,
95
+ aggregations: item.pivot.aggregations ?? [{
96
+ valueField: item.pivot.valueField,
97
+ valueFieldType: item.pivot.valueFieldType,
98
+ valueField2: item.pivot.valueField2,
99
+ valueField2Type: item.pivot.valueField2Type,
100
+ aggregationType: item.pivot.aggregationType,
101
+ }],
102
+ columnValues: item.distinctStrings
103
+ }
82
104
  : undefined,
83
105
  yAxisFields: pivotTable
84
106
  ? extractPivotedYAxis(pivotTable, item)
@@ -129,15 +151,18 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
129
151
  dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(pivot.rowFieldType || 'string'),
130
152
  });
131
153
  }
132
- if (pivot.valueField) {
133
- columns.push({
134
- field: pivot.valueField,
135
- label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(pivot.valueField)),
136
- format: pivot.valueFieldType || 'string',
137
- jsType: (0, columnProcessing_1.convertFieldTypeToJSType)(pivot.valueFieldType || 'string'),
138
- fieldType: pivot.valueFieldType || 'string',
139
- dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(pivot.valueFieldType || 'string'),
140
- });
154
+ for (const agg of pivot.aggregations ?? []) {
155
+ if (agg.valueField) {
156
+ columns.push({
157
+ field: agg.valueField,
158
+ label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(agg.valueField)),
159
+ //FIXME: valueFieldType is not always the same as the format
160
+ format: agg.valueFieldType ?? 'whole_number',
161
+ jsType: agg.valueFieldType ?? 'number',
162
+ fieldType: agg.valueFieldType ?? 'number',
163
+ dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(agg.valueFieldType ?? 'number'),
164
+ });
165
+ }
141
166
  }
142
167
  return {
143
168
  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"}
@@ -7,6 +7,7 @@ exports.mergeComparisonPivotRows = mergeComparisonPivotRows;
7
7
  const date_fns_1 = require("date-fns");
8
8
  const columnProcessing_1 = require("./columnProcessing");
9
9
  const date_fns_tz_1 = require("date-fns-tz");
10
+ // FIXME: Update all of this as part of restoring date comparisons
10
11
  function mergeComparisonRange(resp) {
11
12
  if (resp.chartType === 'table')
12
13
  return resp;
@@ -94,7 +95,7 @@ function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType
94
95
  return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
95
96
  }
96
97
  function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
97
- if (!pivot.rowField || !pivot.valueField) {
98
+ if (!pivot.rowField || !pivot.aggregations?.some((agg) => agg.valueField)) {
98
99
  return rows;
99
100
  }
100
101
  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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generatePivotWithSQL = generatePivotWithSQL;
4
+ exports.disambiguatedValueField = disambiguatedValueField;
4
5
  const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
5
6
  const columnProcessing_1 = require("./columnProcessing");
6
7
  const constants_1 = require("./constants");
@@ -18,7 +19,23 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
18
19
  pivot.columnField &&
19
20
  !pivot.columnValues &&
20
21
  !distinctStrings) {
21
- throw 'No distinct strings provided for column field';
22
+ if (!report?.rows) {
23
+ throw new Error('No distinct strings provided for column field');
24
+ }
25
+ else {
26
+ distinctStrings = Array.from(new Set(report.rows
27
+ .map((row) => row[pivot.columnField])
28
+ .filter((value) => value !== null && value !== undefined)));
29
+ }
30
+ }
31
+ if (!pivot.aggregations?.length && pivot.aggregationType) {
32
+ pivot.aggregations = [{
33
+ aggregationType: pivot.aggregationType,
34
+ valueField: pivot.valueField,
35
+ valueFieldType: pivot.valueFieldType,
36
+ valueField2: pivot.valueField2,
37
+ valueField2Type: pivot.valueField2Type,
38
+ }];
22
39
  }
23
40
  let comparisonInterval = undefined;
24
41
  if (dateFilter && dateFilter.comparisonRange) {
@@ -31,7 +48,7 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
31
48
  const rowColumn = report?.columns.find((column) => column.field === pivot.rowField);
32
49
  pivot.rowFieldType = rowColumn?.format || 'string';
33
50
  }
34
- const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
51
+ const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined && value !== '');
35
52
  const pivotColumnFields = filteredDistinctStrings?.slice(0, constants_1.MAX_PIVOT_UNIQUE_VALUES);
36
53
  if (!pivotQuery && report) {
37
54
  if (!report.itemQuery) {
@@ -124,12 +141,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
124
141
  });
125
142
  }
126
143
  const columns = responseFields
127
- ?.map((field) => ({
144
+ ?.map((field, index) => ({
128
145
  field: (0, columnProcessing_1.processColumnName)(field.name),
129
146
  label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
130
147
  format: field.name === pivot.rowField
131
148
  ? 'string'
132
- : (pivot.valueFieldType ?? pivot.aggregationType === 'percentage')
149
+ : (pivot.aggregations?.[index]?.aggregationType === 'percentage')
133
150
  ? 'percent'
134
151
  : 'whole_number',
135
152
  fieldType: field.fieldType,
@@ -217,11 +234,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
217
234
  // });
218
235
  // }
219
236
  // for the case of count agg on no value field
220
- columns?.forEach((column) => {
237
+ columns?.forEach((column, index) => {
221
238
  if (column.label &&
222
239
  ['null', 'undefined'].includes(column.label.toLowerCase()) &&
223
- !pivot.valueField &&
224
- pivot.aggregationType === 'count') {
240
+ !pivot.columnField &&
241
+ !pivot.aggregations?.[index]?.valueField &&
242
+ pivot.aggregations?.[index]?.aggregationType === 'count') {
225
243
  column.label = 'Count';
226
244
  }
227
245
  });
@@ -243,3 +261,15 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
243
261
  comparisonPivotQuery: comparisonPivotSql,
244
262
  };
245
263
  }
264
+ function disambiguatedValueField(pivot) {
265
+ // console.log(pivot);
266
+ if (pivot.aggregations && pivot.aggregations.length > 0) {
267
+ if (pivot.aggregations.length === 1) {
268
+ return pivot.aggregations[0]?.valueField ?? pivot.valueField;
269
+ }
270
+ else {
271
+ return `${pivot.aggregations[0].valueField}_${(0, textProcessing_1.matchCasing)(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
272
+ }
273
+ }
274
+ return pivot.valueField;
275
+ }
@@ -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"}
@@ -52,7 +52,7 @@ function generateTwoDPivotQuery(pivot, query, columns) {
52
52
  FROM original_query GROUP BY ${pivot.rowField}`;
53
53
  }
54
54
  function isValidPivot(pivot) {
55
- if (!pivot.rowField && !pivot.valueField) {
55
+ if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
56
56
  return {
57
57
  valid: false,
58
58
  reason: 'Row field cannot be empty without a value field',
@@ -64,17 +64,7 @@ function isValidPivot(pivot) {
64
64
  reason: 'Row field cannot be empty when column field is present',
65
65
  };
66
66
  }
67
- else if (!pivot.aggregationType) {
68
- return { valid: false, reason: 'Aggregation type cannot be empty' };
69
- }
70
- else if (pivot.aggregationType === 'percentage' &&
71
- (!pivot.valueField2 || !pivot.valueField)) {
72
- return {
73
- valid: false,
74
- reason: 'Percentage aggregation requires two value fields',
75
- };
76
- }
77
- else if (!pivot.valueField && pivot.aggregationType !== 'count') {
67
+ else if (pivot.aggregations?.some((a) => a.aggregationType !== 'count' && !a.valueField)) {
78
68
  return {
79
69
  valid: false,
80
70
  reason: 'Value field cannot be empty when aggregation is not "count"',
@@ -112,9 +102,9 @@ function getPossiblePivotFieldOptions(columns, uniqueValues) {
112
102
  rowFields.push(column.field);
113
103
  }
114
104
  }
115
- // value fields can be numbers
105
+ // value fields can be numbers or bools
116
106
  // TODO: should "format" be used as the indicator, or fieldType?
117
- if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format)) {
107
+ if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format) || column.jsType === 'bool') {
118
108
  if (!(0, util_1.isIdColumn)(column.field)) {
119
109
  valueFields.push(column.field);
120
110
  }
@@ -149,6 +139,12 @@ function cleanPivot(pivot, possibleColumns) {
149
139
  !possibleColumns.columnFields.includes(pivot.columnField)) {
150
140
  pivot.columnField = undefined;
151
141
  }
142
+ if (pivot.aggregationType) {
143
+ pivot.aggregations = [{
144
+ valueField: pivot.valueField,
145
+ aggregationType: pivot.aggregationType,
146
+ }];
147
+ }
152
148
  return pivot;
153
149
  }
154
150
  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"}