@finos/legend-query-builder 4.17.98 → 4.17.100

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 (138) hide show
  1. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
  2. package/lib/components/explorer/QueryBuilderExplorerPanel.js +13 -11
  3. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  4. package/lib/components/fetch-structure/QueryBuilderTDSComponentHelper.d.ts.map +1 -1
  5. package/lib/components/fetch-structure/QueryBuilderTDSComponentHelper.js +13 -11
  6. package/lib/components/fetch-structure/QueryBuilderTDSComponentHelper.js.map +1 -1
  7. package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
  8. package/lib/components/result/QueryBuilderResultPanel.js +1 -1
  9. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  10. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts +42 -0
  11. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts.map +1 -0
  12. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js +212 -0
  13. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js.map +1 -0
  14. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts +66 -0
  15. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts.map +1 -0
  16. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js +265 -0
  17. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js.map +1 -0
  18. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts +28 -0
  19. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts.map +1 -0
  20. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js +148 -0
  21. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js.map +1 -0
  22. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts +19 -0
  23. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts.map +1 -0
  24. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js +196 -0
  25. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js.map +1 -0
  26. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts +5 -0
  27. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts.map +1 -1
  28. package/lib/components/result/tds/QueryBuilderTDSGridResult.js +64 -87
  29. package/lib/components/result/tds/QueryBuilderTDSGridResult.js.map +1 -1
  30. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts +26 -0
  31. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts.map +1 -0
  32. package/lib/components/result/tds/QueryBuilderTDSGridShared.js +51 -0
  33. package/lib/components/result/tds/QueryBuilderTDSGridShared.js.map +1 -0
  34. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts +5 -0
  35. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts.map +1 -1
  36. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js +169 -60
  37. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js.map +1 -1
  38. package/lib/data-access-overview.css +1 -1
  39. package/lib/index.css +2 -2
  40. package/lib/index.css.map +1 -1
  41. package/lib/package.json +1 -1
  42. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  43. package/lib/stores/QueryBuilderResultState.js +7 -1
  44. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  45. package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts +7 -0
  46. package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts.map +1 -1
  47. package/lib/stores/QueryBuilderValueSpecificationHelper.js +31 -13
  48. package/lib/stores/QueryBuilderValueSpecificationHelper.js.map +1 -1
  49. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.d.ts.map +1 -1
  50. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js +6 -4
  51. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js.map +1 -1
  52. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.d.ts.map +1 -1
  53. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js +6 -4
  54. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js.map +1 -1
  55. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
  56. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js +14 -12
  57. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
  58. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
  59. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js +12 -10
  60. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
  61. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.d.ts.map +1 -1
  62. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js +10 -8
  63. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js.map +1 -1
  64. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.d.ts.map +1 -1
  65. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.js +4 -2
  66. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.js.map +1 -1
  67. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
  68. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js +12 -10
  69. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
  70. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.d.ts.map +1 -1
  71. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js +6 -4
  72. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js.map +1 -1
  73. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
  74. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +6 -6
  75. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
  76. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
  77. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +6 -6
  78. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
  79. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
  80. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +14 -12
  81. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
  82. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
  83. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +12 -10
  84. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
  85. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
  86. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +12 -10
  87. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
  88. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts.map +1 -1
  89. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +17 -13
  90. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
  91. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts.map +1 -1
  92. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js +3 -2
  93. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -1
  94. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
  95. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +12 -10
  96. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
  97. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
  98. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +12 -10
  99. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
  100. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
  101. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +6 -6
  102. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
  103. package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts.map +1 -1
  104. package/lib/stores/shared/ValueSpecificationEditorHelper.js +3 -2
  105. package/lib/stores/shared/ValueSpecificationEditorHelper.js.map +1 -1
  106. package/package.json +5 -5
  107. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +13 -10
  108. package/src/components/fetch-structure/QueryBuilderTDSComponentHelper.tsx +13 -10
  109. package/src/components/result/QueryBuilderResultPanel.tsx +6 -2
  110. package/src/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.ts +254 -0
  111. package/src/components/result/tds/QueryBuilderTDSCellSelectionStats.ts +397 -0
  112. package/src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx +439 -0
  113. package/src/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.ts +270 -0
  114. package/src/components/result/tds/QueryBuilderTDSGridResult.tsx +107 -112
  115. package/src/components/result/tds/QueryBuilderTDSGridShared.ts +76 -0
  116. package/src/components/result/tds/QueryBuilderTDSSimpleGridResult.tsx +272 -99
  117. package/src/stores/QueryBuilderResultState.ts +10 -1
  118. package/src/stores/QueryBuilderValueSpecificationHelper.ts +35 -10
  119. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.ts +5 -3
  120. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.ts +5 -3
  121. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.ts +16 -13
  122. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.ts +18 -11
  123. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.ts +12 -9
  124. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.ts +6 -1
  125. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.ts +18 -11
  126. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.ts +5 -3
  127. package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +9 -5
  128. package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +9 -5
  129. package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +16 -13
  130. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +18 -11
  131. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +18 -11
  132. package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +23 -14
  133. package/src/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.ts +3 -1
  134. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +18 -11
  135. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +18 -11
  136. package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +9 -5
  137. package/src/stores/shared/ValueSpecificationEditorHelper.ts +6 -2
  138. package/tsconfig.json +5 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { type TDSResultCellData } from '@finos/legend-graph';
17
+ export interface ValueFrequency {
18
+ /** String representation of the value, or '(other)' / '(empty)' for synthetic buckets */
19
+ label: string;
20
+ count: number;
21
+ /** True for the synthetic '(other)' bucket */
22
+ isOther?: boolean;
23
+ /** True for the synthetic '(empty)' bucket */
24
+ isEmpty?: boolean;
25
+ }
26
+ export interface DistributionBucket {
27
+ /** Lower bound of the bucket (inclusive) */
28
+ lower: number;
29
+ /** Upper bound of the bucket (exclusive, except the last which is inclusive) */
30
+ upper: number;
31
+ /** Number of values that fall in this bucket */
32
+ count: number;
33
+ /** For date columns: human-readable label for lower bound */
34
+ lowerDateLabel?: string;
35
+ /** For date columns: human-readable label for upper bound */
36
+ upperDateLabel?: string;
37
+ }
38
+ /** Discriminates how the chart tooltip should describe bucket bounds */
39
+ export type DistributionChartType = 'numeric' | 'string-length' | 'date';
40
+ export interface CellSelectionStats {
41
+ count: number;
42
+ uniqueCount: number;
43
+ nullCount: number;
44
+ min: number | undefined;
45
+ max: number | undefined;
46
+ sum: number | undefined;
47
+ avg: number | undefined;
48
+ dateMin: string | undefined;
49
+ dateMax: string | undefined;
50
+ strMinLength: number | undefined;
51
+ strMaxLength: number | undefined;
52
+ /** Frequency distribution histogram buckets.
53
+ * Computed for numeric, string (length), and date columns.
54
+ * undefined for other types. */
55
+ distributionBuckets: DistributionBucket[] | undefined;
56
+ /** Describes what the bucket bounds represent, for tooltip formatting */
57
+ distributionChartType: DistributionChartType | undefined;
58
+ /** Top-10 value frequencies for the Unique Count tooltip, plus optional (other) */
59
+ valueFrequencies: ValueFrequency[] | undefined;
60
+ }
61
+ /**
62
+ * Compute summary statistics for a cell selection.
63
+ * ...existing code...
64
+ */
65
+ export declare const computeCellSelectionStats: (selectedCells: TDSResultCellData[], columnTypes: Map<string, string | undefined>) => CellSelectionStats | undefined;
66
+ //# sourceMappingURL=QueryBuilderTDSCellSelectionStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTDSCellSelectionStats.d.ts","sourceRoot":"","sources":["../../../../src/components/result/tds/QueryBuilderTDSCellSelectionStats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;qCAEiC;IACjC,mBAAmB,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACtD,yEAAyE;IACzE,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,mFAAmF;IACnF,gBAAgB,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;CAChD;AAiSD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GACpC,eAAe,iBAAiB,EAAE,EAClC,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAC3C,kBAAkB,GAAG,SAoCvB,CAAC"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { PRIMITIVE_TYPE } from '@finos/legend-graph';
17
+ const NUMERIC_TYPES = new Set([
18
+ PRIMITIVE_TYPE.INTEGER,
19
+ PRIMITIVE_TYPE.FLOAT,
20
+ PRIMITIVE_TYPE.DECIMAL,
21
+ PRIMITIVE_TYPE.NUMBER,
22
+ ]);
23
+ const DATE_TYPES = new Set([
24
+ PRIMITIVE_TYPE.DATE,
25
+ PRIMITIVE_TYPE.STRICTDATE,
26
+ PRIMITIVE_TYPE.DATETIME,
27
+ ]);
28
+ const STRING_TYPES = new Set([PRIMITIVE_TYPE.STRING]);
29
+ const MAX_BUCKETS = 20;
30
+ /**
31
+ * Build a frequency-distribution histogram for an array of numeric values.
32
+ * ...existing code...
33
+ */
34
+ const computeDistribution = (values) => {
35
+ if (values.length === 0) {
36
+ return [];
37
+ }
38
+ const dataMin = Math.min(...values);
39
+ const dataMax = Math.max(...values);
40
+ const range = dataMax - dataMin;
41
+ if (range === 0) {
42
+ return [{ lower: dataMin, upper: dataMax, count: values.length }];
43
+ }
44
+ // Use exact integer buckets when range is small enough
45
+ const allIntegers = values.every((v) => Number.isInteger(v));
46
+ const intRange = dataMax - dataMin + 1;
47
+ let bucketCount;
48
+ if (allIntegers && intRange <= MAX_BUCKETS) {
49
+ bucketCount = intRange;
50
+ }
51
+ else {
52
+ // Sturges' rule, capped at MAX_BUCKETS
53
+ bucketCount = Math.min(MAX_BUCKETS, Math.ceil(Math.log2(values.length) + 1));
54
+ }
55
+ const bucketSize = range / bucketCount;
56
+ const buckets = Array.from({ length: bucketCount }, (_, i) => ({
57
+ lower: dataMin + i * bucketSize,
58
+ upper: dataMin + (i + 1) * bucketSize,
59
+ count: 0,
60
+ }));
61
+ for (const v of values) {
62
+ const idx = Math.min(bucketCount - 1, Math.floor((v - dataMin) / bucketSize));
63
+ const bucket = buckets[idx];
64
+ if (bucket) {
65
+ bucket.count += 1;
66
+ }
67
+ }
68
+ return buckets;
69
+ };
70
+ /**
71
+ * Format an epoch-ms timestamp back to an ISO date/datetime string.
72
+ * Uses date-only format (YYYY-MM-DD) when the time component is midnight UTC.
73
+ */
74
+ const epochToDateLabel = (epochMs) => {
75
+ const d = new Date(epochMs);
76
+ if (d.getUTCHours() === 0 &&
77
+ d.getUTCMinutes() === 0 &&
78
+ d.getUTCSeconds() === 0 &&
79
+ d.getUTCMilliseconds() === 0) {
80
+ return d.toISOString().slice(0, 10);
81
+ }
82
+ return d.toISOString().replace('T', ' ').slice(0, 19);
83
+ };
84
+ /**
85
+ * Build a frequency-distribution histogram for an array of ISO date strings.
86
+ * Buckets are computed over epoch-ms timestamps; each bucket carries
87
+ * human-readable date labels for tooltip display.
88
+ */
89
+ const computeDateDistribution = (dateStrings) => {
90
+ if (dateStrings.length === 0) {
91
+ return [];
92
+ }
93
+ const epochs = dateStrings
94
+ .map((s) => Date.parse(s))
95
+ .filter((e) => !Number.isNaN(e));
96
+ if (epochs.length === 0) {
97
+ return [];
98
+ }
99
+ const raw = computeDistribution(epochs);
100
+ return raw.map((b) => ({
101
+ ...b,
102
+ lowerDateLabel: epochToDateLabel(b.lower),
103
+ upperDateLabel: epochToDateLabel(b.upper),
104
+ }));
105
+ };
106
+ const MAX_FREQ_ENTRIES = 10;
107
+ /**
108
+ * Safely convert an unknown value to a string key.
109
+ * Objects are serialised with JSON.stringify to avoid '[object Object]'.
110
+ */
111
+ const valueToString = (v) => {
112
+ if (typeof v === 'string') {
113
+ return v;
114
+ }
115
+ if (typeof v === 'number' || typeof v === 'boolean') {
116
+ return String(v);
117
+ }
118
+ if (v === null || v === undefined) {
119
+ return '';
120
+ }
121
+ return JSON.stringify(v);
122
+ };
123
+ /**
124
+ * Build top-N value frequency list from non-null values.
125
+ * Values beyond the top N are collapsed into a single '(other)' entry.
126
+ * If nullCount > 0, an '(empty)' entry is appended at the end.
127
+ */
128
+ const computeValueFrequencies = (nonNullValues, nullCount) => {
129
+ const freq = new Map();
130
+ for (const v of nonNullValues) {
131
+ const key = valueToString(v);
132
+ freq.set(key, (freq.get(key) ?? 0) + 1);
133
+ }
134
+ const sorted = [...freq.entries()].sort((a, b) => b[1] - a[1]);
135
+ const top = sorted.slice(0, MAX_FREQ_ENTRIES);
136
+ const otherCount = sorted
137
+ .slice(MAX_FREQ_ENTRIES)
138
+ .reduce((s, [, c]) => s + c, 0);
139
+ const result = top.map(([label, count]) => ({
140
+ label,
141
+ count,
142
+ }));
143
+ if (otherCount > 0) {
144
+ result.push({ label: '(other)', count: otherCount, isOther: true });
145
+ }
146
+ if (nullCount > 0) {
147
+ result.push({ label: '(empty)', count: nullCount, isEmpty: true });
148
+ }
149
+ return result;
150
+ };
151
+ const classifyColumns = (columnNames, columnTypes) => {
152
+ const isType = (typeSet) => [...columnNames].every((col) => {
153
+ const t = columnTypes.get(col);
154
+ return t !== undefined && typeSet.has(t);
155
+ });
156
+ if (isType(NUMERIC_TYPES)) {
157
+ return 'numeric';
158
+ }
159
+ if (isType(DATE_TYPES)) {
160
+ return 'date';
161
+ }
162
+ if (isType(STRING_TYPES)) {
163
+ return 'string';
164
+ }
165
+ return 'mixed';
166
+ };
167
+ const buildBaseStats = (count, uniqueCount, nullCount, valueFrequencies) => ({
168
+ count,
169
+ uniqueCount,
170
+ nullCount,
171
+ min: undefined,
172
+ max: undefined,
173
+ sum: undefined,
174
+ avg: undefined,
175
+ dateMin: undefined,
176
+ dateMax: undefined,
177
+ strMinLength: undefined,
178
+ strMaxLength: undefined,
179
+ distributionBuckets: undefined,
180
+ distributionChartType: undefined,
181
+ valueFrequencies,
182
+ });
183
+ const computeNumericStats = (base, selectedCells, valueFrequencies) => {
184
+ const numericValues = selectedCells
185
+ .map((c) => {
186
+ if (c.value === null || c.value === undefined || c.value === '') {
187
+ return null;
188
+ }
189
+ const n = Number(c.value);
190
+ return Number.isNaN(n) ? null : n;
191
+ })
192
+ .filter((v) => v !== null);
193
+ if (numericValues.length === 0) {
194
+ return { ...base, valueFrequencies };
195
+ }
196
+ const sum = numericValues.reduce((acc, n) => acc + n, 0);
197
+ return {
198
+ ...base,
199
+ min: Math.min(...numericValues),
200
+ max: Math.max(...numericValues),
201
+ sum,
202
+ avg: sum / numericValues.length,
203
+ distributionBuckets: computeDistribution(numericValues),
204
+ distributionChartType: 'numeric',
205
+ valueFrequencies,
206
+ };
207
+ };
208
+ const computeDateStats = (base, nonNullValues, valueFrequencies) => {
209
+ const dateValues = nonNullValues.map(String).filter((s) => s.length > 0);
210
+ const sorted = [...dateValues].sort((a, b) => a.localeCompare(b));
211
+ const dateBuckets = computeDateDistribution(dateValues);
212
+ return {
213
+ ...base,
214
+ dateMin: sorted[0],
215
+ dateMax: sorted[sorted.length - 1],
216
+ distributionBuckets: dateBuckets.length >= 2 ? dateBuckets : undefined,
217
+ distributionChartType: dateBuckets.length >= 2 ? 'date' : undefined,
218
+ valueFrequencies,
219
+ };
220
+ };
221
+ const computeStringStats = (base, nonNullValues, valueFrequencies) => {
222
+ const lengths = nonNullValues
223
+ .map((v) => valueToString(v).length)
224
+ .filter((l) => l > 0);
225
+ return {
226
+ ...base,
227
+ strMinLength: lengths.length > 0 ? Math.min(...lengths) : undefined,
228
+ strMaxLength: lengths.length > 0 ? Math.max(...lengths) : undefined,
229
+ distributionBuckets: lengths.length > 0 ? computeDistribution(lengths) : undefined,
230
+ distributionChartType: lengths.length > 0 ? 'string-length' : undefined,
231
+ valueFrequencies,
232
+ };
233
+ };
234
+ /**
235
+ * Compute summary statistics for a cell selection.
236
+ * ...existing code...
237
+ */
238
+ export const computeCellSelectionStats = (selectedCells, columnTypes) => {
239
+ if (selectedCells.length < 2) {
240
+ return undefined;
241
+ }
242
+ const count = selectedCells.length;
243
+ const nullCount = selectedCells.filter((c) => c.value === null || c.value === undefined || c.value === '').length;
244
+ const nonNullValues = selectedCells
245
+ .map((c) => c.value)
246
+ .filter((v) => v !== null && v !== undefined && v !== '');
247
+ const uniqueCount = new Set(nonNullValues).size;
248
+ const selectedColumnNames = new Set(selectedCells.map((c) => c.columnName));
249
+ const columnTypeCategory = classifyColumns(selectedColumnNames, columnTypes);
250
+ const valueFrequencies = nonNullValues.length > 0 || nullCount > 0
251
+ ? computeValueFrequencies(nonNullValues, nullCount)
252
+ : undefined;
253
+ const base = buildBaseStats(count, uniqueCount, nullCount, valueFrequencies);
254
+ if (columnTypeCategory === 'numeric') {
255
+ return computeNumericStats(base, selectedCells, valueFrequencies);
256
+ }
257
+ if (columnTypeCategory === 'date') {
258
+ return computeDateStats(base, nonNullValues, valueFrequencies);
259
+ }
260
+ if (columnTypeCategory === 'string') {
261
+ return computeStringStats(base, nonNullValues, valueFrequencies);
262
+ }
263
+ return base;
264
+ };
265
+ //# sourceMappingURL=QueryBuilderTDSCellSelectionStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTDSCellSelectionStats.js","sourceRoot":"","sources":["../../../../src/components/result/tds/QueryBuilderTDSCellSelectionStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { CellSelectionStats } from './QueryBuilderTDSCellSelectionStats.js';
17
+ export declare const QueryBuilderTDSCellSelectionStatsBar: ((props: {
18
+ /** Fully-computed stats, or undefined while computation is in progress */
19
+ stats: CellSelectionStats | undefined;
20
+ /** Total number of selected cells — 0 while Phase 1 debounce is pending */
21
+ cellCount: number;
22
+ /** True once the 50 ms debounce has resolved and cellCount is accurate */
23
+ countReady: boolean;
24
+ darkMode: boolean;
25
+ }) => import("react/jsx-runtime").JSX.Element) & {
26
+ displayName: string;
27
+ };
28
+ //# sourceMappingURL=QueryBuilderTDSCellSelectionStatsBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTDSCellSelectionStatsBar.d.ts","sourceRoot":"","sources":["../../../../src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,wCAAwC,CAAC;AA0NhD,eAAO,MAAM,oCAAoC,WACvC;IACN,0EAA0E;IAC1E,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;;CAyLF,CAAC"}
@@ -0,0 +1,148 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * Copyright (c) 2020-present, Goldman Sachs
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { observer } from 'mobx-react-lite';
18
+ import { useRef, useLayoutEffect } from 'react';
19
+ import { clsx } from '@finos/legend-art';
20
+ import { MAXIMUM_FRACTION_DIGITS } from './QueryBuilderTDSSimpleGridResult.js';
21
+ import { DEFAULT_LOCALE } from '../../../graph-manager/QueryBuilderConst.js';
22
+ const formatNum = (value) => Intl.NumberFormat(DEFAULT_LOCALE, {
23
+ maximumFractionDigits: MAXIMUM_FRACTION_DIGITS,
24
+ }).format(value);
25
+ // ---------------------------------------------------------------------------
26
+ // Inline loading spinner — shown while stats are being computed
27
+ // ---------------------------------------------------------------------------
28
+ const StatsSpinner = () => (_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__spinner", title: "Computing\u2026" }));
29
+ // ---------------------------------------------------------------------------
30
+ // Value-frequency tooltip (shown on Unique Count hover)
31
+ // ---------------------------------------------------------------------------
32
+ const FREQ_CHART_HEIGHT = 10; // px per row
33
+ const FREQ_CHART_BAR_AREA = 80; // px available for bars
34
+ const FREQ_LABEL_WIDTH = 90; // px for label column
35
+ const FREQ_COUNT_WIDTH = 30; // px for count column
36
+ const FREQ_TOTAL_WIDTH = FREQ_LABEL_WIDTH + FREQ_CHART_BAR_AREA + FREQ_COUNT_WIDTH + 8;
37
+ const ValueFrequencyTooltip = ({ frequencies, darkMode, }) => {
38
+ const maxCount = Math.max(...frequencies.map((f) => f.count));
39
+ const tooltipRef = useRef(null);
40
+ // After the tooltip becomes visible, clamp it within the viewport so that
41
+ // it never overflows off the left or right edge of the window.
42
+ useLayoutEffect(() => {
43
+ const el = tooltipRef.current;
44
+ if (!el) {
45
+ return;
46
+ }
47
+ const rect = el.getBoundingClientRect();
48
+ if (rect.left < 0) {
49
+ el.style.left = `${-rect.left + 4}px`;
50
+ }
51
+ else if (rect.right > globalThis.innerWidth) {
52
+ el.style.left = `${globalThis.innerWidth - rect.right - 4}px`;
53
+ }
54
+ });
55
+ return (_jsx("div", { ref: tooltipRef, className: clsx('query-builder__result__tds-grid__stats-bar__freq-tooltip', {
56
+ 'query-builder__result__tds-grid__stats-bar__freq-tooltip--dark': darkMode,
57
+ }), children: _jsx("svg", { width: FREQ_TOTAL_WIDTH, height: frequencies.length * (FREQ_CHART_HEIGHT + 3) + 2, children: frequencies.map((freq, i) => {
58
+ const y = i * (FREQ_CHART_HEIGHT + 3) + 1;
59
+ const barW = Math.max(1, (freq.count / maxCount) * FREQ_CHART_BAR_AREA);
60
+ const labelText = freq.label.length > 12 ? `${freq.label.slice(0, 11)}…` : freq.label;
61
+ return (_jsxs("g", { children: [_jsx("text", { x: FREQ_LABEL_WIDTH - 4, y: y + FREQ_CHART_HEIGHT - 2, textAnchor: "end", className: clsx('query-builder__result__tds-grid__stats-bar__freq-tooltip__label', {
62
+ 'query-builder__result__tds-grid__stats-bar__freq-tooltip__label--other': freq.isOther,
63
+ 'query-builder__result__tds-grid__stats-bar__freq-tooltip__label--empty': freq.isEmpty,
64
+ }), children: labelText }), _jsx("rect", { x: FREQ_LABEL_WIDTH, y: y, width: barW, height: FREQ_CHART_HEIGHT, className: clsx('query-builder__result__tds-grid__stats-bar__freq-tooltip__bar', {
65
+ 'query-builder__result__tds-grid__stats-bar__freq-tooltip__bar--other': freq.isOther,
66
+ 'query-builder__result__tds-grid__stats-bar__freq-tooltip__bar--empty': freq.isEmpty,
67
+ }) }), _jsx("text", { x: FREQ_LABEL_WIDTH + FREQ_CHART_BAR_AREA + 4, y: y + FREQ_CHART_HEIGHT - 2, className: "query-builder__result__tds-grid__stats-bar__freq-tooltip__count", children: freq.count })] }, i));
68
+ }) }) }));
69
+ };
70
+ const formatBucketLabel = (bucket, chartType) => {
71
+ const n = bucket.count;
72
+ const countLabel = `${n} ${n === 1 ? 'value' : 'values'}`;
73
+ if (chartType === 'date') {
74
+ const lo = bucket.lowerDateLabel ?? bucket.lower;
75
+ const hi = bucket.upperDateLabel ?? bucket.upper;
76
+ if (lo === hi) {
77
+ return `${countLabel} on ${lo}`;
78
+ }
79
+ return `${countLabel} within the range ${lo} – ${hi}`;
80
+ }
81
+ if (chartType === 'string-length') {
82
+ const lo = Math.round(bucket.lower);
83
+ const hi = Math.round(bucket.upper);
84
+ if (lo === hi) {
85
+ return `${countLabel} with length ${lo}`;
86
+ }
87
+ return `${countLabel} with length ${lo} – ${hi}`;
88
+ }
89
+ // numeric
90
+ if (bucket.lower === bucket.upper) {
91
+ return `${countLabel} equal to ${formatNum(bucket.lower)}`;
92
+ }
93
+ return `${countLabel} within the range ${formatNum(bucket.lower)} – ${formatNum(bucket.upper)}`;
94
+ };
95
+ // Compact SVG frequency-distribution histogram
96
+ const CHART_HEIGHT = 18;
97
+ const CHART_WIDTH = 120;
98
+ const BAR_GAP = 1;
99
+ const MiniHistogram = ({ buckets, chartType, darkMode, }) => {
100
+ if (buckets.length === 0) {
101
+ return null;
102
+ }
103
+ const maxCount = Math.max(...buckets.map((b) => b.count));
104
+ if (maxCount === 0) {
105
+ return null;
106
+ }
107
+ const n = buckets.length;
108
+ const barW = Math.max(1, (CHART_WIDTH - BAR_GAP * (n - 1)) / n);
109
+ return (_jsx("div", { className: clsx('query-builder__result__tds-grid__stats-bar__chart', {
110
+ 'query-builder__result__tds-grid__stats-bar__chart--dark': darkMode,
111
+ }), children: _jsx("svg", { width: CHART_WIDTH, height: CHART_HEIGHT, children: buckets.map((bucket, i) => {
112
+ const barH = Math.max(1, (bucket.count / maxCount) * CHART_HEIGHT);
113
+ const x = i * (barW + BAR_GAP);
114
+ return (_jsx("rect", { x: x, y: CHART_HEIGHT - barH, width: barW, height: barH, opacity: bucket.count === 0 ? 0.15 : 1, children: _jsx("title", { children: formatBucketLabel(bucket, chartType) }) }, i));
115
+ }) }) }));
116
+ };
117
+ export const QueryBuilderTDSCellSelectionStatsBar = observer((props) => {
118
+ const { stats, cellCount, countReady, darkMode } = props;
119
+ const loading = stats === undefined;
120
+ const hasNumericStats = !loading && stats.sum !== undefined;
121
+ const hasDateStats = !loading && stats.dateMin !== undefined;
122
+ const hasStringStats = !loading && stats.strMinLength !== undefined;
123
+ const hasChart = !loading &&
124
+ stats.distributionBuckets !== undefined &&
125
+ stats.distributionBuckets.length >= 2;
126
+ return (_jsxs("div", { className: clsx('query-builder__result__tds-grid__stats-bar', {
127
+ 'query-builder__result__tds-grid__stats-bar--dark': darkMode,
128
+ }), children: [_jsxs("span", { className: clsx('query-builder__result__tds-grid__stats-bar__item', {
129
+ 'query-builder__result__tds-grid__stats-bar__item--has-tooltip': !loading &&
130
+ stats.valueFrequencies !== undefined &&
131
+ stats.valueFrequencies.length > 0,
132
+ }), children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Count:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: countReady ? cellCount : _jsx(StatsSpinner, {}) }), !loading &&
133
+ stats.valueFrequencies !== undefined &&
134
+ stats.valueFrequencies.length > 0 && (_jsx(ValueFrequencyTooltip, { frequencies: stats.valueFrequencies, darkMode: darkMode }))] }), _jsxs("span", { className: clsx('query-builder__result__tds-grid__stats-bar__item', {
135
+ 'query-builder__result__tds-grid__stats-bar__item--has-tooltip': !loading &&
136
+ stats.valueFrequencies !== undefined &&
137
+ stats.valueFrequencies.length > 0,
138
+ }), children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Unique Count:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: loading ? _jsx(StatsSpinner, {}) : stats.uniqueCount }), !loading &&
139
+ stats.valueFrequencies !== undefined &&
140
+ stats.valueFrequencies.length > 0 && (_jsx(ValueFrequencyTooltip, { frequencies: stats.valueFrequencies, darkMode: darkMode }))] }), _jsxs("span", { className: clsx('query-builder__result__tds-grid__stats-bar__item', {
141
+ 'query-builder__result__tds-grid__stats-bar__item--has-tooltip': !loading &&
142
+ stats.valueFrequencies !== undefined &&
143
+ stats.valueFrequencies.length > 0,
144
+ }), children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Empty Count:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: loading ? _jsx(StatsSpinner, {}) : stats.nullCount }), !loading &&
145
+ stats.valueFrequencies !== undefined &&
146
+ stats.valueFrequencies.length > 0 && (_jsx(ValueFrequencyTooltip, { frequencies: stats.valueFrequencies, darkMode: darkMode }))] }), hasNumericStats && (_jsxs(_Fragment, { children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__separator" }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Min:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: formatNum(stats.min ?? 0) })] }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Max:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: formatNum(stats.max ?? 0) })] }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Sum:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: formatNum(stats.sum ?? 0) })] }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Avg:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: formatNum(stats.avg ?? 0) })] })] })), hasDateStats && (_jsxs(_Fragment, { children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__separator" }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Min:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: stats.dateMin })] }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Max:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: stats.dateMax })] })] })), hasStringStats && (_jsxs(_Fragment, { children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__separator" }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Min Length:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: stats.strMinLength })] }), _jsxs("span", { className: "query-builder__result__tds-grid__stats-bar__item", children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__label", children: "Max Length:" }), _jsx("span", { className: "query-builder__result__tds-grid__stats-bar__item__value", children: stats.strMaxLength })] })] })), hasChart && (_jsxs(_Fragment, { children: [_jsx("span", { className: "query-builder__result__tds-grid__stats-bar__separator" }), _jsx(MiniHistogram, { buckets: stats.distributionBuckets ?? [], chartType: stats.distributionChartType ?? 'numeric', darkMode: darkMode })] }))] }));
147
+ });
148
+ //# sourceMappingURL=QueryBuilderTDSCellSelectionStatsBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTDSCellSelectionStatsBar.js","sourceRoot":"","sources":["../../../../src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAQ7E,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAC1C,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;IAChC,qBAAqB,EAAE,uBAAuB;CAC/C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnB,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CACzB,eACE,SAAS,EAAC,2DAA2D,EACrE,KAAK,EAAC,iBAAY,GAClB,CACH,CAAC;AAEF,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC,aAAa;AAC3C,MAAM,mBAAmB,GAAG,EAAE,CAAC,CAAC,wBAAwB;AACxD,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,sBAAsB;AACnD,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,sBAAsB;AACnD,MAAM,gBAAgB,GACpB,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,CAAC,CAAC;AAEhE,MAAM,qBAAqB,GAAG,CAAC,EAC7B,WAAW,EACX,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEhD,0EAA0E;IAC1E,+DAA+D;IAC/D,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAClB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,cACE,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,IAAI,CACb,0DAA0D,EAC1D;YACE,gEAAgE,EAC9D,QAAQ;SACX,CACF,YAED,cACE,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,YAEvD,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,mBAAmB,CAC9C,CAAC;gBACF,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtE,OAAO,CACL,wBAKE,eACE,CAAC,EAAE,gBAAgB,GAAG,CAAC,EACvB,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAC5B,UAAU,EAAC,KAAK,EAChB,SAAS,EAAE,IAAI,CACb,iEAAiE,EACjE;gCACE,wEAAwE,EACtE,IAAI,CAAC,OAAO;gCACd,wEAAwE,EACtE,IAAI,CAAC,OAAO;6BACf,CACF,YAEA,SAAS,GACL,EAEP,eACE,CAAC,EAAE,gBAAgB,EACnB,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,IAAI,CACb,+DAA+D,EAC/D;gCACE,sEAAsE,EACpE,IAAI,CAAC,OAAO;gCACd,sEAAsE,EACpE,IAAI,CAAC,OAAO;6BACf,CACF,GACD,EAEF,eACE,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,EAC7C,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAC5B,SAAS,EAAC,iEAAiE,YAE1E,IAAI,CAAC,KAAK,GACN,KA1CF,CAAC,CA2CJ,CACL,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,MAA0B,EAC1B,SAAgC,EACxB,EAAE;IACV,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE1D,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACd,OAAO,GAAG,UAAU,OAAO,EAAE,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,UAAU,qBAAqB,EAAE,MAAM,EAAE,EAAE,CAAC;IACxD,CAAC;IAED,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACd,OAAO,GAAG,UAAU,gBAAgB,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,UAAU,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,UAAU;IACV,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,GAAG,UAAU,aAAa,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,UAAU,qBAAqB,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,CAAC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAM,aAAa,GAAG,CAAC,EACrB,OAAO,EACP,SAAS,EACT,QAAQ,GAKT,EAAE,EAAE;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhE,OAAO,CACL,cACE,SAAS,EAAE,IAAI,CAAC,mDAAmD,EAAE;YACnE,yDAAyD,EAAE,QAAQ;SACpE,CAAC,YAEF,cAAK,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,YAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC;gBACnE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;gBAC/B,OAAO,CACL,eAGE,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,YAAY,GAAG,IAAI,EACtB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAEtC,0BAAQ,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,GAAS,IAPhD,CAAC,CAQD,CACR,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,QAAQ,CAC1D,CAAC,KAQA,EAAE,EAAE;IACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACzD,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IACpC,MAAM,eAAe,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC;IAC5D,MAAM,YAAY,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAC7D,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;IACpE,MAAM,QAAQ,GACZ,CAAC,OAAO;QACR,KAAK,CAAC,mBAAmB,KAAK,SAAS;QACvC,KAAK,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,CAAC;IAExC,OAAO,CACL,eACE,SAAS,EAAE,IAAI,CAAC,4CAA4C,EAAE;YAC5D,kDAAkD,EAAE,QAAQ;SAC7D,CAAC,aAGF,gBACE,SAAS,EAAE,IAAI,CAAC,kDAAkD,EAAE;oBAClE,+DAA+D,EAC7D,CAAC,OAAO;wBACR,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;iBACpC,CAAC,aAEF,eAAM,SAAS,EAAC,yDAAyD,uBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,GACrC,EACN,CAAC,OAAO;wBACP,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CACnC,KAAC,qBAAqB,IACpB,WAAW,EAAE,KAAK,CAAC,gBAAgB,EACnC,QAAQ,EAAE,QAAQ,GAClB,CACH,IACE,EAGP,gBACE,SAAS,EAAE,IAAI,CAAC,kDAAkD,EAAE;oBAClE,+DAA+D,EAC7D,CAAC,OAAO;wBACR,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;iBACpC,CAAC,aAEF,eAAM,SAAS,EAAC,yDAAyD,8BAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,OAAO,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,GAC1C,EACN,CAAC,OAAO;wBACP,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CACnC,KAAC,qBAAqB,IACpB,WAAW,EAAE,KAAK,CAAC,gBAAgB,EACnC,QAAQ,EAAE,QAAQ,GAClB,CACH,IACE,EAGP,gBACE,SAAS,EAAE,IAAI,CAAC,kDAAkD,EAAE;oBAClE,+DAA+D,EAC7D,CAAC,OAAO;wBACR,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;iBACpC,CAAC,aAEF,eAAM,SAAS,EAAC,yDAAyD,6BAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,OAAO,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GACxC,EACN,CAAC,OAAO;wBACP,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CACnC,KAAC,qBAAqB,IACpB,WAAW,EAAE,KAAK,CAAC,gBAAgB,EACnC,QAAQ,EAAE,QAAQ,GAClB,CACH,IACE,EAGN,eAAe,IAAI,CAClB,8BACE,eAAM,SAAS,EAAC,uDAAuD,GAAG,EAC1E,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GACrB,IACF,EACP,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GACrB,IACF,EACP,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GACrB,IACF,EACP,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GACrB,IACF,IACN,CACJ,EACA,YAAY,IAAI,CACf,8BACE,eAAM,SAAS,EAAC,uDAAuD,GAAG,EAC1E,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,CAAC,OAAO,GACT,IACF,EACP,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,qBAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,CAAC,OAAO,GACT,IACF,IACN,CACJ,EACA,cAAc,IAAI,CACjB,8BACE,eAAM,SAAS,EAAC,uDAAuD,GAAG,EAC1E,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,4BAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,CAAC,YAAY,GACd,IACF,EACP,gBAAM,SAAS,EAAC,kDAAkD,aAChE,eAAM,SAAS,EAAC,yDAAyD,4BAElE,EACP,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,CAAC,YAAY,GACd,IACF,IACN,CACJ,EACA,QAAQ,IAAI,CACX,8BACE,eAAM,SAAS,EAAC,uDAAuD,GAAG,EAC1E,KAAC,aAAa,IACZ,OAAO,EAAE,KAAK,CAAC,mBAAmB,IAAI,EAAE,EACxC,SAAS,EAAE,KAAK,CAAC,qBAAqB,IAAI,SAAS,EACnD,QAAQ,EAAE,QAAQ,GAClB,IACD,CACJ,IACG,CACP,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { DataGridCellKeyDownEvent } from '@finos/legend-lego/data-grid';
17
+ import type { TDSRowDataType } from '@finos/legend-graph';
18
+ export declare const handleGridKeyboardShortcut: (event: DataGridCellKeyDownEvent<TDSRowDataType>) => void;
19
+ //# sourceMappingURL=QueryBuilderTDSGridKeyboardShortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTDSGridKeyboardShortcuts.d.ts","sourceRoot":"","sources":["../../../../src/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAEV,wBAAwB,EAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAgN1D,eAAO,MAAM,0BAA0B,GACrC,OAAO,wBAAwB,CAAC,cAAc,CAAC,KAC9C,IAsCF,CAAC"}