@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
@@ -1,5 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import * as React from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
2
  import { CheckBox } from '../../../components/CheckBox';
4
3
  import ErrorBox from '../../../components/ErrorBox';
5
4
  import FormLayout, { FormRow } from '../../../components/FormLayout';
@@ -9,9 +8,9 @@ import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableW
9
8
  import { Box, Flex } from '../../../components/Flex';
10
9
  import { SingleSelect } from '../../../components/NewSelect';
11
10
  import Input from '../../../components/Input';
12
- import { renderCellStyleSummaryTags, StyledColumnCellStyleEditor, } from './StyledColumnSliceStyleEditors';
11
+ import { getCellBoxStyleSummaryItems, StyledColumnCellStyleEditor, } from './StyledColumnSliceStyleEditors';
13
12
  import { Card } from '../../../components/Card';
14
- import { convertAdaptableStyleToCSS, hasCellBoxStyle, } from '../../../Utilities/Helpers/StyleHelper';
13
+ import { DEFAULT_RATING_GAP, DEFAULT_RATING_ICON, DEFAULT_RATING_MAX, DEFAULT_RATING_SIZE, StyledColumnRatingPreviewCard, } from './StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview';
15
14
  const STYLE_FORM_SIZES = ['200px', '1fr'];
16
15
  const ICON_CHOICES = [
17
16
  { value: 'Star', label: 'Star' },
@@ -19,13 +18,48 @@ const ICON_CHOICES = [
19
18
  { value: 'Circle', label: 'Circle' },
20
19
  { value: 'Thumb', label: 'Thumb' },
21
20
  ];
22
- // Mirrors the renderer defaults so the wizard preview/summary stay in sync.
23
- const DEFAULT_MAX = 5;
24
- const DEFAULT_SIZE = 14;
25
- const DEFAULT_GAP = 2;
26
- const DEFAULT_ICON = 'Star';
27
- const DEFAULT_FILLED_COLOR = 'var(--ab-color-warn, #f5a623)';
28
- const DEFAULT_EMPTY_COLOR = 'color-mix(in srgb, currentColor 22%, transparent)';
21
+ const formatRatingToolTipSummary = (toolTipText) => toolTipText
22
+ ?.map((t) => (t === 'CellValue' ? 'Cell Value' : 'Percentage Value'))
23
+ .join(' + ') ?? '';
24
+ const buildStyledColumnRatingStyleSummaryStrings = (rating, options) => {
25
+ const items = [
26
+ `Max: ${rating.Max ?? DEFAULT_RATING_MAX}`,
27
+ `Icon: ${rating.Icon ?? DEFAULT_RATING_ICON}`,
28
+ ];
29
+ if (rating.FilledColor) {
30
+ items.push(`Filled Colour: ${rating.FilledColor}`);
31
+ }
32
+ if (rating.EmptyColor) {
33
+ items.push(`Empty Colour: ${rating.EmptyColor}`);
34
+ }
35
+ if (rating.Size != null) {
36
+ items.push(`Icon Size: ${rating.Size}px`);
37
+ }
38
+ if (rating.Gap != null) {
39
+ items.push(`Icon Gap: ${rating.Gap}px`);
40
+ }
41
+ items.push(`Allow Half: ${(rating.AllowHalf ?? true) ? 'Yes' : 'No'}`);
42
+ items.push(`Show Value: ${rating.ShowValue ? 'Yes' : 'No'}`);
43
+ if (rating.ToolTipText?.length) {
44
+ items.push(`Tooltip: ${formatRatingToolTipSummary(rating.ToolTipText)}`);
45
+ }
46
+ else if (options.includeEmptyTooltip) {
47
+ items.push('Tooltip: No Tooltip');
48
+ }
49
+ getCellBoxStyleSummaryItems(rating.Cell).forEach(({ label, value }) => {
50
+ items.push(`${label}: ${value}`);
51
+ });
52
+ return items;
53
+ };
54
+ export const getStyledColumnRatingStyleViewValues = (data) => {
55
+ const rating = data.RatingStyle;
56
+ if (!rating) {
57
+ return [];
58
+ }
59
+ return buildStyledColumnRatingStyleSummaryStrings(rating, {
60
+ includeEmptyTooltip: false,
61
+ });
62
+ };
29
63
  /**
30
64
  * Resolve a CSS custom property (e.g. `--ab-color-warn`) to its computed
31
65
  * value at runtime. Returns the fallback hex on SSR or when the variable
@@ -49,17 +83,10 @@ const resolveCssVar = (varName, fallbackHex) => {
49
83
  * the user hasn't chosen one. The renderer uses `var(--ab-color-warn,
50
84
  * #f5a623)`, but `ColorPicker` can't parse a `var(...)` with a fallback,
51
85
  * so we resolve the variable manually and pass a concrete hex.
52
- *
53
- * State remains untouched - the picker only writes to state when the user
54
- * actively picks a colour, so we never accidentally bake the resolved
55
- * theme value into the saved styled column.
56
86
  */
57
87
  const getDisplayedFilledColor = (rating) => rating.FilledColor || resolveCssVar('--ab-color-warn', '#f5a623');
58
88
  /**
59
- * Best-effort preview colour for the wizard's `Empty Colour` picker. The
60
- * renderer's actual default is `color-mix(in srgb, currentColor 22%,
61
- * transparent)`, which the picker can't parse either; we approximate it
62
- * by reading the document foreground colour and setting alpha to 0.22.
89
+ * Best-effort preview colour for the wizard's `Empty Colour` picker.
63
90
  */
64
91
  const getDisplayedEmptyColor = (rating) => {
65
92
  if (rating.EmptyColor)
@@ -78,62 +105,16 @@ const getDisplayedEmptyColor = (rating) => {
78
105
  }
79
106
  return 'rgba(127, 127, 127, 0.22)';
80
107
  };
81
- // ---------------------------------------------------------------------------
82
- // Inline preview (also reused by the wizard summary so the user sees a
83
- // pixel-accurate idea of the resulting cell at all times).
84
- // ---------------------------------------------------------------------------
85
- const ICON_PATHS = {
86
- Star: 'M12 2 L14.9 8.6 L22 9.3 L16.7 14.1 L18.2 21 L12 17.4 L5.8 21 L7.3 14.1 L2 9.3 L9.1 8.6 Z',
87
- Heart: 'M12 21 C 12 21 3 14.5 3 8.5 C 3 5.5 5.5 3 8.5 3 C 10.3 3 11.7 4 12 5.2 C 12.3 4 13.7 3 15.5 3 C 18.5 3 21 5.5 21 8.5 C 21 14.5 12 21 12 21 Z',
88
- Circle: 'M12 4 a8 8 0 1 0 0.0001 0 Z',
89
- Thumb: 'M2 11 h4 v10 h-4 z M7 11 l4 -8 c.5 -1 2 -1 2 0 l-1 5 h6 c1 0 2 1 1.7 2 l-2 8 c-.3 1 -1 1.6 -2 1.6 H7 z',
90
- };
91
- const clamp = (n, lo, hi) => Math.max(lo, Math.min(hi, n));
92
- function getRatingCellChromeCss(cell) {
93
- if (!cell || !hasCellBoxStyle(cell)) {
94
- return {};
95
- }
96
- return convertAdaptableStyleToCSS(cell);
97
- }
98
- const RatingPreview = ({ rating, value, }) => {
99
- const max = rating.Max ?? DEFAULT_MAX;
100
- const size = rating.Size ?? DEFAULT_SIZE;
101
- const gap = rating.Gap ?? DEFAULT_GAP;
102
- const icon = rating.Icon ?? DEFAULT_ICON;
103
- const filledColor = rating.FilledColor ?? DEFAULT_FILLED_COLOR;
104
- const emptyColor = rating.EmptyColor ?? DEFAULT_EMPTY_COLOR;
105
- const allowHalf = rating.AllowHalf ?? true;
106
- const previewValue = value ?? Math.max(1, Math.min(max, max * 0.7));
107
- const effective = allowHalf ? previewValue : Math.round(previewValue);
108
- const d = ICON_PATHS[icon];
109
- return (_jsxs("span", { style: {
110
- display: 'inline-flex',
111
- alignItems: 'center',
112
- gap: `${gap}px`,
113
- lineHeight: 1,
114
- }, "aria-hidden": "true", children: [Array.from({ length: max }).map((_, i) => {
115
- const fill = clamp(effective - i, 0, 1);
116
- const clipId = `ab-rating-preview-clip-${i}-${icon}-${size}`;
117
- return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", children: [_jsx("path", { d: d, fill: emptyColor }), fill > 0 && (_jsxs(_Fragment, { children: [_jsx("defs", { children: _jsx("clipPath", { id: clipId, children: _jsx("rect", { x: 0, y: 0, width: 24 * fill, height: 24 }) }) }), _jsx("path", { d: d, fill: filledColor, clipPath: `url(#${clipId})` })] }))] }, i));
118
- }), rating.ShowValue && (_jsx("span", { style: { marginLeft: 6, fontVariantNumeric: 'tabular-nums' }, children: previewValue }))] }));
119
- };
120
- // ---------------------------------------------------------------------------
121
- // Wizard summary
122
- // ---------------------------------------------------------------------------
123
108
  export const renderStyledColumnRatingSummary = (data) => {
124
109
  const rating = data.RatingStyle;
125
110
  if (!rating) {
126
111
  return _jsx(Tag, { children: "No Styling Defined" });
127
112
  }
128
- const max = rating.Max ?? DEFAULT_MAX;
129
- const icon = rating.Icon ?? DEFAULT_ICON;
130
- const cellTags = renderCellStyleSummaryTags(rating.Cell);
131
- const toolTipTokens = rating.ToolTipText ?? [];
132
- return (_jsxs(Flex, { alignItems: "center", className: "twa:gap-2 twa:flex-wrap", children: [_jsx(Box, { className: "twa:inline-flex twa:items-center twa:gap-2 twa:box-border", style: getRatingCellChromeCss(rating.Cell), children: _jsx(RatingPreview, { rating: rating }) }), _jsxs(Box, { children: ["Out of ", _jsx(Tag, { children: max })] }), _jsxs(Box, { children: ["Icon: ", _jsx(Tag, { children: icon })] }), toolTipTokens.length > 0 && (_jsxs(Box, { children: ["Tooltip: ", _jsx(Tag, { children: toolTipTokens.join(', ') })] })), cellTags && _jsxs(Box, { children: ["Cell: ", cellTags] })] }));
113
+ const items = buildStyledColumnRatingStyleSummaryStrings(rating, {
114
+ includeEmptyTooltip: true,
115
+ });
116
+ return (_jsx(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: items.map((item) => (_jsx(Tag, { children: item }, item))) }));
133
117
  };
134
- // ---------------------------------------------------------------------------
135
- // Wizard validation
136
- // ---------------------------------------------------------------------------
137
118
  export const isValidRatingStyle = (data) => {
138
119
  const rating = data.RatingStyle;
139
120
  if (!rating) {
@@ -167,8 +148,7 @@ export const StyledColumnWizardRatingSection = (props) => {
167
148
  : current.filter((t) => t !== token);
168
149
  update({ ToolTipText: next });
169
150
  };
170
- const previewCellChrome = React.useMemo(() => getRatingCellChromeCss(rating.Cell), [rating.Cell]);
171
- return (_jsxs(Box, { children: [_jsxs(Flex, { alignItems: "center", className: "twa:mb-3 twa:p-3 twa:rounded-standard twa:border twa:border-border twa:gap-3", children: [_jsx(Box, { className: "twa:text-3 twa:font-medium", children: "Preview:" }), _jsx(Box, { className: "twa:inline-flex twa:items-center twa:box-border", style: previewCellChrome, children: _jsx(RatingPreview, { rating: rating }) }), _jsxs(Box, { className: "twa:text-2 twa:opacity-70", children: ["(sample value ", (rating.Max ?? DEFAULT_MAX) * 0.7, ")"] })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsx(Card.Title, { children: "Icon" }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Max:", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 1, step: 1, value: rating.Max ?? '', placeholder: String(DEFAULT_MAX), style: { width: 80 }, onChange: (event) => {
151
+ return (_jsxs(Box, { children: [_jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsx(Card.Title, { children: "Icon" }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Max:", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 1, step: 1, value: rating.Max ?? '', placeholder: String(DEFAULT_RATING_MAX), style: { width: 80 }, onChange: (event) => {
172
152
  const raw = event.target.value;
173
153
  if (raw === '' || raw == null) {
174
154
  update({ Max: undefined });
@@ -178,7 +158,7 @@ export const StyledColumnWizardRatingSection = (props) => {
178
158
  update({
179
159
  Max: Number.isFinite(parsed) && parsed >= 1 ? Math.floor(parsed) : undefined,
180
160
  });
181
- } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Icon count and rating cap (no auto scaling is applied)" })] }) }), _jsx(FormRow, { label: "Icon:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: rating.Icon ?? DEFAULT_ICON, onValueChange: (v) => update({ Icon: v }), items: ICON_CHOICES }) }) }), _jsx(FormRow, { label: "Filled Colour:", children: _jsx(ColorPicker, { disabled: disabled, api: api, value: getDisplayedFilledColor(rating), onChange: (c) => update({ FilledColor: c }) }) }), _jsx(FormRow, { label: "Empty Colour:", children: _jsx(ColorPicker, { disabled: disabled, api: api, value: getDisplayedEmptyColor(rating), onChange: (c) => update({ EmptyColor: c }) }) }), _jsx(FormRow, { label: "Icon Size (px):", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 4, step: 1, value: rating.Size ?? '', placeholder: String(DEFAULT_SIZE), style: { width: 80 }, onChange: (event) => {
161
+ } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Icon count and rating cap (no auto scaling is applied)" })] }) }), _jsx(FormRow, { label: "Icon:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: rating.Icon ?? DEFAULT_RATING_ICON, onValueChange: (v) => update({ Icon: v }), items: ICON_CHOICES }) }) }), _jsx(FormRow, { label: "Filled Colour:", children: _jsx(ColorPicker, { disabled: disabled, api: api, value: getDisplayedFilledColor(rating), onChange: (c) => update({ FilledColor: c }) }) }), _jsx(FormRow, { label: "Empty Colour:", children: _jsx(ColorPicker, { disabled: disabled, api: api, value: getDisplayedEmptyColor(rating), onChange: (c) => update({ EmptyColor: c }) }) }), _jsx(FormRow, { label: "Icon Size (px):", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 4, step: 1, value: rating.Size ?? '', placeholder: String(DEFAULT_RATING_SIZE), style: { width: 80 }, onChange: (event) => {
182
162
  const raw = event.target.value;
183
163
  if (raw === '' || raw == null) {
184
164
  update({ Size: undefined });
@@ -188,7 +168,7 @@ export const StyledColumnWizardRatingSection = (props) => {
188
168
  update({
189
169
  Size: Number.isFinite(parsed) && parsed >= 4 ? parsed : undefined,
190
170
  });
191
- } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Square pixel size of each icon" })] }) }), _jsx(FormRow, { label: "Icon Gap (px):", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 0, step: 1, value: rating.Gap ?? '', placeholder: String(DEFAULT_GAP), style: { width: 80 }, onChange: (event) => {
171
+ } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Square pixel size of each icon" })] }) }), _jsx(FormRow, { label: "Icon Gap (px):", children: _jsxs(Flex, { alignItems: "center", className: "twa:gap-2", children: [_jsx(Input, { type: "number", min: 0, step: 1, value: rating.Gap ?? '', placeholder: String(DEFAULT_RATING_GAP), style: { width: 80 }, onChange: (event) => {
192
172
  const raw = event.target.value;
193
173
  if (raw === '' || raw == null) {
194
174
  update({ Gap: undefined });
@@ -198,7 +178,7 @@ export const StyledColumnWizardRatingSection = (props) => {
198
178
  update({
199
179
  Gap: Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined,
200
180
  });
201
- } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Pixel space between adjacent icons" })] }) }), _jsx(FormRow, { label: "Allow Half Icons:", children: _jsx(CheckBox, { disabled: disabled, className: "twa:ml-2", checked: rating.AllowHalf ?? true, onChange: (checked) => update({ AllowHalf: checked }), children: "Render fractional values as a partial icon (e.g. 3.5 \u2192 \u2605\u2605\u2605\u00BD\u2606)" }) })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsx(Card.Title, { children: "Text" }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Show Value:", children: _jsx(CheckBox, { disabled: disabled, className: "twa:ml-2", checked: rating.ShowValue ?? false, onChange: (checked) => update({ ShowValue: checked }), children: "Display the numeric value beside the icons" }) }), _jsx(FormRow, { label: "Tooltip:", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-1 twa:ml-2", children: [_jsx(CheckBox, { disabled: disabled, checked: rating.ToolTipText?.includes('CellValue') ?? false, onChange: (checked) => toggleToolTipText('CellValue', checked), children: "Cell Value" }), _jsx(CheckBox, { disabled: disabled, checked: rating.ToolTipText?.includes('PercentageValue') ?? false, onChange: (checked) => toggleToolTipText('PercentageValue', checked), children: "Percentage Value (value \u00F7 Max)" })] }) })] }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Cell" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[500px]", children: "Optional Cell Style properties overrides Format Column properties)" })] }), _jsx(Card.Body, { children: _jsx(StyledColumnCellStyleEditor, { api: api, disabled: disabled, value: rating.Cell, onChange: (next) => {
181
+ } }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:min-w-0 twa:shrink", children: "Pixel space between adjacent icons" })] }) }), _jsx(FormRow, { label: "Allow Half Icons:", children: _jsx(CheckBox, { disabled: disabled, className: "twa:ml-2", checked: rating.AllowHalf ?? true, onChange: (checked) => update({ AllowHalf: checked }), children: "Render fractional values as a partial icon (e.g. 3.5 \u2192 \u2605\u2605\u2605\u00BD\u2606)" }) })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsx(Card.Title, { children: "Text" }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Show Value:", children: _jsx(CheckBox, { disabled: disabled, className: "twa:ml-2", checked: rating.ShowValue ?? false, onChange: (checked) => update({ ShowValue: checked }), children: "Display the numeric value beside the icons" }) }), _jsx(FormRow, { label: "Tooltip:", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-1 twa:ml-2", children: [_jsx(CheckBox, { disabled: disabled, checked: rating.ToolTipText?.includes('CellValue') ?? false, onChange: (checked) => toggleToolTipText('CellValue', checked), children: "Cell Value" }), _jsx(CheckBox, { disabled: disabled, checked: rating.ToolTipText?.includes('PercentageValue') ?? false, onChange: (checked) => toggleToolTipText('PercentageValue', checked), children: "Percentage Value (value \u00F7 Max)" })] }) })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Cell" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[500px]", children: "Optional Cell Style properties overrides Format Column properties)" })] }), _jsx(Card.Body, { children: _jsx(StyledColumnCellStyleEditor, { api: api, disabled: disabled, value: rating.Cell, onChange: (next) => {
202
182
  if (next) {
203
183
  update({ Cell: next });
204
184
  }
@@ -207,5 +187,5 @@ export const StyledColumnWizardRatingSection = (props) => {
207
187
  delete cleaned.Cell;
208
188
  props.onChange({ ...data, RatingStyle: cleaned });
209
189
  }
210
- } }) })] })] }));
190
+ } }) })] }), _jsx(StyledColumnRatingPreviewCard, { data: data })] }));
211
191
  };
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { BulletChartStyle } from '../../../../../AdaptableState/StyledColumnState';
3
+ export declare const BulletRangesSummaryPreview: React.FunctionComponent<{
4
+ bulletStyle: BulletChartStyle;
5
+ }>;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Flex } from '../../../../../components/Flex';
3
+ import { Tag } from '../../../../../components/Tag';
4
+ import { getVariableColor } from '../../../../../Utilities/Helpers/StyleHelper';
5
+ const stripClassName = 'twa:h-6 twa:w-[128px] twa:rounded twa:overflow-hidden twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
6
+ export const BulletRangesSummaryPreview = ({ bulletStyle }) => {
7
+ const ranges = bulletStyle.CellRanges ?? [];
8
+ if (!ranges.length) {
9
+ return _jsx(Tag, { children: "No bands defined" });
10
+ }
11
+ let postfix = '';
12
+ if (bulletStyle.RangeValueType === 'Percentage') {
13
+ postfix = '%';
14
+ }
15
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-2", children: ranges.map((range, i) => (_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: [range.Min, postfix, " \u2192 ", range.Max, postfix] }), _jsx(Box, { className: stripClassName, style: { background: getVariableColor(range.Color) } })] }, i))) }));
16
+ };
@@ -1,8 +1,9 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import tinycolor from 'tinycolor2';
3
3
  import { Box, Flex } from '../../../../../components/Flex';
4
+ import { Tag } from '../../../../../components/Tag';
4
5
  import { getVariableColor } from '../../../../../Utilities/Helpers/StyleHelper';
5
- import { DEFAULT_GRADIENT_MAX_ALPHA, DEFAULT_GRADIENT_MIN_ALPHA, } from '../../../../../Utilities/Helpers/StyledColumnGradientHelper';
6
+ import { DEFAULT_GRADIENT_MAX_ALPHA, DEFAULT_GRADIENT_MIN_ALPHA, isDivergingZeroCellRanges, } from '../../../../../Utilities/Helpers/StyledColumnGradientHelper';
6
7
  function clamp01(n) {
7
8
  if (Number.isNaN(n)) {
8
9
  return 0;
@@ -19,16 +20,9 @@ export function gradientRangeStripCss(color, reverseGradient, minAlpha, maxAlpha
19
20
  const c2 = tinycolor(prepared).setAlpha(rightA).toRgbString();
20
21
  return `linear-gradient(to right, ${c1}, ${c2})`;
21
22
  }
22
- function isDivergingZeroPair(ranges) {
23
- if (!ranges || ranges.length !== 2) {
24
- return false;
25
- }
26
- const [a, b] = ranges;
27
- return a.Max === 0 && b.Min === 0;
28
- }
29
23
  const stripClassName = 'twa:h-6 twa:w-[128px] twa:rounded twa:overflow-hidden twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
30
24
  function zeroCentredSplitPreview(negativeColor, positiveColor, postfix, minA, maxA) {
31
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Box, { className: "twa:text-sm", children: ["Col-Min", postfix, " \u2192 0", postfix] }), _jsx(Box, { className: "twa:text-xs twa:opacity-50", children: "|" }), _jsxs(Box, { className: "twa:text-sm", children: ["0", postfix, " \u2192 Col-Max", postfix] })] }), _jsxs(Flex, { className: `${stripClassName} twa:w-[200px]`, children: [_jsx(Box, { className: "twa:flex-1", style: {
25
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: ["Col-Min", postfix, " \u2192 0", postfix] }), _jsxs(Tag, { children: ["0", postfix, " \u2192 Col-Max", postfix] })] }), _jsxs(Flex, { className: `${stripClassName} twa:w-[200px]`, children: [_jsx(Box, { className: "twa:flex-1", style: {
32
26
  background: gradientRangeStripCss(negativeColor, true, minA, maxA),
33
27
  } }), _jsx(Box, { className: "twa:flex-1", style: {
34
28
  background: gradientRangeStripCss(positiveColor, false, minA, maxA),
@@ -47,15 +41,15 @@ export const GradientRangesSummaryPreview = (props) => {
47
41
  return zeroCentredSplitPreview(props.zeroCentred.NegativeColor, props.zeroCentred.PositiveColor, postfix, minA, maxA);
48
42
  }
49
43
  const ranges = props.ranges ?? [];
50
- if (isDivergingZeroPair(ranges)) {
44
+ if (isDivergingZeroCellRanges(ranges)) {
51
45
  const [r0, r1] = ranges;
52
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Box, { className: "twa:text-sm", children: [r0.Min, postfix, " \u2192 ", r0.Max, postfix] }), _jsx(Box, { className: "twa:text-xs twa:opacity-50", children: "|" }), _jsxs(Box, { className: "twa:text-sm", children: [r1.Min, postfix, " \u2192 ", r1.Max, postfix] })] }), _jsxs(Flex, { className: `${stripClassName} twa:w-[200px]`, children: [_jsx(Box, { className: "twa:flex-1", style: {
46
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: [r0.Min, postfix, " \u2192 ", r0.Max, postfix] }), _jsxs(Tag, { children: [r1.Min, postfix, " \u2192 ", r1.Max, postfix] })] }), _jsxs(Flex, { className: `${stripClassName} twa:w-[200px]`, children: [_jsx(Box, { className: "twa:flex-1", style: {
53
47
  background: gradientRangeStripCss(r0.Color, !!r0.ReverseGradient, minA, maxA),
54
48
  } }), _jsx(Box, { className: "twa:flex-1", style: {
55
49
  background: gradientRangeStripCss(r1.Color, !!r1.ReverseGradient, minA, maxA),
56
50
  } })] })] }));
57
51
  }
58
- return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-2", children: ranges.map((r, i) => (_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Box, { className: "twa:text-sm twa:min-w-[120px]", children: [r.Min, postfix, " to ", r.Max, postfix] }), _jsx(Box, { className: stripClassName, style: {
52
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-2", children: ranges.map((r, i) => (_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: [r.Min, postfix, " \u2192 ", r.Max, postfix] }), _jsx(Box, { className: stripClassName, style: {
59
53
  background: gradientRangeStripCss(r.Color, !!r.ReverseGradient, minA, maxA),
60
54
  } })] }, i))) }));
61
55
  };
@@ -65,7 +59,7 @@ export const GradientColumnComparisonSummaryPreview = (props) => {
65
59
  const fmt = (v) => isNaN(Number(v))
66
60
  ? `[${props.api.columnApi.getFriendlyNameForColumnId(String(v))}]`
67
61
  : v;
68
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Box, { className: "twa:text-sm", children: ["Min: ", fmt(props.columnComparison.MinValue), " \u2014 Max:", ' ', fmt(props.columnComparison.MaxValue)] }), _jsx(Box, { className: `${stripClassName} twa:w-[200px]`, style: {
62
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Tag, { children: ["Min: ", fmt(props.columnComparison.MinValue), " \u2014 Max: ", fmt(props.columnComparison.MaxValue)] }), _jsx(Box, { className: `${stripClassName} twa:w-[200px]`, style: {
69
63
  background: gradientRangeStripCss(props.columnComparison.Color, false, minA, maxA),
70
64
  } })] }));
71
65
  };
@@ -2,12 +2,12 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useAdaptable } from '../../../../AdaptableContext';
3
3
  import { PercentBarStylePreview } from './PercentBarStylePreview';
4
4
  import { Box, Flex } from '../../../../../components/Flex';
5
+ import { Tag } from '../../../../../components/Tag';
5
6
  export const PercentBarColumnComparisonPreview = (props) => {
6
7
  const { api } = useAdaptable();
7
8
  const columnComparison = props.percentBarStyle.ColumnComparison;
8
- return (_jsxs(Flex, { alignItems: "center", className: "twa:mr-3", children: [_jsxs(Box, { className: "twa:basis-[120px] twa:mr-3", children: [isNaN(Number(columnComparison.MinValue))
9
- ? '[' + api.columnApi.getFriendlyNameForColumnId(String(columnComparison.MinValue)) + ']'
10
- : columnComparison.MinValue, ' ', "to", ' ', isNaN(Number(columnComparison.MaxValue))
11
- ? '[' + api.columnApi.getFriendlyNameForColumnId(String(columnComparison.MaxValue)) + ']'
12
- : columnComparison.MaxValue, ' '] }), _jsx(PercentBarStylePreview, { backgroundColor: columnComparison.Color, barBackgroundColor: props.percentBarStyle.BackColor, cellText: props.percentBarStyle.CellText, toolTipText: props.percentBarStyle.ToolTipText })] }));
9
+ const fmt = (v) => isNaN(Number(v))
10
+ ? `[${api.columnApi.getFriendlyNameForColumnId(String(v))}]`
11
+ : v;
12
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2", children: [_jsxs(Tag, { children: ["Min: ", fmt(columnComparison.MinValue), " \u2014 Max: ", fmt(columnComparison.MaxValue)] }), _jsx(Box, { className: "twa:max-w-[200px]", children: _jsx(PercentBarStylePreview, { backgroundColor: props.percentBarStyle.BackColor, barBackgroundColor: columnComparison.Color }) })] }));
13
13
  };
@@ -1,10 +1,11 @@
1
- import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { PercentBarStylePreview } from './PercentBarStylePreview';
3
- import { Flex } from '../../../../../components/Flex';
3
+ import { Box, Flex } from '../../../../../components/Flex';
4
+ import { Tag } from '../../../../../components/Tag';
4
5
  export const PercentBarPreview = (props) => {
5
6
  let postfix = '';
6
7
  if (props.percentBarStyle.RangeValueType === 'Percentage') {
7
8
  postfix = '%';
8
9
  }
9
- return (_jsx(_Fragment, { children: props.percentBarStyle.CellRanges.map((range, i) => (_jsxs(Flex, { alignItems: "stretch", className: "twa:mr-3 twa:mb-2", children: [_jsxs(Flex, { className: "twa:basis-[120px] twa:mr-3", alignItems: "center", children: [range.Min, postfix, " to ", range.Max, postfix] }), _jsx(PercentBarStylePreview, { backgroundColor: props.percentBarStyle.BackColor, barBackgroundColor: range.Color, cellText: props.percentBarStyle.CellText, toolTipText: props.percentBarStyle.ToolTipText })] }, i))) }));
10
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-2", children: props.percentBarStyle.CellRanges.map((range, i) => (_jsxs(Flex, { alignItems: "stretch", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: [range.Min, postfix, " \u2192 ", range.Max, postfix] }), _jsx(Box, { className: "twa:flex-1 twa:min-w-[120px]", children: _jsx(PercentBarStylePreview, { backgroundColor: props.percentBarStyle.BackColor, barBackgroundColor: range.Color }) })] }, i))) }));
10
11
  };
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react';
2
- import { CellTextOptions } from '../../../../../types';
2
+ /**
3
+ * Compact range-colour strip for Percent Bar range summaries.
4
+ * Cell text / origin / font are shown in `StyledColumnPercentBarPreview`.
5
+ */
3
6
  export declare const PercentBarStylePreview: React.FunctionComponent<{
4
- backgroundColor: string;
7
+ backgroundColor?: string | null;
5
8
  barBackgroundColor?: string;
6
- cellText?: CellTextOptions;
7
- toolTipText?: CellTextOptions;
8
9
  }>;
@@ -1,17 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box, Flex } from '../../../../../components/Flex';
3
- const getText = (options) => {
4
- let text = '';
5
- if (options && options.includes('CellValue')) {
6
- text += '20';
7
- }
8
- if (options && options.includes('PercentageValue')) {
9
- text += ' (50%)';
10
- }
11
- return text.trim();
12
- };
3
+ import { getVariableColor } from '../../../../../Utilities/Helpers/StyleHelper';
4
+ const stripClassName = 'twa:h-6 twa:w-[128px] twa:rounded twa:overflow-hidden twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
5
+ /**
6
+ * Compact range-colour strip for Percent Bar range summaries.
7
+ * Cell text / origin / font are shown in `StyledColumnPercentBarPreview`.
8
+ */
13
9
  export const PercentBarStylePreview = (props) => {
14
- const cellText = getText(props.cellText);
15
- const tooltip = getText(props.toolTipText);
16
- return (_jsxs(Box, { title: tooltip, className: "twa:flex-1", children: [_jsx(Flex, { style: { backgroundColor: props.backgroundColor }, className: `twa:flex-1 ${cellText ? 'twa:h-[8px]' : 'twa:h-[18px]'}`, children: _jsx(Box, { className: "twa:basis-[50%]", style: { background: props.barBackgroundColor } }) }), cellText && _jsx(Box, { className: "twa:text-3", children: cellText })] }));
10
+ const trackColor = props.backgroundColor ? getVariableColor(props.backgroundColor) : undefined;
11
+ const barColor = props.barBackgroundColor
12
+ ? getVariableColor(props.barBackgroundColor)
13
+ : undefined;
14
+ return (_jsx(Box, { className: stripClassName, children: _jsx(Flex, { className: "twa:h-full twa:relative", style: trackColor ? { backgroundColor: trackColor } : undefined, children: barColor && (_jsx(Box, { className: "twa:absolute twa:top-0 twa:left-0 twa:h-full twa:w-1/2", style: { background: barColor } })) }) }));
17
15
  };
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { RangeBarStyle } from '../../../../../AdaptableState/StyledColumnState';
3
+ export declare const RangeBarRangesSummaryPreview: React.FunctionComponent<{
4
+ rangeStyle: RangeBarStyle;
5
+ }>;
@@ -0,0 +1,16 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Flex } from '../../../../../components/Flex';
3
+ import { Tag } from '../../../../../components/Tag';
4
+ import { getVariableColor } from '../../../../../Utilities/Helpers/StyleHelper';
5
+ const stripClassName = 'twa:h-6 twa:w-[128px] twa:rounded twa:overflow-hidden twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
6
+ export const RangeBarRangesSummaryPreview = ({ rangeStyle }) => {
7
+ const ranges = rangeStyle.CellRanges ?? [];
8
+ if (!ranges.length) {
9
+ return null;
10
+ }
11
+ let postfix = '';
12
+ if (rangeStyle.RangeValueType === 'Percentage') {
13
+ postfix = '%';
14
+ }
15
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-2", children: ranges.map((range, i) => (_jsxs(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: [_jsxs(Tag, { children: [range.Min, postfix, " \u2192 ", range.Max, postfix] }), _jsx(Box, { className: stripClassName, style: { background: getVariableColor(range.Color) } })] }, i))) }));
16
+ };
@@ -8,3 +8,6 @@ import { StyledColumn } from '../../../../../types';
8
8
  export declare const StyledColumnBadgePreview: React.FunctionComponent<React.PropsWithChildren<{
9
9
  data: StyledColumn;
10
10
  }>>;
11
+ export declare const StyledColumnBadgePreviewCard: React.FunctionComponent<React.PropsWithChildren<{
12
+ data: StyledColumn;
13
+ }>>;
@@ -1,13 +1,29 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { DEFAULT_INTEGER_DISPLAY_VALUE, DEFAULT_STRING_DISPLAY_VALUE, } from '../../../../../Utilities/Constants/GeneralConstants';
3
+ import { convertAdaptableStyleToCSS } from '../../../../../Utilities/Helpers/StyleHelper';
3
4
  import { useAdaptable } from '../../../../AdaptableContext';
4
5
  import { Badge } from '../../../../Components/Badge';
5
6
  import { Box } from '../../../../../components/Flex';
7
+ import { Card } from '../../../../../components/Card';
8
+ import { Tag } from '../../../../../components/Tag';
6
9
  const OVERFLOW_CLASS = {
7
10
  Truncate: 'ab-Badge__wrapper--truncate',
8
11
  Wrap: 'ab-Badge__wrapper--wrap',
9
12
  Scroll: 'ab-Badge__wrapper--scroll',
10
13
  };
14
+ const PREVIEW_CELL_CLASS = 'ab-BadgePreviewCell twa:min-w-[140px] twa:min-h-[32px] twa:px-2 twa:py-1 twa:rounded-standard twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
15
+ const resolveBadgeRowJustify = (alignment) => {
16
+ switch (alignment) {
17
+ case 'Center':
18
+ return 'center';
19
+ case 'Right':
20
+ return 'flex-end';
21
+ case 'Left':
22
+ return 'flex-start';
23
+ default:
24
+ return null;
25
+ }
26
+ };
11
27
  /**
12
28
  * Pixel-parity preview of the badges as they would render in the cell.
13
29
  * Uses the same wrapper/badge classes (and the same `Badge` component) as
@@ -17,13 +33,24 @@ export const StyledColumnBadgePreview = ({ data }) => {
17
33
  const adaptable = useAdaptable();
18
34
  const badgeStyle = data.BadgeStyle;
19
35
  if (!badgeStyle || !badgeStyle.Badges || badgeStyle.Badges.length === 0) {
20
- return _jsx("div", { children: "No Badges Defined" });
36
+ return _jsx(Tag, { children: "No Badges Defined" });
21
37
  }
22
38
  const overflow = badgeStyle.OverflowMode ?? 'Truncate';
23
39
  const wrapperClassName = `ab-Badge__wrapper ${OVERFLOW_CLASS[overflow]}`;
24
40
  const spacing = typeof badgeStyle.Spacing === 'number' ? badgeStyle.Spacing : null;
41
+ const rowJustify = resolveBadgeRowJustify(badgeStyle.Font?.Alignment);
42
+ const cellStyle = badgeStyle.Cell ? convertAdaptableStyleToCSS(badgeStyle.Cell) : undefined;
25
43
  const dataType = adaptable.api.columnApi.getColumnDataTypeForColumnId(data.ColumnId);
26
- return (_jsx(Box, { children: _jsx("div", { className: wrapperClassName, style: spacing != null ? { ['--ab-cmp-badge__spacing']: `${spacing}px` } : undefined, children: badgeStyle.Badges.map((badge, index) => {
44
+ const wrapperStyle = {
45
+ ...(spacing != null ? { ['--ab-cmp-badge__spacing']: `${spacing}px` } : {}),
46
+ ...(rowJustify
47
+ ? {
48
+ justifyContent: rowJustify,
49
+ width: '100%',
50
+ }
51
+ : {}),
52
+ };
53
+ return (_jsx(Box, { className: PREVIEW_CELL_CLASS, style: cellStyle, children: _jsx("div", { className: wrapperClassName, style: wrapperStyle, children: badgeStyle.Badges.map((badge, index) => {
27
54
  const badgeValue = badge.IconOnly
28
55
  ? ''
29
56
  : dataType === 'number'
@@ -32,3 +59,4 @@ export const StyledColumnBadgePreview = ({ data }) => {
32
59
  return (_jsx(Badge, { icon: badge.Icon, pillStyle: badge.PillStyle, iconPosition: badge.IconPosition, shape: badge.Shape, density: badgeStyle.Density ?? 'Normal', iconGap: badge.IconGap, children: badgeValue }, index));
33
60
  }) }) }));
34
61
  };
62
+ export const StyledColumnBadgePreviewCard = ({ data }) => (_jsxs(Card, { shadow: false, children: [_jsx(Card.Title, { children: _jsx(Box, { className: "twa:font-medium", children: "Preview" }) }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(StyledColumnBadgePreview, { data: data }) })] }));
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { BulletChartStyle, StyledColumn } from '../../../../../AdaptableState/StyledColumnState';
3
+ export declare const StyledColumnBulletPreview: React.FunctionComponent<React.PropsWithChildren<{
4
+ data: StyledColumn;
5
+ }>>;
6
+ export declare const StyledColumnBulletPreviewCard: React.FunctionComponent<React.PropsWithChildren<{
7
+ data: StyledColumn;
8
+ }>>;
9
+ export declare const hasBulletChartRangesConfigured: (bullet: BulletChartStyle | undefined) => boolean;
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { convertAdaptableStyleToCSS } from '../../../../../Utilities/Helpers/StyleHelper';
3
+ import { Box, Flex } from '../../../../../components/Flex';
4
+ import { Card } from '../../../../../components/Card';
5
+ import { Tag } from '../../../../../components/Tag';
6
+ import { StyledColumnBulletChartListPreview } from './StyledColumnChartListPreviews';
7
+ const PREVIEW_CELL_CLASS = 'ab-BulletPreviewCell twa:inline-flex twa:items-center twa:min-w-[180px] twa:min-h-[36px] twa:px-2 twa:py-1 twa:rounded-standard twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]';
8
+ const getBulletPreviewSample = (bullet) => {
9
+ const ranges = bullet.CellRanges ?? [];
10
+ const numeric = ranges.filter((range) => typeof range.Min === 'number' && typeof range.Max === 'number');
11
+ let min = 0;
12
+ let max = 100;
13
+ if (numeric.length) {
14
+ min = Math.min(...numeric.map((range) => range.Min));
15
+ max = Math.max(...numeric.map((range) => range.Max));
16
+ }
17
+ const span = max - min || 1;
18
+ // Matches the schematic bar width (~58%) in `StyledColumnBulletChartListPreview`.
19
+ const sampleValue = min + span * 0.58;
20
+ const valueFraction = (sampleValue - min) / span;
21
+ return {
22
+ sampleValue,
23
+ valueFraction: Math.max(0, Math.min(1, valueFraction)),
24
+ };
25
+ };
26
+ const formatBulletPreviewCellText = (sampleValue, valueFraction, bullet) => {
27
+ const parts = [];
28
+ if (bullet.CellText?.includes('CellValue')) {
29
+ parts.push(Number.isInteger(sampleValue) ? String(sampleValue) : sampleValue.toFixed(1));
30
+ }
31
+ if (bullet.CellText?.includes('PercentageValue')) {
32
+ parts.push(`${(valueFraction * 100).toFixed(0)}%`);
33
+ }
34
+ return parts.join(' ');
35
+ };
36
+ const BulletChartPreviewContent = ({ bullet, }) => {
37
+ const { sampleValue, valueFraction } = getBulletPreviewSample(bullet);
38
+ const cellText = formatBulletPreviewCellText(sampleValue, valueFraction, bullet);
39
+ const hasCellText = Boolean(bullet.CellText?.length && cellText);
40
+ const textPosition = bullet.CellTextPosition ?? 'Below';
41
+ const fontStyle = bullet.Font ? convertAdaptableStyleToCSS(bullet.Font) : undefined;
42
+ const isVertical = bullet.Orientation === 'Vertical';
43
+ const chartEl = _jsx(StyledColumnBulletChartListPreview, { bullet: bullet });
44
+ const textEl = hasCellText ? (_jsx(Box, { className: "ab-BulletChart__text twa:text-2 twa:leading-tight twa:truncate twa:max-w-full", style: fontStyle, children: cellText })) : null;
45
+ if (hasCellText && textPosition === 'Merged') {
46
+ return (_jsxs(Box, { className: "ab-BulletChart__wrapper twa:relative twa:inline-flex", children: [chartEl, _jsx(Box, { className: "ab-BulletChart__text twa:absolute twa:inset-x-0 twa:top-1/2 twa:-translate-y-1/2 twa:px-1 twa:text-2 twa:truncate twa:pointer-events-none", style: fontStyle, children: cellText })] }));
47
+ }
48
+ return (_jsxs(Flex, { className: "ab-BulletChart__wrapper", flexDirection: "column", alignItems: isVertical ? 'center' : 'stretch', style: { justifyContent: 'center', gap: hasCellText ? 2 : 0 }, children: [hasCellText && textPosition === 'Above' && textEl, chartEl, hasCellText && textPosition === 'Below' && textEl] }));
49
+ };
50
+ export const StyledColumnBulletPreview = ({ data }) => {
51
+ const bullet = data.BulletChartStyle;
52
+ if (!bullet) {
53
+ return _jsx(Tag, { children: "No Bullet Chart Style" });
54
+ }
55
+ return (_jsx(Box, { className: PREVIEW_CELL_CLASS, children: _jsx(BulletChartPreviewContent, { bullet: bullet }) }));
56
+ };
57
+ export const StyledColumnBulletPreviewCard = ({ data }) => (_jsxs(Card, { shadow: false, children: [_jsx(Card.Title, { children: _jsx(Box, { className: "twa:font-medium", children: "Preview" }) }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(StyledColumnBulletPreview, { data: data }) })] }));
58
+ export const hasBulletChartRangesConfigured = (bullet) => Boolean(bullet?.CellRanges?.length);
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { StyledColumn } from '../../../../../AdaptableState/StyledColumnState';
3
+ import { AdaptableApi } from '../../../../../Api/AdaptableApi';
4
+ export declare const StyledColumnGradientPreview: React.FunctionComponent<React.PropsWithChildren<{
5
+ data: StyledColumn;
6
+ api?: AdaptableApi;
7
+ }>>;
8
+ export declare const StyledColumnGradientPreviewCard: React.FunctionComponent<React.PropsWithChildren<{
9
+ data: StyledColumn;
10
+ }>>;
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Flex } from '../../../../../components/Flex';
3
+ import { Card } from '../../../../../components/Card';
4
+ import { Tag } from '../../../../../components/Tag';
5
+ import { useAdaptable } from '../../../../AdaptableContext';
6
+ import { getGradientPreviewCellStyle, getGradientPreviewSampleValues, hasGradientRangesConfigured, } from '../../../../../Utilities/Helpers/StyledColumnGradientHelper';
7
+ const formatPreviewValue = (value) => {
8
+ if (Number.isInteger(value)) {
9
+ return value.toLocaleString();
10
+ }
11
+ return value.toLocaleString(undefined, { maximumFractionDigits: 2 });
12
+ };
13
+ export const StyledColumnGradientPreview = ({ data, api: apiProp }) => {
14
+ const adaptable = useAdaptable();
15
+ const api = apiProp ?? adaptable.api;
16
+ const gs = data.GradientStyle;
17
+ if (!gs) {
18
+ return _jsx(Tag, { children: "No Gradient Style" });
19
+ }
20
+ if (!hasGradientRangesConfigured(gs)) {
21
+ return _jsx(Tag, { children: "Define ranges before previewing" });
22
+ }
23
+ const sampleValues = getGradientPreviewSampleValues(data, api);
24
+ if (!sampleValues.length) {
25
+ return _jsx(Tag, { children: "No preview available" });
26
+ }
27
+ const rowNode = api.gridApi?.getRowNodeForIndex(0) ?? null;
28
+ return (_jsx(Flex, { alignItems: "stretch", className: "twa:flex-wrap twa:gap-2", children: sampleValues.map((value) => (_jsx(Box, { className: "ab-GradientPreviewCell twa:px-2 twa:py-1 twa:min-w-[56px] twa:text-2 twa:text-center twa:rounded-standard twa:border twa:border-[color-mix(in_srgb,var(--ab-color-foreground)_15%,transparent)]", style: getGradientPreviewCellStyle(value, data, api, rowNode), children: formatPreviewValue(value) }, value))) }));
29
+ };
30
+ export const StyledColumnGradientPreviewCard = ({ data }) => (_jsxs(Card, { shadow: false, children: [_jsx(Card.Title, { children: _jsx(Box, { className: "twa:font-medium", children: "Preview" }) }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(StyledColumnGradientPreview, { data: data }) })] }));
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { StyledColumn } from '../../../../../AdaptableState/StyledColumnState';
3
+ export declare const DEFAULT_ICON_STYLE_SIZE = 18;
4
+ export declare const DEFAULT_ICON_STYLE_GAP = 4;
5
+ export declare const StyledColumnIconPreview: React.FunctionComponent<React.PropsWithChildren<{
6
+ data: StyledColumn;
7
+ }>>;
8
+ export declare const StyledColumnIconPreviewCard: React.FunctionComponent<React.PropsWithChildren<{
9
+ data: StyledColumn;
10
+ }>>;