@adaptabletools/adaptable 23.0.0-canary.4 → 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 (248) hide show
  1. package/index.css +116 -61
  2. package/package.json +9 -4
  3. package/src/AdaptableOptions/EditOptions.d.ts +2 -2
  4. package/src/AdaptableState/Common/AggregationColumns.d.ts +14 -6
  5. package/src/AdaptableState/Common/AggregationColumns.js +27 -2
  6. package/src/AdaptableState/Common/ColumnScope.d.ts +4 -0
  7. package/src/AdaptableState/Common/Enums.d.ts +5 -5
  8. package/src/AdaptableState/Common/Enums.js +4 -4
  9. package/src/AdaptableState/PlusMinusState.d.ts +3 -3
  10. package/src/AdaptableState/ShortcutState.d.ts +2 -6
  11. package/src/AdaptableState/StyledColumnState.d.ts +3 -5
  12. package/src/AdaptableState/ThemeState.d.ts +33 -28
  13. package/src/Api/EventApi.d.ts +14 -1
  14. package/src/Api/Events/ThemeChanged.d.ts +6 -0
  15. package/src/Api/Events/ThemeSelected.d.ts +11 -0
  16. package/src/Api/Events/ThemeSelected.js +1 -0
  17. package/src/Api/Implementation/EventApiImpl.js +4 -0
  18. package/src/Api/Implementation/LayoutApiImpl.d.ts +0 -2
  19. package/src/Api/Implementation/LayoutApiImpl.js +0 -14
  20. package/src/Api/Implementation/LayoutHelpers.d.ts +2 -0
  21. package/src/Api/Implementation/LayoutHelpers.js +17 -7
  22. package/src/Api/Implementation/ThemeApiImpl.d.ts +3 -2
  23. package/src/Api/Implementation/ThemeApiImpl.js +19 -15
  24. package/src/Api/Internal/EventInternalApi.d.ts +2 -0
  25. package/src/Api/Internal/EventInternalApi.js +8 -1
  26. package/src/Api/Internal/StyledColumnInternalApi.d.ts +4 -4
  27. package/src/Api/Internal/StyledColumnInternalApi.js +4 -4
  28. package/src/Api/Internal/ThemeInternalApi.d.ts +0 -1
  29. package/src/Api/Internal/ThemeInternalApi.js +0 -10
  30. package/src/Api/LayoutApi.d.ts +1 -8
  31. package/src/Api/ThemeApi.d.ts +6 -2
  32. package/src/Redux/ActionsReducers/ThemeRedux.d.ts +3 -3
  33. package/src/Strategy/FormatColumnModule.js +14 -7
  34. package/src/Strategy/LayoutModule.js +13 -8
  35. package/src/Strategy/StyledColumnModule.js +64 -36
  36. package/src/Utilities/Constants/ReduxConstants.d.ts +2 -2
  37. package/src/Utilities/Constants/ReduxConstants.js +1 -14
  38. package/src/Utilities/Helpers/FormatHelper.js +20 -1
  39. package/src/Utilities/Helpers/SparklineOptionsHelper.d.ts +7 -0
  40. package/src/Utilities/Helpers/SparklineOptionsHelper.js +65 -0
  41. package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +23 -1
  42. package/src/Utilities/Helpers/StyledColumnGradientHelper.js +204 -0
  43. package/src/Utilities/Helpers/ThemeHelpers.d.ts +5 -0
  44. package/src/Utilities/Helpers/ThemeHelpers.js +38 -0
  45. package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +19 -0
  46. package/src/Utilities/Helpers/percentBarPreviewHelper.js +143 -0
  47. package/src/Utilities/ObjectFactory.d.ts +1 -3
  48. package/src/Utilities/ObjectFactory.js +0 -8
  49. package/src/Utilities/Services/ThemeService.js +1 -1
  50. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +17 -16
  51. package/src/View/Alert/Wizard/AlertButtonsEditor.js +114 -103
  52. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +13 -14
  53. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +55 -55
  54. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +3 -2
  55. package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +2 -2
  56. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +31 -39
  57. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +3 -4
  58. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +9 -13
  59. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +30 -17
  60. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +7 -9
  61. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +3 -3
  62. package/src/View/CellSummary/CellSummaryViewPanel.js +1 -1
  63. package/src/View/Charting/ChartingWizard/AgChargingWizard/AgChargingWizard.js +3 -10
  64. package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
  65. package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +32 -41
  66. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/ExternalChartingWizard.js +4 -31
  67. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.d.ts +5 -0
  68. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.js +21 -0
  69. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.d.ts +1 -0
  70. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +10 -7
  71. package/src/View/Comments/CommentsEditor.js +1 -1
  72. package/src/View/Components/ModuleProfile.js +1 -1
  73. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
  74. package/src/View/Components/Popups/WindowPopups/windowFactory.js +0 -1
  75. package/src/View/Components/RangesComponent.d.ts +7 -2
  76. package/src/View/Components/RangesComponent.js +94 -22
  77. package/src/View/Components/StyleComponent.d.ts +1 -0
  78. package/src/View/Components/StyleComponent.js +1 -1
  79. package/src/View/Components/ValueSelector/index.js +70 -57
  80. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +8 -13
  81. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +8 -8
  82. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -1
  83. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +11 -12
  84. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +6 -4
  85. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +3 -2
  86. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +5 -15
  87. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +24 -26
  88. package/src/View/Export/Wizard/ReportNameWizardSection.js +10 -13
  89. package/src/View/Export/Wizard/ReportRowsWizardSection.js +20 -22
  90. package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +2 -0
  91. package/src/View/Export/Wizard/ScheduledReportSettings.js +13 -13
  92. package/src/View/Export/Wizard/ScheduledReportWizard.js +4 -5
  93. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +8 -6
  94. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +21 -22
  95. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +20 -11
  96. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +21 -5
  97. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +4 -4
  98. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +7 -0
  99. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +117 -12
  100. package/src/View/FormatColumn/Wizard/FormatColumnPreview.d.ts +15 -0
  101. package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +66 -0
  102. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +4 -0
  103. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +30 -0
  104. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +13 -8
  105. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  106. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +3 -1
  107. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +62 -13
  108. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +5 -3
  109. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.d.ts +2 -0
  110. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +15 -0
  111. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.d.ts +10 -0
  112. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.js +53 -0
  113. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +2 -3
  114. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +33 -68
  115. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +15 -11
  116. package/src/View/Layout/TransposedPopup.js +2 -2
  117. package/src/View/Layout/Wizard/LayoutWizard.js +3 -3
  118. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +2 -3
  119. package/src/View/Layout/Wizard/sections/AggregationsSection.js +115 -26
  120. package/src/View/Layout/Wizard/sections/ColumnsSection.js +79 -79
  121. package/src/View/Layout/Wizard/sections/FilterSection.js +31 -32
  122. package/src/View/Layout/Wizard/sections/GridFilterSection.js +11 -11
  123. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +1 -2
  124. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +101 -52
  125. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +9 -8
  126. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +4 -4
  127. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +36 -33
  128. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +2 -2
  129. package/src/View/Layout/Wizard/sections/RowSummarySection.js +95 -73
  130. package/src/View/Layout/Wizard/sections/SettingsSection.js +4 -5
  131. package/src/View/Layout/Wizard/sections/SortSection.js +2 -2
  132. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  133. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +9 -14
  134. package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +1 -3
  135. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.d.ts +4 -0
  136. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +43 -13
  137. package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +11 -18
  138. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.d.ts +2 -6
  139. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +6 -22
  140. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +15 -21
  141. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +2 -2
  142. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +11 -18
  143. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +17 -6
  144. package/src/View/Shortcut/Wizard/ShortcutWizard.js +3 -3
  145. package/src/View/Shortcut/shortcutOperations.d.ts +3 -0
  146. package/src/View/Shortcut/shortcutOperations.js +28 -0
  147. package/src/View/SpecialColumnSettingsWizardStep.js +9 -8
  148. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +5 -0
  149. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +24 -15
  150. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +10 -2
  151. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +96 -16
  152. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +14 -0
  153. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +45 -24
  154. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.d.ts +2 -3
  155. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +108 -33
  156. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +21 -13
  157. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.d.ts +5 -0
  158. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +121 -23
  159. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.d.ts +1 -0
  160. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +34 -11
  161. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.d.ts +5 -0
  162. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +86 -12
  163. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.d.ts +5 -0
  164. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +121 -34
  165. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.d.ts +1 -0
  166. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +55 -75
  167. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +5 -0
  168. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.js +16 -0
  169. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +7 -13
  170. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarColumnComparisonPreview.js +5 -5
  171. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarRangesPreview.js +4 -3
  172. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.d.ts +5 -4
  173. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +12 -14
  174. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +5 -0
  175. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.js +16 -0
  176. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +3 -0
  177. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +31 -3
  178. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +9 -0
  179. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +58 -0
  180. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.d.ts +10 -0
  181. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.js +30 -0
  182. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.d.ts +10 -0
  183. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +91 -0
  184. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.d.ts +8 -0
  185. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +52 -0
  186. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.d.ts +8 -0
  187. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +53 -0
  188. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +18 -0
  189. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +58 -0
  190. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.d.ts +10 -0
  191. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +126 -0
  192. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +12 -5
  193. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.d.ts +1 -5
  194. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +52 -29
  195. package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
  196. package/src/View/Theme/ThemePopup.d.ts +2 -14
  197. package/src/View/Theme/ThemePopup.js +1 -36
  198. package/src/View/UIHelper.js +1 -1
  199. package/src/View/Wizard/OnePageAdaptableWizard.js +7 -21
  200. package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
  201. package/src/agGrid/AdaptableAgGrid.js +35 -25
  202. package/src/agGrid/AgGridAdapter.d.ts +1 -1
  203. package/src/agGrid/AgGridAdapter.js +27 -17
  204. package/src/agGrid/AgGridColumnAdapter.js +9 -15
  205. package/src/agGrid/AgGridMenuAdapter.d.ts +0 -1
  206. package/src/agGrid/AgGridMenuAdapter.js +20 -37
  207. package/src/agGrid/buildValueAggregationMenuItem.d.ts +19 -0
  208. package/src/agGrid/buildValueAggregationMenuItem.js +111 -0
  209. package/src/agGrid/cellRenderers/IconRenderer.d.ts +6 -0
  210. package/src/agGrid/cellRenderers/IconRenderer.js +43 -15
  211. package/src/agGrid/createAgGridIcon.d.ts +10 -0
  212. package/src/agGrid/createAgGridIcon.js +16 -0
  213. package/src/components/DragAndDropContext/UnusedPanel.js +1 -1
  214. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  215. package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
  216. package/src/components/Input/NumberInput.js +1 -1
  217. package/src/components/Panel/index.js +1 -1
  218. package/src/components/SimpleButton/index.js +4 -4
  219. package/src/components/Toggle/Toggle.js +1 -1
  220. package/src/components/Toggle/ToggleGroup.js +1 -1
  221. package/src/env.js +2 -2
  222. package/src/layout-manager/src/index.js +2 -9
  223. package/src/metamodel/adaptable.metamodel.d.ts +39 -29
  224. package/src/metamodel/adaptable.metamodel.js +1 -1
  225. package/src/types.d.ts +5 -4
  226. package/themes/dark.css +1 -68
  227. package/themes/light.css +1 -5
  228. package/tsconfig.esm.tsbuildinfo +1 -1
  229. package/src/Aggregation/ParameterizedAggregationRegistry.d.ts +0 -35
  230. package/src/Aggregation/ParameterizedAggregationRegistry.js +0 -63
  231. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.d.ts +0 -3
  232. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.js +0 -55
  233. package/src/Aggregation/parameterizedAggregationColumnMenu.d.ts +0 -8
  234. package/src/Aggregation/parameterizedAggregationColumnMenu.js +0 -137
  235. package/src/Aggregation/parameterizedAggregationHeader.d.ts +0 -13
  236. package/src/Aggregation/parameterizedAggregationHeader.js +0 -60
  237. package/src/Aggregation/parameterizedAggregationHelpers.d.ts +0 -23
  238. package/src/Aggregation/parameterizedAggregationHelpers.js +0 -111
  239. package/src/Aggregation/parameterizedAggregationWizardHelpers.d.ts +0 -9
  240. package/src/Aggregation/parameterizedAggregationWizardHelpers.js +0 -66
  241. package/src/Aggregation/validateParameterizedAggregations.d.ts +0 -4
  242. package/src/Aggregation/validateParameterizedAggregations.js +0 -20
  243. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.d.ts +0 -12
  244. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.js +0 -43
  245. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.d.ts +0 -5
  246. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.js +0 -28
  247. package/src/View/Theme/VariantSelector.d.ts +0 -8
  248. package/src/View/Theme/VariantSelector.js +0 -20
@@ -0,0 +1,19 @@
1
+ import { PercentBarStyle, StyledColumn } from '../../AdaptableState/StyledColumnState';
2
+ export declare const hasPercentBarRangesConfigured: (pb: PercentBarStyle | undefined) => boolean;
3
+ /** Illustrative scale for preview — shows negatives when origin is Auto or Zero. */
4
+ export declare const getPercentBarPreviewScale: (pb: PercentBarStyle) => {
5
+ min: number;
6
+ max: number;
7
+ };
8
+ export declare const getPercentBarPreviewSampleValues: (pb: PercentBarStyle) => number[];
9
+ export type PercentBarPreviewGeometry = {
10
+ barLeftPercent: number;
11
+ barWidthPercent: number;
12
+ percentageValue: number;
13
+ barColor?: string;
14
+ };
15
+ export declare const getPercentBarPreviewGeometry: (numericValue: number, pb: PercentBarStyle, min: number, max: number) => PercentBarPreviewGeometry;
16
+ export declare const formatPercentBarPreviewCellText: (numericValue: number, percentageValue: number, pb: PercentBarStyle) => string;
17
+ export declare const getPercentBarPreviewTrackColor: (pb: PercentBarStyle) => string | undefined;
18
+ export declare const getPercentBarPreviewResolvedBarColor: (color: string | undefined) => string | undefined;
19
+ export declare const hasPercentBarStylePreview: (styledColumn: StyledColumn) => boolean;
@@ -0,0 +1,143 @@
1
+ import { getVariableColor } from './StyleHelper';
2
+ import clamp from '../utils/clamp';
3
+ import { STYLED_COLUMN_PREVIEW_SAMPLE_COUNT, ZERO_CENTRED_PREVIEW_SCALE_MAX, ZERO_CENTRED_PREVIEW_SCALE_MIN, } from './StyledColumnGradientHelper';
4
+ const evenlySpacedValues = (min, max, count) => {
5
+ if (count <= 1) {
6
+ return [min];
7
+ }
8
+ const step = (max - min) / (count - 1);
9
+ return Array.from({ length: count }, (_, i) => min + step * i);
10
+ };
11
+ const toFraction = (value, min, max) => {
12
+ if (max === min) {
13
+ return 0;
14
+ }
15
+ return clamp((value - min) / (max - min), 0, 1);
16
+ };
17
+ const resolveOrigin = (percentBarStyle, cellValue, min, max) => {
18
+ const origin = percentBarStyle.Origin ?? 'Auto';
19
+ if (typeof origin === 'number') {
20
+ return origin;
21
+ }
22
+ if (origin === 'Zero') {
23
+ return 0;
24
+ }
25
+ if (origin === 'Min') {
26
+ return min;
27
+ }
28
+ if (min < 0 || max < 0 || cellValue < 0) {
29
+ return 0;
30
+ }
31
+ return min;
32
+ };
33
+ const columnComparisonUsesCentredAxis = (origin) => {
34
+ const o = origin ?? 'Auto';
35
+ if (typeof o === 'number') {
36
+ return false;
37
+ }
38
+ return o === 'Zero' || o === 'Auto';
39
+ };
40
+ const resolveRangeEndpoint = (endpoint, scaleMin, scaleMax) => {
41
+ if (endpoint === 'Col-Min') {
42
+ return scaleMin;
43
+ }
44
+ if (endpoint === 'Col-Max') {
45
+ return scaleMax;
46
+ }
47
+ if (typeof endpoint === 'number') {
48
+ return endpoint;
49
+ }
50
+ return scaleMin;
51
+ };
52
+ const getPreviewBarColor = (value, pb, scaleMin, scaleMax) => {
53
+ if (pb.ColumnComparison) {
54
+ return pb.ColumnComparison.Color;
55
+ }
56
+ for (const range of pb.CellRanges ?? []) {
57
+ const rMin = resolveRangeEndpoint(range.Min, scaleMin, scaleMax);
58
+ const rMax = resolveRangeEndpoint(range.Max, scaleMin, scaleMax);
59
+ if (value >= Math.min(rMin, rMax) && value <= Math.max(rMin, rMax)) {
60
+ return range.Color;
61
+ }
62
+ }
63
+ return pb.CellRanges?.[0]?.Color;
64
+ };
65
+ export const hasPercentBarRangesConfigured = (pb) => !!(pb?.CellRanges?.length || pb?.ColumnComparison);
66
+ /** Illustrative scale for preview — shows negatives when origin is Auto or Zero. */
67
+ export const getPercentBarPreviewScale = (pb) => {
68
+ const origin = pb.Origin ?? 'Auto';
69
+ if (origin === 'Zero' || origin === 'Auto') {
70
+ return { min: ZERO_CENTRED_PREVIEW_SCALE_MIN, max: ZERO_CENTRED_PREVIEW_SCALE_MAX };
71
+ }
72
+ return { min: 0, max: 100 };
73
+ };
74
+ export const getPercentBarPreviewSampleValues = (pb) => {
75
+ const { min, max } = getPercentBarPreviewScale(pb);
76
+ return evenlySpacedValues(min, max, STYLED_COLUMN_PREVIEW_SAMPLE_COUNT);
77
+ };
78
+ export const getPercentBarPreviewGeometry = (numericValue, pb, min, max) => {
79
+ let percentageValue = 0;
80
+ let barLeftPercent = 0;
81
+ let barWidthPercent = 0;
82
+ if (pb.ColumnComparison) {
83
+ const absMax = Math.abs(max);
84
+ percentageValue = absMax === 0 ? 0 : (numericValue / absMax) * 100;
85
+ const magnitude = Math.min(100, Math.abs(percentageValue));
86
+ const origin = pb.Origin ?? 'Auto';
87
+ const isCentred = columnComparisonUsesCentredAxis(origin);
88
+ if (isCentred) {
89
+ const halfWidth = magnitude / 2;
90
+ if (percentageValue >= 0) {
91
+ barLeftPercent = 50;
92
+ barWidthPercent = halfWidth;
93
+ }
94
+ else {
95
+ barLeftPercent = 50 - halfWidth;
96
+ barWidthPercent = halfWidth;
97
+ }
98
+ }
99
+ else {
100
+ barLeftPercent = 0;
101
+ barWidthPercent = magnitude;
102
+ }
103
+ }
104
+ else if (max === min) {
105
+ percentageValue = 0;
106
+ barLeftPercent = 0;
107
+ barWidthPercent = 0;
108
+ }
109
+ else {
110
+ percentageValue = ((clamp(numericValue, min, max) - min) / (max - min)) * 100;
111
+ const origin = resolveOrigin(pb, numericValue, min, max);
112
+ const valueFrac = toFraction(numericValue, min, max);
113
+ const originFrac = toFraction(origin, min, max);
114
+ const start = Math.min(valueFrac, originFrac);
115
+ const end = Math.max(valueFrac, originFrac);
116
+ barLeftPercent = start * 100;
117
+ barWidthPercent = (end - start) * 100;
118
+ }
119
+ return {
120
+ barLeftPercent,
121
+ barWidthPercent,
122
+ percentageValue,
123
+ barColor: getPreviewBarColor(numericValue, pb, min, max),
124
+ };
125
+ };
126
+ export const formatPercentBarPreviewCellText = (numericValue, percentageValue, pb) => {
127
+ const parts = [];
128
+ if (pb.CellText?.includes('CellValue')) {
129
+ parts.push(Number.isInteger(numericValue) ? String(numericValue) : numericValue.toFixed(1));
130
+ }
131
+ if (pb.CellText?.includes('PercentageValue')) {
132
+ parts.push(`${percentageValue.toFixed(0)}%`);
133
+ }
134
+ return parts.join(' ');
135
+ };
136
+ export const getPercentBarPreviewTrackColor = (pb) => {
137
+ if (pb.ColumnComparison) {
138
+ return pb.BackColor ?? undefined;
139
+ }
140
+ return pb.BackColor ?? undefined;
141
+ };
142
+ export const getPercentBarPreviewResolvedBarColor = (color) => color ? getVariableColor(color) : undefined;
143
+ export const hasPercentBarStylePreview = (styledColumn) => hasPercentBarRangesConfigured(styledColumn.PercentBarStyle);
@@ -16,7 +16,7 @@ import { PlusMinusNudge } from '../AdaptableState/PlusMinusState';
16
16
  import { Shortcut } from '../AdaptableState/ShortcutState';
17
17
  import { NotificationsOptions } from '../AdaptableOptions/NotificationsOptions';
18
18
  import { CellSummmaryInfo } from '../AdaptableState/Common/CellSummary';
19
- import { AdaptableTheme, ChartDefinition, ColumnFilter, CommentThread, CustomDisplayFormatterContext, FlashingCellDefinition, RowDataChangedInfo, SpecialColumnSettings, SystemFilterPredicateId } from '../types';
19
+ import { ChartDefinition, ColumnFilter, CommentThread, CustomDisplayFormatterContext, FlashingCellDefinition, RowDataChangedInfo, SpecialColumnSettings, SystemFilterPredicateId } from '../types';
20
20
  import { IRowNode } from 'ag-grid-enterprise';
21
21
  import { AdaptableApi, AdaptableComment, BadgeStyleDefinition, CellAddress, NamedQuery, PivotLayout, TableLayout } from '../../types';
22
22
  import { ToastOptions } from '../components/Toastify';
@@ -54,7 +54,6 @@ export declare function CreateEmptyStyledColumn(): StyledColumn;
54
54
  export declare function CreateDefaultStyledColumnBadge(): BadgeStyleDefinition;
55
55
  export declare function CreateEmptyChartDefinition(chartDefinition?: ChartDefinition): ChartDefinition;
56
56
  export declare function CreateCustomDisplayFormatterContext(value: any, node: IRowNode, abColumn: AdaptableColumn, api: AdaptableApi): CustomDisplayFormatterContext;
57
- export declare function CreateEmptyTheme(name?: string): AdaptableTheme;
58
57
  export declare function CreateEmptyCommentThread(cellAddress: CellAddress): CommentThread;
59
58
  export declare function CreateToastOptions(notificationsOptions: NotificationsOptions, { onClose, containerId }: {
60
59
  onClose?: VoidFunction;
@@ -91,7 +90,6 @@ export declare const ObjectFactory: {
91
90
  CreateEmptyStyledColumn: typeof CreateEmptyStyledColumn;
92
91
  CreateDefaultStyledColumnBadge: typeof CreateDefaultStyledColumnBadge;
93
92
  CreateEmptyChartDefinition: typeof CreateEmptyChartDefinition;
94
- CreateEmptyTheme: typeof CreateEmptyTheme;
95
93
  CreateEmptyCommentThread: typeof CreateEmptyCommentThread;
96
94
  CreateAdaptableComment: typeof CreateAdaptableComment;
97
95
  CreateDefaultSchedule: typeof CreateDefaultSchedule;
@@ -288,13 +288,6 @@ export function CreateCustomDisplayFormatterContext(value, node, abColumn, api)
288
288
  ...api.internalApi.buildBaseContext(),
289
289
  };
290
290
  }
291
- export function CreateEmptyTheme(name) {
292
- return {
293
- Uuid: createUuid(),
294
- Name: name || 'Custom Theme',
295
- Description: name || 'Custom Theme',
296
- };
297
- }
298
291
  export function CreateEmptyCommentThread(cellAddress) {
299
292
  return {
300
293
  ...cellAddress,
@@ -389,7 +382,6 @@ export const ObjectFactory = {
389
382
  CreateEmptyStyledColumn,
390
383
  CreateDefaultStyledColumnBadge,
391
384
  CreateEmptyChartDefinition,
392
- CreateEmptyTheme,
393
385
  CreateEmptyCommentThread,
394
386
  CreateAdaptableComment,
395
387
  CreateDefaultSchedule,
@@ -20,7 +20,7 @@ export class ThemeService {
20
20
  document.adoptedStyleSheets = [...document.adoptedStyleSheets].filter((sheet) => sheet !== this.styleSheetObject);
21
21
  }
22
22
  subscribe() {
23
- const themeChangedUnsubscribe = this.api.eventApi.on('ThemeChanged', this.onThemeChanged);
23
+ const themeChangedUnsubscribe = this.api.eventApi.on('ThemeSelected', this.onThemeChanged);
24
24
  const prefferedColorSchemeUnsubscribe = this.attachPrefferedColorSchemeListener();
25
25
  this.unsubscribe = () => {
26
26
  themeChangedUnsubscribe();
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { isRuleBasedAlertDefinition } from '../../../Utilities/Helpers/ScheduledAlertHelper';
3
- import { Tabs } from '../../../components/Tabs';
4
3
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
5
4
  import { CheckBox } from '../../../components/CheckBox';
6
5
  import { CodeBlock } from '../../../components/CodeBlock';
@@ -13,6 +12,7 @@ import { AlertType } from '../Utilities/getAlertType';
13
12
  import { Box, Flex } from '../../../components/Flex';
14
13
  import { Tag, TagBox } from '../../../components/Tag/Tag';
15
14
  import { SingleSelect } from '../../../components/NewSelect';
15
+ import { Card } from '../../../components/Card';
16
16
  const HighlightStyle = (props) => {
17
17
  const adaptable = useAdaptable();
18
18
  const options = [
@@ -84,6 +84,7 @@ export const renderAlertBehaviourSummary = (alert, api, allowWrap = false) => {
84
84
  };
85
85
  export const AlertBehaviourWizardSection = (props) => {
86
86
  const { data, api } = useOnePageAdaptableWizardContext();
87
+ const behaviourSpellingVariant = api.internalApi.getCorrectEnglishVariant('Behaviour');
87
88
  const presentationProperties = data.AlertProperties ?? {};
88
89
  const ruleProperties = isRuleBasedAlertDefinition(data)
89
90
  ? (data.AlertProperties ?? {})
@@ -107,19 +108,19 @@ export const AlertBehaviourWizardSection = (props) => {
107
108
  },
108
109
  });
109
110
  };
110
- return (_jsxs(Tabs, { children: [_jsx(Tabs.Tab, { children: api.internalApi.getCorrectEnglishVariant('Behaviour') }), _jsxs(Tabs.Content, { className: "twa:flex twa:flex-col twa:gap-1", children: [hasPreventCellEdit && (_jsxs(CheckBox, { "data-name": "prevent-cell-edit", style: { alignItems: 'flex-start' }, checked: ruleProperties.PreventEdit, disabled: true, children: ["Prevent Cell Edit", _jsx(Box, { className: "twa:text-2 twa:mt-1", children: "(automatically undo data change which triggered Alert)" })] })), hasHighlightCell && (_jsx(HighlightStyle, { dataName: "highlight-cell", highlight: ruleProperties.HighlightCell, label: "Highlight Cell", onChange: (HighlightCell) => {
111
- onChange({ HighlightCell });
112
- } })), hasHighlightRow && (_jsx(HighlightStyle, { dataName: "highlight-row", highlight: ruleProperties.HighlightRow, label: "Highlight Row", onChange: (HighlightRow) => {
113
- onChange({ HighlightRow });
114
- } })), hasJumpToCell && (_jsx(CheckBox, { "data-name": "jump-to-cell", checked: ruleProperties.JumpToCell, onChange: (JumpToCell) => {
115
- onChange({ JumpToCell });
116
- }, children: "Jump To Cell" })), hasJumpToRow && (_jsx(CheckBox, { "data-name": "jump-to-row", checked: ruleProperties.JumpToRow, onChange: (JumpToRow) => {
117
- onChange({ JumpToRow });
118
- }, children: "Jump To Row" })), showInSeparateDiv && (_jsxs(CheckBox, { "data-name": "show-in-div", checked: presentationProperties.ShowInDiv, onChange: (ShowInDiv) => {
119
- onChange({ ShowInDiv });
120
- }, children: ["Show in separate ", _jsx(CodeBlock, { children: `<div />` }), " element"] })), logToConsole && (_jsx(CheckBox, { "data-name": "log-to-console", checked: presentationProperties.LogToConsole, onChange: (LogToConsole) => {
121
- onChange({ LogToConsole });
122
- }, children: "Log To Console" })), showSystemStatusMessage && (_jsx(CheckBox, { "data-name": "system-status-message", checked: presentationProperties.DisplaySystemStatusMessage, onChange: (DisplaySystemStatusMessage) => {
123
- onChange({ DisplaySystemStatusMessage });
124
- }, children: "Show as System Status Message" }))] })] }));
111
+ return (_jsx(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: behaviourSpellingVariant }), _jsxs(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: ["Configure ", behaviourSpellingVariant.toLowerCase(), "s for the Alert when it fires"] })] }), _jsxs(Card.Body, { className: "twa:gap-1", children: [hasPreventCellEdit && (_jsxs(CheckBox, { "data-name": "prevent-cell-edit", style: { alignItems: 'flex-start' }, checked: ruleProperties.PreventEdit, disabled: true, children: ["Prevent Cell Edit", _jsx(Box, { className: "twa:text-2 twa:mt-1", children: "(automatically undo data change which triggered Alert)" })] })), hasHighlightCell && (_jsx(HighlightStyle, { dataName: "highlight-cell", highlight: ruleProperties.HighlightCell, label: "Highlight Cell", onChange: (HighlightCell) => {
112
+ onChange({ HighlightCell });
113
+ } })), hasHighlightRow && (_jsx(HighlightStyle, { dataName: "highlight-row", highlight: ruleProperties.HighlightRow, label: "Highlight Row", onChange: (HighlightRow) => {
114
+ onChange({ HighlightRow });
115
+ } })), hasJumpToCell && (_jsx(CheckBox, { "data-name": "jump-to-cell", checked: ruleProperties.JumpToCell, onChange: (JumpToCell) => {
116
+ onChange({ JumpToCell });
117
+ }, children: "Jump To Cell" })), hasJumpToRow && (_jsx(CheckBox, { "data-name": "jump-to-row", checked: ruleProperties.JumpToRow, onChange: (JumpToRow) => {
118
+ onChange({ JumpToRow });
119
+ }, children: "Jump To Row" })), showInSeparateDiv && (_jsxs(CheckBox, { "data-name": "show-in-div", checked: presentationProperties.ShowInDiv, onChange: (ShowInDiv) => {
120
+ onChange({ ShowInDiv });
121
+ }, children: ["Show in separate ", _jsx(CodeBlock, { children: `<div />` }), " element"] })), logToConsole && (_jsx(CheckBox, { "data-name": "log-to-console", checked: presentationProperties.LogToConsole, onChange: (LogToConsole) => {
122
+ onChange({ LogToConsole });
123
+ }, children: "Log To Console" })), showSystemStatusMessage && (_jsx(CheckBox, { "data-name": "system-status-message", checked: presentationProperties.DisplaySystemStatusMessage, onChange: (DisplaySystemStatusMessage) => {
124
+ onChange({ DisplaySystemStatusMessage });
125
+ }, children: "Show as System Status Message" }))] })] }) }));
125
126
  };
@@ -1,4 +1,4 @@
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 SimpleButton from '../../../components/SimpleButton';
3
3
  import Input from '../../../components/Input';
4
4
  import FormLayout, { FormRow } from '../../../components/FormLayout';
@@ -9,6 +9,7 @@ import { AdaptableIconSelector } from '../../Components/AdaptableIconSelector';
9
9
  import { Box, Flex } from '../../../components/Flex';
10
10
  import sentenceCase from '../../../Utilities/utils/sentenceCase';
11
11
  import { SingleSelect } from '../../../components/NewSelect';
12
+ import { Card } from '../../../components/Card';
12
13
  const TONE_OPTIONS = [
13
14
  {
14
15
  label: 'Tone: Use Alert Tone',
@@ -21,6 +22,14 @@ const TONE_OPTIONS = [
21
22
  };
22
23
  }),
23
24
  ];
25
+ const AlertButtonPreview = ({ button, messageType }) => {
26
+ const buttonStyle = button.ButtonStyle ?? {};
27
+ const variant = (buttonStyle.variant ?? 'raised');
28
+ const tone = (buttonStyle.tone ??
29
+ messageType.toLowerCase());
30
+ const icon = button.icon && 'name' in button.icon && button.icon.name ? button.icon : undefined;
31
+ return (_jsx(SimpleButton, { variant: variant, tone: tone, icon: icon, className: "twa:cursor-default twa:pointer-events-none", tabIndex: -1, children: button.Label || 'Untitled' }));
32
+ };
24
33
  function renderTone(option) {
25
34
  return (_jsxs(Flex, { flexDirection: "row", alignItems: "center", children: [_jsx(SimpleButton, { className: "twa:mr-2 twa:w-[10px] twa:h-[10px] twa:line-height-0 twa:rounded-[100%] twa:bg-current", tone: option.value, variant: "text" }), option.label] }));
26
35
  }
@@ -30,6 +39,7 @@ export const AlertButtonsEditor = (props) => {
30
39
  props.onChange(newButtons);
31
40
  };
32
41
  const alertDefinition = adaptableAlert.alertDefinition;
42
+ const messageType = alertDefinition?.MessageType ?? 'Info';
33
43
  // const rowAddedAlert =
34
44
  // api.alertApi.internalApi.isAlertDefinitionForAddedRowChangeEvent(alertDefinition);
35
45
  const isRowRemovedAlert = api.alertApi.internalApi.isAlertDefinitionForRemovedRowChangeEvent(alertDefinition);
@@ -71,7 +81,7 @@ export const AlertButtonsEditor = (props) => {
71
81
  buttonCommands.push(ch.name);
72
82
  });
73
83
  }
74
- return (_jsxs(_Fragment, { children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(Box, { className: "twa:text-2 twa:mt-3 twa:mb-2", children: "Add Buttons to the Alert Notification, and set Actions to perform when the Button is clicked" }), _jsx(SimpleButton, { icon: "plus", onClick: () => {
84
+ return (_jsxs(Box, { className: "twa:mt-3", children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", justifyContent: "space-between", className: "twa:mb-3", children: [_jsx(Box, { className: "twa:text-2 twa:max-w-[520px]", children: "Add buttons to the notification and set actions to perform when clicked" }), _jsx(SimpleButton, { icon: "plus", onClick: () => {
75
85
  onChange([
76
86
  ...(AlertButtons || []),
77
87
  {
@@ -81,109 +91,110 @@ export const AlertButtonsEditor = (props) => {
81
91
  },
82
92
  },
83
93
  ]);
84
- }, children: "Add" })] }), AlertButtons.map((button, index) => {
85
- let buttonStyle = button.ButtonStyle;
86
- let buttonLabel = button.Label;
87
- let btnCommands = [];
88
- if (button.Command && typeof button.Command === 'string') {
89
- btnCommands = [button.Command];
90
- }
91
- else if (button.Command && Array.isArray(button.Command)) {
92
- btnCommands = button.Command;
93
- }
94
- // filter out the adaptable standard commands
95
- const btnUserFunctions = btnCommands.filter((command) => !buttonCommands.includes(command));
96
- const setVariant = (variant) => {
97
- onChange(AlertButtons.map((btn, i) => {
98
- if (i === index) {
99
- const buttonStyle = { ...btn.ButtonStyle };
100
- buttonStyle.variant = variant;
101
- return {
102
- ...btn,
103
- ButtonStyle: buttonStyle,
104
- };
105
- }
106
- return btn;
107
- }));
108
- };
109
- const setTone = (tone) => {
110
- onChange(AlertButtons.map((btn, i) => {
111
- if (i === index) {
112
- const buttonStyle = { ...btn.ButtonStyle };
113
- if (tone == null) {
114
- delete buttonStyle.tone;
94
+ }, children: "Add" })] }), _jsx(Flex, { flexDirection: "column", className: "twa:gap-3", children: AlertButtons.map((button, index) => {
95
+ let buttonStyle = button.ButtonStyle;
96
+ let buttonLabel = button.Label;
97
+ let btnCommands = [];
98
+ if (button.Command && typeof button.Command === 'string') {
99
+ btnCommands = [button.Command];
100
+ }
101
+ else if (button.Command && Array.isArray(button.Command)) {
102
+ btnCommands = button.Command;
103
+ }
104
+ // filter out the adaptable standard commands
105
+ const btnUserFunctions = btnCommands.filter((command) => !buttonCommands.includes(command));
106
+ const setVariant = (variant) => {
107
+ onChange(AlertButtons.map((btn, i) => {
108
+ if (i === index) {
109
+ const buttonStyle = { ...btn.ButtonStyle };
110
+ buttonStyle.variant = variant;
111
+ return {
112
+ ...btn,
113
+ ButtonStyle: buttonStyle,
114
+ };
115
115
  }
116
- else {
117
- buttonStyle.tone = tone;
116
+ return btn;
117
+ }));
118
+ };
119
+ const setTone = (tone) => {
120
+ onChange(AlertButtons.map((btn, i) => {
121
+ if (i === index) {
122
+ const buttonStyle = { ...btn.ButtonStyle };
123
+ if (tone == null) {
124
+ delete buttonStyle.tone;
125
+ }
126
+ else {
127
+ buttonStyle.tone = tone;
128
+ }
129
+ return {
130
+ ...btn,
131
+ ButtonStyle: buttonStyle,
132
+ };
118
133
  }
119
- return {
120
- ...btn,
121
- ButtonStyle: buttonStyle,
122
- };
134
+ return btn;
135
+ }));
136
+ };
137
+ const handleCommandChange = (checked, commandName) => {
138
+ let commands = btnCommands;
139
+ if (!checked) {
140
+ // remove current Command
141
+ commands = commands.filter((a) => a !== commandName);
123
142
  }
124
- return btn;
125
- }));
126
- };
127
- const handleCommandChange = (checked, commandName) => {
128
- let commands = btnCommands;
129
- if (!checked) {
130
- // remove current Command
131
- commands = commands.filter((a) => a !== commandName);
132
- }
133
- else {
134
- commands = [...commands, commandName];
135
- }
136
- onChange(AlertButtons.map((btn, i) => {
137
- if (i === index) {
138
- return {
139
- ...btn,
140
- Command: commands.length ? commands : undefined,
141
- };
143
+ else {
144
+ commands = [...commands, commandName];
142
145
  }
143
- return btn;
144
- }));
145
- };
146
- let iconSelector = null;
147
- if (!button.icon || (button.icon && 'name' in button.icon)) {
148
- iconSelector = (_jsx(AdaptableIconSelector, { value: button.icon && 'name' in button.icon ? button?.icon?.name : '', onChange: (iconName) => {
149
- onChange(AlertButtons.map((btn) => {
150
- if (btn === button) {
151
- return {
152
- ...btn,
153
- icon: {
154
- name: iconName,
155
- },
156
- };
157
- }
158
- return btn;
159
- }));
160
- } }));
161
- }
162
- return (_jsx(Box, { className: `twa:ml-3 ${index ? 'twa:border-t twa:border-dashed twa:border-input-border' : ''}`, children: _jsxs(FormLayout, { className: "twa:mb-2 twa:pt-2", children: [_jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2 twa:whitespace-nowrap", children: "Button Text" }), children: _jsxs(Flex, { flexDirection: "row", children: [_jsx(Input, { value: buttonLabel, className: "twa:mr-2 twa:w-[80px]", onChange: (e) => {
163
- onChange(AlertButtons.map((btn, i) => {
164
- if (i === index) {
165
- return { ...btn, Label: e.target.value };
166
- }
167
- return btn;
168
- }));
169
- } }), _jsx(SingleSelect, { items: ['text', 'outlined', 'raised'].map((variant) => {
170
- return {
171
- label: StringExtensions.CapitaliseFirstLetter(variant),
172
- value: variant,
173
- };
174
- }), renderValue: (option) => `Variant: ${option.label}`, value: buttonStyle?.variant, onValueChange: (value) => {
175
- setVariant(value);
176
- } }), _jsx(SingleSelect, { className: "twa:ml-2", items: TONE_OPTIONS, onValueChange: (value) => {
177
- if (value === 'text') {
178
- setTone(null);
179
- return;
180
- }
181
- setTone(value);
182
- }, value: buttonStyle?.tone ?? 'text' }), _jsx(SimpleButton, { icon: "close", tone: "error", disabled: AlertButtons.length <= 1, className: "twa:ml-1", variant: "text", tooltip: AlertButtons.length <= 1 ? 'Cannot remove last button' : 'Remove button', onClick: () => {
183
- onChange(AlertButtons.filter((btn) => btn !== button));
184
- } })] }) }), _jsxs(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Actions" }), children: [buttonCommands.map((commandName) => {
185
- return (_jsx(CheckBox, { className: "twa:mr-3", onChange: (checked) => handleCommandChange(checked, commandName), checked: button.Command === commandName ||
186
- (Array.isArray(button.Command) && button.Command.includes(commandName)), children: _jsx(Box, { className: "twa:text-2", children: sentenceCase(commandName) }) }, commandName));
187
- }), btnUserFunctions.length ? (_jsx(CheckBox, { checked: true, disabled: true, children: _jsxs(Box, { className: "twa:text-2", children: ["User function", btnUserFunctions.length > 1 ? 's' : '', ":", ' ', btnUserFunctions.join(', ')] }) })) : null] }), iconSelector && (_jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Icon" }), children: _jsx(Box, { children: iconSelector }) }))] }) }, index));
188
- })] }));
146
+ onChange(AlertButtons.map((btn, i) => {
147
+ if (i === index) {
148
+ return {
149
+ ...btn,
150
+ Command: commands.length ? commands : undefined,
151
+ };
152
+ }
153
+ return btn;
154
+ }));
155
+ };
156
+ let iconSelector = null;
157
+ if (!button.icon || (button.icon && 'name' in button.icon)) {
158
+ iconSelector = (_jsx(AdaptableIconSelector, { value: button.icon && 'name' in button.icon ? button?.icon?.name : '', onChange: (iconName) => {
159
+ onChange(AlertButtons.map((btn) => {
160
+ if (btn === button) {
161
+ return {
162
+ ...btn,
163
+ icon: {
164
+ name: iconName,
165
+ },
166
+ };
167
+ }
168
+ return btn;
169
+ }));
170
+ } }));
171
+ }
172
+ return (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { className: "twa:justify-between twa:gap-3", children: [_jsxs(Box, { className: "twa:font-medium twa:shrink-0", children: ["Button ", index + 1] }), _jsx(Flex, { justifyContent: "center", className: "twa:flex-1 twa:min-w-0", children: _jsx(AlertButtonPreview, { button: button, messageType: messageType }) }), _jsx(SimpleButton, { icon: "close", tone: "error", disabled: AlertButtons.length <= 1, variant: "text", tooltip: AlertButtons.length <= 1 ? 'Cannot remove last button' : 'Remove button', onClick: () => {
173
+ onChange(AlertButtons.filter((btn) => btn !== button));
174
+ } })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { children: [_jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Button Text" }), children: _jsx(Input, { value: buttonLabel, className: "twa:max-w-[200px]", onChange: (e) => {
175
+ onChange(AlertButtons.map((btn, i) => {
176
+ if (i === index) {
177
+ return { ...btn, Label: e.target.value };
178
+ }
179
+ return btn;
180
+ }));
181
+ } }) }), _jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Style" }), children: _jsxs(Flex, { flexDirection: "row", className: "twa:gap-2 twa:flex-wrap", children: [_jsx(SingleSelect, { items: ['text', 'outlined', 'raised'].map((variant) => {
182
+ return {
183
+ label: StringExtensions.CapitaliseFirstLetter(variant),
184
+ value: variant,
185
+ };
186
+ }), renderValue: (option) => `Variant: ${option.label}`, value: buttonStyle?.variant, onValueChange: (value) => {
187
+ setVariant(value);
188
+ } }), _jsx(SingleSelect, { items: TONE_OPTIONS, onValueChange: (value) => {
189
+ if (value === 'text') {
190
+ setTone(null);
191
+ return;
192
+ }
193
+ setTone(value);
194
+ }, value: buttonStyle?.tone ?? 'text' })] }) }), _jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Actions" }), children: _jsxs(Flex, { flexDirection: "row", className: "twa:gap-3 twa:flex-wrap", children: [buttonCommands.map((commandName) => {
195
+ return (_jsx(CheckBox, { onChange: (checked) => handleCommandChange(checked, commandName), checked: button.Command === commandName ||
196
+ (Array.isArray(button.Command) &&
197
+ button.Command.includes(commandName)), children: _jsx(Box, { className: "twa:text-2", children: sentenceCase(commandName) }) }, commandName));
198
+ }), btnUserFunctions.length ? (_jsx(CheckBox, { checked: true, disabled: true, children: _jsxs(Box, { className: "twa:text-2", children: ["User function", btnUserFunctions.length > 1 ? 's' : '', ":", ' ', btnUserFunctions.join(', ')] }) })) : null] }) }), iconSelector && (_jsx(FormRow, { label: _jsx(Box, { className: "twa:text-2", children: "Icon" }), children: _jsx(Box, { children: iconSelector }) }))] }) })] }, index));
199
+ }) })] }));
189
200
  };
@@ -1,19 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Tabs } from '../../../components/Tabs';
3
2
  import Radio, { RadioGroup } from '../../../components/Radio';
4
3
  import { SummaryText, useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
5
4
  import { Tag } from '../../../components/Tag';
6
- import FormLayout, { FormRow } from '../../../components/FormLayout';
7
5
  import { AlertType } from '../Utilities/getAlertType';
8
6
  import { ButtonInfo } from '../../Components/Buttons/ButtonInfo';
9
7
  import { AlertMessageDocsLink } from '../../../Utilities/Constants/DocumentationLinkConstants';
10
8
  import Textarea from '../../../components/Textarea';
11
9
  import HelpBlock from '../../../components/HelpBlock';
12
- import { Box } from '../../../components/Flex';
10
+ import { Box, Flex } from '../../../components/Flex';
11
+ import { Card } from '../../../components/Card';
13
12
  export const renderAlertMessageSummary = (alertType) => {
14
13
  const { data } = useOnePageAdaptableWizardContext();
15
14
  if (alertType === AlertType.Scheduled) {
16
- return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Message Type: ", _jsx(Tag, { children: data.MessageType })] }), _jsxs(SummaryText, { children: ["Header: ", _jsx(Tag, { children: data.MessageHeader || 'Not specified' })] }), _jsxs(SummaryText, { children: ["Message: ", _jsx(Tag, { children: data.MessageText || 'Not specified' })] })] }));
15
+ return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Message Type: ", _jsx(Tag, { children: data.MessageType })] }), _jsxs(SummaryText, { children: ["Header: ", _jsx(Tag, { children: data.MessageHeader || 'Not specified' })] }), _jsxs(SummaryText, { children: ["Body: ", _jsx(Tag, { children: data.MessageText || 'Not specified' })] })] }));
17
16
  }
18
17
  return (_jsxs(SummaryText, { children: ["Message Type: ", _jsx(Tag, { children: data.MessageType })] }));
19
18
  };
@@ -40,14 +39,14 @@ export const AlertMessageWizardSection = (props) => {
40
39
  MessageHeader: value,
41
40
  });
42
41
  };
43
- return (_jsxs(_Fragment, { children: [_jsxs(Tabs, { "data-name": "message-type", children: [_jsx(Tabs.Tab, { children: "Message Type" }), _jsx(Tabs.Content, { children: _jsxs(RadioGroup, { value: messageType, name: "messageType", orientation: "horizontal", onRadioChange: (MessageType) => {
44
- props.onChange({
45
- ...data,
46
- MessageType,
47
- });
48
- }, children: [_jsx(Radio, { className: "twa:ml-1", value: "Info", children: "Info" }), _jsx(Radio, { className: "twa:ml-4", value: "Success", children: "Success" }), _jsx(Radio, { className: "twa:ml-4", value: "Warning", children: "Warning" }), _jsx(Radio, { className: "twa:ml-4", value: "Error", children: "Error" })] }) })] }), _jsxs(Tabs, { "data-name": "message-text", className: "twa:mt-2 twa:mb-3", autoFocus: false, children: [_jsx(Tabs.Tab, { children: "Message Text" }), _jsxs(Tabs.Content, { children: [_jsx(Box, { className: "twa:text-2 twa:mt-3 twa:mb-2", children: isScheduled
49
- ? 'Enter the header and message shown when this scheduled alert fires.'
50
- : 'Text to display as the Alert Message (leave blank to show automated Message based on Alert Type)' }), _jsxs(FormLayout, { children: [_jsx(FormRow, { label: "Header", children: _jsx(Textarea, { className: "twa:min-w-[300px] twa:mt-2", rows: 3, placeholder: isScheduled ? 'Enter header (required)' : '(Use Default Header Message)', type: 'text', autoFocus: false, value: messageHeader,
51
- // placeholder="defaults to column name"
52
- onChange: (e) => onMessageHeaderChange(e) }) }), _jsx(FormRow, { label: "Message", children: _jsx(Textarea, { className: "twa:min-w-[300px] twa:mt-2", rows: 3, type: 'text', autoFocus: false, placeholder: isScheduled ? 'Enter message (required)' : undefined, value: messageText, onChange: (e) => onMessageTextChange(e) }) })] }), showDocumentationLinks && !isScheduled && (_jsxs(HelpBlock, { "data-name": "alert-message-documentation", className: "twa:mt-3 twa:mb-2 twa:p-0 twa:text-3", children: [_jsx(ButtonInfo, { className: "twa:mr-2", onClick: () => window.open(AlertMessageDocsLink, '_blank') }), "See how to create dynamic Alert Messages using placeholders"] }))] })] })] }));
42
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [_jsx(Box, { "data-name": "message-type", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Message Type" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose how the Alert message is styled" })] }), _jsx(Card.Body, { children: _jsxs(RadioGroup, { value: messageType, name: "messageType", orientation: "horizontal", onRadioChange: (MessageType) => {
43
+ props.onChange({
44
+ ...data,
45
+ MessageType,
46
+ });
47
+ }, children: [_jsx(Radio, { className: "twa:ml-1", value: "Info", children: "Info" }), _jsx(Radio, { className: "twa:ml-4", value: "Success", children: "Success" }), _jsx(Radio, { className: "twa:ml-4", value: "Warning", children: "Warning" }), _jsx(Radio, { className: "twa:ml-4", value: "Error", children: "Error" })] }) })] }) }), _jsx(Box, { "data-name": "message-header", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Header" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: isScheduled
48
+ ? 'Enter the header shown when this scheduled alert fires'
49
+ : 'Optional header text (leave blank to use the default)' })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Textarea, { className: "twa:min-w-[300px] twa:w-full twa:max-w-[500px]", rows: 3, placeholder: isScheduled ? 'Enter header (required)' : '(Use Default Header Message)', type: 'text', autoFocus: false, value: messageHeader, onChange: (e) => onMessageHeaderChange(e) }) })] }) }), _jsx(Box, { "data-name": "message-body", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Body" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: isScheduled
50
+ ? 'Enter the message body shown when this scheduled alert fires'
51
+ : 'Alert message body (leave blank to show automated message based on Alert Type)' })] }), _jsxs(Card.Body, { className: "twa:p-1", children: [_jsx(Textarea, { className: "twa:min-w-[300px] twa:w-full twa:max-w-[500px]", rows: 3, type: 'text', autoFocus: false, placeholder: isScheduled ? 'Enter message (required)' : undefined, value: messageText, onChange: (e) => onMessageTextChange(e) }), showDocumentationLinks && !isScheduled && (_jsxs(HelpBlock, { "data-name": "alert-message-documentation", className: "twa:mt-3 twa:p-0 twa:text-3", children: [_jsx(ButtonInfo, { className: "twa:mr-2", onClick: () => window.open(AlertMessageDocsLink, '_blank') }), "See how to create dynamic Alert Messages using placeholders"] }))] })] }) })] }));
53
52
  };