@adaptabletools/adaptable 15.3.2 → 15.3.3-canary.1

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 (157) hide show
  1. package/base.css +57 -2
  2. package/base.css.map +1 -1
  3. package/bundle.cjs.js +156 -156
  4. package/index.css +83 -2
  5. package/index.css.map +1 -1
  6. package/package.json +1 -1
  7. package/publishTimestamp.d.ts +1 -1
  8. package/publishTimestamp.js +1 -1
  9. package/src/AdaptableOptions/ActionOptions.d.ts +6 -1
  10. package/src/AdaptableOptions/EditOptions.d.ts +35 -6
  11. package/src/AdaptableOptions/EntitlementOptions.d.ts +3 -2
  12. package/src/AdaptableOptions/ExportOptions.d.ts +1 -1
  13. package/src/AdaptableOptions/FilterOptions.d.ts +9 -3
  14. package/src/AdaptableOptions/LayoutOptions.d.ts +1 -1
  15. package/src/Api/Implementation/StyledColumnApiImpl.d.ts +1 -0
  16. package/src/Api/Implementation/StyledColumnApiImpl.js +12 -0
  17. package/src/Api/Internal/StyledColumnInternalApi.d.ts +3 -1
  18. package/src/Api/Internal/StyledColumnInternalApi.js +24 -0
  19. package/src/Api/StyledColumnApi.d.ts +5 -0
  20. package/src/PredefinedConfig/Common/AdaptableFormat.d.ts +1 -2
  21. package/src/PredefinedConfig/Common/AdaptableIcon.d.ts +1 -1
  22. package/src/PredefinedConfig/Common/AdaptablePredicate.js +5 -5
  23. package/src/PredefinedConfig/Common/AdaptableStyle.d.ts +8 -0
  24. package/src/PredefinedConfig/Common/Enums.js +1 -0
  25. package/src/PredefinedConfig/StyledColumnState.d.ts +61 -5
  26. package/src/Redux/Store/AdaptableReduxMerger.js +1 -1
  27. package/src/Strategy/BulkUpdateModule.js +1 -1
  28. package/src/Strategy/CalculatedColumnModule.js +1 -1
  29. package/src/Strategy/CellSummaryModule.js +1 -1
  30. package/src/Strategy/CustomSortModule.js +1 -1
  31. package/src/Strategy/DashboardModule.js +2 -2
  32. package/src/Strategy/DataChangeHistoryModule.js +1 -1
  33. package/src/Strategy/FilterModule.js +1 -1
  34. package/src/Strategy/FlashingCellModule.js +1 -1
  35. package/src/Strategy/FormatColumnModule.js +42 -3
  36. package/src/Strategy/FreeTextColumnModule.js +1 -1
  37. package/src/Strategy/GridInfoModule.js +2 -2
  38. package/src/Strategy/LayoutModule.js +7 -6
  39. package/src/Strategy/PlusMinusModule.js +1 -1
  40. package/src/Strategy/QueryModule.js +1 -1
  41. package/src/Strategy/QuickSearchModule.js +1 -1
  42. package/src/Strategy/ShortcutModule.js +1 -1
  43. package/src/Strategy/SmartEditModule.js +1 -1
  44. package/src/Strategy/StateManagementModule.js +1 -1
  45. package/src/Strategy/StyledColumnModule.d.ts +2 -0
  46. package/src/Strategy/StyledColumnModule.js +132 -59
  47. package/src/Strategy/SystemStatusModule.js +1 -1
  48. package/src/Strategy/TeamSharingModule.js +1 -1
  49. package/src/Strategy/ToolPanelModule.js +1 -1
  50. package/src/Utilities/Constants/GeneralConstants.d.ts +2 -0
  51. package/src/Utilities/Constants/GeneralConstants.js +4 -2
  52. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -0
  53. package/src/Utilities/Helpers/StyleHelper.js +19 -0
  54. package/src/Utilities/ObjectFactory.d.ts +3 -1
  55. package/src/Utilities/ObjectFactory.js +14 -1
  56. package/src/Utilities/Services/EntitlementService.js +7 -4
  57. package/src/Utilities/Services/ValidationService.js +13 -2
  58. package/src/View/Alert/Wizard/AlertButtonsEditor.js +27 -25
  59. package/src/View/Charting/ShowChartButton.js +1 -1
  60. package/src/View/Components/AdaptableObjectList/AdaptableObjectList.js +1 -1
  61. package/src/View/Components/Buttons/ButtonClear.js +1 -1
  62. package/src/View/Components/Buttons/ButtonClose.js +1 -1
  63. package/src/View/Components/Buttons/ButtonConfigure.js +1 -1
  64. package/src/View/Components/Buttons/ButtonDelete.js +1 -1
  65. package/src/View/Components/Buttons/ButtonExpand.js +1 -1
  66. package/src/View/Components/Buttons/ButtonInvalid.js +1 -1
  67. package/src/View/Components/Buttons/ButtonLogin.js +1 -1
  68. package/src/View/Components/Buttons/ButtonPreviewDelete.js +1 -1
  69. package/src/View/Components/Buttons/ButtonShare.js +1 -1
  70. package/src/View/Components/FilterForm/QuickFilterForm.js +10 -2
  71. package/src/View/Components/Forms/AdaptableFormControlTextClear.js +1 -1
  72. package/src/View/Components/ListBox/ListBoxFilterSortComponent.js +1 -1
  73. package/src/View/Components/NewScopeComponent.js +2 -2
  74. package/src/View/Components/Panels/ToolPanelSettingsPanel.js +1 -1
  75. package/src/View/Components/PredicateEditor/PredicateEditor.d.ts +1 -0
  76. package/src/View/Components/PredicateEditor/PredicateEditor.js +24 -16
  77. package/src/View/Components/StyleComponent.d.ts +7 -0
  78. package/src/View/Components/StyleComponent.js +68 -16
  79. package/src/View/Components/ValueSelector/index.js +1 -1
  80. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +8 -6
  81. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +18 -10
  82. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +4 -3
  83. package/src/View/Layout/Wizard/sections/ColumnsSection.js +3 -3
  84. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +2 -2
  85. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +14 -12
  86. package/src/View/StateManagement/StateManagementViewPanel.js +1 -1
  87. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +7 -0
  88. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +108 -0
  89. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +15 -14
  90. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +44 -21
  91. package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +17 -9
  92. package/src/View/StyledColumn/Wizard/StyledColumnWizardSettingsSection.js +1 -1
  93. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +5 -0
  94. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +29 -0
  95. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +25 -5
  96. package/src/View/StyledColumn/Wizard/StyledColumnWizardTypeSection.js +15 -4
  97. package/src/View/Theme/ThemeEditor.js +1 -1
  98. package/src/agGrid/Adaptable.d.ts +6 -0
  99. package/src/agGrid/Adaptable.js +63 -26
  100. package/src/agGrid/BadgeRenderer.d.ts +4 -0
  101. package/src/agGrid/BadgeRenderer.js +59 -0
  102. package/src/agGrid/PercentBarRenderer.js +37 -17
  103. package/src/agGrid/agGridHelper.d.ts +1 -0
  104. package/src/agGrid/agGridHelper.js +4 -0
  105. package/src/agGrid/editors/AdaptableNumberEditor/InternalAdaptableNumberEditor.js +1 -1
  106. package/src/components/Badge/index.d.ts +8 -0
  107. package/src/components/Badge/index.js +18 -0
  108. package/src/components/Dashboard/DashboardToolbar.js +2 -2
  109. package/src/components/Datepicker/index.js +1 -1
  110. package/src/components/DragAndDropContext/TabList.js +1 -1
  111. package/src/components/Dropdown/index.js +1 -1
  112. package/src/components/DropdownButton/index.js +1 -1
  113. package/src/components/FileDroppable/index.js +1 -1
  114. package/src/components/IconSelector/IconSelector.d.ts +7 -0
  115. package/src/components/IconSelector/IconSelector.js +42 -0
  116. package/src/components/IconSelector/index.d.ts +1 -0
  117. package/src/components/IconSelector/index.js +4 -0
  118. package/src/components/OverlayTrigger/index.js +1 -0
  119. package/src/components/Toggle/Toggle.d.ts +8 -0
  120. package/src/components/Toggle/Toggle.js +15 -0
  121. package/src/components/Toggle/ToggleGroup.d.ts +2 -0
  122. package/src/components/Toggle/ToggleGroup.js +10 -0
  123. package/src/components/Toggle/index.d.ts +2 -0
  124. package/src/components/Toggle/index.js +5 -0
  125. package/src/components/icons/DefaultIcon.js +1 -1
  126. package/src/components/icons/align-center.js +7 -0
  127. package/src/components/icons/align-left.d.ts +3 -0
  128. package/src/components/icons/align-left.js +7 -0
  129. package/src/components/icons/align-right.d.ts +3 -0
  130. package/src/components/icons/align-right.js +7 -0
  131. package/src/components/icons/badge.d.ts +3 -0
  132. package/src/components/icons/badge.js +7 -0
  133. package/src/components/icons/bold.d.ts +3 -0
  134. package/src/components/icons/bold.js +7 -0
  135. package/src/components/icons/case-lower.d.ts +3 -0
  136. package/src/components/icons/case-lower.js +7 -0
  137. package/src/components/icons/case-sentence.d.ts +3 -0
  138. package/src/components/icons/case-sentence.js +8 -0
  139. package/src/components/icons/case-upper.d.ts +3 -0
  140. package/src/components/icons/case-upper.js +7 -0
  141. package/src/components/icons/gradient.d.ts +3 -0
  142. package/src/components/icons/gradient.js +7 -0
  143. package/src/components/icons/index.js +76 -72
  144. package/src/components/icons/italic.d.ts +3 -0
  145. package/src/components/icons/{clear.js → italic.js} +2 -2
  146. package/src/components/icons/overline.d.ts +3 -0
  147. package/src/components/icons/overline.js +7 -0
  148. package/src/components/icons/strikethrough.d.ts +3 -0
  149. package/src/components/icons/strikethrough.js +7 -0
  150. package/src/components/icons/underline.d.ts +3 -0
  151. package/src/components/icons/underline.js +7 -0
  152. package/src/metamodel/adaptable.metamodel.d.ts +86 -6
  153. package/src/metamodel/adaptable.metamodel.js +1 -1
  154. package/src/types.d.ts +4 -3
  155. package/version.d.ts +1 -1
  156. package/version.js +1 -1
  157. /package/src/components/icons/{clear.d.ts → align-center.d.ts} +0 -0
@@ -142,7 +142,7 @@ const ThemeEditor = (props) => {
142
142
  const saveNameDisabled = !nameHasChanged || nameIsNotUnique || currentThemeObject.Name === '';
143
143
  return (React.createElement(Panel_1.default, { header: React.createElement(rebass_1.Flex, { alignItems: "center", width: "100%" },
144
144
  React.createElement(rebass_1.Box, { flex: 1 }, " Edit Custom Theme"),
145
- React.createElement(SimpleButton_1.default, { "data-name": "delete", disabled: props.accessLevel !== 'Full', icon: "trash", onClick: handleDeleteTheme, variant: "text" })) },
145
+ React.createElement(SimpleButton_1.default, { "data-name": "delete", disabled: props.accessLevel !== 'Full', icon: "delete", onClick: handleDeleteTheme, variant: "text" })) },
146
146
  React.createElement(FormLayout_1.default, null,
147
147
  React.createElement(FormLayout_1.FormRow, { label: "Theme Name" },
148
148
  React.createElement(AdaptableInput_1.default, { mr: 2, onChange: (event) => setCurrentThemeObject(Object.assign(Object.assign({}, currentThemeObject), { Name: event.target.value.replace(/ /g, '-') })), value: (_a = currentThemeObject.Name) !== null && _a !== void 0 ? _a : '' }),
@@ -101,6 +101,7 @@ export declare class Adaptable implements IAdaptable {
101
101
  private listenerPivotModeChanged;
102
102
  private listenerPivotChanged;
103
103
  private listenerColumnRowGroupChanged;
104
+ private listenerCellEditingStarted;
104
105
  private listenerColumnResized;
105
106
  private listenerRangeSelectionChanged;
106
107
  private listenerSortChanged;
@@ -162,6 +163,11 @@ export declare class Adaptable implements IAdaptable {
162
163
  updateColumnsIntoStore(): void;
163
164
  private createAdaptableColumn;
164
165
  private safeSetColDefs;
166
+ /**
167
+ * The combination of styled column and format cells
168
+ * This functiond decides when the two can be merged.
169
+ */
170
+ private getFormatColumnAndStyledColumnCellStyle;
165
171
  private getStyledColumnStyle;
166
172
  private getFormatColumnAdaptableStyle;
167
173
  private getFormatColumnCellStyle;
@@ -943,6 +943,27 @@ class Adaptable {
943
943
  this.gridOptions.api.setColumnDefs(colDefs);
944
944
  this.updateColumnsIntoStore(); // todo remove this from here!!!
945
945
  }
946
+ /**
947
+ * The combination of styled column and format cells
948
+ * This functiond decides when the two can be merged.
949
+ */
950
+ getFormatColumnAndStyledColumnCellStyle(abColumn, colId, params) {
951
+ let styledColumn = this.api.styledColumnApi.getStyledColumnForColumnId(colId);
952
+ let styledColumnStyle = {};
953
+ if (styledColumn && !(styledColumn === null || styledColumn === void 0 ? void 0 : styledColumn.IsSuspended)) {
954
+ const styledCellStyle = this.getStyledColumnStyle(styledColumn, abColumn, params);
955
+ // for percentbar we want to merge
956
+ if (styledColumn.PercentBarStyle || styledColumn.BadgeStyle) {
957
+ styledColumnStyle = styledCellStyle;
958
+ }
959
+ else {
960
+ // For other ones wo do not want to merge
961
+ return styledCellStyle;
962
+ }
963
+ }
964
+ const activeFormatColumnsWithStyle = this.api.formatColumnApi.internalApi.getFormatColumnsWithStyleForColumn(abColumn);
965
+ return Object.assign(Object.assign({}, this.getFormatColumnCellStyle(abColumn, activeFormatColumnsWithStyle, params)), styledColumnStyle);
966
+ }
946
967
  getStyledColumnStyle(styledColumn, abColumn, params) {
947
968
  let style = {};
948
969
  const gradientStyle = styledColumn === null || styledColumn === void 0 ? void 0 : styledColumn.GradientStyle;
@@ -2309,7 +2330,7 @@ class Adaptable {
2309
2330
  const defaultEditButtonConfiguration = {
2310
2331
  create: {
2311
2332
  icon: {
2312
- name: 'add-row',
2333
+ name: 'add',
2313
2334
  },
2314
2335
  tooltip: 'Create',
2315
2336
  onClick: () => {
@@ -2585,6 +2606,7 @@ class Adaptable {
2585
2606
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_FIRST_DATA_RENDERED, this.listenerFirstDataRendered);
2586
2607
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.listenerPivotModeChanged);
2587
2608
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_COLUMN_PIVOT_CHANGED, this.listenerPivotChanged);
2609
+ this.gridOptions.api.removeEventListener(core_1.Events.EVENT_CELL_EDITING_STARTED, this.listenerCellEditingStarted);
2588
2610
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.listenerColumnRowGroupChanged);
2589
2611
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_RANGE_SELECTION_CHANGED, this.listenerRangeSelectionChanged);
2590
2612
  this.gridOptions.api.removeEventListener(core_1.Events.EVENT_COLUMN_RESIZED, this.listenerColumnResized);
@@ -2597,6 +2619,7 @@ class Adaptable {
2597
2619
  this.listenerFirstDataRendered = null;
2598
2620
  this.listenerPivotModeChanged = null;
2599
2621
  this.listenerPivotChanged = null;
2622
+ this.listenerCellEditingStarted = null;
2600
2623
  this.listenerColumnRowGroupChanged = null;
2601
2624
  this.listenerRangeSelectionChanged = null;
2602
2625
  this.listenerColumnResized = null;
@@ -2804,6 +2827,15 @@ class Adaptable {
2804
2827
  this.debouncedSetColumnIntoStore();
2805
2828
  }
2806
2829
  }));
2830
+ /**
2831
+ * Use Case: User has started inline editing but its distabled in Action Row Options
2832
+ * Action: Stop editing
2833
+ */
2834
+ this.gridOptions.api.addEventListener(core_1.Events.EVENT_CELL_EDITING_STARTED, (this.listenerCellEditingStarted = () => {
2835
+ var _a, _b;
2836
+ if ((_b = (_a = this.adaptableOptions.actionOptions) === null || _a === void 0 ? void 0 : _a.actionRowButtonOptions) === null || _b === void 0 ? void 0 : _b.disableInlineEditing)
2837
+ this.gridOptions.api.stopEditing();
2838
+ }));
2807
2839
  /**
2808
2840
  * Use Case: initial data has been displayed in grid
2809
2841
  * Action1: Set the Layout
@@ -3237,18 +3269,11 @@ class Adaptable {
3237
3269
  }
3238
3270
  setupColumnCellStyle({ col, colId, abColumn }) {
3239
3271
  this.setColDefProperty(col, 'cellStyle', (userCellStyle) => {
3240
- const activeFormatColumnsWithStyle = this.api.formatColumnApi.internalApi.getFormatColumnsWithStyleForColumn(abColumn);
3241
- let styledColumn = this.api.styledColumnApi.getStyledColumnForColumnId(colId);
3242
- if (styledColumn === null || styledColumn === void 0 ? void 0 : styledColumn.IsSuspended) {
3243
- styledColumn = null;
3244
- }
3245
3272
  const quickSearchStyle = this.getQuickSearchCellStyle();
3246
3273
  const hasQuickSearchStyle = quickSearchStyle != undefined;
3247
3274
  const cellStyle = (params) => {
3248
3275
  const isQuickSearchActive = hasQuickSearchStyle && this.isQuickSearchActive(abColumn, params);
3249
- const result = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, this.getReadOnlyCellStyle(abColumn, params)), this.getEditableCellStyle(abColumn, params)), (typeof userCellStyle === 'function' ? userCellStyle(params) : userCellStyle)), (!styledColumn
3250
- ? this.getFormatColumnCellStyle(abColumn, activeFormatColumnsWithStyle, params)
3251
- : {})), (styledColumn ? this.getStyledColumnStyle(styledColumn, abColumn, params) : {})), (isQuickSearchActive ? quickSearchStyle : {})), this.getAlertCellStyle(abColumn, params)), this.getFlashingCellStyle(abColumn, params)), this.getCellHighlightStyle(abColumn, params));
3276
+ const result = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, this.getReadOnlyCellStyle(abColumn, params)), this.getEditableCellStyle(abColumn, params)), (typeof userCellStyle === 'function' ? userCellStyle(params) : userCellStyle)), this.getFormatColumnAndStyledColumnCellStyle(abColumn, colId, params)), (isQuickSearchActive ? quickSearchStyle : {})), this.getAlertCellStyle(abColumn, params)), this.getFlashingCellStyle(abColumn, params)), this.getCellHighlightStyle(abColumn, params));
3252
3277
  // see https://github.com/AdaptableTools/adaptable/issues/2119
3253
3278
  StyleHelper_1.AgGridCellStyleProperties.forEach((cellStylePropKey) => {
3254
3279
  if (result[cellStylePropKey] == null) {
@@ -3354,6 +3379,9 @@ class Adaptable {
3354
3379
  if (styledColumn.CheckBoxStyle) {
3355
3380
  return this.agGridHelper.createCheckboxRendererComp(abColumn.columnId, abColumn.readOnly);
3356
3381
  }
3382
+ if (styledColumn.BadgeStyle) {
3383
+ return this.agGridHelper.createBadgeRendererComp(styledColumn, abColumn);
3384
+ }
3357
3385
  if (styledColumn.SparkLineStyle) {
3358
3386
  return 'agSparklineCellRenderer';
3359
3387
  }
@@ -3552,7 +3580,11 @@ class Adaptable {
3552
3580
  }
3553
3581
  const editableCallback = (params) => {
3554
3582
  const gridCell = this.getGridCellFromRowNode(params.node, params.column.getColId());
3555
- return cellEditableFn(gridCell);
3583
+ const cellEditableContext = {
3584
+ gridCell,
3585
+ adaptableApi: this.api,
3586
+ };
3587
+ return cellEditableFn(cellEditableContext);
3556
3588
  };
3557
3589
  return editableCallback;
3558
3590
  });
@@ -4623,17 +4655,18 @@ class Adaptable {
4623
4655
  excelStyles.push(this.convertCSSToExcelStyle(adaptableStyle));
4624
4656
  }
4625
4657
  const excelDataType = this.api.exportApi.internalApi.getExcelDataType(colDef === null || colDef === void 0 ? void 0 : colDef.type);
4658
+ const rawValue = this.getRawValueFromRowNode(node, column.getId());
4626
4659
  // don't add the cell style if it has no adaptable custom styles or user defined styles
4627
- if (!excelStyles.length &&
4628
- // if this is a formatted Date value, we still need to add the AG GRID specific type & numberFormat below
4629
- !(excelDataType === 'DateTime' && isDateCellExportedAsFormattedValue)) {
4660
+ if (rawValue == undefined ||
4661
+ (!excelStyles.length &&
4662
+ // if this is a formatted Date value, we still need to add the AG GRID specific type & numberFormat below
4663
+ !(excelDataType === 'DateTime' && isDateCellExportedAsFormattedValue))) {
4630
4664
  return;
4631
4665
  }
4632
4666
  const cellClassId = this.getExcelClassNameForCell(column.getId(), this.getPrimaryKeyValueFromRowNode(node), userDefinedCellClass);
4633
4667
  const finalCellExcelStyle = Object.assign({}, ...excelStyles);
4634
4668
  if (excelDataType === 'DateTime' && isDateCellExportedAsFormattedValue) {
4635
4669
  let dateFormatPattern = this.api.optionsApi.getExportOptions().exportDateFormat;
4636
- const rawValue = this.getRawValueFromRowNode(node, column.getId());
4637
4670
  const abColumn = getAdaptableColumnWithColumnId(column.getColId());
4638
4671
  if (!dateFormatPattern) {
4639
4672
  const mostRelevantFormatColumn = this.api.formatColumnApi.internalApi.getMostRelevantFormatColumnForColumn(getFormatColumnsWithDisplayFormatForColumn(column.getColId()), abColumn, { node, value: rawValue });
@@ -4643,18 +4676,22 @@ class Adaptable {
4643
4676
  }
4644
4677
  if (dateFormatPattern) {
4645
4678
  const normalisedValue = this.getNormalisedValueFromRawValue(rawValue, abColumn);
4646
- // we have to pass the date in the ISO format to Excel
4647
- // see https://www.ag-grid.com/javascript-data-grid/excel-export-data-types/#dates
4648
- const isoFormattedValue = normalisedValue === null || normalisedValue === void 0 ? void 0 : normalisedValue.toISOString();
4649
- if (isoFormattedValue) {
4650
- finalCellExcelStyle.dataType = 'DateTime';
4651
- finalCellExcelStyle.numberFormat = { format: dateFormatPattern };
4652
- // create a new cell key to ensure any user provided className does not interfere
4653
- const cellKey = this.getExcelClassNameForCell(column.getColId(), this.getPrimaryKeyValueFromRowNode(node));
4654
- // we need to register so that later the cellProcessor will put the isoFormattedValue through (thus giving the formatting responsability to Excel)
4655
- this.api.internalApi
4656
- .getReportService()
4657
- .registerExcelStyleWithFormattedDate(cellKey, isoFormattedValue);
4679
+ if (normalisedValue) {
4680
+ // we have to pass the date in the ISO format to Excel
4681
+ // see https://www.ag-grid.com/javascript-data-grid/excel-export-data-types/#dates
4682
+ // we also need to remove the timezone info from the date
4683
+ const dateWithoutTimezoneCorrection = new Date(Date.UTC(normalisedValue.getFullYear(), normalisedValue.getMonth(), normalisedValue.getDate()));
4684
+ const isoFormattedValue = dateWithoutTimezoneCorrection.toISOString();
4685
+ if (isoFormattedValue) {
4686
+ finalCellExcelStyle.dataType = 'DateTime';
4687
+ finalCellExcelStyle.numberFormat = { format: dateFormatPattern };
4688
+ // create a new cell key to ensure any user provided className does not interfere
4689
+ const cellKey = this.getExcelClassNameForCell(column.getColId(), this.getPrimaryKeyValueFromRowNode(node));
4690
+ // we need to register so that later the cellProcessor will put the isoFormattedValue through (thus giving the formatting responsability to Excel)
4691
+ this.api.internalApi
4692
+ .getReportService()
4693
+ .registerExcelStyleWithFormattedDate(cellKey, isoFormattedValue);
4694
+ }
4658
4695
  }
4659
4696
  }
4660
4697
  }
@@ -0,0 +1,4 @@
1
+ import { StyledColumn } from '../PredefinedConfig/StyledColumnState';
2
+ import { AdaptableApi } from '../Api/AdaptableApi';
3
+ import { AdaptableColumn } from '../PredefinedConfig/Common/AdaptableColumn';
4
+ export declare const getBadgeRendererForColumn: (styledColumn: StyledColumn, abColumn: AdaptableColumn, api: AdaptableApi) => any;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBadgeRendererForColumn = void 0;
4
+ const Badge_1 = require("../components/Badge");
5
+ const getBadgeRendererForColumn = (styledColumn, abColumn, api) => {
6
+ if (!styledColumn.BadgeStyle) {
7
+ return;
8
+ }
9
+ return class BadgetRenderer {
10
+ init(params) {
11
+ var _a, _b, _c, _d;
12
+ this.eGui = document.createElement('div');
13
+ this.eGui.className = 'ab-Badge__wrapper';
14
+ const formattedValue = (_c = (_b = (_a = params.formatValue) === null || _a === void 0 ? void 0 : _a.call(params, params.value)) !== null && _b !== void 0 ? _b : params.value) !== null && _c !== void 0 ? _c : '';
15
+ const badge = api.styledColumnApi.internalApi.getApplicableBadge(styledColumn, {
16
+ value: params.value,
17
+ oldValue: null,
18
+ displayValue: params.formatValue,
19
+ node: params.node,
20
+ column: abColumn,
21
+ });
22
+ const isGrouped = params.node.group;
23
+ const includeGrouped = Boolean(styledColumn.IncludeGroupedRows);
24
+ const isNullValue = formattedValue === '' || formattedValue === null || formattedValue === undefined;
25
+ if (
26
+ // grouped but do not incluide
27
+ (includeGrouped === false && isGrouped) ||
28
+ // empty values
29
+ isNullValue ||
30
+ // no badge
31
+ !badge) {
32
+ this.eGui.innerHTML = formattedValue;
33
+ return;
34
+ }
35
+ let icon = badge.Icon;
36
+ if (icon && 'name' in icon && icon.size === undefined) {
37
+ icon.size = 14;
38
+ }
39
+ this.unmountReactRoot = api.internalApi.getAdaptableInstance().renderReactRoot((0, Badge_1.Badge)({
40
+ adaptableStyle: badge.Style,
41
+ children: formattedValue,
42
+ icon,
43
+ iconPosition: (_d = badge.IconPosition) !== null && _d !== void 0 ? _d : 'start',
44
+ }), this.eGui);
45
+ }
46
+ getGui() {
47
+ return this.eGui;
48
+ }
49
+ destroy() {
50
+ var _a;
51
+ (_a = this.unmountReactRoot) === null || _a === void 0 ? void 0 : _a.call(this);
52
+ }
53
+ refresh(params) {
54
+ // by returning FALSE we force a re-render every time the cell value changes
55
+ return false;
56
+ }
57
+ };
58
+ };
59
+ exports.getBadgeRendererForColumn = getBadgeRendererForColumn;
@@ -4,22 +4,26 @@ exports.getPercentBarRendererForColumn = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const Helper_1 = tslib_1.__importDefault(require("../Utilities/Helpers/Helper"));
6
6
  const clamp_1 = tslib_1.__importDefault(require("lodash/clamp"));
7
- const FormatHelper_1 = require("../Utilities/Helpers/FormatHelper");
8
7
  const getPercentBarRendererForColumn = (styledColumn, abColumn, api) => {
9
8
  if (!styledColumn.PercentBarStyle) {
10
9
  return;
11
10
  }
12
11
  return class PercentBarRenderer {
13
12
  init(params) {
14
- if (!styledColumn.IncludeGroupedRows && api.gridApi.isGroupRowNode(params.node)) {
15
- return;
16
- }
13
+ var _a, _b;
17
14
  const min = api.styledColumnApi.internalApi.getNumericStyleMinValue(styledColumn, abColumn, params.node, params.value);
18
15
  const max = api.styledColumnApi.internalApi.getNumericStyleMaxValue(styledColumn, abColumn, params.node, params.value);
19
16
  let value = params.value;
20
17
  if (Helper_1.default.objectNotExists(value)) {
21
18
  value = 0;
22
19
  }
20
+ if (!styledColumn.IncludeGroupedRows && api.gridApi.isGroupRowNode(params.node)) {
21
+ if (params.value) {
22
+ this.eGui = document.createElement('div');
23
+ this.eGui.append(params.value);
24
+ }
25
+ return;
26
+ }
23
27
  const clampedValue = (0, clamp_1.default)(value, min, max);
24
28
  const percentageValue = ((clampedValue - min) / (max - min)) * 100;
25
29
  let cellBackColor;
@@ -33,15 +37,18 @@ const getPercentBarRendererForColumn = (styledColumn, abColumn, api) => {
33
37
  cellBackColor = matchingRange.Color;
34
38
  }
35
39
  }
40
+ const hasCellText = percentBarStyle.CellText && percentBarStyle.CellText.length > 0;
41
+ const isTextPositionMerged = percentBarStyle.CellTextPosition === 'Merged';
36
42
  if (cellBackColor) {
37
43
  this.eGui = document.createElement('div');
38
44
  this.eGui.className = 'ab-PercentBar__wrapper';
39
- this.eGui.style.height = percentBarStyle.CellText ? '80%' : '100%';
45
+ this.eGui.style.height = hasCellText && !isTextPositionMerged ? '80%' : '100%';
40
46
  this.eGui.style.display = 'flex';
41
47
  this.eGui.style.flexDirection = 'column';
42
48
  this.eGui.style.justifyContent = 'center';
43
49
  const barEl = document.createElement('div');
44
50
  barEl.className = 'ab-PercentBar__bar';
51
+ barEl.style.position = 'relative';
45
52
  barEl.style.background = percentBarStyle.BackColor;
46
53
  barEl.style.flex = '1';
47
54
  const barInsideEl = document.createElement('div');
@@ -51,26 +58,39 @@ const getPercentBarRendererForColumn = (styledColumn, abColumn, api) => {
51
58
  barInsideEl.style.width = `${percentageValue.toFixed(0)}%`;
52
59
  barEl.append(barInsideEl);
53
60
  this.eGui.append(barEl);
54
- if (percentBarStyle.CellText) {
61
+ if (hasCellText) {
55
62
  const textEl = document.createElement('div');
56
63
  textEl.className = 'ab-PercentBar__text';
57
64
  textEl.style.lineHeight = '1.2';
58
65
  if (percentBarStyle.CellText.includes('CellValue')) {
59
- const activeFormatColumnsWithDisplayFormat = api.formatColumnApi.internalApi.getFormatColumnsWithDisplayFormatForColumn(abColumn);
60
- const formatColumn = api.formatColumnApi.internalApi.getMostRelevantFormatColumnForColumn(activeFormatColumnsWithDisplayFormat, abColumn, { node: params.node, value });
61
- if (formatColumn && api.scopeApi.isColumnInNumericScope(abColumn, formatColumn.Scope)) {
62
- const options = formatColumn.DisplayFormat.Options;
63
- value = api.formatColumnApi.internalApi.getNumberFormattedValue(params.value, params.node, abColumn, options);
64
- }
65
- else {
66
- value = (0, FormatHelper_1.NumberFormatter)(value, { FractionDigits: 2 });
67
- }
68
- textEl.innerText = value;
66
+ textEl.innerText = (_b = (_a = params.formatValue) === null || _a === void 0 ? void 0 : _a.call(params, params.value)) !== null && _b !== void 0 ? _b : params.value;
69
67
  }
70
68
  if (percentBarStyle.CellText.includes('PercentageValue')) {
71
69
  textEl.innerText += ' ' + `(${percentageValue.toFixed(0)}%)`;
72
70
  }
73
- this.eGui.append(textEl);
71
+ switch (percentBarStyle.CellTextPosition) {
72
+ case 'Above':
73
+ this.eGui.prepend(textEl);
74
+ break;
75
+ case 'Below':
76
+ this.eGui.append(textEl);
77
+ break;
78
+ case 'Merged':
79
+ textEl.style.position = 'absolute';
80
+ // This allows to center verticly without knowing the height of the row
81
+ textEl.style.top = '50%';
82
+ textEl.style.transform = 'translateY(-50%)';
83
+ // adds a bit of padding to the start/end of the bar
84
+ textEl.style.left = '0';
85
+ textEl.style.right = '0';
86
+ textEl.style.paddingLeft = '5px';
87
+ textEl.style.paddingRight = '5px';
88
+ barEl.append(textEl);
89
+ break;
90
+ default:
91
+ this.eGui.append(textEl);
92
+ break;
93
+ }
74
94
  }
75
95
  }
76
96
  }
@@ -23,6 +23,7 @@ export declare class agGridHelper {
23
23
  TrySetUpNodeIds(hasAutogeneratedPrimaryKey: boolean): boolean;
24
24
  createCheckboxRendererComp(columnId: string, isColumnReadOnly: boolean): ICellRendererFunc | undefined;
25
25
  createPercentBarRendererComp(styledColumn: StyledColumn, abColumn: AdaptableColumn): ICellRendererFunc;
26
+ createBadgeRendererComp(styledColumn: StyledColumn, abColumn: AdaptableColumn): any;
26
27
  getCleanValue(value: string): string | undefined;
27
28
  getRenderedValue(colDef: ColDef, valueToRender: any): any;
28
29
  createAdaptableColumnFromAgGridColumn(agGridColumn: Column, colsToGroups: Record<string, AdaptableColumnGroup>): AdaptableColumn;
@@ -36,6 +36,7 @@ const FlashingCellModule_1 = require("../Strategy/FlashingCellModule");
36
36
  const SettingsPanelModule_1 = require("../Strategy/SettingsPanelModule");
37
37
  const ChartingModule_1 = require("../Strategy/ChartingModule");
38
38
  const PercentBarRenderer_1 = require("./PercentBarRenderer");
39
+ const BadgeRenderer_1 = require("./BadgeRenderer");
39
40
  const Helper_1 = require("../Utilities/Helpers/Helper");
40
41
  const StatusBarModule_1 = require("../Strategy/StatusBarModule");
41
42
  const GeneralConstants = tslib_1.__importStar(require("../Utilities/Constants/GeneralConstants"));
@@ -152,6 +153,9 @@ class agGridHelper {
152
153
  createPercentBarRendererComp(styledColumn, abColumn) {
153
154
  return (0, PercentBarRenderer_1.getPercentBarRendererForColumn)(styledColumn, abColumn, this.adaptable.api);
154
155
  }
156
+ createBadgeRendererComp(styledColumn, abColumn) {
157
+ return (0, BadgeRenderer_1.getBadgeRendererForColumn)(styledColumn, abColumn, this.adaptable.api);
158
+ }
155
159
  getCleanValue(value) {
156
160
  if (typeof value === 'string') {
157
161
  return value;
@@ -70,5 +70,5 @@ exports.InternalAdaptableNumberEditor = React.forwardRef(function InternalAdapta
70
70
  focus();
71
71
  }
72
72
  } },
73
- React.createElement(icons_1.Icon, { size: 18, name: "clear", tabIndex: 0 }))) : null));
73
+ React.createElement(icons_1.Icon, { size: 18, name: "close", tabIndex: 0 }))) : null));
74
74
  });
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { AdaptableIcon, AdaptableStyle } from '../../types';
3
+ export interface BadgeProps {
4
+ adaptableStyle: AdaptableStyle;
5
+ icon?: AdaptableIcon;
6
+ iconPosition?: 'start' | 'end' | 'Start' | 'End';
7
+ }
8
+ export declare const Badge: React.FunctionComponent<React.PropsWithChildren<BadgeProps>>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Badge = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const StyleHelper_1 = require("../../Utilities/Helpers/StyleHelper");
7
+ const AdaptableIconComponent_1 = require("../AdaptableIconComponent");
8
+ const Badge = (props) => {
9
+ const { iconPosition = 'start', icon: iconProps } = props;
10
+ const preparedBadgePosition = iconPosition.toLowerCase();
11
+ const icon = iconProps && React.createElement(AdaptableIconComponent_1.AdaptableIconComponent, { icon: iconProps });
12
+ const style = (0, StyleHelper_1.toStyle)(props.adaptableStyle);
13
+ return (React.createElement("div", { className: "ab-Badge", style: style },
14
+ preparedBadgePosition === 'start' && icon,
15
+ props.children,
16
+ preparedBadgePosition === 'end' && icon));
17
+ };
18
+ exports.Badge = Badge;
@@ -11,8 +11,8 @@ function DashboardToolbar(props) {
11
11
  React.createElement("div", { className: "ab-Dashboard__toolbar-content" }, props.children),
12
12
  React.createElement(rebass_1.Flex, { className: "ab-Dashboard__toolbar-title", flexDirection: "row", alignItems: "center" },
13
13
  React.createElement("span", null, props.title),
14
- props.showConfigure && (React.createElement(SimpleButton_1.default, { icon: "build", variant: "text", tone: "none", "data-name": "configure", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Configure ${props.title} Toolbar`, onClick: () => props.onConfigure() })),
14
+ props.showConfigure && (React.createElement(SimpleButton_1.default, { icon: "spanner", variant: "text", tone: "none", "data-name": "configure", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Configure ${props.title} Toolbar`, onClick: () => props.onConfigure() })),
15
15
  ' ',
16
- props.showClose && (React.createElement(SimpleButton_1.default, { style: { alignSelf: 'flex-end' }, disabled: props.accessLevel == 'ReadOnly', "data-name": "close", icon: "clear", variant: "text", tone: "none", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Close ${props.title} Toolbar`, onClick: () => props.onClose() })))));
16
+ props.showClose && (React.createElement(SimpleButton_1.default, { style: { alignSelf: 'flex-end' }, disabled: props.accessLevel == 'ReadOnly', "data-name": "close", icon: "close", variant: "text", tone: "none", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Close ${props.title} Toolbar`, onClick: () => props.onClose() })))));
17
17
  }
18
18
  exports.DashboardToolbar = DashboardToolbar;
@@ -81,7 +81,7 @@ exports.Datepicker = React.forwardRef((props, ref) => {
81
81
  '|': React.createElement("hr", { style: { width: '100%', height: 0, margin: 0, border: 'none' } }),
82
82
  };
83
83
  const footerButtons = datepickerButtons.map((buttonKey, index) => React.cloneElement(footerButtonsMap[buttonKey], { key: index }));
84
- const clearButton = showClearButton ? (React.createElement(SimpleButton_1.default, { "data-name": "clear", variant: "text", tooltip: "Clear", iconSize: 20, padding: 0, icon: "clear", onMouseDown: (e) => {
84
+ const clearButton = showClearButton ? (React.createElement(SimpleButton_1.default, { "data-name": "clear", variant: "text", tooltip: "Clear", iconSize: 20, padding: 0, icon: "close", onMouseDown: (e) => {
85
85
  e.preventDefault();
86
86
  clearValue();
87
87
  }, accessLevel: 'Full' })) : null;
@@ -46,6 +46,6 @@ function ToolbarItem({ toolbar, toolbarIndex, onRemove, disabled, }) {
46
46
  ? 'var(--ab-dashboard-toolbar-drag__background)'
47
47
  : 'var(--ab-color-primarylight)', ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps, { style: provided.draggableProps.style }),
48
48
  React.createElement("div", { style: { flex: 1 } }, title),
49
- React.createElement(SimpleButton_1.default, { disabled: disabled, icon: "clear", variant: "text", padding: 1, onClick: onRemove })))));
49
+ React.createElement(SimpleButton_1.default, { disabled: disabled, icon: "close", variant: "text", padding: 1, onClick: onRemove })))));
50
50
  }
51
51
  exports.ToolbarItem = ToolbarItem;
@@ -79,7 +79,7 @@ const Dropdown = (props) => {
79
79
  selectedText = placeholder;
80
80
  }
81
81
  //20 ... 20 16
82
- const renderClearButton = () => (React.createElement(SimpleButton_1.default, Object.assign({ variant: "text", icon: "clear", tone: "none", tooltip: "Clear", iconSize: 20, px: 0, py: 0, marginRight: 1 }, clearButtonProps, { style: Object.assign({ zIndex: 10, color: 'inherit' }, (clearButtonProps ? clearButtonProps.style : null)), onClick: (e) => {
82
+ const renderClearButton = () => (React.createElement(SimpleButton_1.default, Object.assign({ variant: "text", icon: "close", tone: "none", tooltip: "Clear", iconSize: 20, px: 0, py: 0, marginRight: 1 }, clearButtonProps, { style: Object.assign({ zIndex: 10, color: 'inherit' }, (clearButtonProps ? clearButtonProps.style : null)), onClick: (e) => {
83
83
  e.preventDefault();
84
84
  onChange(null, e);
85
85
  } })));
@@ -96,7 +96,7 @@ const DropdownButton = React.forwardRef((props, theRef) => {
96
96
  onClear();
97
97
  }
98
98
  (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
99
- }, ml: 2, padding: 0, variant: 'text', icon: "clear" }, clearButtonProps, { style: Object.assign(Object.assign({}, clearButtonProps === null || clearButtonProps === void 0 ? void 0 : clearButtonProps.style), { visibility: showClearButton ? 'visible' : 'hidden' }) }))) : null;
99
+ }, ml: 2, padding: 0, variant: 'text', icon: "close" }, clearButtonProps, { style: Object.assign(Object.assign({}, clearButtonProps === null || clearButtonProps === void 0 ? void 0 : clearButtonProps.style), { visibility: showClearButton ? 'visible' : 'hidden' }) }))) : null;
100
100
  icon = (React.createElement(React.Fragment, null,
101
101
  spacer,
102
102
  hasClearButton ? clearButton : null,
@@ -40,7 +40,7 @@ const readJSONFile = async (file, toJSON) => {
40
40
  };
41
41
  exports.readJSONFile = readJSONFile;
42
42
  const FileDroppable = (props) => {
43
- const { onDropSuccess, message, fileAccept = '.json', helpText = 'AdapTable No Code Version', defaultText = 'Click here to select a JSON file to load or drag it here', dragOverText = 'Drop file here to start Adaptable Wizard', icon = React.createElement(icons_1.Icon, { name: "attach-file", size: 48 }) } = props, domProps = tslib_1.__rest(props, ["onDropSuccess", "message", "fileAccept", "helpText", "defaultText", "dragOverText", "icon"]);
43
+ const { onDropSuccess, message, fileAccept = '.json', helpText = 'AdapTable No Code Version', defaultText = 'Click here to select a JSON file to load or drag it here', dragOverText = 'Drop file here to start Adaptable Wizard', icon = React.createElement(icons_1.Icon, { name: "paperclip", size: 48 }) } = props, domProps = tslib_1.__rest(props, ["onDropSuccess", "message", "fileAccept", "helpText", "defaultText", "dragOverText", "icon"]);
44
44
  const [state, dispatch] = (0, react_1.useReducer)(reducer_1.default, initialState);
45
45
  const onDragEnter = (e) => {
46
46
  dispatch({
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent } from 'react';
2
+ export interface IconSelectorProps {
3
+ value?: string;
4
+ onChange: (iconName: string) => void;
5
+ clearable?: boolean;
6
+ }
7
+ export declare const IconSelector: FunctionComponent<IconSelectorProps>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IconSelector = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const rebass_1 = require("rebass");
7
+ const AdaptableInput_1 = tslib_1.__importDefault(require("../../View/Components/AdaptableInput"));
8
+ const icons_1 = tslib_1.__importStar(require("../icons"));
9
+ const OverlayTrigger_1 = tslib_1.__importDefault(require("../OverlayTrigger"));
10
+ const SimpleButton_1 = tslib_1.__importDefault(require("../SimpleButton"));
11
+ const IconSelector = (props) => {
12
+ var _a;
13
+ const [query, setQuery] = react_1.default.useState('');
14
+ const allIcons = Object.keys(icons_1.default);
15
+ const filteredIcons = query
16
+ ? allIcons.filter((iconName) => {
17
+ return iconName.toLowerCase().includes(query.toLowerCase());
18
+ })
19
+ : allIcons;
20
+ let iconsElements = filteredIcons.map((iconName) => {
21
+ return (react_1.default.createElement(rebass_1.Flex, { key: iconName },
22
+ react_1.default.createElement(SimpleButton_1.default, { onClick: () => props.onChange(iconName), p: 2, variant: iconName === props.value ? 'raised' : 'text', tone: iconName === props.value ? 'accent' : 'none', icon: iconName })));
23
+ });
24
+ const popup = (react_1.default.createElement(rebass_1.Box, { className: "ab-IconSelector__Popup" },
25
+ react_1.default.createElement(rebass_1.Box, { mb: 2 },
26
+ react_1.default.createElement(rebass_1.Box, { mb: 2, fontSize: 4 }, "Select an Icon"),
27
+ react_1.default.createElement(AdaptableInput_1.default, { value: query, onChange: (event) => { var _a; return setQuery((_a = event.target.value) !== null && _a !== void 0 ? _a : ''); }, width: "100%" })),
28
+ react_1.default.createElement(rebass_1.Flex, { p: 2, style: { width: 300, maxHeight: 300, overflow: 'auto' }, flexWrap: "wrap" }, iconsElements)));
29
+ let value = 'No Icon Selected';
30
+ if (props.value in icons_1.default) {
31
+ value = (react_1.default.createElement(icons_1.Icon, { style: { display: 'inline-block' }, name: props.value }));
32
+ }
33
+ return (react_1.default.createElement(rebass_1.Flex, { className: "ab-IconSelector" },
34
+ react_1.default.createElement(OverlayTrigger_1.default, { preventPortalEventPropagation: false, render: () => popup, showEvent: "mouseenter", hideEvent: "mouseleave", hideDelay: 300 },
35
+ react_1.default.createElement(SimpleButton_1.default, { className: "ab-IconSelector__trigger", textAlign: "center", onClick: () => null, variant: "raised", width: 150, justifyContent: "center" }, value)),
36
+ ((_a = props.clearable) !== null && _a !== void 0 ? _a : true) && (react_1.default.createElement(SimpleButton_1.default, { disabled: !props.value, className: "ab-IconSelector__clear-button", ml: 2, onClick: (event) => {
37
+ event.stopPropagation();
38
+ event.preventDefault();
39
+ props.onChange('');
40
+ }, variant: "text", icon: "close" }))));
41
+ };
42
+ exports.IconSelector = IconSelector;
@@ -0,0 +1 @@
1
+ export * from './IconSelector';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./IconSelector"), exports);
@@ -73,6 +73,7 @@ const OverlayTrigger = React.forwardRef((props, ref) => {
73
73
  const [visible, doSetVisible] = (0, useProperty_1.default)(props, 'visible', false);
74
74
  const hideTimeoutRef = (0, react_1.useRef)(null);
75
75
  const setVisible = React.useCallback((visible) => {
76
+ onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(visible);
76
77
  if (!visible) {
77
78
  hideTimeoutRef.current = setTimeout(() => {
78
79
  hideTimeoutRef.current = null;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { AdaptableInternalIconName } from '../../types';
3
+ export declare type ToggleProps = {
4
+ onPressedChange: (pressed: boolean) => void;
5
+ pressed?: boolean;
6
+ icon?: AdaptableInternalIconName;
7
+ };
8
+ export declare const Toggle: React.FunctionComponent<React.PropsWithChildren<ToggleProps>>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Toggle = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const AdaptableIconComponent_1 = require("../AdaptableIconComponent");
7
+ const join_1 = tslib_1.__importDefault(require("../utils/join"));
8
+ const Toggle = (_a) => {
9
+ var { onPressedChange, pressed, icon, children } = _a, rest = tslib_1.__rest(_a, ["onPressedChange", "pressed", "icon", "children"]);
10
+ const baseClassName = 'ab-Toggle';
11
+ return (React.createElement("button", Object.assign({}, rest, { className: (0, join_1.default)(baseClassName, pressed && `${baseClassName}--pressed`), onClick: () => onPressedChange(!pressed) }),
12
+ icon && React.createElement(AdaptableIconComponent_1.AdaptableIconComponent, { icon: { name: icon } }),
13
+ children));
14
+ };
15
+ exports.Toggle = Toggle;
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare const ToggleGroup: React.FunctionComponent<React.PropsWithChildren<unknown>>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToggleGroup = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const rebass_1 = require("rebass");
7
+ const ToggleGroup = (props) => {
8
+ return React.createElement(rebass_1.Flex, { className: "ab-Toggle-Group" }, props.children);
9
+ };
10
+ exports.ToggleGroup = ToggleGroup;
@@ -0,0 +1,2 @@
1
+ export * from './Toggle';
2
+ export * from './ToggleGroup';