@adaptabletools/adaptable 18.0.5 → 18.0.7

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 (43) hide show
  1. package/package.json +1 -1
  2. package/src/Api/Implementation/DataImportApiImpl.js +3 -1
  3. package/src/PredefinedConfig/Common/CellSummary.d.ts +0 -2
  4. package/src/PredefinedConfig/Common/Enums.d.ts +0 -2
  5. package/src/PredefinedConfig/Common/Enums.js +0 -2
  6. package/src/PredefinedConfig/Common/RowSummary.d.ts +1 -1
  7. package/src/PredefinedConfig/Common/RowSummary.js +0 -2
  8. package/src/Strategy/CellSummaryModule.js +2 -6
  9. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.d.ts +3 -1
  10. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +68 -138
  11. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.d.ts +1 -1
  12. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +1 -0
  13. package/src/Utilities/ObjectFactory.js +0 -2
  14. package/src/View/CellSummary/CellSummaryDetails.js +2 -1
  15. package/src/View/Components/AdaptableDateInput/index.d.ts +1 -1
  16. package/src/View/Components/AdaptableInput/AdaptableDateInlineInput.d.ts +1 -1
  17. package/src/View/Components/ColumnSelector/index.d.ts +1 -6
  18. package/src/View/Components/ColumnSelector/index.js +3 -4
  19. package/src/View/Components/EntityRulesEditor/index.js +2 -4
  20. package/src/View/Components/ValueSelector/index.d.ts +0 -5
  21. package/src/View/Components/ValueSelector/index.js +1 -4
  22. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +4 -2
  23. package/src/View/DataImport/DataImportPopup.js +4 -2
  24. package/src/View/Layout/TransposedPopup.js +30 -20
  25. package/src/agGrid/ActionColumnRenderer.js +8 -0
  26. package/src/agGrid/AdaptableAgGrid.js +11 -4
  27. package/src/agGrid/BadgeRenderer.js +4 -4
  28. package/src/components/ColorPicker/ColorPicker.d.ts +1 -1
  29. package/src/components/Datepicker/index.d.ts +1 -1
  30. package/src/components/FieldWrap/index.d.ts +1 -7
  31. package/src/components/FieldWrap/index.js +5 -4
  32. package/src/components/FileDroppable/index.d.ts +1 -4
  33. package/src/components/FileDroppable/index.js +1 -2
  34. package/src/components/Input/index.d.ts +1 -1
  35. package/src/components/List/ListGroupItem/index.d.ts +1 -1
  36. package/src/components/OverlayTrigger/index.js +10 -9
  37. package/src/components/ResizeObserver/index.d.ts +1 -7
  38. package/src/components/ResizeObserver/index.js +3 -6
  39. package/src/components/SimpleButton/index.js +10 -9
  40. package/src/components/Tabs/index.d.ts +6 -24
  41. package/src/components/Tabs/index.js +6 -10
  42. package/src/env.js +2 -2
  43. package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "18.0.5",
3
+ "version": "18.0.7",
4
4
  "description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -5,6 +5,8 @@ export class DataImportApiImpl extends ApiBase {
5
5
  super(adaptable);
6
6
  this.internalApi = new DataImportInternalApi(adaptable);
7
7
  }
8
- openImportWizard() { }
8
+ openImportWizard() {
9
+ this.getSettingsPanelApi().openSettingsPanel('DataImport');
10
+ }
9
11
  importData(partialRows) { }
10
12
  }
@@ -15,8 +15,6 @@ export interface CellSummmary {
15
15
  Count: number | undefined;
16
16
  Only: string | undefined;
17
17
  Std_Deviation: number | undefined;
18
- Oldest: Date | undefined;
19
- Newest: Date | undefined;
20
18
  [key: string]: any;
21
19
  }
22
20
  /**
@@ -59,8 +59,6 @@ export declare enum SummaryOperation {
59
59
  Max = "Max",
60
60
  Min = "Min",
61
61
  Count = "Count",
62
- Newest = "Newest",
63
- Oldest = "Oldest",
64
62
  Std_Deviation = "Std Deviation",
65
63
  Only = "Only",
66
64
  Weighted_Average = "Weighted Avg"
@@ -73,8 +73,6 @@ export var SummaryOperation;
73
73
  SummaryOperation["Max"] = "Max";
74
74
  SummaryOperation["Min"] = "Min";
75
75
  SummaryOperation["Count"] = "Count";
76
- SummaryOperation["Newest"] = "Newest";
77
- SummaryOperation["Oldest"] = "Oldest";
78
76
  SummaryOperation["Std_Deviation"] = "Std Deviation";
79
77
  SummaryOperation["Only"] = "Only";
80
78
  SummaryOperation["Weighted_Average"] = "Weighted Avg";
@@ -1,6 +1,6 @@
1
1
  export declare const ROW_SUMMARY_ROW_ID = "__ROW_SUMMARY_ROW_ID";
2
2
  export declare const WEIGHTED_AVERAGE_AGGREATED_FUNCTION = "WEIGHTED_AVERAGE";
3
- export declare const summarySupportedExpressions: readonly ["MIN", "MAX", "SUM", "AVG", "COUNT", "MEDIAN", "MODE", "DISTINCT", "ONLY", "OLDEST", "NEWEST", "STD_DEVIATION", "WEIGHTED_AVERAGE"];
3
+ export declare const summarySupportedExpressions: readonly ["MIN", "MAX", "SUM", "AVG", "COUNT", "MEDIAN", "MODE", "DISTINCT", "ONLY", "STD_DEVIATION", "WEIGHTED_AVERAGE"];
4
4
  export type SummarySupportedExpression = (typeof summarySupportedExpressions)[number];
5
5
  /**
6
6
  * Position of Row Summary - 'Top' or 'Bottom'
@@ -10,8 +10,6 @@ export const summarySupportedExpressions = [
10
10
  'MODE',
11
11
  'DISTINCT',
12
12
  'ONLY',
13
- 'OLDEST',
14
- 'NEWEST',
15
13
  'STD_DEVIATION',
16
14
  WEIGHTED_AVERAGE_AGGREATED_FUNCTION,
17
15
  ];
@@ -74,10 +74,8 @@ export class CellSummaryModule extends AdaptableModuleBase {
74
74
  const modeValue = isNumericColumn ? handleExpression('MODE') : null;
75
75
  const medianValue = isNumericColumn ? handleExpression('MEDIAN') : null;
76
76
  const distinctValue = handleExpression('DISTINCT');
77
- const maxValue = isNumericColumn ? handleExpression('MAX') : null;
78
- const minValue = isNumericColumn ? handleExpression('MIN') : null;
79
- const oldestValue = isDateColumn ? handleExpression('OLDEST') : null;
80
- const newestValue = isDateColumn ? handleExpression('NEWEST') : null;
77
+ const maxValue = isNumericColumn || isDateColumn ? handleExpression('MAX') : null;
78
+ const minValue = isNumericColumn || isDateColumn ? handleExpression('MIN') : null;
81
79
  const stdDeviation = isNumericColumn
82
80
  ? Helper.roundNumberTo4dp(handleExpression('STD_DEVIATION'))
83
81
  : null;
@@ -90,8 +88,6 @@ export class CellSummaryModule extends AdaptableModuleBase {
90
88
  Max: maxValue,
91
89
  Min: minValue,
92
90
  Count: selectedCellInfo.gridCells.length,
93
- Oldest: oldestValue,
94
- Newest: newestValue,
95
91
  Std_Deviation: stdDeviation,
96
92
  Only: distinctValue == 1 ? JSON.stringify(selectedCellInfo.gridCells[0].rawValue) : '',
97
93
  };
@@ -2,11 +2,12 @@ import { IRowNode } from '@ag-grid-community/core';
2
2
  import { ExpressionFunction } from '../../parser/src/types';
3
3
  import { BaseParameter } from './expressionFunctionUtils';
4
4
  import { AggregateParams } from './scalarAggregationHelper';
5
+ import { AdaptableColumnDataType } from '../../types';
5
6
  /**
6
7
  * List of all the AggregatedScalar Functions available in AdaptableQL
7
8
  */
8
9
  export type AggregatedScalarFunctionName = ScalarAggregationFunction | OperandFunction;
9
- export type ScalarAggregationFunction = 'SUM' | 'PERCENTAGE' | 'QUANT' | 'QUARTILE' | 'PERCENTILE' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'CUMUL' | 'MEDIAN' | 'MODE' | 'DISTINCT' | 'ONLY' | 'STD_DEVIATION' | 'OLDEST' | 'NEWEST';
10
+ export type ScalarAggregationFunction = 'SUM' | 'PERCENTAGE' | 'QUANT' | 'QUARTILE' | 'PERCENTILE' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'CUMUL' | 'MEDIAN' | 'MODE' | 'DISTINCT' | 'ONLY' | 'STD_DEVIATION';
10
11
  type OperandFunction = 'COL' | 'OVER' | 'GROUP_BY' | 'WEIGHT';
11
12
  export interface ScalarAggregationParameter extends BaseParameter<'aggregationScalar', ScalarAggregationFunction> {
12
13
  value: AggregatedScalarExpressionEvaluation;
@@ -29,6 +30,7 @@ export interface AggregatedScalarExpressionEvaluation {
29
30
  sortByColumn?: string;
30
31
  rowFilterFn?: (rowNode: IRowNode) => boolean;
31
32
  getRowNodes?: () => IRowNode[];
33
+ columnType?: AdaptableColumnDataType;
32
34
  }
33
35
  export interface CumulatedAggregationValue {
34
36
  currentValue: number;
@@ -44,7 +44,7 @@ export const aggregatedScalarExpressionFunctions = {
44
44
  handler(args, context) {
45
45
  const aggregationParameter = extractParameter('CUMUL', 'aggregationScalar', ['SUM', 'PERCENTAGE', 'AVG', 'MIN', 'MAX', 'COUNT'], args);
46
46
  const overColumnParameter = extractParameter('CUMUL', 'operand', ['OVER'], args);
47
- const groupByParameter = extractParameter('MAX', 'operand', ['GROUP_BY'], args, {
47
+ const groupByParameter = extractParameter(aggregationParameter.name, 'operand', ['GROUP_BY'], args, {
48
48
  isOptional: true,
49
49
  });
50
50
  if (!!groupByParameter) {
@@ -73,7 +73,7 @@ export const aggregatedScalarExpressionFunctions = {
73
73
  handler(args, context) {
74
74
  const sumColumnParameter = extractColumnParameter('SUM', args);
75
75
  const sumColumnName = sumColumnParameter.value;
76
- validateColumnType(sumColumnName, ['Number'], 'SUM', context.adaptableApi);
76
+ const columnType = validateColumnType(sumColumnName, ['Number'], 'SUM', context.adaptableApi);
77
77
  const groupByParameter = extractParameter('SUM', 'operand', ['GROUP_BY'], args, {
78
78
  isOptional: true,
79
79
  });
@@ -97,6 +97,7 @@ export const aggregatedScalarExpressionFunctions = {
97
97
  },
98
98
  rowFilterFn: context.filterFn,
99
99
  getRowNodes: context.getRowNodes,
100
+ columnType,
100
101
  };
101
102
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
102
103
  const result = {
@@ -122,7 +123,7 @@ export const aggregatedScalarExpressionFunctions = {
122
123
  var _a;
123
124
  const percentageColumnParameter = extractColumnParameter('PERCENTAGE', args);
124
125
  const percentageColumnName = percentageColumnParameter.value;
125
- validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.adaptableApi);
126
+ const columnType = validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.adaptableApi);
126
127
  const sumOperand = extractParameter('PERCENTAGE', 'aggregationScalar', ['SUM'], args, {
127
128
  isOptional: true,
128
129
  });
@@ -161,6 +162,7 @@ export const aggregatedScalarExpressionFunctions = {
161
162
  },
162
163
  rowFilterFn: context.filterFn,
163
164
  getRowNodes: context.getRowNodes,
165
+ columnType,
164
166
  };
165
167
  addGroupByParams(groupByColumnNames, aggregationExpressionEvaluation);
166
168
  const result = {
@@ -189,7 +191,7 @@ export const aggregatedScalarExpressionFunctions = {
189
191
  handler(args, context) {
190
192
  const avgColumnParameter = extractColumnParameter('AVG', args);
191
193
  const avgColumnName = avgColumnParameter.value;
192
- validateColumnType(avgColumnName, ['Number'], 'AVG', context.adaptableApi);
194
+ const columnType = validateColumnType(avgColumnName, ['Number'], 'AVG', context.adaptableApi);
193
195
  const groupByParameter = extractParameter('AVG', 'operand', ['GROUP_BY'], args, {
194
196
  isOptional: true,
195
197
  });
@@ -236,6 +238,7 @@ export const aggregatedScalarExpressionFunctions = {
236
238
  },
237
239
  rowFilterFn: context.filterFn,
238
240
  getRowNodes: context.getRowNodes,
241
+ columnType,
239
242
  };
240
243
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
241
244
  if (weightParameter) {
@@ -265,7 +268,7 @@ export const aggregatedScalarExpressionFunctions = {
265
268
  handler(args, context) {
266
269
  const medianColumnParameter = extractColumnParameter('MEDIAN', args);
267
270
  const medianColumnName = medianColumnParameter.value;
268
- validateColumnType(medianColumnName, ['Number'], 'MEDIAN', context.adaptableApi);
271
+ const columnType = validateColumnType(medianColumnName, ['Number'], 'MEDIAN', context.adaptableApi);
269
272
  const groupByParameter = extractParameter('MEDIAN', 'operand', ['GROUP_BY'], args, {
270
273
  isOptional: true,
271
274
  });
@@ -306,6 +309,7 @@ export const aggregatedScalarExpressionFunctions = {
306
309
  },
307
310
  rowFilterFn: context.filterFn,
308
311
  getRowNodes: context.getRowNodes,
312
+ columnType,
309
313
  };
310
314
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
311
315
  const result = {
@@ -330,7 +334,7 @@ export const aggregatedScalarExpressionFunctions = {
330
334
  handler(args, context) {
331
335
  const modeColumnParameter = extractColumnParameter('mode', args);
332
336
  const modeColumnName = modeColumnParameter.value;
333
- validateColumnType(modeColumnName, ['Number', 'String', 'Date'], 'mode', context.adaptableApi);
337
+ const columnType = validateColumnType(modeColumnName, ['Number', 'String', 'Date'], 'mode', context.adaptableApi);
334
338
  const groupByParameter = extractParameter('MODE', 'operand', ['GROUP_BY'], args, {
335
339
  isOptional: true,
336
340
  });
@@ -372,6 +376,7 @@ export const aggregatedScalarExpressionFunctions = {
372
376
  },
373
377
  rowFilterFn: context.filterFn,
374
378
  getRowNodes: context.getRowNodes,
379
+ columnType,
375
380
  };
376
381
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
377
382
  const result = {
@@ -444,7 +449,7 @@ export const aggregatedScalarExpressionFunctions = {
444
449
  handler(args, context) {
445
450
  const distinctColumnParameter = extractColumnParameter('ONLY', args);
446
451
  const onlyColumnName = distinctColumnParameter.value;
447
- validateColumnType(onlyColumnName, ['Number'], 'ONLY', context.adaptableApi);
452
+ const columnType = validateColumnType(onlyColumnName, ['Number'], 'ONLY', context.adaptableApi);
448
453
  const groupByParameter = extractParameter('ONLY', 'operand', ['GROUP_BY'], args, {
449
454
  isOptional: true,
450
455
  });
@@ -470,6 +475,7 @@ export const aggregatedScalarExpressionFunctions = {
470
475
  },
471
476
  rowFilterFn: context.filterFn,
472
477
  getRowNodes: context.getRowNodes,
478
+ columnType,
473
479
  };
474
480
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
475
481
  const result = {
@@ -494,7 +500,7 @@ export const aggregatedScalarExpressionFunctions = {
494
500
  handler(args, context) {
495
501
  const columnParameter = extractColumnParameter('STD_DEVIATION', args);
496
502
  const columnName = columnParameter.value;
497
- validateColumnType(columnName, ['Number'], 'STD_DEVIATION', context.adaptableApi);
503
+ const columnType = validateColumnType(columnName, ['Number'], 'STD_DEVIATION', context.adaptableApi);
498
504
  const groupByParameter = extractParameter('STD_DEVIATION', 'operand', ['GROUP_BY'], args, {
499
505
  isOptional: true,
500
506
  });
@@ -528,6 +534,7 @@ export const aggregatedScalarExpressionFunctions = {
528
534
  },
529
535
  rowFilterFn: context.filterFn,
530
536
  getRowNodes: context.getRowNodes,
537
+ columnType,
531
538
  };
532
539
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
533
540
  const result = {
@@ -552,7 +559,7 @@ export const aggregatedScalarExpressionFunctions = {
552
559
  handler(args, context) {
553
560
  const minColumnParameter = extractColumnParameter('MIN', args);
554
561
  const minColumnName = minColumnParameter.value;
555
- validateColumnType(minColumnName, ['Number'], 'MIN', context.adaptableApi);
562
+ const columnType = validateColumnType(minColumnName, ['Number', 'Date'], 'MIN', context.adaptableApi);
556
563
  const groupByParameter = extractParameter('MIN', 'operand', ['GROUP_BY'], args, {
557
564
  isOptional: true,
558
565
  });
@@ -567,8 +574,19 @@ export const aggregatedScalarExpressionFunctions = {
567
574
  if (isUndefinedValue(rowValue)) {
568
575
  return minValue;
569
576
  }
570
- const numericRowValue = getNumericValue(rowValue);
571
- return numericRowValue < minValue ? numericRowValue : minValue;
577
+ if (minValue === Number.MAX_VALUE) {
578
+ return rowValue;
579
+ }
580
+ if (columnType === 'Number') {
581
+ const numericRowValue = getNumericValue(rowValue);
582
+ return numericRowValue < minValue ? numericRowValue : minValue;
583
+ }
584
+ else {
585
+ // Date
586
+ return isAfter(parseDateValue(rowValue), parseDateValue(minValue))
587
+ ? minValue
588
+ : rowValue;
589
+ }
572
590
  },
573
591
  done: (minValue) => {
574
592
  if (minValue !== Number.MAX_VALUE) {
@@ -580,6 +598,7 @@ export const aggregatedScalarExpressionFunctions = {
580
598
  },
581
599
  rowFilterFn: context.filterFn,
582
600
  getRowNodes: context.getRowNodes,
601
+ columnType,
583
602
  };
584
603
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
585
604
  const result = {
@@ -604,7 +623,7 @@ export const aggregatedScalarExpressionFunctions = {
604
623
  handler(args, context) {
605
624
  const maxColumnParameter = extractColumnParameter('MAX', args);
606
625
  const maxColumnName = maxColumnParameter.value;
607
- validateColumnType(maxColumnName, ['Number'], 'MAX', context.adaptableApi);
626
+ const columnType = validateColumnType(maxColumnName, ['Number', 'Date'], 'MAX', context.adaptableApi);
608
627
  const groupByParameter = extractParameter('MAX', 'operand', ['GROUP_BY'], args, {
609
628
  isOptional: true,
610
629
  });
@@ -619,8 +638,19 @@ export const aggregatedScalarExpressionFunctions = {
619
638
  if (isUndefinedValue(rowValue)) {
620
639
  return maxValue;
621
640
  }
622
- const numericRowValue = getNumericValue(rowValue);
623
- return numericRowValue > maxValue ? numericRowValue : maxValue;
641
+ if (maxValue === Number.MIN_VALUE) {
642
+ return rowValue;
643
+ }
644
+ if (columnType === 'Number') {
645
+ const numericRowValue = getNumericValue(rowValue);
646
+ return numericRowValue > maxValue ? numericRowValue : maxValue;
647
+ }
648
+ else {
649
+ // Date
650
+ return isAfter(parseDateValue(rowValue), parseDateValue(maxValue))
651
+ ? rowValue
652
+ : maxValue;
653
+ }
624
654
  },
625
655
  done: (maxValue) => {
626
656
  if (maxValue !== Number.MIN_VALUE) {
@@ -632,6 +662,7 @@ export const aggregatedScalarExpressionFunctions = {
632
662
  },
633
663
  rowFilterFn: context.filterFn,
634
664
  getRowNodes: context.getRowNodes,
665
+ columnType,
635
666
  };
636
667
  addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
637
668
  const result = {
@@ -648,7 +679,7 @@ export const aggregatedScalarExpressionFunctions = {
648
679
  'MAX( [colNameA], GROUP_BY( [colNameB] ))',
649
680
  'MAX( COL(nameA: string), GROUP_BY( COL(nameB: string)))',
650
681
  ],
651
- examples: ['MIN([colA])', 'MIN([colA], GROUP_BY([colB]))'],
682
+ examples: ['MAX([colA])', 'MAX([colA], GROUP_BY([colB]))'],
652
683
  category: 'aggregation',
653
684
  inputs: ['number'],
654
685
  },
@@ -657,7 +688,7 @@ export const aggregatedScalarExpressionFunctions = {
657
688
  var _a, _b, _c;
658
689
  const quantileColumnParameter = extractColumnParameter('QUANT', args);
659
690
  const quantileColumnName = quantileColumnParameter.value;
660
- validateColumnType(quantileColumnName, ['Number'], 'QUANT', context.adaptableApi);
691
+ const columnType = validateColumnType(quantileColumnName, ['Number'], 'QUANT', context.adaptableApi);
661
692
  const qNumberCandidates = args.filter((arg) => typeof arg === 'number');
662
693
  if (qNumberCandidates.length !== 1) {
663
694
  throw new ExpressionEvaluationError('QUANT', 'expects a single positive numeric argument as q-quantile');
@@ -764,6 +795,7 @@ export const aggregatedScalarExpressionFunctions = {
764
795
  }
765
796
  return rowBucketMap[rowValue];
766
797
  },
798
+ columnType,
767
799
  };
768
800
  addGroupByParams(groupByOperand === null || groupByOperand === void 0 ? void 0 : groupByOperand.value, aggregationExpressionEvaluation);
769
801
  const result = {
@@ -911,124 +943,6 @@ export const aggregatedScalarExpressionFunctions = {
911
943
  examples: ['[col1]', 'COL("col1")'],
912
944
  category: 'special',
913
945
  },
914
- OLDEST: {
915
- handler(args, context) {
916
- const minColumnParameter = extractColumnParameter('OLDEST', args);
917
- const minColumnName = minColumnParameter.value;
918
- validateColumnType(minColumnName, ['Date'], 'OLDEST', context.adaptableApi);
919
- const groupByParameter = extractParameter('OLDEST', 'operand', ['GROUP_BY'], args, {
920
- isOptional: true,
921
- });
922
- const aggregationExpressionEvaluation = {
923
- aggregationParams: {
924
- reducers: {
925
- OLDEST: {
926
- name: 'OLDEST',
927
- field: minColumnName,
928
- initialValue: null,
929
- reducer: (minValue, rowValue) => {
930
- if (!minValue) {
931
- return rowValue;
932
- }
933
- if (!rowValue) {
934
- return minValue;
935
- }
936
- if (isAfter(parseDateValue(minValue), parseDateValue(rowValue))) {
937
- return rowValue;
938
- }
939
- else {
940
- return minValue;
941
- }
942
- },
943
- done: (minValue, arr) => {
944
- if (minValue !== null) {
945
- return minValue;
946
- }
947
- },
948
- },
949
- },
950
- },
951
- rowFilterFn: context.filterFn,
952
- getRowNodes: context.getRowNodes,
953
- };
954
- addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
955
- const result = {
956
- name: 'OLDEST',
957
- type: 'aggregationScalar',
958
- value: aggregationExpressionEvaluation,
959
- };
960
- return result;
961
- },
962
- description: 'Aggregates a Date column over multiple rows by computing the oldest of the column values\nOptionally the aggregation may be computed within provided individual groups',
963
- signatures: [
964
- 'OLDEST( [colName] )',
965
- 'OLDEST( COL(name: string))',
966
- 'OLDEST( [colNameA], GROUP_BY( [colNameB] ))',
967
- 'OLDEST( COL(nameA: string), GROUP_BY( COL(nameB: string)))',
968
- ],
969
- examples: ['OLDEST([colA])', 'OLDEST([colA], GROUP_BY([colB]))'],
970
- category: 'aggregation',
971
- inputs: ['date'],
972
- },
973
- NEWEST: {
974
- handler(args, context) {
975
- const minColumnParameter = extractColumnParameter('NEWEST', args);
976
- const minColumnName = minColumnParameter.value;
977
- validateColumnType(minColumnName, ['Date'], 'NEWEST', context.adaptableApi);
978
- const groupByParameter = extractParameter('NEWEST', 'operand', ['GROUP_BY'], args, {
979
- isOptional: true,
980
- });
981
- const aggregationExpressionEvaluation = {
982
- aggregationParams: {
983
- reducers: {
984
- NEWEST: {
985
- name: 'NEWEST',
986
- field: minColumnName,
987
- initialValue: null,
988
- reducer: (minValue, rowValue) => {
989
- if (!minValue) {
990
- return rowValue;
991
- }
992
- if (!rowValue) {
993
- return minValue;
994
- }
995
- if (isAfter(parseDateValue(minValue), parseDateValue(rowValue))) {
996
- return minValue;
997
- }
998
- else {
999
- return rowValue;
1000
- }
1001
- },
1002
- done: (minValue, arr) => {
1003
- if (minValue !== null) {
1004
- return minValue;
1005
- }
1006
- },
1007
- },
1008
- },
1009
- },
1010
- rowFilterFn: context.filterFn,
1011
- getRowNodes: context.getRowNodes,
1012
- };
1013
- addGroupByParams(groupByParameter === null || groupByParameter === void 0 ? void 0 : groupByParameter.value, aggregationExpressionEvaluation);
1014
- const result = {
1015
- name: 'NEWEST',
1016
- type: 'aggregationScalar',
1017
- value: aggregationExpressionEvaluation,
1018
- };
1019
- return result;
1020
- },
1021
- description: 'Aggregates a Date column over multiple rows by computing the most recent of the column values\nOptionally the aggregation may be computed within provided individual groups',
1022
- signatures: [
1023
- 'NEWEST( [colName] )',
1024
- 'NEWEST( COL(name: string))',
1025
- 'NEWEST( [colNameA], GROUP_BY( [colNameB] ))',
1026
- 'NEWEST( COL(nameA: string), GROUP_BY( COL(nameB: string)))',
1027
- ],
1028
- examples: ['NEWEST([colA])', 'NEWEST([colA], GROUP_BY([colB]))'],
1029
- category: 'aggregation',
1030
- inputs: ['date'],
1031
- },
1032
946
  };
1033
947
  const mapAggregationToCumulation = (aggregationParameter, overColumnParameter, context) => {
1034
948
  const aggregationEvaluation = aggregationParameter.value;
@@ -1058,8 +972,16 @@ const mapAggregationToCumulation = (aggregationParameter, overColumnParameter, c
1058
972
  cumulatedValues: {},
1059
973
  },
1060
974
  reducer: (cumulationBag, rowValue, rowNode) => {
1061
- if (isDefinedValue(rowValue) && rowValue < cumulationBag.currentValue) {
1062
- cumulationBag.currentValue = rowValue;
975
+ if (isDefinedValue(rowValue)) {
976
+ if (aggregationEvaluation.columnType === 'Date') {
977
+ if (cumulationBag.currentValue === aggregationReducer.initialValue ||
978
+ isAfter(parseDateValue(cumulationBag.currentValue), parseDateValue(rowValue))) {
979
+ cumulationBag.currentValue = rowValue;
980
+ }
981
+ }
982
+ else if (rowValue < cumulationBag.currentValue) {
983
+ cumulationBag.currentValue = rowValue;
984
+ }
1063
985
  }
1064
986
  if (cumulationBag.currentValue !== aggregationReducer.initialValue) {
1065
987
  cumulationBag.cumulatedValues[rowNode.id] = cumulationBag.currentValue;
@@ -1076,8 +998,16 @@ const mapAggregationToCumulation = (aggregationParameter, overColumnParameter, c
1076
998
  cumulatedValues: {},
1077
999
  },
1078
1000
  reducer: (cumulationBag, rowValue, rowNode) => {
1079
- if (isDefinedValue(rowValue) && rowValue > cumulationBag.currentValue) {
1080
- cumulationBag.currentValue = rowValue;
1001
+ if (isDefinedValue(rowValue)) {
1002
+ if (aggregationEvaluation.columnType === 'Date') {
1003
+ if (cumulationBag.currentValue === aggregationReducer.initialValue ||
1004
+ isAfter(parseDateValue(rowValue), parseDateValue(cumulationBag.currentValue))) {
1005
+ cumulationBag.currentValue = rowValue;
1006
+ }
1007
+ }
1008
+ else if (rowValue > cumulationBag.currentValue) {
1009
+ cumulationBag.currentValue = rowValue;
1010
+ }
1081
1011
  }
1082
1012
  if (cumulationBag.currentValue !== aggregationReducer.initialValue) {
1083
1013
  cumulationBag.cumulatedValues[rowNode.id] = cumulationBag.currentValue;
@@ -28,4 +28,4 @@ export declare const extractParameters: <T extends BaseParameter<string, string>
28
28
  }) => T[];
29
29
  export declare const handleColumnFunction: (args: any[], context: ExpressionContext) => ColumnParameter;
30
30
  export declare const getNumericValue: (input: unknown) => number;
31
- export declare const validateColumnType: (columnId: string, validColumnTypes: ('Number' | 'String' | 'Date')[], consumingFunction: string, api: AdaptableApi) => void;
31
+ export declare const validateColumnType: (columnId: string, validColumnTypes: ('Number' | 'String' | 'Date')[], consumingFunction: string, api: AdaptableApi) => import("../../types").AdaptableColumnDataType;
@@ -116,6 +116,7 @@ export const validateColumnType = (columnId, validColumnTypes, consumingFunction
116
116
  if (!validColumnTypes.some((validType) => validType === columnType)) {
117
117
  throw new ExpressionEvaluationError(consumingFunction, `expects a column of type ${validColumnTypes.join(' or ')}`);
118
118
  }
119
+ return columnType;
119
120
  };
120
121
  const validateColumnId = (columnId, api) => {
121
122
  const column = api.columnApi.getColumnWithColumnId(columnId);
@@ -282,8 +282,6 @@ export function CreateEmptyCellSummmary() {
282
282
  Max: undefined,
283
283
  Min: undefined,
284
284
  Count: undefined,
285
- Newest: undefined,
286
- Oldest: undefined,
287
285
  Std_Deviation: undefined,
288
286
  Only: undefined,
289
287
  };
@@ -17,8 +17,9 @@ export class CellSummaryDetails extends React.Component {
17
17
  let data = [];
18
18
  if (this.props.CellSummary != null) {
19
19
  data = Object.keys(this.props.CellSummary).map((operationName) => {
20
+ const operationLabel = operationName === 'Std_Deviation' ? 'Standard Deviation' : operationName;
20
21
  return {
21
- Operation: operationName,
22
+ Operation: operationLabel,
22
23
  Value: this.props.CellSummary[operationName],
23
24
  };
24
25
  });
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { AdaptableInputProps } from '../AdaptableInput';
3
3
  export type AdaptableDateInputProps = AdaptableInputProps;
4
- declare const AdaptableDateInput: React.ForwardRefExoticComponent<Pick<import("../../../components/Input").InputProps, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "key" | "sizes" | "variant" | "tx" | "as" | "css" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "step" | "type" | "useMap" | "wmode"> & React.RefAttributes<HTMLInputElement>>;
4
+ declare const AdaptableDateInput: React.ForwardRefExoticComponent<Pick<import("../../../components/Input").InputProps, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "step" | "sizes" | "variant" | "tx" | "as" | "css" | "key" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "type" | "useMap" | "wmode"> & React.RefAttributes<HTMLInputElement>>;
5
5
  export default AdaptableDateInput;