@adaptabletools/adaptable 23.0.0-canary.3 → 23.0.0-canary.5

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 (277) hide show
  1. package/index.css +116 -61
  2. package/package.json +9 -4
  3. package/src/AdaptableOptions/DefaultAdaptableOptions.js +0 -4
  4. package/src/AdaptableOptions/EditOptions.d.ts +2 -2
  5. package/src/AdaptableOptions/FilterOptions.d.ts +0 -7
  6. package/src/AdaptableState/Common/AdaptableForm.d.ts +18 -1
  7. package/src/AdaptableState/Common/AdaptableForm.js +31 -0
  8. package/src/AdaptableState/Common/AggregationColumns.d.ts +14 -6
  9. package/src/AdaptableState/Common/AggregationColumns.js +27 -2
  10. package/src/AdaptableState/Common/CellDataChangedInfo.d.ts +3 -2
  11. package/src/AdaptableState/Common/ColumnScope.d.ts +4 -0
  12. package/src/AdaptableState/Common/Enums.d.ts +5 -10
  13. package/src/AdaptableState/Common/Enums.js +4 -10
  14. package/src/AdaptableState/PlusMinusState.d.ts +3 -3
  15. package/src/AdaptableState/ShortcutState.d.ts +2 -6
  16. package/src/AdaptableState/StyledColumnState.d.ts +3 -5
  17. package/src/AdaptableState/ThemeState.d.ts +33 -28
  18. package/src/Api/EventApi.d.ts +14 -1
  19. package/src/Api/Events/ThemeChanged.d.ts +6 -0
  20. package/src/Api/Events/ThemeSelected.d.ts +11 -0
  21. package/src/Api/Events/ThemeSelected.js +1 -0
  22. package/src/Api/Implementation/EventApiImpl.js +4 -0
  23. package/src/Api/Implementation/LayoutApiImpl.d.ts +0 -2
  24. package/src/Api/Implementation/LayoutApiImpl.js +0 -14
  25. package/src/Api/Implementation/LayoutHelpers.d.ts +2 -0
  26. package/src/Api/Implementation/LayoutHelpers.js +29 -7
  27. package/src/Api/Implementation/ThemeApiImpl.d.ts +3 -2
  28. package/src/Api/Implementation/ThemeApiImpl.js +19 -15
  29. package/src/Api/Internal/EventInternalApi.d.ts +2 -0
  30. package/src/Api/Internal/EventInternalApi.js +8 -1
  31. package/src/Api/Internal/StyledColumnInternalApi.d.ts +4 -4
  32. package/src/Api/Internal/StyledColumnInternalApi.js +4 -4
  33. package/src/Api/Internal/ThemeInternalApi.d.ts +0 -1
  34. package/src/Api/Internal/ThemeInternalApi.js +0 -10
  35. package/src/Api/LayoutApi.d.ts +1 -8
  36. package/src/Api/ThemeApi.d.ts +6 -2
  37. package/src/Redux/ActionsReducers/ThemeRedux.d.ts +3 -3
  38. package/src/Strategy/CalculatedColumnModule.js +3 -1
  39. package/src/Strategy/FormatColumnModule.js +14 -7
  40. package/src/Strategy/LayoutModule.js +13 -8
  41. package/src/Strategy/StyledColumnModule.js +64 -36
  42. package/src/Utilities/Constants/ReduxConstants.d.ts +2 -2
  43. package/src/Utilities/Constants/ReduxConstants.js +1 -14
  44. package/src/Utilities/Helpers/FormatHelper.js +20 -1
  45. package/src/Utilities/Helpers/SparklineOptionsHelper.d.ts +7 -0
  46. package/src/Utilities/Helpers/SparklineOptionsHelper.js +65 -0
  47. package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +23 -1
  48. package/src/Utilities/Helpers/StyledColumnGradientHelper.js +204 -0
  49. package/src/Utilities/Helpers/ThemeHelpers.d.ts +5 -0
  50. package/src/Utilities/Helpers/ThemeHelpers.js +38 -0
  51. package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +19 -0
  52. package/src/Utilities/Helpers/percentBarPreviewHelper.js +143 -0
  53. package/src/Utilities/ObjectFactory.d.ts +1 -3
  54. package/src/Utilities/ObjectFactory.js +0 -8
  55. package/src/Utilities/Services/CalculatedColumnExpressionService.d.ts +1 -0
  56. package/src/Utilities/Services/CalculatedColumnExpressionService.js +7 -0
  57. package/src/Utilities/Services/CalculatedColumnSyntheticChange.d.ts +4 -0
  58. package/src/Utilities/Services/CalculatedColumnSyntheticChange.js +115 -0
  59. package/src/Utilities/Services/Interface/ICalculatedColumnExpressionService.d.ts +1 -0
  60. package/src/Utilities/Services/ThemeService.js +1 -1
  61. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +17 -16
  62. package/src/View/Alert/Wizard/AlertButtonsEditor.js +114 -103
  63. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +13 -14
  64. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +55 -55
  65. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +3 -2
  66. package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +2 -2
  67. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +31 -39
  68. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +3 -4
  69. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +9 -13
  70. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +30 -17
  71. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +7 -9
  72. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +3 -3
  73. package/src/View/CellSummary/CellSummaryViewPanel.js +1 -1
  74. package/src/View/Charting/ChartingWizard/AgChargingWizard/AgChargingWizard.js +3 -10
  75. package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
  76. package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +35 -52
  77. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/ExternalChartingWizard.js +4 -31
  78. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.d.ts +5 -0
  79. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.js +21 -0
  80. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.d.ts +1 -0
  81. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +10 -7
  82. package/src/View/Comments/CommentsEditor.js +1 -1
  83. package/src/View/Components/ColumnFilter/ColumnFilterWindow.js +1 -1
  84. package/src/View/Components/ModuleProfile.js +1 -1
  85. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
  86. package/src/View/Components/Popups/WindowPopups/windowFactory.js +0 -1
  87. package/src/View/Components/RangesComponent.d.ts +7 -2
  88. package/src/View/Components/RangesComponent.js +94 -22
  89. package/src/View/Components/Selectors/ColumnSelector.js +5 -0
  90. package/src/View/Components/StyleComponent.d.ts +1 -0
  91. package/src/View/Components/StyleComponent.js +1 -1
  92. package/src/View/Components/ValueSelector/index.js +70 -57
  93. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +8 -13
  94. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +8 -8
  95. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -1
  96. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +11 -12
  97. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +6 -4
  98. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +3 -2
  99. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +5 -15
  100. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +24 -26
  101. package/src/View/Export/Wizard/ReportNameWizardSection.js +10 -13
  102. package/src/View/Export/Wizard/ReportRowsWizardSection.js +20 -22
  103. package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +2 -0
  104. package/src/View/Export/Wizard/ScheduledReportSettings.js +13 -13
  105. package/src/View/Export/Wizard/ScheduledReportWizard.js +4 -5
  106. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +8 -6
  107. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +24 -23
  108. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +20 -11
  109. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +21 -5
  110. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +4 -4
  111. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +7 -0
  112. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +117 -12
  113. package/src/View/FormatColumn/Wizard/FormatColumnPreview.d.ts +15 -0
  114. package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +66 -0
  115. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +4 -0
  116. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +30 -0
  117. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +13 -8
  118. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  119. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +3 -1
  120. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +62 -13
  121. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +5 -3
  122. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.d.ts +2 -0
  123. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +15 -0
  124. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.d.ts +10 -0
  125. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.js +53 -0
  126. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +2 -3
  127. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +33 -68
  128. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +15 -11
  129. package/src/View/Layout/LayoutViewPanel.js +23 -21
  130. package/src/View/Layout/TransposedPopup.js +2 -2
  131. package/src/View/Layout/Wizard/LayoutWizard.js +3 -3
  132. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +2 -3
  133. package/src/View/Layout/Wizard/sections/AggregationsSection.js +115 -26
  134. package/src/View/Layout/Wizard/sections/ColumnsSection.js +79 -79
  135. package/src/View/Layout/Wizard/sections/FilterSection.js +31 -32
  136. package/src/View/Layout/Wizard/sections/GridFilterSection.js +11 -11
  137. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +1 -2
  138. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +101 -52
  139. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +9 -8
  140. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +4 -4
  141. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +36 -33
  142. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +2 -2
  143. package/src/View/Layout/Wizard/sections/RowSummarySection.js +95 -73
  144. package/src/View/Layout/Wizard/sections/SettingsSection.js +4 -5
  145. package/src/View/Layout/Wizard/sections/SortSection.js +2 -2
  146. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  147. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +9 -14
  148. package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +1 -3
  149. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.d.ts +4 -0
  150. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +43 -13
  151. package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +11 -18
  152. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.d.ts +2 -6
  153. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +6 -22
  154. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +15 -21
  155. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +2 -2
  156. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +11 -18
  157. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +17 -6
  158. package/src/View/Shortcut/Wizard/ShortcutWizard.js +3 -3
  159. package/src/View/Shortcut/shortcutOperations.d.ts +3 -0
  160. package/src/View/Shortcut/shortcutOperations.js +28 -0
  161. package/src/View/SpecialColumnSettingsWizardStep.js +9 -8
  162. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +5 -0
  163. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +24 -15
  164. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +10 -2
  165. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +96 -16
  166. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +14 -0
  167. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +45 -24
  168. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.d.ts +2 -3
  169. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +108 -33
  170. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +21 -13
  171. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.d.ts +5 -0
  172. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +121 -23
  173. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.d.ts +1 -0
  174. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +34 -11
  175. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.d.ts +5 -0
  176. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +86 -12
  177. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.d.ts +5 -0
  178. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +121 -34
  179. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.d.ts +1 -0
  180. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +55 -75
  181. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +5 -0
  182. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.js +16 -0
  183. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +7 -13
  184. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarColumnComparisonPreview.js +5 -5
  185. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarRangesPreview.js +4 -3
  186. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.d.ts +5 -4
  187. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +12 -14
  188. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +5 -0
  189. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.js +16 -0
  190. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +3 -0
  191. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +31 -3
  192. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +9 -0
  193. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +58 -0
  194. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.d.ts +10 -0
  195. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.js +30 -0
  196. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.d.ts +10 -0
  197. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +91 -0
  198. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.d.ts +8 -0
  199. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +52 -0
  200. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.d.ts +8 -0
  201. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +53 -0
  202. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +18 -0
  203. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +58 -0
  204. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.d.ts +10 -0
  205. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +126 -0
  206. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +12 -5
  207. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.d.ts +1 -5
  208. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +52 -29
  209. package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
  210. package/src/View/Theme/ThemePopup.d.ts +2 -14
  211. package/src/View/Theme/ThemePopup.js +1 -36
  212. package/src/View/UIHelper.js +1 -1
  213. package/src/View/Wizard/OnePageAdaptableWizard.js +7 -21
  214. package/src/View/renderWithAdaptableContext.js +2 -3
  215. package/src/agGrid/AdaptableAgGrid.d.ts +1 -1
  216. package/src/agGrid/AdaptableAgGrid.js +38 -43
  217. package/src/agGrid/AgGridAdapter.d.ts +1 -1
  218. package/src/agGrid/AgGridAdapter.js +27 -17
  219. package/src/agGrid/AgGridColumnAdapter.js +10 -19
  220. package/src/agGrid/AgGridMenuAdapter.d.ts +0 -1
  221. package/src/agGrid/AgGridMenuAdapter.js +20 -37
  222. package/src/agGrid/buildValueAggregationMenuItem.d.ts +19 -0
  223. package/src/agGrid/buildValueAggregationMenuItem.js +111 -0
  224. package/src/agGrid/cellRenderers/IconRenderer.d.ts +6 -0
  225. package/src/agGrid/cellRenderers/IconRenderer.js +43 -15
  226. package/src/agGrid/createAgGridIcon.d.ts +10 -0
  227. package/src/agGrid/createAgGridIcon.js +16 -0
  228. package/src/components/AdaptableFormComponent/AdaptableFormComponent.js +11 -6
  229. package/src/components/Combobox/VirtualizedList.js +5 -5
  230. package/src/components/Combobox/comboboxUtils.d.ts +4 -1
  231. package/src/components/Combobox/comboboxUtils.js +2 -0
  232. package/src/components/Combobox/index.d.ts +1 -0
  233. package/src/components/Combobox/index.js +35 -15
  234. package/src/components/DragAndDropContext/UnusedPanel.js +1 -1
  235. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  236. package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
  237. package/src/components/Input/NumberInput.js +1 -1
  238. package/src/components/Panel/index.js +1 -1
  239. package/src/components/SimpleButton/index.js +4 -4
  240. package/src/components/Toggle/Toggle.js +1 -1
  241. package/src/components/Toggle/ToggleGroup.js +1 -1
  242. package/src/components/Tree/TreeDropdown/index.js +2 -6
  243. package/src/env.js +2 -2
  244. package/src/layout-manager/src/LayoutManagerModel.d.ts +5 -1
  245. package/src/layout-manager/src/index.js +2 -9
  246. package/src/metamodel/adaptable.metamodel.d.ts +39 -46
  247. package/src/metamodel/adaptable.metamodel.js +1 -1
  248. package/src/types.d.ts +5 -5
  249. package/themes/dark.css +1 -68
  250. package/themes/light.css +1 -5
  251. package/tsconfig.esm.tsbuildinfo +1 -1
  252. package/src/AdaptableState/Common/FilterActionOnDataChange.d.ts +0 -17
  253. package/src/AdaptableState/Common/FilterActionOnDataChange.js +0 -4
  254. package/src/Aggregation/ParameterizedAggregationRegistry.d.ts +0 -35
  255. package/src/Aggregation/ParameterizedAggregationRegistry.js +0 -63
  256. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.d.ts +0 -3
  257. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.js +0 -55
  258. package/src/Aggregation/parameterizedAggregationColumnMenu.d.ts +0 -8
  259. package/src/Aggregation/parameterizedAggregationColumnMenu.js +0 -137
  260. package/src/Aggregation/parameterizedAggregationHeader.d.ts +0 -13
  261. package/src/Aggregation/parameterizedAggregationHeader.js +0 -60
  262. package/src/Aggregation/parameterizedAggregationHelpers.d.ts +0 -23
  263. package/src/Aggregation/parameterizedAggregationHelpers.js +0 -111
  264. package/src/Aggregation/parameterizedAggregationWizardHelpers.d.ts +0 -9
  265. package/src/Aggregation/parameterizedAggregationWizardHelpers.js +0 -66
  266. package/src/Aggregation/validateParameterizedAggregations.d.ts +0 -4
  267. package/src/Aggregation/validateParameterizedAggregations.js +0 -20
  268. package/src/View/AdaptableComputedCSSVarsContext.d.ts +0 -12
  269. package/src/View/AdaptableComputedCSSVarsContext.js +0 -29
  270. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.d.ts +0 -12
  271. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.js +0 -43
  272. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.d.ts +0 -5
  273. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.js +0 -28
  274. package/src/View/Theme/VariantSelector.d.ts +0 -8
  275. package/src/View/Theme/VariantSelector.js +0 -20
  276. package/src/components/Select/CSSNumericVariableWatch.d.ts +0 -11
  277. package/src/components/Select/CSSNumericVariableWatch.js +0 -45
@@ -1,7 +1,12 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
2
+ import { SummaryText, useOnePageAdaptableWizardContext, } from '../../Wizard/OnePageAdaptableWizard';
3
3
  import { EntityRulesEditor, EntityRulesSummary } from '../../Components/EntityRulesEditor';
4
4
  import { CodeBlock } from '../../../components/CodeBlock';
5
+ import { isAdaptableRuleValid } from '../../Components/EntityRulesEditor/Utilities';
6
+ import { Box, Flex } from '../../../components/Flex';
7
+ import { Card } from '../../../components/Card';
8
+ import { TypeRadio } from '../../Wizard/TypeRadio';
9
+ import { Tag } from '../../../components/Tag';
5
10
  export function PlusMinusRuleSummary() {
6
11
  const { data } = useOnePageAdaptableWizardContext();
7
12
  return (_jsx(EntityRulesSummary, { data: data, renderPredicate: (contents) => {
@@ -10,22 +15,47 @@ export function PlusMinusRuleSummary() {
10
15
  return (_jsxs(_Fragment, { children: ["Apply Plus Minus when", ' ', _jsx("b", { children: _jsx(CodeBlock, { children: contents }) })] }));
11
16
  } }));
12
17
  }
18
+ export const PlusMinusRuleStepSummary = () => {
19
+ const { data } = useOnePageAdaptableWizardContext();
20
+ const hasCondition = Boolean(data.Rule);
21
+ return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Nudge Type ", _jsx(Tag, { children: hasCondition ? 'Conditional' : 'Always Apply' })] }), hasCondition ? _jsx(PlusMinusRuleSummary, {}) : null] }));
22
+ };
23
+ export const isRuleValid = (data, api, context) => {
24
+ if (!data.Rule) {
25
+ return true;
26
+ }
27
+ if (!data.Rule.BooleanExpression) {
28
+ return 'A valid rule is required.';
29
+ }
30
+ const ruleValidation = isAdaptableRuleValid(data, api, context);
31
+ if (typeof ruleValidation === 'string') {
32
+ return ruleValidation;
33
+ }
34
+ return true;
35
+ };
13
36
  export function PlusMinusRuleWizardSection(props) {
14
37
  const { data, moduleInfo } = useOnePageAdaptableWizardContext();
38
+ const hasCondition = Boolean(data.Rule);
39
+ const handleNudgeTypeChange = (conditional) => {
40
+ if (conditional) {
41
+ props.onChange({
42
+ ...data,
43
+ Rule: data.Rule ?? { BooleanExpression: '' },
44
+ });
45
+ return;
46
+ }
47
+ const preparedData = { ...data };
48
+ delete preparedData.Rule;
49
+ props.onChange(preparedData);
50
+ };
15
51
  const plusMinusNudge = {
16
52
  ...data,
17
53
  Rule: data?.Rule ?? { BooleanExpression: '' },
18
54
  };
19
- return (_jsx(EntityRulesEditor, { module: moduleInfo.ModuleName,
20
- // min-height 0 so the container does not min-size from it's children
21
- // https://stackoverflow.com/questions/33605552/how-to-prevent-a-flex-item-height-to-overflow-due-to-its-content
22
- flexProps: { style: { minHeight: 0 } }, defaultPredicateId: props.defaultPredicateId, predicateDefs: [], showAggregation: false, showObservable: false, showPredicate: false, data: plusMinusNudge,
23
- // the cast is to convince TS that it still a PlusMinusNudge
24
- // even when Rule is not optional, the type is inferred from `plusMinusNudge`
25
- onChange: (plusMinus) => props.onChange(plusMinus), descriptions: {
26
- selectPredicate: null,
27
- useBooleanQuery: (_jsxs(_Fragment, { children: ["Use an BooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
28
- useObservableQuery: null,
29
- useAggregationQuery: null,
30
- } }));
55
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Nudge Type" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose whether the nudge is always applied or only when a condition is met" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(TypeRadio, { "data-name": "nudge-type-always", text: "Always Apply", description: "The nudge value is always applied when using Plus/Minus", checked: !hasCondition, onClick: () => handleNudgeTypeChange(false) }), _jsx(TypeRadio, { "data-name": "nudge-type-condition", text: "Conditional", description: "Apply the nudge only when the row matches a rule", checked: hasCondition, onClick: () => handleNudgeTypeChange(true) })] }) })] }), hasCondition ? (_jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Condition" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Build a rule that determines when the nudge should be applied" })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: _jsx(EntityRulesEditor, { module: moduleInfo.ModuleName, flexProps: { style: { minHeight: 0 } }, defaultPredicateId: props.defaultPredicateId, predicateDefs: [], showAggregation: false, showObservable: false, showPredicate: false, data: plusMinusNudge, onChange: (plusMinus) => props.onChange(plusMinus), descriptions: {
56
+ selectPredicate: null,
57
+ useBooleanQuery: (_jsxs(_Fragment, { children: ["Use an BooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
58
+ useObservableQuery: null,
59
+ useAggregationQuery: null,
60
+ } }) })] })) : null] }));
31
61
  }
@@ -1,25 +1,18 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
4
4
  import { NewScopeComponent } from '../../Components/NewScopeComponent';
5
+ import { Box, Flex } from '../../../components/Flex';
5
6
  export const PlusMinusScopeWizardSection = (props) => {
6
7
  const { data, api } = useOnePageAdaptableWizardContext();
7
8
  const availableColumns = React.useMemo(() => api.columnApi.getNumericColumns(), []);
8
- return (_jsx(NewScopeComponent, { availableDataTypes: ['number'], scopeColumns: availableColumns, scope: data.Scope, descriptions: {
9
- rowScope: 'Matching rows will have the plus/minus applied',
10
- columnScope: 'Matching Columns will have the plus/minus applied',
11
- }, updateScope: (Scope) => {
12
- let preparedScope = Scope;
13
- if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
14
- // default to checked
15
- preparedScope = {
16
- ...Scope,
17
- DataTypes: ['number'],
18
- };
19
- }
20
- props.onChange({
21
- ...data,
22
- Scope: preparedScope,
23
- });
24
- } }));
9
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:mb-2 twa:border-b-foreground/20", children: [_jsx(Box, { className: "twa:text-5 twa:font-medium", children: "Target" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Specify where the Plus/Minus Nudge should be applied (numeric columns only)" })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: _jsx(NewScopeComponent, { disableDataTypes: true, scopeColumns: availableColumns, scope: data.Scope, descriptions: {
10
+ rowScope: 'Matching rows will have the plus/minus applied',
11
+ columnScope: 'Selected Columns will have the plus/minus applied',
12
+ }, updateScope: (Scope) => {
13
+ props.onChange({
14
+ ...data,
15
+ Scope: Scope,
16
+ });
17
+ } }) })] }));
25
18
  };
@@ -1,14 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { OnePageAdaptableWizardContextType } from '../../Wizard/OnePageAdaptableWizard';
3
3
  import { AdaptableApi, PlusMinusNudge } from '../../../types';
4
- export declare const PlusMinusSettingsSummary: React.FunctionComponent<{
5
- hasCondition: boolean;
6
- }>;
7
- export declare const isSettingsValid: (hasCondition: boolean) => (data: PlusMinusNudge, api: AdaptableApi, context: OnePageAdaptableWizardContextType<PlusMinusNudge>) => string | true;
4
+ export declare const PlusMinusSettingsSummary: React.FunctionComponent;
5
+ export declare const isSettingsValid: (data: PlusMinusNudge, api: AdaptableApi, _context: OnePageAdaptableWizardContextType<PlusMinusNudge>) => true | "A name is required." | "A Plus/Minus Nudge with this name already exists." | "A nudge value is required." | "Nudge value must not be zero." | "Increment and decrement keys cannot be the same for this nudge.";
8
6
  interface PlusMinusSettingsWizardSectionProps {
9
7
  onChange: (plusMinusNudge: PlusMinusNudge) => void;
10
- hasCondition: boolean;
11
- onConditionChange: (hasCondition: boolean) => void;
12
8
  }
13
9
  export declare const PlusMinusSettingsWizardSection: React.FunctionComponent<PlusMinusSettingsWizardSectionProps>;
14
10
  export {};
@@ -1,24 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import Input from '../../../components/Input';
4
- import FormLayout, { FormRow } from '../../../components/FormLayout';
5
- import { Tabs } from '../../../components/Tabs';
6
4
  import { SummaryText, useOnePageAdaptableWizardContext, } from '../../Wizard/OnePageAdaptableWizard';
7
- import { PlusMinusRuleSummary, PlusMinusRuleWizardSection } from './PlusMinusRuleWizardSection';
8
- import { isAdaptableRuleValid } from '../../Components/EntityRulesEditor/Utilities';
9
5
  import { Tag } from '../../../components/Tag';
10
- import { Flex } from '../../../components/Flex';
6
+ import { Box, Flex } from '../../../components/Flex';
7
+ import { Card } from '../../../components/Card';
11
8
  import { plusMinusDecrementKeyFromOptionsOnly, plusMinusIncrementKeyFromOptionsOnly, plusMinusResolvedKeysConflict, plusMinusTriggerSameAsBaseline, resolvePlusMinusTriggerKeysForNudge, } from '../../../Utilities/Helpers/plusMinusTriggerKeys';
12
- const plusMinusSettingsFormColumns = [
13
- { name: 'label', style: { textAlign: 'start' } },
14
- { name: 'children' },
15
- ];
16
- export const PlusMinusSettingsSummary = (props) => {
9
+ export const PlusMinusSettingsSummary = () => {
17
10
  const { data, api } = useOnePageAdaptableWizardContext();
18
11
  const { incrementKey, decrementKey } = resolvePlusMinusTriggerKeysForNudge(data, api.optionsApi.getEditOptions().plusMinusOptions ?? {});
19
- return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Name ", _jsx(Tag, { children: data.Name || 'Not specified' })] }), _jsxs(SummaryText, { children: ["Nudge Value ", _jsx(Tag, { children: data.NudgeValue ?? 'Not selected' })] }), _jsxs(SummaryText, { children: ["Keys ", _jsx(Tag, { children: incrementKey }), " / ", _jsx(Tag, { children: decrementKey })] }), _jsxs(SummaryText, { children: ["Nudge Type ", _jsx(Tag, { children: props.hasCondition ? 'Conditional' : 'Always Apply' })] }), props.hasCondition && _jsx(PlusMinusRuleSummary, {})] }));
12
+ return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Name ", _jsx(Tag, { children: data.Name || 'Not specified' })] }), _jsxs(SummaryText, { children: ["Nudge Value ", _jsx(Tag, { children: data.NudgeValue ?? 'Not selected' })] }), _jsxs(SummaryText, { children: ["Keys ", _jsx(Tag, { children: incrementKey }), " / ", _jsx(Tag, { children: decrementKey })] })] }));
20
13
  };
21
- export const isSettingsValid = (hasCondition) => (data, api, context) => {
14
+ export const isSettingsValid = (data, api, _context) => {
22
15
  if (!data.Name?.trim()) {
23
16
  return 'A name is required.';
24
17
  }
@@ -27,15 +20,6 @@ export const isSettingsValid = (hasCondition) => (data, api, context) => {
27
20
  if (isDuplicateName) {
28
21
  return 'A Plus/Minus Nudge with this name already exists.';
29
22
  }
30
- if (hasCondition) {
31
- if (!data?.Rule?.BooleanExpression) {
32
- return 'A valid rule is required.';
33
- }
34
- const ruleValidation = isAdaptableRuleValid(data, api, context);
35
- if (typeof ruleValidation === 'string') {
36
- return ruleValidation;
37
- }
38
- }
39
23
  if (typeof data.NudgeValue !== 'number') {
40
24
  return 'A nudge value is required.';
41
25
  }
@@ -125,5 +109,5 @@ export const PlusMinusSettingsWizardSection = (props) => {
125
109
  commitDecrementKey(event.target.value);
126
110
  setDecrementEdit(undefined);
127
111
  };
128
- return (_jsxs(Flex, { flexDirection: "column", "data-name": "plus-minus-column-settings", className: "twa:h-full", children: [_jsxs(Tabs, { className: "twa:p-2", children: [_jsx(Tabs.Tab, { children: "Settings" }), _jsx(Tabs.Content, { children: _jsxs(FormLayout, { columns: plusMinusSettingsFormColumns, sizes: ['minmax(140px, max-content)', '1fr'], children: [_jsx(FormRow, { label: "Name", children: _jsx(Input, { "data-name": "plus-minus-name", className: "twa:mr-3 twa:max-w-md twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: data.Name ?? '' }) }), _jsx(FormRow, { label: "Nudge Value", children: _jsx(Input, { "data-name": "nudge-value", className: "twa:mr-3 twa:max-w-md twa:w-full", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' }) }), _jsx(FormRow, { label: "Increment key", children: _jsx(Input, { "data-name": "plus-minus-increment-key", className: "twa:mr-3 twa:max-w-md twa:w-full", onBlur: handleIncrementKeyBlur, onChange: handleIncrementKeyChange, onFocus: handleIncrementKeyFocus, value: incrementDisplayValue }) }), _jsx(FormRow, { label: "Decrement key", children: _jsx(Input, { "data-name": "plus-minus-decrement-key", className: "twa:mr-3 twa:max-w-md twa:w-full", onBlur: handleDecrementKeyBlur, onChange: handleDecrementKeyChange, onFocus: handleDecrementKeyFocus, value: decrementDisplayValue }) })] }) })] }), _jsxs(Tabs, { className: "twa:p-2", selectedIndex: props.hasCondition ? 1 : 0, onSelectedIndexChange: (index) => props.onConditionChange(index === 1), children: [_jsx(Tabs.Tab, { "data-name": "nudge-type-always", children: "Always Apply" }), _jsx(Tabs.Tab, { "data-name": "nudge-type-condition", children: "Conditional" }), _jsx(Tabs.Content, { children: _jsx(Flex, { className: "twa:text-2 twa:py-2", children: "The nudge value is always applied when using Plus/Minus" }) }), _jsx(Tabs.Content, { className: "twa:p-0", children: _jsx(PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: props.onChange }) })] })] }));
112
+ return (_jsx(Box, { "data-name": "plus-minus-column-settings", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Name" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for the Plus/Minus Nudge" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "plus-minus-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: data.Name ?? '' }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Nudge Value" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Amount added to or subtracted from the cell value when Plus/Minus is used" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "nudge-value", className: "twa:max-w-[300px] twa:w-full", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Trigger Keys" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Keyboard keys that trigger increment and decrement" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-3", children: [_jsxs(Box, { children: [_jsx(Box, { className: "twa:text-2 twa:mb-1 twa:opacity-80", children: "Increment key" }), _jsx(Input, { "data-name": "plus-minus-increment-key", className: "twa:max-w-[300px] twa:w-full", onBlur: handleIncrementKeyBlur, onChange: handleIncrementKeyChange, onFocus: handleIncrementKeyFocus, value: incrementDisplayValue })] }), _jsxs(Box, { children: [_jsx(Box, { className: "twa:text-2 twa:mb-1 twa:opacity-80", children: "Decrement key" }), _jsx(Input, { "data-name": "plus-minus-decrement-key", className: "twa:max-w-[300px] twa:w-full", onBlur: handleDecrementKeyBlur, onChange: handleDecrementKeyChange, onFocus: handleDecrementKeyFocus, value: decrementDisplayValue })] })] }) })] })] }) }));
129
113
  };
@@ -4,6 +4,7 @@ import { OnePageAdaptableWizard, OnePageWizardSummary, } from '../../../View/Wiz
4
4
  import { renderScopeSummary, isScopeValid } from '../../Components/NewScopeComponent';
5
5
  import { PlusMinusScopeWizardSection } from './PlusMinusScopeWizardSection';
6
6
  import { PlusMinusSettingsWizardSection, PlusMinusSettingsSummary, isSettingsValid, } from './PlusMinusSettingsWizardSection';
7
+ import { PlusMinusRuleWizardSection, PlusMinusRuleStepSummary, isRuleValid, } from './PlusMinusRuleWizardSection';
7
8
  import ObjectFactory from '../../../Utilities/ObjectFactory';
8
9
  import { useDispatch } from 'react-redux';
9
10
  import * as PlusMinusRedux from '../../../Redux/ActionsReducers/PlusMinusRedux';
@@ -26,22 +27,6 @@ export const PlusMinusWizard = (props) => {
26
27
  const setPlusMinus = React.useCallback((data) => {
27
28
  doSetPlusMinus(data);
28
29
  }, []);
29
- const [hasCondition, setHasCondition] = React.useState(() => {
30
- // true if on edit and it has a condition
31
- return Boolean(props?.data?.Rule);
32
- });
33
- React.useEffect(() => {
34
- doSetPlusMinus((prev) => {
35
- const preparedData = { ...prev };
36
- if (hasCondition) {
37
- preparedData.Rule = preparedData.Rule ?? { BooleanExpression: '' };
38
- }
39
- else {
40
- delete preparedData.Rule;
41
- }
42
- return preparedData;
43
- });
44
- }, [hasCondition]);
45
30
  const dispatch = useDispatch();
46
31
  const handleFinish = () => {
47
32
  if (props.data) {
@@ -55,9 +40,17 @@ export const PlusMinusWizard = (props) => {
55
40
  return (_jsx(OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: plusMinus, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
56
41
  {
57
42
  title: 'Settings',
58
- isValid: isSettingsValid(hasCondition),
59
- renderSummary: () => _jsx(PlusMinusSettingsSummary, { hasCondition: hasCondition }),
60
- render: () => (_jsx(PlusMinusSettingsWizardSection, { hasCondition: hasCondition, onConditionChange: setHasCondition, onChange: setPlusMinus })),
43
+ details: 'Provide details of the Plus/Minus Nudge',
44
+ isValid: isSettingsValid,
45
+ renderSummary: () => _jsx(PlusMinusSettingsSummary, {}),
46
+ render: () => _jsx(PlusMinusSettingsWizardSection, { onChange: setPlusMinus }),
47
+ },
48
+ {
49
+ title: 'Rule',
50
+ details: 'Choose when the nudge should be applied',
51
+ isValid: isRuleValid,
52
+ renderSummary: () => _jsx(PlusMinusRuleStepSummary, {}),
53
+ render: () => (_jsx(PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: setPlusMinus })),
61
54
  },
62
55
  {
63
56
  title: 'Target',
@@ -66,9 +59,9 @@ export const PlusMinusWizard = (props) => {
66
59
  renderSummary: () => renderScopeSummary(plusMinus.Scope, {
67
60
  scopeWholeRow: 'Plus/Minus is applied for matching rows',
68
61
  scopeColumns: 'Plus/Minus is applied in cells in selected columns',
69
- scopeDataTypes: 'Plus/Minus is applied for cells with selected data type',
62
+ scopeDataTypes: '',
70
63
  }),
71
- render: () => (_jsx(Box, { className: "twa:p-2", children: _jsx(PlusMinusScopeWizardSection, { onChange: setPlusMinus }) })),
64
+ render: () => _jsx(PlusMinusScopeWizardSection, { onChange: setPlusMinus }),
72
65
  },
73
66
  {
74
67
  details: 'Select Plus/Minus Tags',
@@ -79,6 +72,7 @@ export const PlusMinusWizard = (props) => {
79
72
  },
80
73
  '-',
81
74
  {
75
+ details: 'Review the Plus/Minus Nudge',
82
76
  render: () => {
83
77
  return (_jsx(Box, { className: "twa:p-2", children: _jsx(OnePageWizardSummary, {}) }));
84
78
  },
@@ -3,10 +3,10 @@ import * as React from 'react';
3
3
  import { CheckBox } from '../../../components/CheckBox';
4
4
  import FormLayout, { FormRow } from '../../../components/FormLayout';
5
5
  import Radio from '../../../components/Radio';
6
- import { Tabs } from '../../../components/Tabs';
7
6
  import AdaptableInput from '../../Components/AdaptableInput';
8
7
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
9
8
  import { Box } from '../../../components/Flex';
9
+ import { Card } from '../../../components/Card';
10
10
  import { SingleSelect } from '../../../components/NewSelect';
11
11
  import ObjectFactory from '../../../Utilities/ObjectFactory';
12
12
  import { buildCronExpression, buildRunAtIso, inferPresetFromCron, isScheduleValid as validateSchedule, parseOneOffDateFromRunAt, parseTimeFromSchedule, } from '../../../Utilities/Helpers/ScheduleHelper';
@@ -155,5 +155,5 @@ export const ScheduleBuilderWizard = (props) => {
155
155
  commit({ customCron: value, preset: 'custom' });
156
156
  };
157
157
  const timeValue = `${`${hour}`.padStart(2, '0')}:${`${minute}`.padStart(2, '0')}`;
158
- return (_jsx(Box, { "data-name": "schedule-setup", children: _jsxs(Tabs, { autoFocus: false, children: [_jsx(Tabs.Tab, { children: "Schedule" }), _jsx(Tabs.Content, { children: _jsxs(FormLayout, { children: [_jsxs(FormRow, { label: "Frequency", children: [_jsx(Radio, { "data-name": "frequency-recurring", className: "twa:mr-2", value: "recurring", checked: !isOneOff, onChange: (checked) => checked && handleFrequencyChange(false), children: "Recurring" }), _jsx(Radio, { "data-name": "frequency-one-off", checked: isOneOff, value: "oneoff", onChange: (checked) => checked && handleFrequencyChange(true), children: "One-off" })] }), isOneOff ? (_jsx(FormRow, { label: "Date", children: _jsx(AdaptableInput, { "data-name": "one-off-date", className: "twa:w-[300px]", type: "date", placeholder: "Date", onChange: handleOneOffDateChange, value: oneOffDate }) })) : (_jsxs(_Fragment, { children: [_jsx(FormRow, { label: "Pattern", children: _jsx(Box, { className: "twa:max-w-[300px]", children: _jsx(SingleSelect, { className: "twa:w-full", "data-name": "recurrence-preset", items: PRESET_OPTIONS, value: preset, placeholder: "Select pattern", onValueChange: handlePresetChange }) }) }), preset === 'selectedDays' && (_jsx(FormRow, { label: "Days", children: daysMap.map((day) => (_jsx(CheckBox, { "data-name": `day-${day.value}`, className: "twa:ml-2 twa:w-1/3", value: day.value, checked: selectedDays.includes(day.value), onChange: (checked) => handleDayChange(checked, day.value), children: day.label }, day.value))) })), preset === 'monthly' && (_jsx(FormRow, { label: "Day of month", children: _jsx(AdaptableInput, { "data-name": "day-of-month", className: "twa:w-[120px]", type: "number", min: 1, max: 31, value: dayOfMonth, onChange: handleDayOfMonthChange }) })), preset === 'custom' && (_jsx(FormRow, { label: "Cron expression", children: _jsx(AdaptableInput, { "data-name": "custom-cron", className: "twa:w-[300px]", placeholder: "minute hour day month weekday", value: customCron, onChange: handleCustomCronChange }) }))] })), _jsx(FormRow, { label: "Time", children: _jsx(AdaptableInput, { "data-name": "time", className: "twa:w-[300px]", value: timeValue, type: "time", onChange: handleTimeChange }) })] }) })] }) }));
158
+ return (_jsx(Box, { "data-name": "schedule-setup", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Schedule" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Configure when this should run" })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { children: [_jsxs(FormRow, { label: "Frequency", children: [_jsx(Radio, { "data-name": "frequency-recurring", className: "twa:mr-2", value: "recurring", checked: !isOneOff, onChange: (checked) => checked && handleFrequencyChange(false), children: "Recurring" }), _jsx(Radio, { "data-name": "frequency-one-off", checked: isOneOff, value: "oneoff", onChange: (checked) => checked && handleFrequencyChange(true), children: "One-off" })] }), isOneOff ? (_jsx(FormRow, { label: "Date", children: _jsx(AdaptableInput, { "data-name": "one-off-date", className: "twa:w-[300px]", type: "date", placeholder: "Date", onChange: handleOneOffDateChange, value: oneOffDate }) })) : (_jsxs(_Fragment, { children: [_jsx(FormRow, { label: "Pattern", children: _jsx(Box, { className: "twa:max-w-[300px]", children: _jsx(SingleSelect, { className: "twa:w-full", "data-name": "recurrence-preset", items: PRESET_OPTIONS, value: preset, placeholder: "Select pattern", onValueChange: handlePresetChange }) }) }), preset === 'selectedDays' && (_jsx(FormRow, { label: "Days", children: daysMap.map((day) => (_jsx(CheckBox, { "data-name": `day-${day.value}`, className: "twa:ml-2 twa:w-1/3", value: day.value, checked: selectedDays.includes(day.value), onChange: (checked) => handleDayChange(checked, day.value), children: day.label }, day.value))) })), preset === 'monthly' && (_jsx(FormRow, { label: "Day of month", children: _jsx(AdaptableInput, { "data-name": "day-of-month", className: "twa:w-[120px]", type: "number", min: 1, max: 31, value: dayOfMonth, onChange: handleDayOfMonthChange }) })), preset === 'custom' && (_jsx(FormRow, { label: "Cron expression", children: _jsx(AdaptableInput, { "data-name": "custom-cron", className: "twa:w-[300px]", placeholder: "minute hour day month weekday", value: customCron, onChange: handleCustomCronChange }) }))] })), _jsx(FormRow, { label: "Time", children: _jsx(AdaptableInput, { "data-name": "time", className: "twa:w-[300px]", value: timeValue, type: "time", onChange: handleTimeChange }) })] }) })] }) }));
159
159
  };
@@ -1,25 +1,18 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
4
4
  import { NewScopeComponent } from '../../Components/NewScopeComponent';
5
+ import { Box, Flex } from '../../../components/Flex';
5
6
  export const ShortcutScopeWizardSection = (props) => {
6
7
  const { data, api } = useOnePageAdaptableWizardContext();
7
8
  const availableColumns = React.useMemo(() => api.columnApi.getNumericColumns(), []);
8
- return (_jsx(NewScopeComponent, { availableDataTypes: ['number'], scopeColumns: availableColumns, scope: data.Scope, descriptions: {
9
- rowScope: 'All Numeric Columns will have the Shortcut applied',
10
- columnScope: 'Selected Columns will have the Shortcut applied',
11
- }, updateScope: (Scope) => {
12
- let preparedScope = Scope;
13
- if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
14
- // default to checked
15
- preparedScope = {
16
- ...Scope,
17
- DataTypes: ['number'],
18
- };
19
- }
20
- props.onChange({
21
- ...data,
22
- Scope: preparedScope,
23
- });
24
- } }));
9
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:mb-2 twa:border-b-foreground/20", children: [_jsx(Box, { className: "twa:text-5 twa:font-medium", children: "Target" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Specify where the Shortcut should be applied (numeric columns only)" })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: _jsx(NewScopeComponent, { disableDataTypes: true, scopeColumns: availableColumns, scope: data.Scope, descriptions: {
10
+ rowScope: 'All Numeric Columns will have the Shortcut applied',
11
+ columnScope: 'Selected Columns will have the Shortcut applied',
12
+ }, updateScope: (Scope) => {
13
+ props.onChange({
14
+ ...data,
15
+ Scope: Scope,
16
+ });
17
+ } }) })] }));
25
18
  };
@@ -1,15 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import Input from '../../../components/Input';
4
- import { shortcutOperationList } from '../shortcutOperations';
5
- import FormLayout, { FormRow } from '../../../components/FormLayout';
4
+ import { calculateShortcutResult, getShortcutOperationSymbol, shortcutOperationList, SHORTCUT_PREVIEW_EXAMPLE_VALUE, } from '../shortcutOperations';
6
5
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
7
- import { Tabs } from '../../../components/Tabs';
8
6
  import { SummaryText } from '../../../View/Wizard/OnePageAdaptableWizard';
9
7
  import { Tag } from '../../../components/Tag';
10
- import HelpBlock from '../../../components/HelpBlock';
11
8
  import { Box, Flex } from '../../../components/Flex';
12
9
  import { SingleSelect } from '../../../components/NewSelect';
10
+ import { Card } from '../../../components/Card';
13
11
  export const isSettingsValid = (data, api) => {
14
12
  if (!data.Name?.trim()) {
15
13
  return 'Name is required';
@@ -58,11 +56,24 @@ export const ShortcutSettingsWizard = (props) => {
58
56
  const optionActions = shortcutOperationList.map((operation) => ({
59
57
  value: operation,
60
58
  label: operation,
61
- // onClick: () => handleOperationChange(operation),
62
59
  }));
63
60
  const optionKeys = props.availableKeys.map((key) => ({
64
61
  value: key,
65
62
  label: key,
66
63
  }));
67
- return (_jsx(Box, { "data-name": "shortcut-column-settings", children: _jsxs(Tabs, { autoFocus: false, children: [_jsx(Tabs.Tab, { children: "Shortcut Settings" }), _jsx(Tabs.Content, { children: _jsxs(FormLayout, { children: [_jsx(FormRow, { label: "Name", children: _jsx(Input, { "data-name": "shortcut-name", className: "twa:flex-1 twa:w-60 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: shortcut.Name ?? '' }) }), _jsx(FormRow, { label: "", children: _jsx(Box, { className: "twa:h-2" }) }), _jsx(FormRow, { label: "", children: _jsx(HelpBlock, { className: "twa:text-2 twa:mb-0", children: "Keyboard key that, when pressed, triggers the Shortcut" }) }), _jsx(FormRow, { label: "Key", children: _jsx(Flex, { flexDirection: "row", children: _jsx(SingleSelect, { "data-name": "shortcut-key", ariaLabel: "Select Key", placeholder: "Select Key", items: optionKeys, className: "twa:w-30", onValueChange: (key) => handleKeyChange(key), value: shortcut.ShortcutKey || 'Select Key' }) }) }), _jsx(FormRow, { label: "", children: _jsx(HelpBlock, { className: "twa:text-2 twa:mb-0", children: "Mathematical operation performed on Cell's current value (using the Shortcut's 'value') - used to calculate the Cell's new total" }) }), _jsx(FormRow, { label: "Operation", children: _jsx(Flex, { flexDirection: "row", children: _jsx(SingleSelect, { "data-name": "shortcut-operation", placeholder: "Select Operation", ariaLabel: "Select Operation", className: "twa:w-30", items: optionActions, onValueChange: (operation) => handleOperationChange(operation), value: shortcut.ShortcutOperation }) }) }), _jsx(FormRow, { label: "", children: _jsx(HelpBlock, { className: "twa:text-2 twa:mb-0", children: "Number that is used - together with the 'Operation' and the current cell value - to calculate the new total for the cell" }) }), _jsx(FormRow, { label: "Value", children: _jsx(Flex, { flexDirection: "row", children: _jsx(Input, { "data-name": "shortcut-value", className: "twa:flex-1 twa:w-30 twa:max-w-30 twa:mr-3", onChange: handleOperationValueChange, placeholder: "Enter Number", type: "number", value: shortcut.ShortcutValue ?? '' }) }) })] }) })] }) }));
64
+ const preview = React.useMemo(() => {
65
+ const { ShortcutOperation, ShortcutValue } = shortcut;
66
+ if (!ShortcutOperation || typeof ShortcutValue !== 'number') {
67
+ return null;
68
+ }
69
+ const result = calculateShortcutResult(SHORTCUT_PREVIEW_EXAMPLE_VALUE, ShortcutValue, ShortcutOperation);
70
+ if (result === null) {
71
+ return { error: 'Cannot divide by zero' };
72
+ }
73
+ return {
74
+ expression: `${SHORTCUT_PREVIEW_EXAMPLE_VALUE} ${getShortcutOperationSymbol(ShortcutOperation)} ${ShortcutValue}`,
75
+ result,
76
+ };
77
+ }, [shortcut.ShortcutOperation, shortcut.ShortcutValue]);
78
+ return (_jsx(Box, { "data-name": "shortcut-column-settings", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Name" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for the Shortcut" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "shortcut-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: shortcut.Name ?? '' }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Key" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Keyboard key that, when pressed, triggers the Shortcut" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { "data-name": "shortcut-key", ariaLabel: "Select Key", placeholder: "Select Key", items: optionKeys, className: "twa:max-w-[300px]", onValueChange: (key) => handleKeyChange(key), value: shortcut.ShortcutKey || undefined }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Operation" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Mathematical operation performed on the cell's current value" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { "data-name": "shortcut-operation", placeholder: "Select Operation", ariaLabel: "Select Operation", className: "twa:max-w-[300px]", items: optionActions, onValueChange: (operation) => handleOperationChange(operation), value: shortcut.ShortcutOperation }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Value" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Number used with the operation and current cell value to calculate the new total" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "shortcut-value", className: "twa:max-w-[300px] twa:w-full", onChange: handleOperationValueChange, placeholder: "Enter Number", type: "number", value: shortcut.ShortcutValue ?? '' }) })] }), preview ? (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Example" }), _jsxs(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: ["If a cell contains ", SHORTCUT_PREVIEW_EXAMPLE_VALUE, ", pressing this Shortcut would change it to:"] })] }), _jsx(Card.Body, { children: 'error' in preview ? (_jsx(Box, { className: "twa:text-2 twa:text-error", children: preview.error })) : (_jsxs(Box, { className: "twa:text-3 twa:font-medium", children: [preview.expression, " \u2192 ", preview.result] })) })] })) : null] }) }));
68
79
  };
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { OnePageAdaptableWizard, OnePageWizardSummary, } from '../../../View/Wizard/OnePageAdaptableWizard';
4
4
  import { cloneObject } from '../../../Utilities/Helpers/Helper';
@@ -50,7 +50,7 @@ export const ShortcutWizard = (props) => {
50
50
  {
51
51
  title: 'Settings',
52
52
  isValid: isSettingsValid,
53
- details: (_jsxs(_Fragment, { children: ["A Shortcut is a mathematical calculation (", _jsx("b", { children: "Operation" }), ") which is applied with the defined operand ", _jsx("b", { children: "Value" }), " on the edited cell content when the corresponding Shortcut ", _jsx("b", { children: "Key" }), " is pressed."] })),
53
+ details: (_jsx(_Fragment, { children: "Provide details of the Shortcut" })),
54
54
  renderSummary: () => _jsx(ShortcutSettingsSummary, {}),
55
55
  render: () => (_jsx(Box, { className: "twa:p-2", children: _jsx(ShortcutSettingsWizard, { availableKeys: props.availableKeys ?? availableKeys, onChange: setShortcut }) })),
56
56
  },
@@ -61,7 +61,7 @@ export const ShortcutWizard = (props) => {
61
61
  renderSummary: () => renderScopeSummary(shortcut.Scope, {
62
62
  scopeWholeRow: 'Shortcut is triggered for all numeric cells',
63
63
  scopeColumns: 'Shortcut is triggered for cells in selected columns',
64
- scopeDataTypes: 'Shortcut is triggered for all numeric cells',
64
+ scopeDataTypes: '',
65
65
  }),
66
66
  render: () => (_jsx(Box, { className: "twa:p-2", children: _jsx(ShortcutScopeWizardSection, { onChange: setShortcut }) })),
67
67
  },
@@ -1,2 +1,5 @@
1
1
  import { MathOperation } from '../../AdaptableState/Common/Enums';
2
2
  export declare const shortcutOperationList: Array<MathOperation>;
3
+ export declare const SHORTCUT_PREVIEW_EXAMPLE_VALUE = 100;
4
+ export declare function getShortcutOperationSymbol(operation: MathOperation): string;
5
+ export declare function calculateShortcutResult(cellValue: number, shortcutValue: number, operation: MathOperation): number | null;
@@ -1,7 +1,35 @@
1
1
  import { MathOperation } from '../../AdaptableState/Common/Enums';
2
+ import NumberExtensions from '../../Utilities/Extensions/NumberExtensions';
2
3
  export const shortcutOperationList = [
3
4
  MathOperation.Add,
4
5
  MathOperation.Subtract,
5
6
  MathOperation.Multiply,
6
7
  MathOperation.Divide,
7
8
  ];
9
+ export const SHORTCUT_PREVIEW_EXAMPLE_VALUE = 100;
10
+ const shortcutOperationSymbols = {
11
+ [MathOperation.Add]: '+',
12
+ [MathOperation.Subtract]: '−',
13
+ [MathOperation.Multiply]: '×',
14
+ [MathOperation.Divide]: '÷',
15
+ };
16
+ export function getShortcutOperationSymbol(operation) {
17
+ return shortcutOperationSymbols[operation];
18
+ }
19
+ export function calculateShortcutResult(cellValue, shortcutValue, operation) {
20
+ if (operation === MathOperation.Divide && shortcutValue === 0) {
21
+ return null;
22
+ }
23
+ switch (operation) {
24
+ case MathOperation.Add:
25
+ return NumberExtensions.avoidJavascriptPrecisionIssues(cellValue + shortcutValue);
26
+ case MathOperation.Subtract:
27
+ return NumberExtensions.avoidJavascriptPrecisionIssues(cellValue - shortcutValue);
28
+ case MathOperation.Multiply:
29
+ return NumberExtensions.avoidJavascriptPrecisionIssues(cellValue * shortcutValue);
30
+ case MathOperation.Divide:
31
+ return NumberExtensions.avoidJavascriptPrecisionIssues(cellValue / shortcutValue);
32
+ default:
33
+ return null;
34
+ }
35
+ }
@@ -1,12 +1,13 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import chunk from '../Utilities/utils/chunk';
3
3
  import { CheckBox } from '../components/CheckBox';
4
4
  import FormLayout, { FormRow } from '../components/FormLayout';
5
- import { Tabs } from '../components/Tabs';
6
5
  import { useAdaptable } from './AdaptableContext';
7
- import { Flex } from '../components/Flex';
6
+ import { Box, Flex } from '../components/Flex';
7
+ import { Card } from '../components/Card';
8
8
  export const SpecialColumnSettingsWizardStep = (props) => {
9
9
  const adaptable = useAdaptable();
10
+ const behaviourSpellingVariant = adaptable.api.internalApi.getCorrectEnglishVariant('behaviours');
10
11
  const possibleColumnTypes = adaptable.api.columnApi.getColumnTypes() ?? [];
11
12
  const { Filterable, Resizable, Groupable, Sortable, Pivotable, Aggregatable, SuppressMenu, SuppressMovable, } = props.settings ?? {};
12
13
  const handleColumnTypeChange = (columnType, checked) => {
@@ -30,9 +31,9 @@ export const SpecialColumnSettingsWizardStep = (props) => {
30
31
  ...values,
31
32
  });
32
33
  };
33
- return (_jsxs(_Fragment, { children: [_jsxs(Tabs, { className: "twa:mt-2", autoFocus: false, children: [_jsx(Tabs.Tab, { children: "Column Properties" }), _jsx(Tabs.Content, { children: _jsx(Flex, { flexDirection: "column", children: _jsxs(FormLayout, { className: "twa:w-full", columns: [
34
- { name: 'first', size: '30%' },
35
- { size: '30%', name: 'second' },
36
- { size: '30%', name: 'third' },
37
- ], children: [_jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "filterable", checked: Filterable, onChange: (Filterable) => onSettingsChange({ Filterable }), disabled: !adaptable.api.optionsApi.getFilterOptions().enableFilterOnSpecialColumns, children: "Filterable" }), _jsx(CheckBox, { "data-name": "resizable", checked: Resizable, onChange: (Resizable) => onSettingsChange({ Resizable }), children: "Resizable" }), _jsx(CheckBox, { "data-name": "groupable", checked: Groupable, onChange: (Groupable) => onSettingsChange({ Groupable }), children: "Groupable" })] }), _jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "sortable", checked: Sortable, onChange: (Sortable) => onSettingsChange({ Sortable }), children: "Sortable" }), _jsx(CheckBox, { "data-name": "pivotable", checked: Pivotable, onChange: (Pivotable) => onSettingsChange({ Pivotable }), children: "Pivotable" }), _jsx(CheckBox, { "data-name": "aggregatable", checked: Aggregatable, onChange: (Aggregatable) => onSettingsChange({ Aggregatable }), children: "Aggregatable" })] }), _jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "suppres-smenu", checked: SuppressMenu, onChange: (SuppressMenu) => onSettingsChange({ SuppressMenu }), children: "Suppress Menu" }), _jsx(CheckBox, { "data-name": "suppres-movable", checked: SuppressMovable, onChange: (SuppressMovable) => onSettingsChange({ SuppressMovable }), children: "Suppress Movable" }), _jsx(CheckBox, { disabled: true, checked: props.isEditable, children: "Editable" })] })] }) }) })] }), Boolean(possibleColumnTypes?.length) && (_jsxs(Tabs, { className: "twa:mt-2", autoFocus: false, children: [_jsx(Tabs.Tab, { children: "Column Types" }), _jsx(Tabs.Content, { children: _jsx(FormLayout, { columns: [{ name: 'first', size: '30%' }, { name: 'second' }], children: chunk(possibleColumnTypes ?? [], 2)?.map(([first, second]) => (_jsxs(FormRow, { children: [first && (_jsx(CheckBox, { "data-name": first, onChange: (checked) => handleColumnTypeChange(first, checked), checked: props.settings?.ColumnTypes?.includes?.(first), children: first })), second && (_jsx(CheckBox, { "data-name": second, onChange: (checked) => handleColumnTypeChange(second, checked), checked: props.settings?.ColumnTypes?.includes?.(second), children: second }))] }, first))) }) })] }))] }));
34
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Column Properties" }), _jsxs(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: ["Choose which grid ", behaviourSpellingVariant, " apply to this Column"] })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { className: "twa:w-full", columns: [
35
+ { name: 'first', size: '30%' },
36
+ { size: '30%', name: 'second' },
37
+ { size: '30%', name: 'third' },
38
+ ], children: [_jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "filterable", checked: Filterable, onChange: (Filterable) => onSettingsChange({ Filterable }), disabled: !adaptable.api.optionsApi.getFilterOptions().enableFilterOnSpecialColumns, children: "Filterable" }), _jsx(CheckBox, { "data-name": "resizable", checked: Resizable, onChange: (Resizable) => onSettingsChange({ Resizable }), children: "Resizable" }), _jsx(CheckBox, { "data-name": "groupable", checked: Groupable, onChange: (Groupable) => onSettingsChange({ Groupable }), children: "Groupable" })] }), _jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "sortable", checked: Sortable, onChange: (Sortable) => onSettingsChange({ Sortable }), children: "Sortable" }), _jsx(CheckBox, { "data-name": "pivotable", checked: Pivotable, onChange: (Pivotable) => onSettingsChange({ Pivotable }), children: "Pivotable" }), _jsx(CheckBox, { "data-name": "aggregatable", checked: Aggregatable, onChange: (Aggregatable) => onSettingsChange({ Aggregatable }), children: "Aggregatable" })] }), _jsxs(FormRow, { children: [_jsx(CheckBox, { "data-name": "suppres-smenu", checked: SuppressMenu, onChange: (SuppressMenu) => onSettingsChange({ SuppressMenu }), children: "Suppress Menu" }), _jsx(CheckBox, { "data-name": "suppres-movable", checked: SuppressMovable, onChange: (SuppressMovable) => onSettingsChange({ SuppressMovable }), children: "Suppress Movable" }), _jsx(CheckBox, { disabled: true, checked: props.isEditable, children: "Editable" })] })] }) })] }), Boolean(possibleColumnTypes?.length) && (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Column Types" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Assign custom column types to this column" })] }), _jsx(Card.Body, { children: _jsx(FormLayout, { columns: [{ name: 'first', size: '30%' }, { name: 'second' }], children: chunk(possibleColumnTypes ?? [], 2)?.map(([first, second]) => (_jsxs(FormRow, { children: [first && (_jsx(CheckBox, { "data-name": first, onChange: (checked) => handleColumnTypeChange(first, checked), checked: props.settings?.ColumnTypes?.includes?.(first), children: first })), second && (_jsx(CheckBox, { "data-name": second, onChange: (checked) => handleColumnTypeChange(second, checked), checked: props.settings?.ColumnTypes?.includes?.(second), children: second }))] }, first))) }) })] }))] }));
38
39
  };
@@ -22,5 +22,10 @@ export interface BadgePillStyleEditorProps {
22
22
  * - **No** `FontSize` — pills inherit cell font sizing.
23
23
  */
24
24
  export declare const BadgePillStyleEditor: React.FunctionComponent<BadgePillStyleEditorProps>;
25
+ /** Descriptive pill properties for summary panels (`Label: value` strings). */
26
+ export declare const getBadgePillStyleSummaryItems: (pill: BadgePillStyle | undefined) => {
27
+ label: string;
28
+ value: string;
29
+ }[];
25
30
  /** Compact summary tags for a {@link BadgePillStyle}; used by wizard summaries. */
26
31
  export declare const renderBadgePillStyleSummaryTags: (pill: BadgePillStyle | undefined) => React.JSX.Element | null;
@@ -37,28 +37,37 @@ export const BadgePillStyleEditor = (props) => {
37
37
  const disabledClass = disabled ? 'twa:opacity-50 twa:pointer-events-none' : '';
38
38
  return (_jsx(Box, { className: "twa:mt-2 twa:rounded-standard twa:border twa:border-border twa:overflow-hidden twa:shadow-sm", children: _jsx(Box, { className: "twa:p-3", children: _jsxs(FormLayout, { columns: [LABEL_COLUMN, CHILD_COLUMN], sizes: ['7.5rem', '1fr'], gridColumnGap: "0.75rem", children: [_jsx(FormRow, { label: "Background", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(CheckBox, { disabled: disabled, checked: !!pill.BackColor, onChange: (checked) => update({ BackColor: checked ? pill.BackColor ?? '#cccccc' : undefined }), children: "Set" }), _jsx(ColorPicker, { disabled: disabled || !pill.BackColor, api: props.api, value: pill.BackColor || '#cccccc', onChange: (c) => update({ BackColor: c }) })] }) }), _jsx(FormRow, { label: "Text", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(CheckBox, { disabled: disabled, checked: !!pill.ForeColor, onChange: (checked) => update({ ForeColor: checked ? pill.ForeColor ?? '#000000' : undefined }), children: "Set" }), _jsx(ColorPicker, { disabled: disabled || !pill.ForeColor, api: props.api, value: pill.ForeColor || '#000000', onChange: (c) => update({ ForeColor: c }) })] }) }), _jsx(FormRow, { label: "Border", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(CheckBox, { disabled: disabled, checked: !!pill.BorderColor, onChange: (checked) => update({ BorderColor: checked ? pill.BorderColor ?? '#000000' : undefined }), children: "Set" }), _jsx(ColorPicker, { disabled: disabled || !pill.BorderColor, api: props.api, value: pill.BorderColor || '#000000', onChange: (c) => update({ BorderColor: c }) })] }) }), _jsx(FormRow, { label: "Font", children: _jsx(Box, { className: disabledClass, children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2 twa:flex-wrap", children: [_jsxs(ToggleGroup, { children: [_jsx(Toggle, { pressed: pill.FontStyle === 'Italic', onPressedChange: (pressed) => update({ FontStyle: pressed ? 'Italic' : undefined }), icon: "italic" }), _jsx(Toggle, { pressed: pill.FontWeight === 'Bold', onPressedChange: (pressed) => update({ FontWeight: pressed ? 'Bold' : undefined }), icon: "bold" })] }), _jsxs(ToggleGroup, { children: [_jsx(Toggle, { pressed: pill.TextDecoration === 'Underline', onPressedChange: (pressed) => update({ TextDecoration: pressed ? 'Underline' : undefined }), icon: "underline" }), _jsx(Toggle, { pressed: pill.TextDecoration === 'LineThrough', onPressedChange: (pressed) => update({ TextDecoration: pressed ? 'LineThrough' : undefined }), icon: "strikethrough" }), _jsx(Toggle, { pressed: pill.TextDecoration === 'Overline', onPressedChange: (pressed) => update({ TextDecoration: pressed ? 'Overline' : undefined }), icon: "overline" })] })] }) }) })] }) }) }));
39
39
  };
40
- /** Compact summary tags for a {@link BadgePillStyle}; used by wizard summaries. */
41
- export const renderBadgePillStyleSummaryTags = (pill) => {
42
- if (!pill)
43
- return null;
44
- const tags = [];
40
+ /** Descriptive pill properties for summary panels (`Label: value` strings). */
41
+ export const getBadgePillStyleSummaryItems = (pill) => {
42
+ if (!pill) {
43
+ return [];
44
+ }
45
+ const items = [];
45
46
  if (pill.BackColor) {
46
- tags.push(_jsxs(Tag, { children: ["Bg ", pill.BackColor] }, "bg"));
47
+ items.push({ label: 'Pill Back Colour', value: pill.BackColor });
47
48
  }
48
49
  if (pill.ForeColor) {
49
- tags.push(_jsxs(Tag, { children: ["Text ", pill.ForeColor] }, "fg"));
50
+ items.push({ label: 'Pill Fore Colour', value: pill.ForeColor });
50
51
  }
51
52
  if (pill.BorderColor) {
52
- tags.push(_jsxs(Tag, { children: ["Border ", pill.BorderColor] }, "bc"));
53
+ items.push({ label: 'Pill Border Colour', value: pill.BorderColor });
54
+ }
55
+ if (pill.FontWeight === 'Bold') {
56
+ items.push({ label: 'Pill Font Weight', value: 'Bold' });
57
+ }
58
+ if (pill.FontStyle === 'Italic') {
59
+ items.push({ label: 'Pill Font Style', value: 'Italic' });
53
60
  }
54
- if (pill.FontWeight === 'Bold')
55
- tags.push(_jsx(Tag, { children: "Bold" }, "b"));
56
- if (pill.FontStyle === 'Italic')
57
- tags.push(_jsx(Tag, { children: "Italic" }, "i"));
58
61
  if (pill.TextDecoration && pill.TextDecoration !== 'None') {
59
- tags.push(_jsx(Tag, { children: pill.TextDecoration }, "td"));
62
+ items.push({ label: 'Pill Text Decoration', value: pill.TextDecoration });
60
63
  }
61
- if (tags.length === 0)
64
+ return items;
65
+ };
66
+ /** Compact summary tags for a {@link BadgePillStyle}; used by wizard summaries. */
67
+ export const renderBadgePillStyleSummaryTags = (pill) => {
68
+ const items = getBadgePillStyleSummaryItems(pill);
69
+ if (!items.length) {
62
70
  return null;
63
- return (_jsx(Flex, { alignItems: "center", className: "twa:gap-1 twa:flex-wrap", children: tags }));
71
+ }
72
+ return (_jsx(Flex, { alignItems: "center", className: "twa:gap-1 twa:flex-wrap", children: items.map(({ label, value }) => (_jsx(Tag, { children: `${label}: ${value}` }, label))) }));
64
73
  };
@@ -1,6 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { StyledColumn } from '../../../types';
3
- export declare const renderBadgeSummary: (styledColumn: StyledColumn) => React.JSX.Element;
3
+ import { AdaptableApi } from '../../../Api/AdaptableApi';
4
+ export declare const getStyledColumnBadgeDefinitionViewValueGroups: (styledColumn: StyledColumn, api: AdaptableApi) => string[][];
5
+ export declare const getStyledColumnBadgeDefinitionViewValues: (styledColumn: StyledColumn, api: AdaptableApi) => string[];
6
+ export declare const getStyledColumnBadgeStyleViewValues: (styledColumn: StyledColumn, api?: AdaptableApi) => string[];
7
+ export declare const renderBadgeDefinitionSummaryTags: (styledColumn: StyledColumn, api: AdaptableApi) => React.JSX.Element;
8
+ export declare const StyledColumnBadgeDefinitionsView: React.FunctionComponent<React.PropsWithChildren<{
9
+ data: StyledColumn;
10
+ }>>;
11
+ export declare const renderBadgeSummary: (styledColumn: StyledColumn, api?: AdaptableApi) => React.JSX.Element;
4
12
  export interface StyledColumnBadgeSectionProps {
5
13
  onChange: (data: StyledColumn) => void;
6
14
  }
@@ -9,4 +17,4 @@ export interface StyledColumnBadgeStyleSectionProps {
9
17
  onChange: (data: StyledColumn) => void;
10
18
  }
11
19
  export declare const StyledColumnBadgeStyleSection: React.FunctionComponent<StyledColumnBadgeStyleSectionProps>;
12
- export declare const renderBadgeStyleSummary: (styledColumn: StyledColumn) => React.JSX.Element;
20
+ export declare const renderBadgeStyleSummary: (styledColumn: StyledColumn, api?: AdaptableApi) => React.JSX.Element;