@cdx-ui/data-grid 0.3.11 → 0.3.12

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 (82) hide show
  1. package/README.md +3 -1
  2. package/coverage.svg +1 -1
  3. package/lib/commonjs/DataGrid.js +232 -62
  4. package/lib/commonjs/DataGrid.js.map +1 -1
  5. package/lib/commonjs/DataGridFilterPanel.js +420 -0
  6. package/lib/commonjs/DataGridFilterPanel.js.map +1 -0
  7. package/lib/commonjs/adapter/columnTypes.js +256 -0
  8. package/lib/commonjs/adapter/columnTypes.js.map +1 -0
  9. package/lib/commonjs/adapter/columns.js +132 -4
  10. package/lib/commonjs/adapter/columns.js.map +1 -1
  11. package/lib/commonjs/adapter/filterOperators.js +422 -0
  12. package/lib/commonjs/adapter/filterOperators.js.map +1 -0
  13. package/lib/commonjs/adapter/pinning.js +101 -0
  14. package/lib/commonjs/adapter/pinning.js.map +1 -0
  15. package/lib/commonjs/index.js +26 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/numberCells.js +280 -0
  18. package/lib/commonjs/numberCells.js.map +1 -0
  19. package/lib/commonjs/styles.js +61 -1
  20. package/lib/commonjs/styles.js.map +1 -1
  21. package/lib/commonjs/types.js +29 -1
  22. package/lib/commonjs/types.js.map +1 -1
  23. package/lib/commonjs/useDataGridTable.js +98 -13
  24. package/lib/commonjs/useDataGridTable.js.map +1 -1
  25. package/lib/module/DataGrid.js +237 -67
  26. package/lib/module/DataGrid.js.map +1 -1
  27. package/lib/module/DataGridFilterPanel.js +414 -0
  28. package/lib/module/DataGridFilterPanel.js.map +1 -0
  29. package/lib/module/adapter/columnTypes.js +240 -0
  30. package/lib/module/adapter/columnTypes.js.map +1 -0
  31. package/lib/module/adapter/columns.js +129 -4
  32. package/lib/module/adapter/columns.js.map +1 -1
  33. package/lib/module/adapter/filterOperators.js +406 -0
  34. package/lib/module/adapter/filterOperators.js.map +1 -0
  35. package/lib/module/adapter/pinning.js +90 -0
  36. package/lib/module/adapter/pinning.js.map +1 -0
  37. package/lib/module/index.js +2 -0
  38. package/lib/module/index.js.map +1 -1
  39. package/lib/module/numberCells.js +275 -0
  40. package/lib/module/numberCells.js.map +1 -0
  41. package/lib/module/styles.js +60 -0
  42. package/lib/module/styles.js.map +1 -1
  43. package/lib/module/types.js +28 -0
  44. package/lib/module/types.js.map +1 -1
  45. package/lib/module/useDataGridTable.js +99 -14
  46. package/lib/module/useDataGridTable.js.map +1 -1
  47. package/lib/typescript/DataGrid.d.ts.map +1 -1
  48. package/lib/typescript/DataGridFilterPanel.d.ts +17 -0
  49. package/lib/typescript/DataGridFilterPanel.d.ts.map +1 -0
  50. package/lib/typescript/adapter/columnTypes.d.ts +32 -0
  51. package/lib/typescript/adapter/columnTypes.d.ts.map +1 -0
  52. package/lib/typescript/adapter/columns.d.ts +14 -5
  53. package/lib/typescript/adapter/columns.d.ts.map +1 -1
  54. package/lib/typescript/adapter/filterOperators.d.ts +43 -0
  55. package/lib/typescript/adapter/filterOperators.d.ts.map +1 -0
  56. package/lib/typescript/adapter/pinning.d.ts +25 -0
  57. package/lib/typescript/adapter/pinning.d.ts.map +1 -0
  58. package/lib/typescript/index.d.ts +4 -1
  59. package/lib/typescript/index.d.ts.map +1 -1
  60. package/lib/typescript/numberCells.d.ts +46 -0
  61. package/lib/typescript/numberCells.d.ts.map +1 -0
  62. package/lib/typescript/styles.d.ts +21 -0
  63. package/lib/typescript/styles.d.ts.map +1 -1
  64. package/lib/typescript/types.d.ts +86 -7
  65. package/lib/typescript/types.d.ts.map +1 -1
  66. package/lib/typescript/useDataGridTable.d.ts +18 -4
  67. package/lib/typescript/useDataGridTable.d.ts.map +1 -1
  68. package/package.json +5 -5
  69. package/src/DataGrid.tsx +377 -67
  70. package/src/DataGridFilterPanel.tsx +477 -0
  71. package/src/adapter/columnTypes.ts +327 -0
  72. package/src/adapter/columns.test.ts +75 -1
  73. package/src/adapter/columns.ts +178 -3
  74. package/src/adapter/filterOperators.test.ts +292 -0
  75. package/src/adapter/filterOperators.ts +524 -0
  76. package/src/adapter/pinning.ts +125 -0
  77. package/src/index.ts +15 -0
  78. package/src/numberCells.tsx +379 -0
  79. package/src/styles.ts +75 -0
  80. package/src/types.ts +114 -7
  81. package/src/useDataGridTable.test.ts +69 -0
  82. package/src/useDataGridTable.ts +127 -8
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+
3
+ import { getColumnFilterText, normalizeFilterQuery, untypedCellIncludesQuery, usesDisplayFilter } from './columnTypes';
4
+ const STRING_OPERATORS = ['contains', 'doesNotContain', 'equals', 'doesNotEqual', 'startsWith', 'endsWith', 'isEmpty', 'isNotEmpty', 'isAnyOf'];
5
+ const NUMBER_OPERATORS = ['=', '!=', '>', '>=', '<', '<=', 'isEmpty', 'isNotEmpty', 'isAnyOf'];
6
+ const DATE_OPERATORS = ['is', 'not', 'after', 'onOrAfter', 'before', 'onOrBefore', 'isEmpty', 'isNotEmpty'];
7
+ const BOOLEAN_OPERATORS = ['is'];
8
+ const SINGLE_SELECT_OPERATORS = ['is', 'not', 'isAnyOf'];
9
+
10
+ /** Operators a column of `type` accepts. An omitted `type` accepts the `string` operators. */
11
+ export function getGridFilterOperators(type) {
12
+ switch (type) {
13
+ case 'number':
14
+ return NUMBER_OPERATORS;
15
+ case 'date':
16
+ case 'dateTime':
17
+ return DATE_OPERATORS;
18
+ case 'boolean':
19
+ return BOOLEAN_OPERATORS;
20
+ case 'singleSelect':
21
+ return SINGLE_SELECT_OPERATORS;
22
+ default:
23
+ return STRING_OPERATORS;
24
+ }
25
+ }
26
+
27
+ /** The operator a filter UI preselects for a column of `type`. Matches MUI. */
28
+ export function getDefaultFilterOperator(type) {
29
+ return getGridFilterOperators(type)[0];
30
+ }
31
+ const OPERATOR_LABELS = {
32
+ contains: 'contains',
33
+ doesNotContain: 'does not contain',
34
+ equals: 'equals',
35
+ doesNotEqual: 'does not equal',
36
+ startsWith: 'starts with',
37
+ endsWith: 'ends with',
38
+ isEmpty: 'is empty',
39
+ isNotEmpty: 'is not empty',
40
+ isAnyOf: 'is any of',
41
+ '=': '=',
42
+ '!=': '!=',
43
+ '>': '>',
44
+ '>=': '>=',
45
+ '<': '<',
46
+ '<=': '<=',
47
+ is: 'is',
48
+ not: 'is not',
49
+ after: 'is after',
50
+ onOrAfter: 'is on or after',
51
+ before: 'is before',
52
+ onOrBefore: 'is on or before'
53
+ };
54
+
55
+ /** Short label for an operator, in the style of the MUI operator menu. */
56
+ export function getFilterOperatorLabel(operator) {
57
+ return OPERATOR_LABELS[operator];
58
+ }
59
+
60
+ /** `isEmpty` and `isNotEmpty` ignore the item's `value`. */
61
+ export function filterOperatorNeedsValue(operator) {
62
+ return operator !== 'isEmpty' && operator !== 'isNotEmpty';
63
+ }
64
+
65
+ /** True when a value-taking operator has nothing to compare against, so it filters nothing. */
66
+ export function isBlankFilterValue(value) {
67
+ if (value == null) {
68
+ return true;
69
+ }
70
+ if (typeof value === 'string') {
71
+ return value.trim().length === 0;
72
+ }
73
+ return Array.isArray(value) && value.length === 0;
74
+ }
75
+ const KNOWN_OPERATORS = new Set([...STRING_OPERATORS, ...NUMBER_OPERATORS, ...DATE_OPERATORS, ...BOOLEAN_OPERATORS, ...SINGLE_SELECT_OPERATORS]);
76
+
77
+ /** Several filter items on one column. Every item must match. */
78
+
79
+ export function isFilterValueGroup(filterValue) {
80
+ return typeof filterValue === 'object' && filterValue !== null && 'items' in filterValue && Array.isArray(filterValue.items);
81
+ }
82
+ export function isOperatorFilterValue(filterValue) {
83
+ return typeof filterValue === 'object' && filterValue !== null && 'operator' in filterValue && typeof filterValue.operator === 'string' && KNOWN_OPERATORS.has(filterValue.operator);
84
+ }
85
+ const DATE_ONLY_PATTERN = /^(\d{4})-(\d{2})-(\d{2})$/;
86
+ function parseDate(value) {
87
+ if (value instanceof Date) {
88
+ return Number.isFinite(value.getTime()) ? value : null;
89
+ }
90
+ if (typeof value === 'number') {
91
+ const date = new Date(value);
92
+ return Number.isFinite(date.getTime()) ? date : null;
93
+ }
94
+ if (typeof value !== 'string') {
95
+ return null;
96
+ }
97
+ const text = value.trim();
98
+ const dateOnly = DATE_ONLY_PATTERN.exec(text);
99
+ if (dateOnly) {
100
+ return new Date(Number(dateOnly[1]), Number(dateOnly[2]) - 1, Number(dateOnly[3]));
101
+ }
102
+ const date = new Date(text);
103
+ return Number.isFinite(date.getTime()) ? date : null;
104
+ }
105
+ function startOfDay(date) {
106
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
107
+ }
108
+ function parseNumber(value) {
109
+ if (typeof value === 'number') {
110
+ return Number.isFinite(value) ? value : null;
111
+ }
112
+ if (typeof value === 'string' && value.trim().length > 0) {
113
+ const parsed = Number(value);
114
+ return Number.isFinite(parsed) ? parsed : null;
115
+ }
116
+ return null;
117
+ }
118
+ function parseBoolean(value) {
119
+ if (typeof value === 'boolean') {
120
+ return value;
121
+ }
122
+ if (value === 'true') {
123
+ return true;
124
+ }
125
+ if (value === 'false') {
126
+ return false;
127
+ }
128
+ return null;
129
+ }
130
+ function isEmptyCell(value) {
131
+ if (value == null || value === '') {
132
+ return true;
133
+ }
134
+ return typeof value === 'number' && Number.isNaN(value);
135
+ }
136
+ function toList(value) {
137
+ return Array.isArray(value) ? value : [value];
138
+ }
139
+ function selectKey(value) {
140
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? String(value) : null;
141
+ }
142
+ function sameSelectValue(a, b) {
143
+ const keyA = selectKey(a);
144
+ return keyA !== null && keyA === selectKey(b);
145
+ }
146
+ function compareNumbers(operator, cell, operand) {
147
+ switch (operator) {
148
+ case '=':
149
+ return cell === operand;
150
+ case '!=':
151
+ return cell !== operand;
152
+ case '>':
153
+ return cell > operand;
154
+ case '>=':
155
+ return cell >= operand;
156
+ case '<':
157
+ return cell < operand;
158
+ case '<=':
159
+ return cell <= operand;
160
+ default:
161
+ return true;
162
+ }
163
+ }
164
+ function matchNumber(operator, cell, operand) {
165
+ const cellNumber = typeof cell === 'number' && Number.isFinite(cell) ? cell : null;
166
+ if (operator === 'isAnyOf') {
167
+ const operands = toList(operand).map(parseNumber).filter(n => n !== null);
168
+ return cellNumber !== null && operands.includes(cellNumber);
169
+ }
170
+ const operandNumber = parseNumber(operand);
171
+ if (operandNumber === null) {
172
+ return true;
173
+ }
174
+ if (cellNumber === null) {
175
+ return operator === '!=';
176
+ }
177
+ return compareNumbers(operator, cellNumber, operandNumber);
178
+ }
179
+ function matchDate(type, operator, cell, operand) {
180
+ const operandDate = parseDate(operand);
181
+ if (operandDate === null) {
182
+ return true;
183
+ }
184
+ const cellDate = cell instanceof Date && Number.isFinite(cell.getTime()) ? cell : null;
185
+ if (cellDate === null) {
186
+ return operator === 'not';
187
+ }
188
+ const normalize = date => type === 'date' ? startOfDay(date) : date.getTime();
189
+ const cellTime = normalize(cellDate);
190
+ const operandTime = normalize(operandDate);
191
+ switch (operator) {
192
+ case 'is':
193
+ return cellTime === operandTime;
194
+ case 'not':
195
+ return cellTime !== operandTime;
196
+ case 'after':
197
+ return cellTime > operandTime;
198
+ case 'onOrAfter':
199
+ return cellTime >= operandTime;
200
+ case 'before':
201
+ return cellTime < operandTime;
202
+ case 'onOrBefore':
203
+ return cellTime <= operandTime;
204
+ default:
205
+ return true;
206
+ }
207
+ }
208
+ function matchText(operator, text, operand) {
209
+ if (operator === 'isAnyOf') {
210
+ const operands = toList(operand).filter(item => !isBlankFilterValue(item));
211
+ return operands.some(item => String(item) === text);
212
+ }
213
+ const needle = String(operand).trim().toLowerCase();
214
+ const haystack = text.toLowerCase();
215
+ switch (operator) {
216
+ case 'contains':
217
+ return haystack.includes(needle);
218
+ case 'doesNotContain':
219
+ return !haystack.includes(needle);
220
+ case 'equals':
221
+ return haystack === needle;
222
+ case 'doesNotEqual':
223
+ return haystack !== needle;
224
+ case 'startsWith':
225
+ return haystack.startsWith(needle);
226
+ case 'endsWith':
227
+ return haystack.endsWith(needle);
228
+ default:
229
+ return true;
230
+ }
231
+ }
232
+ function matchSingleSelect(operator, cell, operand) {
233
+ if (operator === 'isAnyOf') {
234
+ return toList(operand).some(item => sameSelectValue(item, cell));
235
+ }
236
+ const operandValue = Array.isArray(operand) ? operand[0] : operand;
237
+ switch (operator) {
238
+ case 'is':
239
+ return sameSelectValue(operandValue, cell);
240
+ case 'not':
241
+ return !sameSelectValue(operandValue, cell);
242
+ default:
243
+ return true;
244
+ }
245
+ }
246
+ function matchBoolean(cell, operand) {
247
+ const operandBoolean = parseBoolean(operand);
248
+ if (operandBoolean === null) {
249
+ return true;
250
+ }
251
+ return cell === operandBoolean;
252
+ }
253
+
254
+ /**
255
+ * Evaluates one operator filter against a cell. Operators the column's type does not accept,
256
+ * and operators whose operand is blank, filter nothing, as in MUI.
257
+ */
258
+ export function matchesOperatorFilter(col, cell, row, {
259
+ operator,
260
+ value
261
+ }) {
262
+ if (!getGridFilterOperators(col.type).includes(operator)) {
263
+ return true;
264
+ }
265
+ if (operator === 'isEmpty') {
266
+ return isEmptyCell(cell);
267
+ }
268
+ if (operator === 'isNotEmpty') {
269
+ return !isEmptyCell(cell);
270
+ }
271
+ if (isBlankFilterValue(value)) {
272
+ return true;
273
+ }
274
+ switch (col.type) {
275
+ case 'number':
276
+ return matchNumber(operator, cell, value);
277
+ case 'date':
278
+ case 'dateTime':
279
+ return matchDate(col.type, operator, cell, value);
280
+ case 'boolean':
281
+ return matchBoolean(cell, value);
282
+ case 'singleSelect':
283
+ return matchSingleSelect(operator, cell, value);
284
+ default:
285
+ return matchText(operator, cell == null ? '' : getColumnFilterText(col, cell, row), value);
286
+ }
287
+ }
288
+
289
+ /** False for items that filter nothing: a value-taking operator without a value, or blank text. */
290
+ export function isActiveFilterItem(item) {
291
+ if (item.operator !== undefined) {
292
+ return !filterOperatorNeedsValue(item.operator) || !isBlankFilterValue(item.value);
293
+ }
294
+ return normalizeFilterQuery(item.value).length > 0;
295
+ }
296
+ export function rowMatchesFilterItem(col, row, item) {
297
+ const raw = row[col.field];
298
+ const cell = col.valueGetter ? col.valueGetter(raw, row, col) : raw;
299
+ if (item.operator !== undefined) {
300
+ return matchesOperatorFilter(col, cell, row, {
301
+ operator: item.operator,
302
+ value: item.value
303
+ });
304
+ }
305
+ const query = normalizeFilterQuery(item.value);
306
+ if (usesDisplayFilter(col)) {
307
+ return getColumnFilterText(col, cell, row).toLowerCase().includes(query);
308
+ }
309
+ return untypedCellIncludesQuery(cell, query);
310
+ }
311
+ function selectOptions(col) {
312
+ return typeof col.valueOptions === 'function' ? col.valueOptions({}) : col.valueOptions;
313
+ }
314
+ function coerceSelectToken(col, text) {
315
+ if (col.type !== 'singleSelect') {
316
+ return text;
317
+ }
318
+ const trimmed = text.trim();
319
+ const match = selectOptions(col).find(option => {
320
+ if (typeof option === 'object') {
321
+ return String(option.value) === trimmed || option.label.toLowerCase() === trimmed.toLowerCase();
322
+ }
323
+ return String(option).toLowerCase() === trimmed.toLowerCase();
324
+ });
325
+ if (!match) {
326
+ return text;
327
+ }
328
+ return typeof match === 'object' ? match.value : match;
329
+ }
330
+
331
+ /**
332
+ * Reads a header-filter field. `isAnyOf` splits on commas. Number pieces that round-trip
333
+ * become numbers. A `singleSelect` label (`Open`) becomes its stored value (`open`).
334
+ */
335
+ export function headerFilterValueFromText(col, operator, text) {
336
+ if (!filterOperatorNeedsValue(operator)) {
337
+ return undefined;
338
+ }
339
+ if (operator === 'isAnyOf') {
340
+ const parts = text.split(',').map(part => part.trim()).filter(part => part.length > 0);
341
+ if (col?.type === 'number') {
342
+ return parts.map(part => coerceFilterInput(col, '=', part));
343
+ }
344
+ if (col?.type === 'singleSelect') {
345
+ return parts.map(part => coerceSelectToken(col, part));
346
+ }
347
+ return parts;
348
+ }
349
+ if (col?.type === 'singleSelect') {
350
+ return coerceSelectToken(col, text);
351
+ }
352
+ return coerceFilterInput(col, operator, text);
353
+ }
354
+
355
+ /**
356
+ * Converts header-input text to the typed operand its column and operator expect. Text that
357
+ * would not survive a round trip back into the input (`'1.'`, `'1.50'`) stays text, so typing
358
+ * is never rewritten under the cursor.
359
+ */
360
+ export function coerceFilterInput(col, operator, text) {
361
+ if (operator === 'isAnyOf' || !filterOperatorNeedsValue(operator)) {
362
+ return text;
363
+ }
364
+ const trimmed = text.trim();
365
+ switch (col?.type) {
366
+ case 'number':
367
+ {
368
+ const parsed = parseNumber(trimmed);
369
+ return parsed !== null && String(parsed) === trimmed ? parsed : text;
370
+ }
371
+ case 'date':
372
+ {
373
+ return DATE_ONLY_PATTERN.test(trimmed) ? parseDate(trimmed) ?? text : text;
374
+ }
375
+ case 'boolean':
376
+ {
377
+ return parseBoolean(trimmed) ?? text;
378
+ }
379
+ default:
380
+ return text;
381
+ }
382
+ }
383
+ function pad(value, length) {
384
+ return String(value).padStart(length, '0');
385
+ }
386
+
387
+ /** The text a header filter input shows for an operand. */
388
+ export function filterValueToInputText(value) {
389
+ if (value == null) {
390
+ return '';
391
+ }
392
+ if (typeof value === 'string') {
393
+ return value;
394
+ }
395
+ if (typeof value === 'number' || typeof value === 'boolean') {
396
+ return String(value);
397
+ }
398
+ if (value instanceof Date) {
399
+ return Number.isFinite(value.getTime()) ? `${pad(value.getFullYear(), 4)}-${pad(value.getMonth() + 1, 2)}-${pad(value.getDate(), 2)}` : '';
400
+ }
401
+ if (Array.isArray(value)) {
402
+ return value.map(filterValueToInputText).join(', ');
403
+ }
404
+ return '';
405
+ }
406
+ //# sourceMappingURL=filterOperators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getColumnFilterText","normalizeFilterQuery","untypedCellIncludesQuery","usesDisplayFilter","STRING_OPERATORS","NUMBER_OPERATORS","DATE_OPERATORS","BOOLEAN_OPERATORS","SINGLE_SELECT_OPERATORS","getGridFilterOperators","type","getDefaultFilterOperator","OPERATOR_LABELS","contains","doesNotContain","equals","doesNotEqual","startsWith","endsWith","isEmpty","isNotEmpty","isAnyOf","is","not","after","onOrAfter","before","onOrBefore","getFilterOperatorLabel","operator","filterOperatorNeedsValue","isBlankFilterValue","value","trim","length","Array","isArray","KNOWN_OPERATORS","Set","isFilterValueGroup","filterValue","items","isOperatorFilterValue","has","DATE_ONLY_PATTERN","parseDate","Date","Number","isFinite","getTime","date","text","dateOnly","exec","startOfDay","getFullYear","getMonth","getDate","parseNumber","parsed","parseBoolean","isEmptyCell","isNaN","toList","selectKey","String","sameSelectValue","a","b","keyA","compareNumbers","cell","operand","matchNumber","cellNumber","operands","map","filter","n","includes","operandNumber","matchDate","operandDate","cellDate","normalize","cellTime","operandTime","matchText","item","some","needle","toLowerCase","haystack","matchSingleSelect","operandValue","matchBoolean","operandBoolean","matchesOperatorFilter","col","row","isActiveFilterItem","undefined","rowMatchesFilterItem","raw","field","valueGetter","query","selectOptions","valueOptions","coerceSelectToken","trimmed","match","find","option","label","headerFilterValueFromText","parts","split","part","coerceFilterInput","test","pad","padStart","filterValueToInputText","join"],"sourceRoot":"../../../src","sources":["adapter/filterOperators.ts"],"mappings":";;AASA,SACEA,mBAAmB,EACnBC,oBAAoB,EACpBC,wBAAwB,EACxBC,iBAAiB,QACZ,eAAe;AAEtB,MAAMC,gBAA+C,GAAG,CACtD,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,CACV;AAED,MAAMC,gBAA+C,GAAG,CACtD,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,SAAS,CACV;AAED,MAAMC,cAA6C,GAAG,CACpD,IAAI,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,YAAY,CACb;AAED,MAAMC,iBAAgD,GAAG,CAAC,IAAI,CAAC;AAE/D,MAAMC,uBAAsD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;;AAEvF;AACA,OAAO,SAASC,sBAAsBA,CAACC,IAAkB,EAAiC;EACxF,QAAQA,IAAI;IACV,KAAK,QAAQ;MACX,OAAOL,gBAAgB;IACzB,KAAK,MAAM;IACX,KAAK,UAAU;MACb,OAAOC,cAAc;IACvB,KAAK,SAAS;MACZ,OAAOC,iBAAiB;IAC1B,KAAK,cAAc;MACjB,OAAOC,uBAAuB;IAChC;MACE,OAAOJ,gBAAgB;EAC3B;AACF;;AAEA;AACA,OAAO,SAASO,wBAAwBA,CAACD,IAAkB,EAAsB;EAC/E,OAAOD,sBAAsB,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC;AAEA,MAAME,eAAmD,GAAG;EAC1DC,QAAQ,EAAE,UAAU;EACpBC,cAAc,EAAE,kBAAkB;EAClCC,MAAM,EAAE,QAAQ;EAChBC,YAAY,EAAE,gBAAgB;EAC9BC,UAAU,EAAE,aAAa;EACzBC,QAAQ,EAAE,WAAW;EACrBC,OAAO,EAAE,UAAU;EACnBC,UAAU,EAAE,cAAc;EAC1BC,OAAO,EAAE,WAAW;EACpB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,IAAI;EACVC,EAAE,EAAE,IAAI;EACRC,GAAG,EAAE,QAAQ;EACbC,KAAK,EAAE,UAAU;EACjBC,SAAS,EAAE,gBAAgB;EAC3BC,MAAM,EAAE,WAAW;EACnBC,UAAU,EAAE;AACd,CAAC;;AAED;AACA,OAAO,SAASC,sBAAsBA,CAACC,QAA4B,EAAU;EAC3E,OAAOjB,eAAe,CAACiB,QAAQ,CAAC;AAClC;;AAEA;AACA,OAAO,SAASC,wBAAwBA,CAACD,QAA4B,EAAW;EAC9E,OAAOA,QAAQ,KAAK,SAAS,IAAIA,QAAQ,KAAK,YAAY;AAC5D;;AAEA;AACA,OAAO,SAASE,kBAAkBA,CAACC,KAAc,EAAW;EAC1D,IAAIA,KAAK,IAAI,IAAI,EAAE;IACjB,OAAO,IAAI;EACb;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC;EAClC;EACA,OAAOC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,IAAIA,KAAK,CAACE,MAAM,KAAK,CAAC;AACnD;AAOA,MAAMG,eAAoC,GAAG,IAAIC,GAAG,CAAC,CACnD,GAAGlC,gBAAgB,EACnB,GAAGC,gBAAgB,EACnB,GAAGC,cAAc,EACjB,GAAGC,iBAAiB,EACpB,GAAGC,uBAAuB,CAC3B,CAAC;;AAEF;;AAKA,OAAO,SAAS+B,kBAAkBA,CAACC,WAAoB,EAAmC;EACxF,OACE,OAAOA,WAAW,KAAK,QAAQ,IAC/BA,WAAW,KAAK,IAAI,IACpB,OAAO,IAAIA,WAAW,IACtBL,KAAK,CAACC,OAAO,CAACI,WAAW,CAACC,KAAK,CAAC;AAEpC;AAEA,OAAO,SAASC,qBAAqBA,CAACF,WAAoB,EAAsC;EAC9F,OACE,OAAOA,WAAW,KAAK,QAAQ,IAC/BA,WAAW,KAAK,IAAI,IACpB,UAAU,IAAIA,WAAW,IACzB,OAAOA,WAAW,CAACX,QAAQ,KAAK,QAAQ,IACxCQ,eAAe,CAACM,GAAG,CAACH,WAAW,CAACX,QAAQ,CAAC;AAE7C;AAEA,MAAMe,iBAAiB,GAAG,2BAA2B;AAErD,SAASC,SAASA,CAACb,KAAc,EAAe;EAC9C,IAAIA,KAAK,YAAYc,IAAI,EAAE;IACzB,OAAOC,MAAM,CAACC,QAAQ,CAAChB,KAAK,CAACiB,OAAO,CAAC,CAAC,CAAC,GAAGjB,KAAK,GAAG,IAAI;EACxD;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,MAAMkB,IAAI,GAAG,IAAIJ,IAAI,CAACd,KAAK,CAAC;IAC5B,OAAOe,MAAM,CAACC,QAAQ,CAACE,IAAI,CAACD,OAAO,CAAC,CAAC,CAAC,GAAGC,IAAI,GAAG,IAAI;EACtD;EACA,IAAI,OAAOlB,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,IAAI;EACb;EACA,MAAMmB,IAAI,GAAGnB,KAAK,CAACC,IAAI,CAAC,CAAC;EACzB,MAAMmB,QAAQ,GAAGR,iBAAiB,CAACS,IAAI,CAACF,IAAI,CAAC;EAC7C,IAAIC,QAAQ,EAAE;IACZ,OAAO,IAAIN,IAAI,CAACC,MAAM,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAEL,MAAM,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAEL,MAAM,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACpF;EACA,MAAMF,IAAI,GAAG,IAAIJ,IAAI,CAACK,IAAI,CAAC;EAC3B,OAAOJ,MAAM,CAACC,QAAQ,CAACE,IAAI,CAACD,OAAO,CAAC,CAAC,CAAC,GAAGC,IAAI,GAAG,IAAI;AACtD;AAEA,SAASI,UAAUA,CAACJ,IAAU,EAAU;EACtC,OAAO,IAAIJ,IAAI,CAACI,IAAI,CAACK,WAAW,CAAC,CAAC,EAAEL,IAAI,CAACM,QAAQ,CAAC,CAAC,EAAEN,IAAI,CAACO,OAAO,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC;AAChF;AAEA,SAASS,WAAWA,CAAC1B,KAAc,EAAiB;EAClD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOe,MAAM,CAACC,QAAQ,CAAChB,KAAK,CAAC,GAAGA,KAAK,GAAG,IAAI;EAC9C;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,EAAE;IACxD,MAAMyB,MAAM,GAAGZ,MAAM,CAACf,KAAK,CAAC;IAC5B,OAAOe,MAAM,CAACC,QAAQ,CAACW,MAAM,CAAC,GAAGA,MAAM,GAAG,IAAI;EAChD;EACA,OAAO,IAAI;AACb;AAEA,SAASC,YAAYA,CAAC5B,KAAc,EAAkB;EACpD,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IAC9B,OAAOA,KAAK;EACd;EACA,IAAIA,KAAK,KAAK,MAAM,EAAE;IACpB,OAAO,IAAI;EACb;EACA,IAAIA,KAAK,KAAK,OAAO,EAAE;IACrB,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb;AAEA,SAAS6B,WAAWA,CAAC7B,KAAc,EAAW;EAC5C,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,EAAE,EAAE;IACjC,OAAO,IAAI;EACb;EACA,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIe,MAAM,CAACe,KAAK,CAAC9B,KAAK,CAAC;AACzD;AAEA,SAAS+B,MAAMA,CAAC/B,KAAc,EAAa;EACzC,OAAOG,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK,CAAC;AAC/C;AAEA,SAASgC,SAASA,CAAChC,KAAc,EAAiB;EAChD,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,SAAS,GACvFiC,MAAM,CAACjC,KAAK,CAAC,GACb,IAAI;AACV;AAEA,SAASkC,eAAeA,CAACC,CAAU,EAAEC,CAAU,EAAW;EACxD,MAAMC,IAAI,GAAGL,SAAS,CAACG,CAAC,CAAC;EACzB,OAAOE,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAKL,SAAS,CAACI,CAAC,CAAC;AAC/C;AAEA,SAASE,cAAcA,CAACzC,QAA4B,EAAE0C,IAAY,EAAEC,OAAe,EAAW;EAC5F,QAAQ3C,QAAQ;IACd,KAAK,GAAG;MACN,OAAO0C,IAAI,KAAKC,OAAO;IACzB,KAAK,IAAI;MACP,OAAOD,IAAI,KAAKC,OAAO;IACzB,KAAK,GAAG;MACN,OAAOD,IAAI,GAAGC,OAAO;IACvB,KAAK,IAAI;MACP,OAAOD,IAAI,IAAIC,OAAO;IACxB,KAAK,GAAG;MACN,OAAOD,IAAI,GAAGC,OAAO;IACvB,KAAK,IAAI;MACP,OAAOD,IAAI,IAAIC,OAAO;IACxB;MACE,OAAO,IAAI;EACf;AACF;AAEA,SAASC,WAAWA,CAAC5C,QAA4B,EAAE0C,IAAa,EAAEC,OAAgB,EAAW;EAC3F,MAAME,UAAU,GAAG,OAAOH,IAAI,KAAK,QAAQ,IAAIxB,MAAM,CAACC,QAAQ,CAACuB,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;EAClF,IAAI1C,QAAQ,KAAK,SAAS,EAAE;IAC1B,MAAM8C,QAAQ,GAAGZ,MAAM,CAACS,OAAO,CAAC,CAC7BI,GAAG,CAAClB,WAAW,CAAC,CAChBmB,MAAM,CAAEC,CAAC,IAAkBA,CAAC,KAAK,IAAI,CAAC;IACzC,OAAOJ,UAAU,KAAK,IAAI,IAAIC,QAAQ,CAACI,QAAQ,CAACL,UAAU,CAAC;EAC7D;EACA,MAAMM,aAAa,GAAGtB,WAAW,CAACc,OAAO,CAAC;EAC1C,IAAIQ,aAAa,KAAK,IAAI,EAAE;IAC1B,OAAO,IAAI;EACb;EACA,IAAIN,UAAU,KAAK,IAAI,EAAE;IACvB,OAAO7C,QAAQ,KAAK,IAAI;EAC1B;EACA,OAAOyC,cAAc,CAACzC,QAAQ,EAAE6C,UAAU,EAAEM,aAAa,CAAC;AAC5D;AAEA,SAASC,SAASA,CAChBvE,IAAyB,EACzBmB,QAA4B,EAC5B0C,IAAa,EACbC,OAAgB,EACP;EACT,MAAMU,WAAW,GAAGrC,SAAS,CAAC2B,OAAO,CAAC;EACtC,IAAIU,WAAW,KAAK,IAAI,EAAE;IACxB,OAAO,IAAI;EACb;EACA,MAAMC,QAAQ,GAAGZ,IAAI,YAAYzB,IAAI,IAAIC,MAAM,CAACC,QAAQ,CAACuB,IAAI,CAACtB,OAAO,CAAC,CAAC,CAAC,GAAGsB,IAAI,GAAG,IAAI;EACtF,IAAIY,QAAQ,KAAK,IAAI,EAAE;IACrB,OAAOtD,QAAQ,KAAK,KAAK;EAC3B;EACA,MAAMuD,SAAS,GAAIlC,IAAU,IAAMxC,IAAI,KAAK,MAAM,GAAG4C,UAAU,CAACJ,IAAI,CAAC,GAAGA,IAAI,CAACD,OAAO,CAAC,CAAE;EACvF,MAAMoC,QAAQ,GAAGD,SAAS,CAACD,QAAQ,CAAC;EACpC,MAAMG,WAAW,GAAGF,SAAS,CAACF,WAAW,CAAC;EAC1C,QAAQrD,QAAQ;IACd,KAAK,IAAI;MACP,OAAOwD,QAAQ,KAAKC,WAAW;IACjC,KAAK,KAAK;MACR,OAAOD,QAAQ,KAAKC,WAAW;IACjC,KAAK,OAAO;MACV,OAAOD,QAAQ,GAAGC,WAAW;IAC/B,KAAK,WAAW;MACd,OAAOD,QAAQ,IAAIC,WAAW;IAChC,KAAK,QAAQ;MACX,OAAOD,QAAQ,GAAGC,WAAW;IAC/B,KAAK,YAAY;MACf,OAAOD,QAAQ,IAAIC,WAAW;IAChC;MACE,OAAO,IAAI;EACf;AACF;AAEA,SAASC,SAASA,CAAC1D,QAA4B,EAAEsB,IAAY,EAAEqB,OAAgB,EAAW;EACxF,IAAI3C,QAAQ,KAAK,SAAS,EAAE;IAC1B,MAAM8C,QAAQ,GAAGZ,MAAM,CAACS,OAAO,CAAC,CAACK,MAAM,CAAEW,IAAI,IAAK,CAACzD,kBAAkB,CAACyD,IAAI,CAAC,CAAC;IAC5E,OAAOb,QAAQ,CAACc,IAAI,CAAED,IAAI,IAAKvB,MAAM,CAACuB,IAAI,CAAC,KAAKrC,IAAI,CAAC;EACvD;EACA,MAAMuC,MAAM,GAAGzB,MAAM,CAACO,OAAO,CAAC,CAACvC,IAAI,CAAC,CAAC,CAAC0D,WAAW,CAAC,CAAC;EACnD,MAAMC,QAAQ,GAAGzC,IAAI,CAACwC,WAAW,CAAC,CAAC;EACnC,QAAQ9D,QAAQ;IACd,KAAK,UAAU;MACb,OAAO+D,QAAQ,CAACb,QAAQ,CAACW,MAAM,CAAC;IAClC,KAAK,gBAAgB;MACnB,OAAO,CAACE,QAAQ,CAACb,QAAQ,CAACW,MAAM,CAAC;IACnC,KAAK,QAAQ;MACX,OAAOE,QAAQ,KAAKF,MAAM;IAC5B,KAAK,cAAc;MACjB,OAAOE,QAAQ,KAAKF,MAAM;IAC5B,KAAK,YAAY;MACf,OAAOE,QAAQ,CAAC3E,UAAU,CAACyE,MAAM,CAAC;IACpC,KAAK,UAAU;MACb,OAAOE,QAAQ,CAAC1E,QAAQ,CAACwE,MAAM,CAAC;IAClC;MACE,OAAO,IAAI;EACf;AACF;AAEA,SAASG,iBAAiBA,CAAChE,QAA4B,EAAE0C,IAAa,EAAEC,OAAgB,EAAW;EACjG,IAAI3C,QAAQ,KAAK,SAAS,EAAE;IAC1B,OAAOkC,MAAM,CAACS,OAAO,CAAC,CAACiB,IAAI,CAAED,IAAI,IAAKtB,eAAe,CAACsB,IAAI,EAAEjB,IAAI,CAAC,CAAC;EACpE;EACA,MAAMuB,YAAY,GAAG3D,KAAK,CAACC,OAAO,CAACoC,OAAO,CAAC,GAAGA,OAAO,CAAC,CAAC,CAAC,GAAGA,OAAO;EAClE,QAAQ3C,QAAQ;IACd,KAAK,IAAI;MACP,OAAOqC,eAAe,CAAC4B,YAAY,EAAEvB,IAAI,CAAC;IAC5C,KAAK,KAAK;MACR,OAAO,CAACL,eAAe,CAAC4B,YAAY,EAAEvB,IAAI,CAAC;IAC7C;MACE,OAAO,IAAI;EACf;AACF;AAEA,SAASwB,YAAYA,CAACxB,IAAa,EAAEC,OAAgB,EAAW;EAC9D,MAAMwB,cAAc,GAAGpC,YAAY,CAACY,OAAO,CAAC;EAC5C,IAAIwB,cAAc,KAAK,IAAI,EAAE;IAC3B,OAAO,IAAI;EACb;EACA,OAAOzB,IAAI,KAAKyB,cAAc;AAChC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACnCC,GAAkB,EAClB3B,IAAa,EACb4B,GAAM,EACN;EAAEtE,QAAQ;EAAEG;AAA2B,CAAC,EAC/B;EACT,IAAI,CAACvB,sBAAsB,CAACyF,GAAG,CAACxF,IAAI,CAAC,CAACqE,QAAQ,CAAClD,QAAQ,CAAC,EAAE;IACxD,OAAO,IAAI;EACb;EACA,IAAIA,QAAQ,KAAK,SAAS,EAAE;IAC1B,OAAOgC,WAAW,CAACU,IAAI,CAAC;EAC1B;EACA,IAAI1C,QAAQ,KAAK,YAAY,EAAE;IAC7B,OAAO,CAACgC,WAAW,CAACU,IAAI,CAAC;EAC3B;EACA,IAAIxC,kBAAkB,CAACC,KAAK,CAAC,EAAE;IAC7B,OAAO,IAAI;EACb;EACA,QAAQkE,GAAG,CAACxF,IAAI;IACd,KAAK,QAAQ;MACX,OAAO+D,WAAW,CAAC5C,QAAQ,EAAE0C,IAAI,EAAEvC,KAAK,CAAC;IAC3C,KAAK,MAAM;IACX,KAAK,UAAU;MACb,OAAOiD,SAAS,CAACiB,GAAG,CAACxF,IAAI,EAAEmB,QAAQ,EAAE0C,IAAI,EAAEvC,KAAK,CAAC;IACnD,KAAK,SAAS;MACZ,OAAO+D,YAAY,CAACxB,IAAI,EAAEvC,KAAK,CAAC;IAClC,KAAK,cAAc;MACjB,OAAO6D,iBAAiB,CAAChE,QAAQ,EAAE0C,IAAI,EAAEvC,KAAK,CAAC;IACjD;MACE,OAAOuD,SAAS,CAAC1D,QAAQ,EAAE0C,IAAI,IAAI,IAAI,GAAG,EAAE,GAAGvE,mBAAmB,CAACkG,GAAG,EAAE3B,IAAI,EAAE4B,GAAG,CAAC,EAAEnE,KAAK,CAAC;EAC9F;AACF;;AAEA;AACA,OAAO,SAASoE,kBAAkBA,CAACZ,IAAoB,EAAW;EAChE,IAAIA,IAAI,CAAC3D,QAAQ,KAAKwE,SAAS,EAAE;IAC/B,OAAO,CAACvE,wBAAwB,CAAC0D,IAAI,CAAC3D,QAAQ,CAAC,IAAI,CAACE,kBAAkB,CAACyD,IAAI,CAACxD,KAAK,CAAC;EACpF;EACA,OAAO/B,oBAAoB,CAACuF,IAAI,CAACxD,KAAK,CAAC,CAACE,MAAM,GAAG,CAAC;AACpD;AAEA,OAAO,SAASoE,oBAAoBA,CAClCJ,GAAkB,EAClBC,GAAM,EACNX,IAAoB,EACX;EACT,MAAMe,GAAG,GAAGJ,GAAG,CAACD,GAAG,CAACM,KAAK,CAAC;EAC1B,MAAMjC,IAAa,GAAG2B,GAAG,CAACO,WAAW,GAAGP,GAAG,CAACO,WAAW,CAACF,GAAG,EAAEJ,GAAG,EAAED,GAAG,CAAC,GAAGK,GAAG;EAC5E,IAAIf,IAAI,CAAC3D,QAAQ,KAAKwE,SAAS,EAAE;IAC/B,OAAOJ,qBAAqB,CAACC,GAAG,EAAE3B,IAAI,EAAE4B,GAAG,EAAE;MAAEtE,QAAQ,EAAE2D,IAAI,CAAC3D,QAAQ;MAAEG,KAAK,EAAEwD,IAAI,CAACxD;IAAM,CAAC,CAAC;EAC9F;EACA,MAAM0E,KAAK,GAAGzG,oBAAoB,CAACuF,IAAI,CAACxD,KAAK,CAAC;EAC9C,IAAI7B,iBAAiB,CAAC+F,GAAG,CAAC,EAAE;IAC1B,OAAOlG,mBAAmB,CAACkG,GAAG,EAAE3B,IAAI,EAAE4B,GAAG,CAAC,CAACR,WAAW,CAAC,CAAC,CAACZ,QAAQ,CAAC2B,KAAK,CAAC;EAC1E;EACA,OAAOxG,wBAAwB,CAACqE,IAAI,EAAEmC,KAAK,CAAC;AAC9C;AAEA,SAASC,aAAaA,CACpBT,GAA8B,EACF;EAC5B,OAAO,OAAOA,GAAG,CAACU,YAAY,KAAK,UAAU,GAAGV,GAAG,CAACU,YAAY,CAAC,CAAC,CAAC,CAAC,GAAGV,GAAG,CAACU,YAAY;AACzF;AAEA,SAASC,iBAAiBA,CAA8BX,GAAkB,EAAE/C,IAAY,EAAW;EACjG,IAAI+C,GAAG,CAACxF,IAAI,KAAK,cAAc,EAAE;IAC/B,OAAOyC,IAAI;EACb;EACA,MAAM2D,OAAO,GAAG3D,IAAI,CAAClB,IAAI,CAAC,CAAC;EAC3B,MAAM8E,KAAK,GAAGJ,aAAa,CAACT,GAAG,CAAC,CAACc,IAAI,CAAEC,MAAM,IAAK;IAChD,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;MAC9B,OACEhD,MAAM,CAACgD,MAAM,CAACjF,KAAK,CAAC,KAAK8E,OAAO,IAAIG,MAAM,CAACC,KAAK,CAACvB,WAAW,CAAC,CAAC,KAAKmB,OAAO,CAACnB,WAAW,CAAC,CAAC;IAE5F;IACA,OAAO1B,MAAM,CAACgD,MAAM,CAAC,CAACtB,WAAW,CAAC,CAAC,KAAKmB,OAAO,CAACnB,WAAW,CAAC,CAAC;EAC/D,CAAC,CAAC;EACF,IAAI,CAACoB,KAAK,EAAE;IACV,OAAO5D,IAAI;EACb;EACA,OAAO,OAAO4D,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAAC/E,KAAK,GAAG+E,KAAK;AACxD;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASI,yBAAyBA,CACvCjB,GAA8B,EAC9BrE,QAA4B,EAC5BsB,IAAY,EACH;EACT,IAAI,CAACrB,wBAAwB,CAACD,QAAQ,CAAC,EAAE;IACvC,OAAOwE,SAAS;EAClB;EACA,IAAIxE,QAAQ,KAAK,SAAS,EAAE;IAC1B,MAAMuF,KAAK,GAAGjE,IAAI,CACfkE,KAAK,CAAC,GAAG,CAAC,CACVzC,GAAG,CAAE0C,IAAI,IAAKA,IAAI,CAACrF,IAAI,CAAC,CAAC,CAAC,CAC1B4C,MAAM,CAAEyC,IAAI,IAAKA,IAAI,CAACpF,MAAM,GAAG,CAAC,CAAC;IACpC,IAAIgE,GAAG,EAAExF,IAAI,KAAK,QAAQ,EAAE;MAC1B,OAAO0G,KAAK,CAACxC,GAAG,CAAE0C,IAAI,IAAKC,iBAAiB,CAACrB,GAAG,EAAE,GAAG,EAAEoB,IAAI,CAAC,CAAC;IAC/D;IACA,IAAIpB,GAAG,EAAExF,IAAI,KAAK,cAAc,EAAE;MAChC,OAAO0G,KAAK,CAACxC,GAAG,CAAE0C,IAAI,IAAKT,iBAAiB,CAACX,GAAG,EAAEoB,IAAI,CAAC,CAAC;IAC1D;IACA,OAAOF,KAAK;EACd;EACA,IAAIlB,GAAG,EAAExF,IAAI,KAAK,cAAc,EAAE;IAChC,OAAOmG,iBAAiB,CAACX,GAAG,EAAE/C,IAAI,CAAC;EACrC;EACA,OAAOoE,iBAAiB,CAACrB,GAAG,EAAErE,QAAQ,EAAEsB,IAAI,CAAC;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASoE,iBAAiBA,CAC/BrB,GAA8B,EAC9BrE,QAA4B,EAC5BsB,IAAY,EACH;EACT,IAAItB,QAAQ,KAAK,SAAS,IAAI,CAACC,wBAAwB,CAACD,QAAQ,CAAC,EAAE;IACjE,OAAOsB,IAAI;EACb;EACA,MAAM2D,OAAO,GAAG3D,IAAI,CAAClB,IAAI,CAAC,CAAC;EAC3B,QAAQiE,GAAG,EAAExF,IAAI;IACf,KAAK,QAAQ;MAAE;QACb,MAAMiD,MAAM,GAAGD,WAAW,CAACoD,OAAO,CAAC;QACnC,OAAOnD,MAAM,KAAK,IAAI,IAAIM,MAAM,CAACN,MAAM,CAAC,KAAKmD,OAAO,GAAGnD,MAAM,GAAGR,IAAI;MACtE;IACA,KAAK,MAAM;MAAE;QACX,OAAOP,iBAAiB,CAAC4E,IAAI,CAACV,OAAO,CAAC,GAAIjE,SAAS,CAACiE,OAAO,CAAC,IAAI3D,IAAI,GAAIA,IAAI;MAC9E;IACA,KAAK,SAAS;MAAE;QACd,OAAOS,YAAY,CAACkD,OAAO,CAAC,IAAI3D,IAAI;MACtC;IACA;MACE,OAAOA,IAAI;EACf;AACF;AAEA,SAASsE,GAAGA,CAACzF,KAAa,EAAEE,MAAc,EAAU;EAClD,OAAO+B,MAAM,CAACjC,KAAK,CAAC,CAAC0F,QAAQ,CAACxF,MAAM,EAAE,GAAG,CAAC;AAC5C;;AAEA;AACA,OAAO,SAASyF,sBAAsBA,CAAC3F,KAAc,EAAU;EAC7D,IAAIA,KAAK,IAAI,IAAI,EAAE;IACjB,OAAO,EAAE;EACX;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IAC3D,OAAOiC,MAAM,CAACjC,KAAK,CAAC;EACtB;EACA,IAAIA,KAAK,YAAYc,IAAI,EAAE;IACzB,OAAOC,MAAM,CAACC,QAAQ,CAAChB,KAAK,CAACiB,OAAO,CAAC,CAAC,CAAC,GACnC,GAAGwE,GAAG,CAACzF,KAAK,CAACuB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIkE,GAAG,CAACzF,KAAK,CAACwB,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAIiE,GAAG,CAACzF,KAAK,CAACyB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAC3F,EAAE;EACR;EACA,IAAItB,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK,CAAC4C,GAAG,CAAC+C,sBAAsB,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrD;EACA,OAAO,EAAE;AACX","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ import { SELECT_COLUMN_ID } from '../types';
4
+ export const DEFAULT_PINNED_COLUMN_WIDTH = 100;
5
+ export const SELECT_COLUMN_WIDTH = 56;
6
+ export function isColumnPinningActive(state) {
7
+ return state.start.length > 0 || state.end.length > 0;
8
+ }
9
+ export function pinnedFieldSet(state) {
10
+ return new Set([...state.start, ...state.end]);
11
+ }
12
+ export function pinnedColumnPixelWidth(columnId, col) {
13
+ if (columnId === SELECT_COLUMN_ID) {
14
+ return SELECT_COLUMN_WIDTH;
15
+ }
16
+ return Math.max(col?.width ?? DEFAULT_PINNED_COLUMN_WIDTH, col?.minWidth ?? 0);
17
+ }
18
+ export function buildPinnedOffsets(state, colByField) {
19
+ const start = new Map();
20
+ let startOffset = 0;
21
+ for (const id of state.start) {
22
+ start.set(id, startOffset);
23
+ startOffset += pinnedColumnPixelWidth(id, colByField.get(id));
24
+ }
25
+ const end = new Map();
26
+ let endOffset = 0;
27
+ for (let index = state.end.length - 1; index >= 0; index -= 1) {
28
+ const id = state.end[index];
29
+ end.set(id, endOffset);
30
+ endOffset += pinnedColumnPixelWidth(id, colByField.get(id));
31
+ }
32
+ return {
33
+ start,
34
+ end,
35
+ startTotal: startOffset,
36
+ endTotal: endOffset
37
+ };
38
+ }
39
+ export function pinnedCellStyle(edge, offset, isHeader) {
40
+ // Logical insets / sticky are valid on web; RN ViewStyle typing does not list them yet.
41
+ return {
42
+ position: 'sticky',
43
+ ...(edge === 'start' ? {
44
+ insetInlineStart: offset
45
+ } : {
46
+ insetInlineEnd: offset
47
+ }),
48
+ zIndex: isHeader ? 30 : 10
49
+ };
50
+ }
51
+
52
+ /**
53
+ * Draws the pinned edge dividers on the scroll container itself so they reach its bottom when the
54
+ * rows are shorter than the viewport. A non-local background does not scroll with the content,
55
+ * matching sticky pinned cells, and its positioning area excludes scrollbars.
56
+ */
57
+ export function pinnedEdgeGuidesImage(offsets, color, isRTL) {
58
+ const {
59
+ startTotal,
60
+ endTotal
61
+ } = offsets;
62
+ const stops = [];
63
+ if (startTotal > 0) {
64
+ const edge = `${startTotal.toString()}px`;
65
+ const inner = `${(startTotal - 1).toString()}px`;
66
+ stops.push(`transparent ${inner}`, `${color} ${inner}`, `${color} ${edge}`, `transparent ${edge}`);
67
+ }
68
+ if (endTotal > 0) {
69
+ const edge = `calc(100% - ${endTotal.toString()}px)`;
70
+ const inner = `calc(100% - ${(endTotal - 1).toString()}px)`;
71
+ stops.push(`transparent ${edge}`, `${color} ${edge}`, `${color} ${inner}`, `transparent ${inner}`);
72
+ }
73
+ if (stops.length === 0) {
74
+ return undefined;
75
+ }
76
+ return `linear-gradient(${isRTL ? 'to left' : 'to right'}, ${stops.join(', ')})`;
77
+ }
78
+ const warnedPinnedFlexFields = new Set();
79
+ export function warnPinnedFlexColumns(columns, pinned) {
80
+ if (!__DEV__) {
81
+ return;
82
+ }
83
+ for (const column of columns) {
84
+ if (pinned.has(column.field) && (column.flex ?? 0) > 0 && !warnedPinnedFlexFields.has(column.field)) {
85
+ warnedPinnedFlexFields.add(column.field);
86
+ console.warn(`[DataGrid] Pinned column "${column.field}" ignores flex and uses a fixed width.`);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=pinning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SELECT_COLUMN_ID","DEFAULT_PINNED_COLUMN_WIDTH","SELECT_COLUMN_WIDTH","isColumnPinningActive","state","start","length","end","pinnedFieldSet","Set","pinnedColumnPixelWidth","columnId","col","Math","max","width","minWidth","buildPinnedOffsets","colByField","Map","startOffset","id","set","get","endOffset","index","startTotal","endTotal","pinnedCellStyle","edge","offset","isHeader","position","insetInlineStart","insetInlineEnd","zIndex","pinnedEdgeGuidesImage","offsets","color","isRTL","stops","toString","inner","push","undefined","join","warnedPinnedFlexFields","warnPinnedFlexColumns","columns","pinned","__DEV__","column","has","field","flex","add","console","warn"],"sourceRoot":"../../../src","sources":["adapter/pinning.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  export { DataGrid } from './DataGrid';
4
+ export { getDefaultFilterOperator, getGridFilterOperators } from './adapter/filterOperators';
5
+ export { gridDeltaNumberColDef, gridPolarityNumberColDef } from './numberCells';
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DataGrid"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["DataGrid","getDefaultFilterOperator","getGridFilterOperators","gridDeltaNumberColDef","gridPolarityNumberColDef"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,YAAY;AACrC,SAASC,wBAAwB,EAAEC,sBAAsB,QAAQ,2BAA2B;AAC5F,SAASC,qBAAqB,EAAEC,wBAAwB,QAAQ,eAAe","ignoreList":[]}