@adaptabletools/adaptable 23.0.0-canary.6 → 23.0.0-canary.8

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 (396) hide show
  1. package/icons/sort-asc.svg +1 -1
  2. package/index.css +828 -263
  3. package/package.json +1 -1
  4. package/src/AdaptableOptions/DataSetOptions.d.ts +26 -2
  5. package/src/AdaptableOptions/DefaultAdaptableOptions.js +0 -1
  6. package/src/AdaptableOptions/SettingsPanelOptions.d.ts +42 -10
  7. package/src/AdaptableState/Common/AdaptableFormat.d.ts +7 -0
  8. package/src/AdaptableState/Common/AdaptableMessageType.d.ts +1 -1
  9. package/src/AdaptableState/Common/Enums.d.ts +1 -1
  10. package/src/AdaptableState/Common/Enums.js +1 -1
  11. package/src/AdaptableState/StyledColumnState.d.ts +8 -850
  12. package/src/AdaptableState/StyledColumnState.js +1 -9
  13. package/src/AdaptableState/StyledColumns/BadgeStyle.d.ts +143 -0
  14. package/src/AdaptableState/StyledColumns/BadgeStyle.js +9 -0
  15. package/src/AdaptableState/StyledColumns/BulletChartStyle.d.ts +147 -0
  16. package/src/AdaptableState/StyledColumns/Common/BarChartCellText.d.ts +60 -0
  17. package/src/AdaptableState/StyledColumns/Common/BarChartCellText.js +6 -0
  18. package/src/AdaptableState/StyledColumns/Common/BarChartMarker.d.ts +24 -0
  19. package/src/AdaptableState/StyledColumns/Common/BarChartMarker.js +5 -0
  20. package/src/AdaptableState/StyledColumns/Common/CellTextOptions.d.ts +13 -0
  21. package/src/AdaptableState/StyledColumns/Common/CellTextOptions.js +6 -0
  22. package/src/AdaptableState/StyledColumns/Common/NumericStyledColumn.d.ts +79 -0
  23. package/src/AdaptableState/StyledColumns/Common/NumericStyledColumn.js +9 -0
  24. package/src/AdaptableState/StyledColumns/GradientStyle.d.ts +48 -0
  25. package/src/AdaptableState/StyledColumns/GradientStyle.js +1 -0
  26. package/src/AdaptableState/StyledColumns/IconStyle.d.ts +158 -0
  27. package/src/AdaptableState/StyledColumns/IconStyle.js +1 -0
  28. package/src/AdaptableState/StyledColumns/PercentBarStyle.d.ts +32 -0
  29. package/src/AdaptableState/StyledColumns/PercentBarStyle.js +1 -0
  30. package/src/AdaptableState/StyledColumns/RangeBarStyle.d.ts +155 -0
  31. package/src/AdaptableState/StyledColumns/RangeBarStyle.js +1 -0
  32. package/src/AdaptableState/StyledColumns/RatingStyle.d.ts +111 -0
  33. package/src/AdaptableState/StyledColumns/RatingStyle.js +1 -0
  34. package/src/AdaptableState/StyledColumns/SparklineStyle.d.ts +21 -0
  35. package/src/AdaptableState/StyledColumns/SparklineStyle.js +1 -0
  36. package/src/Api/ColumnScopeApi.d.ts +1 -1
  37. package/src/Api/Implementation/ColumnScopeApiImpl.d.ts +1 -1
  38. package/src/Api/Internal/AlertInternalApi.js +1 -1
  39. package/src/Api/Internal/DataSetInternalApi.d.ts +3 -0
  40. package/src/Api/Internal/DataSetInternalApi.js +73 -13
  41. package/src/Api/Internal/StyledColumnInternalApi.d.ts +3 -1
  42. package/src/Redux/Store/AdaptableStore.js +6 -4
  43. package/src/Strategy/CalculatedColumnModule.js +1 -0
  44. package/src/Strategy/ColumnFilterModule.js +1 -0
  45. package/src/Strategy/FlashingCellModule.js +6 -2
  46. package/src/Strategy/FormatColumnModule.js +2 -2
  47. package/src/Strategy/FreeTextColumnModule.js +38 -28
  48. package/src/Strategy/Interface/IModule.d.ts +3 -1
  49. package/src/Strategy/LayoutModule.js +15 -66
  50. package/src/Strategy/StyledColumnModule.js +12 -29
  51. package/src/Strategy/Utilities/CustomSort/getCustomSortColumnViewItems.d.ts +1 -0
  52. package/src/Strategy/Utilities/CustomSort/getCustomSortColumnViewItems.js +1 -0
  53. package/src/Strategy/Utilities/Export/getExportColumnsViewItems.d.ts +2 -0
  54. package/src/Strategy/Utilities/Export/getExportColumnsViewItems.js +14 -0
  55. package/src/Strategy/Utilities/Export/getExportRowsViewItems.d.ts +1 -0
  56. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +3 -0
  57. package/src/Strategy/Utilities/Layout/aggregationSummaryHelpers.d.ts +11 -0
  58. package/src/Strategy/Utilities/Layout/aggregationSummaryHelpers.js +105 -0
  59. package/src/Strategy/Utilities/Layout/columnsSummaryHelpers.d.ts +48 -0
  60. package/src/Strategy/Utilities/Layout/columnsSummaryHelpers.js +166 -0
  61. package/src/Strategy/Utilities/Layout/getLayoutSortViewItems.d.ts +1 -0
  62. package/src/Strategy/Utilities/Layout/getLayoutSortViewItems.js +1 -0
  63. package/src/Strategy/Utilities/Layout/rowGroupSummaryHelpers.d.ts +26 -0
  64. package/src/Strategy/Utilities/Layout/rowGroupSummaryHelpers.js +85 -0
  65. package/src/Utilities/Defaults/DefaultSettingsPanel.d.ts +3 -5
  66. package/src/Utilities/Defaults/DefaultSettingsPanel.js +46 -41
  67. package/src/Utilities/Helpers/FormatHelper.js +3 -0
  68. package/src/Utilities/Helpers/IconStylePresets.d.ts +1 -1
  69. package/src/Utilities/Helpers/ScheduleHelper.js +2 -0
  70. package/src/Utilities/Helpers/StyleHelper.d.ts +18 -0
  71. package/src/Utilities/Helpers/StyleHelper.js +27 -0
  72. package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +3 -1
  73. package/src/Utilities/Helpers/StyledColumnGradientHelper.js +7 -5
  74. package/src/Utilities/Helpers/barChartCellText.d.ts +63 -0
  75. package/src/Utilities/Helpers/barChartCellText.js +316 -0
  76. package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +2 -1
  77. package/src/Utilities/Helpers/percentBarPreviewHelper.js +3 -8
  78. package/src/Utilities/Helpers/resolveSettingsPanelNavigation.d.ts +3 -0
  79. package/src/Utilities/Helpers/resolveSettingsPanelNavigation.js +15 -0
  80. package/src/Utilities/getScopeViewItems.js +2 -0
  81. package/src/Utilities/wizardSelection.d.ts +10 -0
  82. package/src/Utilities/wizardSelection.js +15 -0
  83. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.js +2 -2
  84. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UIOptionsSidebarForm.js +2 -2
  85. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UIOptionsStatusbarForm.js +3 -3
  86. package/src/View/Alert/AlertViewPanel.js +2 -2
  87. package/src/View/Alert/Utilities/getAlertButtonStyle.js +7 -4
  88. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.d.ts +0 -1
  89. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +0 -4
  90. package/src/View/Alert/Wizard/AlertButtonsEditor.js +160 -126
  91. package/src/View/Alert/Wizard/AlertMessageWizardSection.d.ts +1 -1
  92. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +1 -2
  93. package/src/View/Alert/Wizard/AlertNotificationWizardSection.d.ts +1 -1
  94. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +4 -5
  95. package/src/View/Alert/Wizard/AlertScheduledWizardSection.d.ts +1 -1
  96. package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +1 -2
  97. package/src/View/Alert/Wizard/AlertTypeWizardSection.d.ts +1 -1
  98. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +31 -7
  99. package/src/View/Alert/Wizard/AlertWizard.js +13 -5
  100. package/src/View/Alert/Wizard/BaseAlertScopeWizardSection.d.ts +2 -1
  101. package/src/View/Alert/Wizard/BaseAlertScopeWizardSection.js +4 -14
  102. package/src/View/BulkUpdate/BulkUpdatePopup.js +1 -1
  103. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +4 -6
  104. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.d.ts +1 -1
  105. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +1 -2
  106. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
  107. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +30 -4
  108. package/src/View/CellSummary/CellSummaryViewPanel.js +4 -4
  109. package/src/View/Charting/ShowChartButton.js +8 -8
  110. package/src/View/ColumnInfo/ColumnInfo.js +21 -1
  111. package/src/View/Components/AdaptableObjectCollection/index.js +2 -2
  112. package/src/View/Components/AdaptableObjectList/AdaptableObjectCompactList.js +3 -2
  113. package/src/View/Components/AdaptableObjectList/AdaptableObjectList.js +7 -6
  114. package/src/View/Components/AdaptableObjectList/objectListActionButtonStyles.d.ts +2 -0
  115. package/src/View/Components/AdaptableObjectList/objectListActionButtonStyles.js +2 -0
  116. package/src/View/Components/AdaptableObjectRow/index.js +2 -2
  117. package/src/View/Components/Buttons/ButtonBase/index.js +2 -3
  118. package/src/View/Components/Buttons/ButtonNew.d.ts +2 -0
  119. package/src/View/Components/Buttons/ButtonNew.js +1 -1
  120. package/src/View/Components/Buttons/EntityListActionButtons.js +3 -3
  121. package/src/View/Components/Buttons/SuspendToggleButton/SuspendToggleButton.d.ts +1 -0
  122. package/src/View/Components/Buttons/SuspendToggleButton/SuspendToggleButton.js +9 -9
  123. package/src/View/Components/ColumnFilter/ColumnFilter.js +16 -4
  124. package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +2 -2
  125. package/src/View/Components/ColumnSelector/index.d.ts +12 -0
  126. package/src/View/Components/ColumnSelector/index.js +30 -6
  127. package/src/View/Components/EntityRulesEditor/EntityRulePredicatesEditor/EntityRulePredicatesEditor.js +2 -2
  128. package/src/View/Components/ModuleValueSelector/index.js +2 -1
  129. package/src/View/Components/NewScopeComponent.js +4 -9
  130. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopup.js +5 -4
  131. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupDialog.js +4 -4
  132. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupModuleView.js +2 -2
  133. package/src/View/Components/Popups/AdaptablePopup/Navigation.d.ts +3 -2
  134. package/src/View/Components/Popups/AdaptablePopup/Navigation.js +38 -28
  135. package/src/View/Components/Popups/AdaptablePopup/PopupPanel.js +3 -3
  136. package/src/View/Components/Popups/AdaptablePopup/TopBar.js +2 -2
  137. package/src/View/Components/Popups/AdaptablePopup/settingsPanelNavigationTypes.d.ts +11 -0
  138. package/src/View/Components/Popups/AdaptablePopup/settingsPanelNavigationTypes.js +1 -0
  139. package/src/View/Components/Popups/AdaptablePopup/useMenuItems.d.ts +3 -1
  140. package/src/View/Components/Popups/AdaptablePopup/useMenuItems.js +25 -27
  141. package/src/View/Components/PredicateEditor/PredicateEditor.js +1 -1
  142. package/src/View/Components/RangesComponent.d.ts +4 -5
  143. package/src/View/Components/RangesComponent.js +95 -66
  144. package/src/View/Components/ReorderDraggable/index.js +2 -2
  145. package/src/View/Components/Selectors/BulkUpdateValueSelector.d.ts +0 -2
  146. package/src/View/Components/Selectors/BulkUpdateValueSelector.js +3 -3
  147. package/src/View/Components/StyleComponent.js +32 -65
  148. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +10 -7
  149. package/src/View/Components/ToolPanel/ToolPanelPopup.d.ts +3 -13
  150. package/src/View/Components/ToolPanel/ToolPanelPopup.js +5 -81
  151. package/src/View/Components/ToolPanel/ToolPanelPopupSections.d.ts +17 -0
  152. package/src/View/Components/ToolPanel/ToolPanelPopupSections.js +76 -0
  153. package/src/View/Components/ValueSelector/index.d.ts +29 -0
  154. package/src/View/Components/ValueSelector/index.js +113 -30
  155. package/src/View/Components/wizardColumnListStyles.d.ts +10 -0
  156. package/src/View/Components/wizardColumnListStyles.js +10 -0
  157. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.d.ts +2 -1
  158. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +5 -7
  159. package/src/View/CustomSort/Wizard/CustomSortWizard.js +2 -2
  160. package/src/View/Dashboard/DashboardPopup.d.ts +1 -11
  161. package/src/View/Dashboard/DashboardPopup.js +3 -67
  162. package/src/View/Dashboard/DashboardPopupSections.d.ts +20 -0
  163. package/src/View/Dashboard/DashboardPopupSections.js +68 -0
  164. package/src/View/Dashboard/PinnedToolbarsSelector.js +2 -2
  165. package/src/View/DataChangeHistory/DataChangeHistoryPopup.d.ts +1 -6
  166. package/src/View/DataChangeHistory/DataChangeHistoryPopup.js +8 -20
  167. package/src/View/DataChangeHistory/DataChangeHistoryTable.d.ts +8 -0
  168. package/src/View/DataChangeHistory/DataChangeHistoryTable.js +94 -0
  169. package/src/View/DataChangeHistory/buildActionColumnButton.d.ts +5 -3
  170. package/src/View/DataChangeHistory/buildActionColumnButton.js +30 -39
  171. package/src/View/DataChangeHistory/dataChangeHistoryHelpers.d.ts +15 -0
  172. package/src/View/DataChangeHistory/dataChangeHistoryHelpers.js +37 -0
  173. package/src/View/DataImport/DataImportWizard/DataImportWizard.js +1 -1
  174. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +32 -19
  175. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +1 -1
  176. package/src/View/DataSet/DataSetViewPanel.d.ts +2 -2
  177. package/src/View/Export/ExportDestinationPicker.js +3 -3
  178. package/src/View/Export/ExportSchedulesTab.js +3 -4
  179. package/src/View/Export/ExportViewPanel.js +2 -2
  180. package/src/View/Export/Wizard/ReportColumnsWizardSection.d.ts +2 -1
  181. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +4 -9
  182. package/src/View/Export/Wizard/ReportRowsWizardSection.d.ts +2 -1
  183. package/src/View/Export/Wizard/ReportRowsWizardSection.js +3 -6
  184. package/src/View/Filter/FilterViewPanel.js +1 -1
  185. package/src/View/FlashingCell/FlashingCellStyle.d.ts +4 -2
  186. package/src/View/FlashingCell/FlashingCellStyle.js +4 -2
  187. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.d.ts +2 -1
  188. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +7 -11
  189. package/src/View/FlashingCell/Wizard/FlashingCellScopeSummary.d.ts +9 -0
  190. package/src/View/FlashingCell/Wizard/FlashingCellScopeSummary.js +5 -0
  191. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.d.ts +1 -1
  192. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +1 -0
  193. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.d.ts +0 -5
  194. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +1 -5
  195. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +2 -3
  196. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +1 -1
  197. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +99 -42
  198. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +0 -1
  199. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +0 -4
  200. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +56 -15
  201. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  202. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +2 -3
  203. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +5 -8
  204. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +8 -13
  205. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +3 -2
  206. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +1 -2
  207. package/src/View/GridFilter/GridFilterPopupUI/index.js +3 -2
  208. package/src/View/GridFilter/GridFilterViewPanel.js +5 -5
  209. package/src/View/GridInfo/GridInfoPopup/AdaptableObjectsSummary.js +2 -2
  210. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +2 -2
  211. package/src/View/Layout/LayoutViewPanel.js +1 -1
  212. package/src/View/Layout/Wizard/LayoutWizard.js +24 -28
  213. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +13 -1
  214. package/src/View/Layout/Wizard/sections/AggregationsSection.js +73 -33
  215. package/src/View/Layout/Wizard/sections/ColumnsSection.d.ts +4 -1
  216. package/src/View/Layout/Wizard/sections/ColumnsSection.js +155 -276
  217. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +4 -1
  218. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +148 -145
  219. package/src/View/Layout/Wizard/sections/PivotColumnsSection.d.ts +5 -2
  220. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +24 -12
  221. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.d.ts +4 -1
  222. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +23 -12
  223. package/src/View/Layout/Wizard/sections/RowGroupingSection.d.ts +5 -2
  224. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +19 -12
  225. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +8 -4
  226. package/src/View/Layout/Wizard/sections/RowSummarySection.js +132 -106
  227. package/src/View/Layout/Wizard/sections/SortSection.d.ts +12 -2
  228. package/src/View/Layout/Wizard/sections/SortSection.js +41 -17
  229. package/src/View/Layout/Wizard/sections/columnLayoutCards.d.ts +20 -0
  230. package/src/View/Layout/Wizard/sections/columnLayoutCards.js +159 -0
  231. package/src/View/Layout/Wizard/sections/columnLayoutHelpers.d.ts +30 -0
  232. package/src/View/Layout/Wizard/sections/columnLayoutHelpers.js +201 -0
  233. package/src/View/Layout/Wizard/sections/layoutWizardAccordionHelpers.d.ts +8 -0
  234. package/src/View/Layout/Wizard/sections/layoutWizardAccordionHelpers.js +63 -0
  235. package/src/View/Layout/Wizard/sections/layoutWizardColumns.d.ts +11 -0
  236. package/src/View/Layout/Wizard/sections/layoutWizardColumns.js +52 -0
  237. package/src/View/License/LicenseWatermark.js +1 -1
  238. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.d.ts +1 -1
  239. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -2
  240. package/src/View/Note/NoteEditor.js +2 -2
  241. package/src/View/QuickSearch/QuickSearchPopup.js +2 -3
  242. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +1 -1
  243. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +1 -1
  244. package/src/View/SmartEdit/SmartEditPopup.js +2 -2
  245. package/src/View/SmartEdit/SmartEditViewPanel.js +2 -2
  246. package/src/View/StateManagement/StateManagementPopup.js +1 -1
  247. package/src/View/StateManagement/components/ExportDropdown.d.ts +2 -2
  248. package/src/View/StateManagement/components/ExportDropdown.js +12 -12
  249. package/src/View/StatusBar/StatusBarPanel.js +2 -2
  250. package/src/View/StatusBar/StatusBarPopup.js +33 -5
  251. package/src/View/StatusBar/statusBarPanelHelpers.d.ts +2 -0
  252. package/src/View/StatusBar/statusBarPanelHelpers.js +7 -0
  253. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +3 -1
  254. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +14 -11
  255. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +2 -2
  256. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +143 -119
  257. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +1 -3
  258. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +8 -14
  259. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +2 -1
  260. package/src/View/StyledColumn/Wizard/StyledColumnTypeThumbnail.d.ts +5 -0
  261. package/src/View/StyledColumn/Wizard/StyledColumnTypeThumbnail.js +50 -0
  262. package/src/View/StyledColumn/Wizard/StyledColumnWizard.d.ts +2 -0
  263. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +26 -5
  264. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +76 -70
  265. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +2 -1
  266. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +83 -38
  267. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +173 -76
  268. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +2 -1
  269. package/src/View/StyledColumn/Wizard/StyledColumnWizardScopeSection.d.ts +1 -1
  270. package/src/View/StyledColumn/Wizard/StyledColumnWizardScopeSection.js +32 -46
  271. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BarChartCellTextLayoutEditor.d.ts +9 -0
  272. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BarChartCellTextLayoutEditor.js +35 -0
  273. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BarChartCellTextPreview.d.ts +23 -0
  274. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BarChartCellTextPreview.js +57 -0
  275. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +1 -1
  276. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.d.ts +2 -1
  277. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +1 -1
  278. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +3 -2
  279. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +2 -1
  280. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +13 -17
  281. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnChartListPreviews.d.ts +2 -1
  282. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnChartListPreviews.js +5 -5
  283. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +2 -2
  284. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +14 -7
  285. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +11 -17
  286. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +2 -1
  287. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +27 -58
  288. package/src/View/StyledColumn/Wizard/StyledColumnWizardTypeSection.js +94 -7
  289. package/src/View/UIHelper.d.ts +0 -2
  290. package/src/View/UIHelper.js +8 -23
  291. package/src/View/Wizard/CollapsibleWizardCard.d.ts +68 -0
  292. package/src/View/Wizard/CollapsibleWizardCard.js +81 -0
  293. package/src/View/Wizard/OnePageWizards.js +6 -6
  294. package/src/View/Wizard/SummaryColorTag.d.ts +24 -0
  295. package/src/View/Wizard/SummaryColorTag.js +67 -0
  296. package/src/View/Wizard/WizardTypeSelection.d.ts +34 -0
  297. package/src/View/Wizard/WizardTypeSelection.js +31 -0
  298. package/src/View/Wizard/rowGroupSummaryTags.d.ts +18 -0
  299. package/src/View/Wizard/rowGroupSummaryTags.js +14 -0
  300. package/src/View/Wizard/scopeSummaryTags.d.ts +6 -0
  301. package/src/View/Wizard/scopeSummaryTags.js +33 -0
  302. package/src/agGrid/AgGridAdapter.js +0 -5
  303. package/src/agGrid/AgGridColumnAdapter.js +4 -3
  304. package/src/agGrid/cellRenderers/ActionColumnRenderer.js +4 -7
  305. package/src/agGrid/cellRenderers/BadgeRenderer.js +7 -5
  306. package/src/agGrid/cellRenderers/BulletChartRenderer.js +43 -42
  307. package/src/agGrid/cellRenderers/IconRenderer.d.ts +2 -1
  308. package/src/agGrid/cellRenderers/IconRenderer.js +13 -11
  309. package/src/agGrid/cellRenderers/PercentBarRenderer.js +24 -96
  310. package/src/agGrid/cellRenderers/RangeBarRenderer.js +49 -46
  311. package/src/components/AdaptableFormComponent/AdaptableFormComponent.js +1 -1
  312. package/src/components/Card/index.js +5 -6
  313. package/src/components/CheckBox/index.js +2 -3
  314. package/src/components/CodeBlock/index.js +2 -2
  315. package/src/components/ColorPicker/ColorPicker.d.ts +1 -0
  316. package/src/components/ColorPicker/ColorPicker.js +8 -6
  317. package/src/components/ColorPicker/OptionalColorPicker.d.ts +12 -0
  318. package/src/components/ColorPicker/OptionalColorPicker.js +26 -0
  319. package/src/components/ColorPicker/index.d.ts +1 -0
  320. package/src/components/ColorPicker/index.js +1 -0
  321. package/src/components/Combobox/comboboxUtils.d.ts +1 -0
  322. package/src/components/Combobox/index.js +19 -18
  323. package/src/components/Dashboard/DashboardManager.js +2 -4
  324. package/src/components/Dialog/index.js +4 -4
  325. package/src/components/DragAndDropContext/DragAndDropContext.d.ts +5 -0
  326. package/src/components/DragAndDropContext/DragAndDropContext.js +3 -0
  327. package/src/components/DragAndDropContext/ModuleManager.d.ts +15 -3
  328. package/src/components/DragAndDropContext/ModuleManager.js +47 -8
  329. package/src/components/DragAndDropContext/TabList.d.ts +11 -4
  330. package/src/components/DragAndDropContext/TabList.js +52 -38
  331. package/src/components/DragAndDropContext/UnusedPanel.d.ts +4 -3
  332. package/src/components/DragAndDropContext/UnusedPanel.js +15 -11
  333. package/src/components/DragAndDropContext/dragScope.d.ts +6 -0
  334. package/src/components/DragAndDropContext/dragScope.js +26 -0
  335. package/src/components/DragAndDropContext/types.d.ts +7 -0
  336. package/src/components/DropdownButton/index.d.ts +33 -25
  337. package/src/components/DropdownButton/index.js +24 -158
  338. package/src/components/EmptyContent/index.js +2 -2
  339. package/src/components/ErrorBox/index.js +2 -2
  340. package/src/components/ExpressionEditor/BaseEditorInput.js +3 -3
  341. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +3 -3
  342. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +6 -6
  343. package/src/components/FieldWrap/index.js +2 -2
  344. package/src/components/Flex.js +2 -2
  345. package/src/components/FormLayout/index.d.ts +1 -1
  346. package/src/components/HelpBlock/index.js +3 -3
  347. package/src/components/IconSelector/IconSelector.d.ts +8 -0
  348. package/src/components/IconSelector/IconSelector.js +11 -7
  349. package/src/components/IconSelector/index.d.ts +1 -0
  350. package/src/components/IconSelector/index.js +1 -0
  351. package/src/components/Modal/index.js +2 -2
  352. package/src/components/NewSelect/index.js +11 -1
  353. package/src/components/Panel/index.js +7 -7
  354. package/src/components/Radio/index.d.ts +1 -1
  355. package/src/components/Radio/index.js +8 -6
  356. package/src/components/SimpleButton/index.js +7 -7
  357. package/src/components/StylePreview.js +2 -2
  358. package/src/components/Tabs/index.js +4 -4
  359. package/src/components/Tag/Tag.d.ts +16 -0
  360. package/src/components/Tag/Tag.js +14 -4
  361. package/src/components/Tag/columnScopeTagHelpers.d.ts +8 -0
  362. package/src/components/Tag/columnScopeTagHelpers.js +6 -0
  363. package/src/components/Tag/index.d.ts +1 -1
  364. package/src/components/Tag/index.js +1 -1
  365. package/src/components/Textarea/index.js +2 -3
  366. package/src/components/Toggle/Toggle.d.ts +2 -0
  367. package/src/components/Toggle/Toggle.js +14 -7
  368. package/src/components/Toggle/ToggleGroup.js +2 -2
  369. package/src/components/ToggleButton/index.js +4 -4
  370. package/src/components/Tree/TreeDropdown/index.js +3 -4
  371. package/src/components/WarningBox/index.js +2 -2
  372. package/src/components/icons/sort-asc.js +1 -1
  373. package/src/components/ui/button.d.ts +2 -2
  374. package/src/components/ui/combobox.d.ts +3 -1
  375. package/src/components/ui/combobox.js +2 -2
  376. package/src/components/ui/input-group.d.ts +1 -1
  377. package/src/components/ui/select.js +3 -2
  378. package/src/components/ui/textarea.js +1 -1
  379. package/src/env.js +2 -2
  380. package/src/layout-manager/src/index.js +7 -3
  381. package/src/metamodel/adaptable.metamodel.d.ts +80 -14
  382. package/src/metamodel/adaptable.metamodel.js +1 -1
  383. package/src/migration/VersionUpgrade23.d.ts +27 -31
  384. package/src/migration/VersionUpgrade23.js +110 -29
  385. package/src/types.d.ts +13 -2
  386. package/tsconfig.esm.tsbuildinfo +1 -1
  387. package/src/View/DataChangeHistory/DataChangeHistoryGrid.d.ts +0 -17
  388. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +0 -290
  389. package/src/components/DropdownButton/DropdownButtonItem.d.ts +0 -12
  390. package/src/components/DropdownButton/renderItem.d.ts +0 -14
  391. package/src/components/DropdownButton/renderItem.js +0 -11
  392. package/src/components/DropdownButton/useExpanded.d.ts +0 -24
  393. package/src/components/DropdownButton/useExpanded.js +0 -56
  394. package/src/components/NewDropdownButton/index.d.ts +0 -27
  395. package/src/components/NewDropdownButton/index.js +0 -24
  396. /package/src/{components/DropdownButton/DropdownButtonItem.js → AdaptableState/StyledColumns/BulletChartStyle.js} +0 -0
@@ -4,19 +4,21 @@ import { CheckBox } from '../../../components/CheckBox';
4
4
  import ErrorBox from '../../../components/ErrorBox';
5
5
  import FormLayout, { FormRow } from '../../../components/FormLayout';
6
6
  import { Tag } from '../../../components/Tag';
7
- import { ColorPicker } from '../../../components/ColorPicker';
7
+ import { InputGroup } from '../../../components/InputGroup';
8
+ import { ColorPicker, OptionalColorPicker } from '../../../components/ColorPicker';
8
9
  import { RangesComponent } from '../../Components/RangesComponent';
9
10
  import { ColumnSelector } from '../../Components/Selectors/ColumnSelector';
10
11
  import { getGraySwatchColor } from '../../UIHelper';
11
12
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
12
- import DropdownButton from '../../../components/DropdownButton';
13
- import ArrayExtensions from '../../../Utilities/Extensions/ArrayExtensions';
14
13
  import AdaptableInput from '../../Components/AdaptableInput';
15
14
  import { Box, Flex } from '../../../components/Flex';
16
15
  import { SingleSelect } from '../../../components/NewSelect';
17
16
  import { RangeBarRangesSummaryPreview } from './StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview';
18
17
  import { StyledColumnRangeBarPreviewCard } from './StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview';
19
18
  import { Card } from '../../../components/Card';
19
+ import { renderSummaryStringTags } from '../../Wizard/SummaryColorTag';
20
+ import { formatBarChartCellTextLayoutSummary, getActiveBarChartCellTextTokens, hasBarChartCellTextConfigured, patchBarChartCellTextPlacement, resolveBarChartCellTextLayout, toggleBarChartCellTextToken, } from '../../../Utilities/Helpers/barChartCellText';
21
+ import { BarChartCellTextLayoutEditor } from './StyledColumnWizardStyleSection/Components/BarChartCellTextLayoutEditor';
20
22
  const RANGE_STYLE_FORM_SIZES = ['200px', '1fr'];
21
23
  const BOUND_MODE_LABELS = {
22
24
  Number: 'Fixed Number',
@@ -46,6 +48,66 @@ const summarizeBound = (bound) => {
46
48
  }
47
49
  return bound;
48
50
  };
51
+ /**
52
+ * A single joined bound control: a type selector (Fixed Number / Column /
53
+ * Column Min / Max / Average / Median, plus `None` for the optional Reference)
54
+ * joined inline with a contextual editor. Mirrors the Column Comparison bound
55
+ * input so the two read as one block: the select hard-codes `rounded-input`, so
56
+ * the touching corners are flattened directly (important, to beat it) and the
57
+ * shared border overlapped via `-ml-px`.
58
+ *
59
+ * - Fixed Number → editable number input
60
+ * - Column → numeric column selector (excluding the styled column)
61
+ * - Col-* (aggregate) → disabled input showing the resolved value (when a
62
+ * column is in scope), so the user sees the underlying number
63
+ * - None → no editor (selector only)
64
+ */
65
+ const RangeBarBoundInput = ({ api, value, optional, fallbackNumber, excludeColumnId, resolved, disabled, onChange }) => {
66
+ const mode = getBoundMode(value);
67
+ const handleModeChange = (next) => {
68
+ if (next === mode)
69
+ return;
70
+ if (next === 'None')
71
+ return onChange(undefined);
72
+ if (next === 'Number')
73
+ return onChange(fallbackNumber);
74
+ if (next === 'Column') {
75
+ const candidate = api.columnApi
76
+ .getNumericColumns()
77
+ .find((c) => c.columnId !== excludeColumnId);
78
+ return onChange(candidate?.columnId ?? '');
79
+ }
80
+ // Col-Min / Col-Max / Col-Avg / Col-Median
81
+ return onChange(next);
82
+ };
83
+ const items = [
84
+ ...(optional ? [{ value: 'None', label: 'None' }] : []),
85
+ { value: 'Number', label: BOUND_MODE_LABELS.Number },
86
+ { value: 'Column', label: BOUND_MODE_LABELS.Column },
87
+ { value: 'Col-Min', label: BOUND_MODE_LABELS['Col-Min'] },
88
+ { value: 'Col-Max', label: BOUND_MODE_LABELS['Col-Max'] },
89
+ { value: 'Col-Avg', label: BOUND_MODE_LABELS['Col-Avg'] },
90
+ { value: 'Col-Median', label: BOUND_MODE_LABELS['Col-Median'] },
91
+ ];
92
+ const hasEditor = mode !== 'None';
93
+ let editor = null;
94
+ if (mode === 'Number') {
95
+ editor = (_jsx(AdaptableInput, { className: "twa:w-full", type: "number", disabled: disabled, value: typeof value === 'number' ? value : '', onChange: (e) => onChange(e.target.value === '' ? 0 : Number(e.target.value)) }));
96
+ }
97
+ else if (mode === 'Column') {
98
+ editor = (_jsx(ColumnSelector, { type: "number", disabled: disabled, value: typeof value === 'string' ? value : '', onChange: (columnId) => onChange(columnId), filterColumn: (c) => c.columnId !== excludeColumnId, placeholder: "Select column" }));
99
+ }
100
+ else if (hasEditor) {
101
+ const resolvedValue = resolved[mode];
102
+ editor = (_jsx(AdaptableInput, { className: "twa:w-full", type: "number", disabled: true, readOnly: true, value: resolvedValue ?? '', title: "Computed across the column's visible rows" }));
103
+ }
104
+ const editorWrapperClassName = [
105
+ 'twa:flex-1 twa:basis-0 twa:min-w-0 twa:-ml-px',
106
+ 'twa:[&_.ab-Input]:w-full twa:[&_.ab-Input]:rounded-l-none!',
107
+ 'twa:[&_[data-slot=input-group]]:w-full! twa:[&_[data-slot=input-group]]:rounded-l-none!',
108
+ ].join(' ');
109
+ return (_jsxs(InputGroup, { Component: Flex, className: "twa:items-stretch twa:max-w-[22rem]", children: [_jsx(SingleSelect, { className: `twa:w-[150px] twa:max-w-none twa:shrink-0 twa:box-border${hasEditor ? ' twa:rounded-r-none!' : ''}`, disabled: disabled, value: mode, items: items, onValueChange: (v) => handleModeChange(v) }), hasEditor && _jsx(Box, { className: editorWrapperClassName, children: editor })] }));
110
+ };
49
111
  const formatRangeBarCellTextSummary = (cellText) => cellText
50
112
  ?.map((t) => (t === 'CellValue' ? 'Cell Value' : 'Percent Value'))
51
113
  .join(' + ') ?? '';
@@ -61,8 +123,8 @@ export const getStyledColumnRangeBarRangeViewValues = (data) => {
61
123
  `Min: ${summarizeBound(range.Min)}`,
62
124
  `Max: ${summarizeBound(range.Max)}`,
63
125
  ];
64
- if (range.Reference != undefined) {
65
- items.push(`Reference: ${summarizeBound(range.Reference)}`);
126
+ if (range.Reference?.Value != undefined) {
127
+ items.push(`Reference: ${summarizeBound(range.Reference.Value)}`);
66
128
  }
67
129
  const bandCount = range.CellRanges?.length ?? 0;
68
130
  if (bandCount > 0) {
@@ -76,7 +138,8 @@ export const getStyledColumnRangeBarRangeViewValues = (data) => {
76
138
  const buildStyledColumnRangeBarDisplaySummaryStrings = (range, options) => {
77
139
  const items = [];
78
140
  const valueMarker = range.Marker;
79
- const referenceMarker = range.ReferenceMarker;
141
+ const referenceProperties = range.Reference;
142
+ const referenceMarker = referenceProperties?.Marker;
80
143
  items.push(`Value Marker Shape: ${valueMarker?.Shape ?? 'Diamond'}`);
81
144
  if (valueMarker?.Color) {
82
145
  items.push(`Value Marker Colour: ${valueMarker.Color}`);
@@ -84,7 +147,7 @@ const buildStyledColumnRangeBarDisplaySummaryStrings = (range, options) => {
84
147
  if (valueMarker?.Size != null) {
85
148
  items.push(`Value Marker Size: ${valueMarker.Size}px`);
86
149
  }
87
- if (range.Reference != undefined) {
150
+ if (referenceProperties?.Value != undefined) {
88
151
  items.push(`Reference Marker Shape: ${referenceMarker?.Shape ?? 'Line'}`);
89
152
  if (referenceMarker?.Color) {
90
153
  items.push(`Reference Marker Colour: ${referenceMarker.Color}`);
@@ -96,25 +159,31 @@ const buildStyledColumnRangeBarDisplaySummaryStrings = (range, options) => {
96
159
  if (range.Orientation === 'Vertical') {
97
160
  items.push('Orientation: Vertical');
98
161
  }
99
- const outOfRangeMode = range.OutOfRangeMode ?? 'Clamp';
162
+ const outOfRangeProperties = range.OutOfRange;
163
+ const outOfRangeMode = outOfRangeProperties?.Mode ?? 'Clamp';
100
164
  if (outOfRangeMode !== 'Clamp') {
101
165
  items.push(`Out of Range: ${outOfRangeMode}`);
102
166
  }
103
- if (range.OutOfRangeColor) {
104
- items.push(`Out of Range Colour: ${range.OutOfRangeColor}`);
167
+ if (outOfRangeProperties?.Color) {
168
+ items.push(`Out of Range Colour: ${outOfRangeProperties.Color}`);
105
169
  }
106
- if (range.TrackColor) {
107
- items.push(`Track Colour: ${range.TrackColor}`);
170
+ const trackProperties = range.Track;
171
+ if (trackProperties?.Color) {
172
+ items.push(`Track Colour: ${trackProperties.Color}`);
108
173
  }
109
- if (range.TrackHeight != null) {
110
- items.push(`Track Height: ${range.TrackHeight}px`);
174
+ if (trackProperties?.Height != null) {
175
+ items.push(`Track Height: ${trackProperties.Height}px`);
111
176
  }
112
177
  if (range.BackColor) {
113
178
  items.push(`Back Colour: ${range.BackColor}`);
114
179
  }
115
- if (range.CellText?.length) {
116
- items.push(`Cell Text: ${formatRangeBarCellTextSummary(range.CellText)}`);
117
- items.push(`Cell Text Position: ${range.CellTextPosition ?? 'Below'}`);
180
+ if (hasBarChartCellTextConfigured(range.CellTextProperties)) {
181
+ const tokens = getActiveBarChartCellTextTokens(range.CellTextProperties);
182
+ items.push(`Cell Text: ${formatRangeBarCellTextSummary(tokens)}`);
183
+ const layoutSummary = formatBarChartCellTextLayoutSummary(resolveBarChartCellTextLayout(range.CellTextProperties));
184
+ if (layoutSummary) {
185
+ items.push(`Placement: ${layoutSummary}`);
186
+ }
118
187
  }
119
188
  else if (options.includeEmptyCellText) {
120
189
  items.push('Cell Text: None');
@@ -144,7 +213,7 @@ export const renderStyledColumnRangeBarRangeStepSummary = (data) => {
144
213
  return _jsx(Tag, { children: "No Styling Defined" });
145
214
  }
146
215
  const tagItems = getStyledColumnRangeBarRangeViewValues(data);
147
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2 twa:items-start", children: [_jsx(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: tagItems.map((item) => (_jsx(Tag, { children: item }, item))) }), _jsx(RangeBarRangesSummaryPreview, { rangeStyle: range })] }));
216
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-2 twa:items-start", children: [renderSummaryStringTags(tagItems), _jsx(RangeBarRangesSummaryPreview, { rangeStyle: range })] }));
148
217
  };
149
218
  export const StyledColumnRangeBarRangeView = ({ data }) => renderStyledColumnRangeBarRangeStepSummary(data);
150
219
  /** Summary for the Display wizard step (markers, track, text). */
@@ -160,7 +229,7 @@ export const renderStyledColumnRangeBarDisplayStepSummary = (data) => {
160
229
  if (!items.length) {
161
230
  return _jsx(Tag, { children: "No Display Defined" });
162
231
  }
163
- return (_jsx(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: items.map((item) => (_jsx(Tag, { children: item }, item))) }));
232
+ return renderSummaryStringTags(items);
164
233
  };
165
234
  /**
166
235
  * Combined summary for the Styled Columns list row (preview + key facts).
@@ -260,48 +329,79 @@ export const StyledColumnWizardRangeBarSection = (props) => {
260
329
  },
261
330
  });
262
331
  }, [data, range]);
332
+ const updateBackColor = (color) => {
333
+ if (color) {
334
+ update({ BackColor: color });
335
+ return;
336
+ }
337
+ const next = { ...range };
338
+ delete next.BackColor;
339
+ props.onChange({ ...data, RangeBarStyle: next });
340
+ };
341
+ const updateTrackProperties = (patch) => {
342
+ const merged = {
343
+ ...range.Track,
344
+ ...patch,
345
+ };
346
+ const isEmpty = merged.Color == undefined && merged.Height == undefined;
347
+ update({ Track: isEmpty ? undefined : merged });
348
+ };
349
+ const updateOutOfRangeProperties = (patch) => {
350
+ const merged = {
351
+ ...range.OutOfRange,
352
+ ...patch,
353
+ };
354
+ // Default mode is `Clamp` with no override colour; drop the wrapper in
355
+ // that case so empty state serialises cleanly.
356
+ const isEmpty = (merged.Mode == undefined || merged.Mode === 'Clamp') && merged.Color == undefined;
357
+ update({ OutOfRange: isEmpty ? undefined : merged });
358
+ };
359
+ const updateReferenceProperties = (patch) => {
360
+ const merged = {
361
+ Value: range.Reference?.Value,
362
+ ...range.Reference,
363
+ ...patch,
364
+ };
365
+ update({ Reference: merged });
366
+ };
263
367
  // -- Bound editors ---------------------------------------------------------
368
+ // Resolved values for the column-wide aggregate bound modes, shown read-only
369
+ // in the bound editor so the user sees the underlying number.
370
+ const resolvedBoundValues = {
371
+ 'Col-Min': minMaxRangeValues?.min,
372
+ 'Col-Max': minMaxRangeValues?.max,
373
+ 'Col-Avg': column ? api.styledColumnApi.internalApi.getAvgValueForNumericColumn(column) : undefined,
374
+ 'Col-Median': column
375
+ ? api.styledColumnApi.internalApi.getMedianValueForNumericColumn(column)
376
+ : undefined,
377
+ };
264
378
  /**
265
- * Renders the mode + value pair for one of `Min` / `Max` / `Reference`.
266
- * Centralised so the three controls stay visually and behaviourally
267
- * identical (only the field name differs).
379
+ * Renders one of `Min` / `Max` / `Reference` as a single joined row (type
380
+ * selector + contextual editor). Centralised so the three controls stay
381
+ * visually and behaviourally identical (only the field name differs).
268
382
  */
269
383
  const renderBoundEditor = (opts) => {
270
- const value = range[opts.field];
271
- const mode = getBoundMode(value);
272
- const handleModeChange = (next) => {
273
- if (next === 'None') {
384
+ const setBound = (next) => {
385
+ if (opts.field === 'Reference') {
386
+ if (next === undefined) {
387
+ const cleaned = { ...range };
388
+ delete cleaned.Reference;
389
+ props.onChange({ ...data, RangeBarStyle: cleaned });
390
+ return;
391
+ }
392
+ updateReferenceProperties({ Value: next });
393
+ return;
394
+ }
395
+ if (next === undefined) {
274
396
  const cleaned = { ...range };
275
397
  delete cleaned[opts.field];
276
398
  props.onChange({ ...data, RangeBarStyle: cleaned });
277
399
  return;
278
400
  }
279
- if (next === 'Number') {
280
- update({ [opts.field]: opts.fallbackNumber });
281
- return;
282
- }
283
- if (next === 'Column') {
284
- const candidate = api.columnApi
285
- .getNumericColumns()
286
- .find((c) => c.columnId !== data.ColumnId);
287
- update({ [opts.field]: candidate?.columnId ?? '' });
288
- return;
289
- }
290
- // Col-Min / Col-Max / Col-Avg / Col-Median
291
401
  update({ [opts.field]: next });
292
402
  };
293
- const items = [
294
- ...(opts.optional ? [{ value: 'None', label: 'None' }] : []),
295
- { value: 'Number', label: BOUND_MODE_LABELS.Number },
296
- { value: 'Column', label: BOUND_MODE_LABELS.Column },
297
- { value: 'Col-Min', label: BOUND_MODE_LABELS['Col-Min'] },
298
- { value: 'Col-Max', label: BOUND_MODE_LABELS['Col-Max'] },
299
- { value: 'Col-Avg', label: BOUND_MODE_LABELS['Col-Avg'] },
300
- { value: 'Col-Median', label: BOUND_MODE_LABELS['Col-Median'] },
301
- ];
302
- return (_jsxs(_Fragment, { children: [_jsx(FormRow, { label: `${opts.label}:`, children: _jsx(Box, { className: "twa:max-w-[180px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: mode, onValueChange: (v) => handleModeChange(v), items: items }) }) }), mode === 'Number' && (_jsx(FormRow, { label: `${opts.label} Value:`, children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(AdaptableInput, { type: "number", value: typeof value === 'number' ? value : '', onChange: (e) => update({
303
- [opts.field]: e.target.value === '' ? 0 : Number(e.target.value),
304
- }) }) }) })), mode === 'Column' && (_jsx(FormRow, { label: `${opts.label} Column:`, children: _jsx(Box, { className: "twa:max-w-[220px]", children: _jsx(ColumnSelector, { type: "number", value: typeof value === 'string' ? value : '', onChange: (columnId) => update({ [opts.field]: columnId }), filterColumn: (c) => c.columnId !== data.ColumnId, placeholder: "Select numeric column" }) }) }))] }));
403
+ const value = opts.field === 'Reference' ? range.Reference?.Value : range[opts.field];
404
+ return (_jsx(FormRow, { label: `${opts.label}:`, children: _jsx(RangeBarBoundInput, { api: api, value: value, optional: opts.optional, fallbackNumber: opts.fallbackNumber, excludeColumnId: data.ColumnId, resolved: resolvedBoundValues, disabled: disabled, onChange: setBound }) }));
305
405
  };
306
406
  // -- Marker editors --------------------------------------------------------
307
407
  const updateValueMarker = (patch) => {
@@ -314,10 +414,10 @@ export const StyledColumnWizardRangeBarSection = (props) => {
314
414
  });
315
415
  };
316
416
  const updateReferenceMarker = (patch) => {
317
- update({
318
- ReferenceMarker: {
417
+ updateReferenceProperties({
418
+ Marker: {
319
419
  Shape: 'Line',
320
- ...range.ReferenceMarker,
420
+ ...range.Reference?.Marker,
321
421
  ...patch,
322
422
  },
323
423
  });
@@ -329,18 +429,20 @@ export const StyledColumnWizardRangeBarSection = (props) => {
329
429
  Color: range.Marker?.Color ?? '',
330
430
  Size: range.Marker?.Size ?? (range.Marker?.Shape === 'Line' ? 2 : 10),
331
431
  };
432
+ const referenceMarkerCfg = range.Reference?.Marker;
332
433
  const referenceMarker = {
333
- Shape: range.ReferenceMarker?.Shape ?? 'Line',
334
- Color: range.ReferenceMarker?.Color ?? '',
335
- Size: range.ReferenceMarker?.Size ?? (range.ReferenceMarker?.Shape === 'Line' ? 2 : 8),
434
+ Shape: referenceMarkerCfg?.Shape ?? 'Line',
435
+ Color: referenceMarkerCfg?.Color ?? '',
436
+ Size: referenceMarkerCfg?.Size ?? (referenceMarkerCfg?.Shape === 'Line' ? 2 : 8),
336
437
  };
337
438
  // -- Cell text -------------------------------------------------------------
338
- const toggleCellText = (token, checked) => {
339
- const current = range.CellText ?? [];
340
- const next = checked
341
- ? Array.from(new Set([...current, token]))
342
- : current.filter((t) => t !== token);
343
- update({ CellText: next });
439
+ const toggleCellText = (token, show) => {
440
+ update(toggleBarChartCellTextToken(range.CellTextProperties, token, show));
441
+ };
442
+ const onCellTextPlacementChange = (token, patch) => {
443
+ update({
444
+ CellTextProperties: patchBarChartCellTextPlacement(range.CellTextProperties, token, patch),
445
+ });
344
446
  };
345
447
  const toggleToolTipText = (token, checked) => {
346
448
  const current = range.ToolTipText ?? [];
@@ -349,9 +451,6 @@ export const StyledColumnWizardRangeBarSection = (props) => {
349
451
  : current.filter((t) => t !== token);
350
452
  update({ ToolTipText: next });
351
453
  };
352
- const handleCellTextPositionChange = (pos) => {
353
- update({ CellTextPosition: pos });
354
- };
355
454
  // -------------------------------------------------------------------------
356
455
  // Render
357
456
  // -------------------------------------------------------------------------
@@ -360,10 +459,10 @@ export const StyledColumnWizardRangeBarSection = (props) => {
360
459
  ? 'You need to select a column before styling.'
361
460
  : `Column "${data.ColumnId}" was not found in the grid.` }) }));
362
461
  }
363
- const hasReference = range.Reference != undefined;
364
- const outOfRangeMode = range.OutOfRangeMode ?? 'Clamp';
462
+ const hasReference = range.Reference?.Value != undefined;
463
+ const outOfRangeMode = range.OutOfRange?.Mode ?? 'Clamp';
365
464
  const isRangeVariant = props.variant === 'range';
366
- return (_jsxs(Box, { children: [isRangeVariant && (_jsxs(_Fragment, { children: [_jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Bounds" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Set the Min, Max and Reference values for the range bar" })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [renderBoundEditor({
465
+ return (_jsxs(Box, { children: [isRangeVariant && (_jsxs(_Fragment, { children: [_jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Bounds" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Set each row's track scale. A bound can be a fixed number, another column's value (read per row), or a column-wide aggregate (min, max, average, median). Reference is an optional second marker." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [renderBoundEditor({
367
466
  label: 'Min',
368
467
  field: 'Min',
369
468
  optional: false,
@@ -383,15 +482,13 @@ export const StyledColumnWizardRangeBarSection = (props) => {
383
482
  : 'Optional second marker when a Reference bound is set on the Style step.' })] }), _jsx(Card.Body, { children: hasReference ? (_jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Shape:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: referenceMarker.Shape, onValueChange: (s) => updateReferenceMarker({ Shape: s }), items: MARKER_SHAPES.map((s) => ({ value: s.value, label: s.label })) }) }) }), _jsx(FormRow, { label: `${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsx(ColorPicker, { disabled: disabled, api: api, value: referenceMarker.Color || undefined, onChange: (c) => updateReferenceMarker({ Color: c }) }) }), _jsx(FormRow, { label: "Size:", children: _jsx(Box, { className: "twa:max-w-[100px]", children: _jsx(AdaptableInput, { type: "number", min: 1, value: referenceMarker.Size, onChange: (e) => updateReferenceMarker({ Size: Number(e.target.value) }) }) }) })] })) : (_jsx(Box, { className: "twa:text-xs twa:opacity-60 twa:max-w-[520px]", children: "Add a Reference value on the Style step (Bounds section) to enable this marker (e.g. previous close, target, midpoint)." })) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Track" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "The line representing the [Min, Max] interval, plus optional cell background." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Orientation:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: range.Orientation ?? 'Horizontal', onValueChange: (v) => update({ Orientation: v }), items: [
384
483
  { value: 'Horizontal', label: 'Horizontal' },
385
484
  { value: 'Vertical', label: 'Vertical' },
386
- ] }) }) }), range.Orientation === 'Vertical' && (_jsx(FormRow, { label: "", children: _jsxs(Box, { className: "twa:text-xs twa:text-neutral-500 twa:max-w-[520px]", children: ["Tip: vertical Range Bars need a tall row height to be readable (we recommend at least 60px). Set ", _jsx("code", { children: "rowHeight" }), " on ", _jsx("code", { children: " gridOptions " }), " or use ", _jsx("code", { children: "getRowHeight" }), "."] }) })), _jsx(FormRow, { label: `Track ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsxs(Flex, { alignItems: "center", children: [_jsx(CheckBox, { disabled: disabled, checked: !!range.TrackColor, onChange: (checked) => update({ TrackColor: checked ? getGraySwatchColor() : undefined }), className: "twa:mr-2" }), range.TrackColor != undefined && (_jsx(ColorPicker, { disabled: disabled, api: api, value: range.TrackColor, onChange: (c) => update({ TrackColor: c }) }))] }) }), _jsx(FormRow, { label: range.Orientation === 'Vertical' ? 'Track Width (px):' : 'Track Height (px):', children: _jsx(Box, { className: "twa:max-w-[100px]", children: _jsx(AdaptableInput, { type: "number", min: 1, value: range.TrackHeight ?? '', onChange: (e) => update({
387
- TrackHeight: e.target.value === '' ? undefined : Number(e.target.value),
388
- }), placeholder: "4" }) }) }), _jsx(FormRow, { label: `Back ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsxs(Flex, { alignItems: "center", children: [_jsx(CheckBox, { disabled: disabled, checked: !!range.BackColor, onChange: (checked) => update({ BackColor: checked ? getGraySwatchColor() : null }), className: "twa:mr-2" }), range.BackColor != undefined && (_jsx(ColorPicker, { disabled: disabled, api: api, value: range.BackColor, onChange: (c) => update({ BackColor: c }) }))] }) })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Out of Range" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "How to draw the value marker when the cell value falls outside [Min, Max]." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Behaviour:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: outOfRangeMode, onValueChange: (v) => update({ OutOfRangeMode: v }), items: [
485
+ ] }) }) }), range.Orientation === 'Vertical' && (_jsx(FormRow, { label: "", children: _jsxs(Box, { className: "twa:text-xs twa:text-neutral-500 twa:max-w-[520px]", children: ["Tip: vertical Range Bars need a tall row height to be readable (we recommend at least 60px). Set ", _jsx("code", { children: "rowHeight" }), " on ", _jsx("code", { children: " gridOptions " }), " or use ", _jsx("code", { children: "getRowHeight" }), "."] }) })), _jsx(FormRow, { label: `Track ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsx(OptionalColorPicker, { disabled: disabled, api: api, value: range.Track?.Color, defaultColor: getGraySwatchColor(), onChange: (c) => updateTrackProperties({ Color: c }) }) }), _jsx(FormRow, { label: range.Orientation === 'Vertical' ? 'Track Width (px):' : 'Track Height (px):', children: _jsx(Box, { className: "twa:max-w-[100px]", children: _jsx(AdaptableInput, { type: "number", min: 1, value: range.Track?.Height ?? '', onChange: (e) => updateTrackProperties({
486
+ Height: e.target.value === '' ? undefined : Number(e.target.value),
487
+ }), placeholder: "4" }) }) }), _jsx(FormRow, { label: `Back ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsx(OptionalColorPicker, { disabled: disabled, api: api, value: range.BackColor ?? undefined, defaultColor: getGraySwatchColor(), onChange: (c) => updateBackColor(c) }) })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:mb-3", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Out of Range" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "How to draw the value marker when the cell value falls outside [Min, Max]." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Behaviour:", children: _jsx(Box, { className: "twa:max-w-[160px]", children: _jsx(SingleSelect, { className: "twa:w-full", value: outOfRangeMode, onValueChange: (v) => updateOutOfRangeProperties({
488
+ Mode: v,
489
+ }), items: [
389
490
  { value: 'Clamp', label: 'Clamp to edge' },
390
491
  { value: 'Overflow', label: 'Show outside' },
391
492
  { value: 'Hide', label: 'Hide marker' },
392
- ] }) }) }), outOfRangeMode === 'Clamp' && (_jsx(FormRow, { label: `Out-of-range ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsxs(Flex, { alignItems: "center", children: [_jsx(CheckBox, { disabled: disabled, checked: !!range.OutOfRangeColor, onChange: (checked) => update({ OutOfRangeColor: checked ? 'crimson' : undefined }), className: "twa:mr-2" }), range.OutOfRangeColor != undefined && (_jsx(ColorPicker, { disabled: disabled, api: api, value: range.OutOfRangeColor, onChange: (c) => update({ OutOfRangeColor: c }) }))] }) }))] }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Text & Tooltip" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Optional cell-text overlay and AG Grid tooltip content." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsxs(FormRow, { label: "Cell Display:", children: [_jsx(CheckBox, { disabled: disabled, checked: range.CellText?.includes('CellValue'), onChange: (checked) => toggleCellText('CellValue', checked), children: "Cell Value" }), ' ', _jsx(CheckBox, { disabled: disabled, className: "twa:ml-3", checked: range.CellText?.includes('PercentageValue'), onChange: (checked) => toggleCellText('PercentageValue', checked), children: "Percent Value" })] }), _jsx(FormRow, { label: "Cell Display Position:", children: _jsx(DropdownButton, { disabled: ArrayExtensions.IsNullOrEmpty(range.CellText) || disabled, columns: ['label'], items: [
393
- { label: 'Above Bar', onClick: () => handleCellTextPositionChange('Above') },
394
- { label: 'Below Bar', onClick: () => handleCellTextPositionChange('Below') },
395
- { label: 'Merged', onClick: () => handleCellTextPositionChange('Merged') },
396
- ], children: range.CellTextPosition ?? 'Below' }) }), _jsxs(FormRow, { label: "Tooltip Display:", children: [_jsx(CheckBox, { disabled: disabled, checked: range.ToolTipText?.includes('CellValue'), onChange: (checked) => toggleToolTipText('CellValue', checked), children: "Cell Value" }), ' ', _jsx(CheckBox, { disabled: disabled, className: "twa:ml-3", checked: range.ToolTipText?.includes('PercentageValue'), onChange: (checked) => toggleToolTipText('PercentageValue', checked), children: "Percent Value" })] })] }) })] }), _jsx(StyledColumnRangeBarPreviewCard, { data: data })] }))] }));
493
+ ] }) }) }), outOfRangeMode === 'Clamp' && (_jsx(FormRow, { label: `Out-of-range ${api.internalApi.getCorrectEnglishVariant('Colour')}:`, children: _jsx(OptionalColorPicker, { disabled: disabled, api: api, value: range.OutOfRange?.Color, defaultColor: "crimson", onChange: (c) => updateOutOfRangeProperties({ Color: c }) }) }))] }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Text & Tooltip" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Optional cell-text overlay and AG Grid tooltip content." })] }), _jsx(Card.Body, { children: _jsxs(FormLayout, { sizes: [...RANGE_STYLE_FORM_SIZES], children: [_jsx(FormRow, { label: "Cell Text Layout:", children: _jsx(BarChartCellTextLayoutEditor, { disabled: disabled, cellTextProperties: range.CellTextProperties, onToggle: toggleCellText, onPlacementChange: onCellTextPlacementChange }) }), _jsxs(FormRow, { label: "Tooltip Display:", children: [_jsx(CheckBox, { disabled: disabled, checked: range.ToolTipText?.includes('CellValue'), onChange: (checked) => toggleToolTipText('CellValue', checked), children: "Cell Value" }), ' ', _jsx(CheckBox, { disabled: disabled, className: "twa:ml-3", checked: range.ToolTipText?.includes('PercentageValue'), onChange: (checked) => toggleToolTipText('PercentageValue', checked), children: "Percent Value" })] })] }) })] }), _jsx(StyledColumnRangeBarPreviewCard, { data: data })] }))] }));
397
494
  };
@@ -10,6 +10,7 @@ import { SingleSelect } from '../../../components/NewSelect';
10
10
  import Input from '../../../components/Input';
11
11
  import { getCellBoxStyleSummaryItems, StyledColumnCellStyleEditor, } from './StyledColumnSliceStyleEditors';
12
12
  import { Card } from '../../../components/Card';
13
+ import { renderSummaryStringTags } from '../../Wizard/SummaryColorTag';
13
14
  import { DEFAULT_RATING_GAP, DEFAULT_RATING_ICON, DEFAULT_RATING_MAX, DEFAULT_RATING_SIZE, StyledColumnRatingPreviewCard, } from './StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview';
14
15
  const STYLE_FORM_SIZES = ['200px', '1fr'];
15
16
  const ICON_CHOICES = [
@@ -113,7 +114,7 @@ export const renderStyledColumnRatingSummary = (data) => {
113
114
  const items = buildStyledColumnRatingStyleSummaryStrings(rating, {
114
115
  includeEmptyTooltip: true,
115
116
  });
116
- return (_jsx(Flex, { alignItems: "center", className: "twa:flex-wrap twa:gap-2", children: items.map((item) => (_jsx(Tag, { children: item }, item))) }));
117
+ return renderSummaryStringTags(items);
117
118
  };
118
119
  export const isValidRatingStyle = (data) => {
119
120
  const rating = data.RatingStyle;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { StyledColumn } from '../../../AdaptableState/StyledColumnState';
3
3
  import type { AdaptableApi } from '../../../types';
4
- export declare const renderStyledColumnScopeSummary: (data: StyledColumn) => React.JSX.Element;
4
+ export declare const renderStyledColumnScopeSummary: (data: StyledColumn, api: AdaptableApi) => React.JSX.Element;
5
5
  /** Used by the styled column list view (one-line "Rows: Data, Group, …"). */
6
6
  export declare const collectIncludedRowKindLabels: (styledColumn: StyledColumn) => string[];
7
7
  export declare const isValidStyledColumnScope: (data: StyledColumn, api: AdaptableApi) => true | string;
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
- import { Tag } from '../../../components/Tag';
3
+ import { ColumnTag, Tag } from '../../../components/Tag';
4
4
  import { NewColumnSelector } from '../../Components/ColumnSelector';
5
5
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
6
6
  import { Box, Flex } from '../../../components/Flex';
7
- import { AdaptableFormControlTextClear } from '../../Components/Forms/AdaptableFormControlTextClear';
8
- import FormLayout, { FormRow } from '../../../components/FormLayout';
9
7
  import { CheckBox } from '../../../components/CheckBox';
8
+ import { cn } from '../../../lib/utils';
10
9
  import { getStyledColumnRowKindDisabledReason, isStyledColumnRowKindSupported, sanitizeStyledColumnRowScope, STYLED_COLUMN_ROW_KIND_EXCLUDE_KEY, STYLED_COLUMN_ROW_KINDS, } from '../../../Utilities/Helpers/styledColumnRowKindSupport';
11
10
  import { isUnsupportedColumnDataTypeForIconStyle } from '../../../Utilities/Helpers/iconStyledColumnColumnSupport';
11
+ import { CollapsibleWizardCard, CollapsibleWizardValueSummary, getWizardAccordionSectionClassName, renderCompactColumnTags, useWizardCardAccordion, } from '../../Wizard/CollapsibleWizardCard';
12
12
  // ---------------------------------------------------------------------------
13
13
  // Row-kind helpers
14
14
  // ---------------------------------------------------------------------------
@@ -24,10 +24,10 @@ import { isUnsupportedColumnDataTypeForIconStyle } from '../../../Utilities/Help
24
24
  * (e.g. Sparkline → data rows only).
25
25
  */
26
26
  const ROW_KIND_LABELS = {
27
- Data: 'Data (leaf) rows',
28
- Group: 'Group rows',
29
- Summary: 'Summary rows',
30
- Total: 'Total rows',
27
+ Data: 'Data (leaf) Rows',
28
+ Group: 'Group Rows',
29
+ Summary: 'Summary Rows',
30
+ Total: 'Total Rows',
31
31
  };
32
32
  const defaultRowKindIncluded = (styledColumn, kind) => {
33
33
  if (styledColumn.BadgeStyle) {
@@ -36,22 +36,14 @@ const defaultRowKindIncluded = (styledColumn, kind) => {
36
36
  if (!isStyledColumnRowKindSupported(styledColumn, kind)) {
37
37
  return false;
38
38
  }
39
- // Non-Badge default: leaf rows only.
40
39
  return kind !== 'Group';
41
40
  };
42
- /**
43
- * Resolve "is this row kind included?" using:
44
- * - Type capabilities (unsupported kinds are never included).
45
- * - Explicit `RowScope[Exclude*]` flag when set.
46
- * - Per-type default otherwise.
47
- */
48
41
  const isRowKindIncluded = (styledColumn, kind) => {
49
42
  if (!isStyledColumnRowKindSupported(styledColumn, kind)) {
50
43
  return false;
51
44
  }
52
45
  const scope = styledColumn.RowScope;
53
46
  if (scope) {
54
- // Missing flags default to "include" — same semantics as FormatColumn.
55
47
  return !scope[STYLED_COLUMN_ROW_KIND_EXCLUDE_KEY[kind]];
56
48
  }
57
49
  return defaultRowKindIncluded(styledColumn, kind);
@@ -62,8 +54,7 @@ const collectIncludedRowKinds = (styledColumn) => {
62
54
  // ---------------------------------------------------------------------------
63
55
  // Summary
64
56
  // ---------------------------------------------------------------------------
65
- export const renderStyledColumnScopeSummary = (data) => {
66
- const { api } = useOnePageAdaptableWizardContext();
57
+ export const renderStyledColumnScopeSummary = (data, api) => {
67
58
  const includedKinds = collectIncludedRowKinds(data);
68
59
  const allKinds = includedKinds.length === 4;
69
60
  return (_jsxs(Box, { className: "twa:pr-2 twa:py-2", children: [_jsxs(Box, { className: "twa:mt-1", children: ["Column:", ' ', _jsx(Tag, { children: data.ColumnId
@@ -72,6 +63,15 @@ export const renderStyledColumnScopeSummary = (data) => {
72
63
  };
73
64
  /** Used by the styled column list view (one-line "Rows: Data, Group, …"). */
74
65
  export const collectIncludedRowKindLabels = (styledColumn) => collectIncludedRowKinds(styledColumn);
66
+ const StyledColumnColumnScopeSummary = ({ data, }) => {
67
+ const { api } = useOnePageAdaptableWizardContext();
68
+ return (_jsx(CollapsibleWizardValueSummary, { value: data.ColumnId ? (_jsx(ColumnTag, { children: api.columnApi.getFriendlyNameForColumnId(data.ColumnId) })) : (_jsx(Tag, { children: "No column selected" })) }));
69
+ };
70
+ const StyledColumnRowsScopeSummary = ({ data, }) => {
71
+ const includedKinds = collectIncludedRowKinds(data);
72
+ const allKinds = includedKinds.length === 4;
73
+ return (_jsx(CollapsibleWizardValueSummary, { value: allKinds ? (_jsx(Tag, { children: "All" })) : includedKinds.length === 0 ? (_jsx(Tag, { children: "None" })) : (_jsx(Flex, { flexWrap: "wrap", className: "twa:gap-1", children: includedKinds.map((kind) => (_jsx(Tag, { children: ROW_KIND_LABELS[kind] }, kind))) })) }));
74
+ };
75
75
  // ---------------------------------------------------------------------------
76
76
  // Validity
77
77
  // ---------------------------------------------------------------------------
@@ -88,10 +88,13 @@ export const isValidStyledColumnScope = (data, api) => {
88
88
  }
89
89
  return true;
90
90
  };
91
+ const StyledColumnRowScopePanel = ({ data, onRowKindChange, }) => (_jsx(Flex, { flexDirection: "column", className: "twa:items-start twa:px-1 twa:py-1", style: { rowGap: 'calc(var(--ab-base-space) * 2)' }, children: STYLED_COLUMN_ROW_KINDS.map((kind) => {
92
+ const supported = isStyledColumnRowKindSupported(data, kind);
93
+ const disabledReason = getStyledColumnRowKindDisabledReason(data, kind);
94
+ return (_jsx(CheckBox, { "data-name": `include-${kind.toLowerCase()}-rows-checkbox`, disabled: !supported, title: disabledReason, checked: isRowKindIncluded(data, kind), onChange: (checked) => onRowKindChange(kind, checked), children: ROW_KIND_LABELS[kind] }, kind));
95
+ }) }));
91
96
  export const StyledColumnWizardScopeSection = (props) => {
92
97
  const { data, api } = useOnePageAdaptableWizardContext();
93
- // Strip impossible `RowScope` flags when the styled column type cannot
94
- // ever target a row kind (e.g. Sparkline → data rows only).
95
98
  React.useEffect(() => {
96
99
  const next = sanitizeStyledColumnRowScope(data);
97
100
  if (!next) {
@@ -116,8 +119,6 @@ export const StyledColumnWizardScopeSection = (props) => {
116
119
  data.RowScope?.ExcludeSummaryRows,
117
120
  data.RowScope?.ExcludeTotalRows,
118
121
  ]);
119
- // Icon Style must not retain an array-typed ColumnId when the user swaps
120
- // type (or loads invalid state): clear so the picker and validation align.
121
122
  React.useEffect(() => {
122
123
  if (!data.IconStyle || !data.ColumnId) {
123
124
  return;
@@ -130,9 +131,6 @@ export const StyledColumnWizardScopeSection = (props) => {
130
131
  });
131
132
  }
132
133
  }, [data.Uuid, data.IconStyle, data.ColumnId]);
133
- // -------------------------------------------------------------------------
134
- // Column picker
135
- // -------------------------------------------------------------------------
136
134
  const sortableCols = React.useMemo(() => {
137
135
  let sortableColumns = [];
138
136
  if (data.SparklineStyle) {
@@ -153,7 +151,6 @@ export const StyledColumnWizardScopeSection = (props) => {
153
151
  ];
154
152
  }
155
153
  else {
156
- // Gradient / PercentBar / BulletChart / Rating / RangeBar - numeric only.
157
154
  sortableColumns = api.columnApi.getNumericColumns();
158
155
  }
159
156
  const styledColumns = api.styledColumnApi.getStyledColumns();
@@ -166,7 +163,7 @@ export const StyledColumnWizardScopeSection = (props) => {
166
163
  })
167
164
  .filter(Boolean);
168
165
  return sortableColumns.filter((column) => usedColumnIds.every((usedColumnId) => column.columnId !== usedColumnId));
169
- }, [data]);
166
+ }, [data, api]);
170
167
  const handleColumnsChange = (columnIds) => {
171
168
  const columnId = columnIds[0];
172
169
  const emptyRanges = api.columnScopeApi.createCellColorRangesForScope({
@@ -196,19 +193,10 @@ export const StyledColumnWizardScopeSection = (props) => {
196
193
  }
197
194
  props.onChange(newStyledColumn);
198
195
  };
199
- const [columnsSearchText, setColumnsSearchText] = React.useState('');
200
- // -------------------------------------------------------------------------
201
- // Row-kind toggles
202
- // -------------------------------------------------------------------------
203
196
  const handleRowKindChange = (kind, include) => {
204
197
  if (!isStyledColumnRowKindSupported(data, kind)) {
205
198
  return;
206
199
  }
207
- // Materialise an explicit RowScope as soon as the user touches a
208
- // checkbox. We start from the per-type default so any kinds the user
209
- // didn't touch carry over their historical value (e.g. group rows
210
- // stay excluded for a Gradient column even after the user toggles
211
- // summary rows).
212
200
  const baseScope = data.RowScope ?? {
213
201
  ExcludeDataRows: !defaultRowKindIncluded(data, 'Data'),
214
202
  ExcludeGroupRows: !defaultRowKindIncluded(data, 'Group'),
@@ -224,15 +212,13 @@ export const StyledColumnWizardScopeSection = (props) => {
224
212
  RowScope: nextScope,
225
213
  });
226
214
  };
227
- // -------------------------------------------------------------------------
228
- // Render
229
- // -------------------------------------------------------------------------
230
- return (_jsxs(Flex, { flexDirection: "column", style: { height: '100%' }, children: [_jsxs(Flex, { flexDirection: "column", className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:border-b-foreground/20", children: [_jsx(Box, { className: "twa:text-5 twa:font-medium", children: "Column" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70", children: "The Column the Style is applied to" }), _jsx(Box, { className: "twa:flex-1" }), _jsx(AdaptableFormControlTextClear, { value: columnsSearchText, OnTextChange: setColumnsSearchText, placeholder: "Type to search columns", style: { flex: 1, maxWidth: 320 } })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto", children: _jsx(NewColumnSelector, { columnFilterText: columnsSearchText, availableColumns: sortableCols, selected: data.ColumnId ? [data.ColumnId] : [], singleSelect: true, onChange: handleColumnsChange, allowReorder: false }) })] }), _jsxs(Box, { className: "twa:border-t twa:border-border twa:px-2 twa:py-3 twa:shrink-0", children: [_jsxs(Flex, { alignItems: "center", className: "twa:gap-3 twa:pb-2 twa:mb-3 twa:flex-wrap twa:border-b twa:border-b-foreground/20", children: [_jsx(Box, { className: "twa:text-5 twa:font-medium", children: "Rows" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Which kinds of Rows should the Styled Column render on" })] }), _jsx(Flex, { flexDirection: "row", className: "twa:gap-6 twa:flex-wrap", children: [
231
- STYLED_COLUMN_ROW_KINDS.slice(0, 2),
232
- STYLED_COLUMN_ROW_KINDS.slice(2),
233
- ].map((rowKindGroup, groupIndex) => (_jsx(Box, { className: "twa:flex-1 twa:min-w-[220px]", children: _jsx(FormLayout, { sizes: ['180px', '1fr'], children: rowKindGroup.map((kind) => {
234
- const supported = isStyledColumnRowKindSupported(data, kind);
235
- const disabledReason = getStyledColumnRowKindDisabledReason(data, kind);
236
- return (_jsx(FormRow, { label: `${ROW_KIND_LABELS[kind]}:`, children: _jsx(Flex, { alignItems: "center", className: "twa:ml-2", children: _jsx(CheckBox, { "data-name": `include-${kind.toLowerCase()}-rows-checkbox`, className: "twa:mr-2", disabled: !supported, title: disabledReason, checked: isRowKindIncluded(data, kind), onChange: (checked) => handleRowKindChange(kind, checked) }) }) }, kind));
237
- }) }) }, groupIndex))) })] })] }));
215
+ const includedRowKinds = collectIncludedRowKinds(data);
216
+ const allRowKindsIncluded = includedRowKinds.length === 4;
217
+ const initialExpandedCardId = data.ColumnId ? null : 'column';
218
+ const { bindCard, hasExpandedCard, expandedFillsSpace } = useWizardCardAccordion(initialExpandedCardId, { fillExpandedCard: true });
219
+ const columnCompactSummary = data.ColumnId
220
+ ? renderCompactColumnTags([data.ColumnId], (columnId) => api.columnApi.getFriendlyNameForColumnId(columnId), { emptyLabel: 'No column' })
221
+ : _jsx(Tag, { children: "No column" });
222
+ const rowsCompactSummary = allRowKindsIncluded ? (_jsx(Tag, { children: "All" })) : includedRowKinds.length === 0 ? (_jsx(Tag, { children: "None" })) : (_jsx(Flex, { alignItems: "center", className: "twa:gap-1 twa:min-w-0 twa:overflow-hidden", children: includedRowKinds.map((kind) => (_jsx(Tag, { className: "twa:shrink-0", children: kind }, kind))) }));
223
+ return (_jsxs(Box, { className: cn(getWizardAccordionSectionClassName(hasExpandedCard, expandedFillsSpace), 'twa:p-2'), children: [_jsx(CollapsibleWizardCard, { ...bindCard('column', { fillAvailable: true }), surface: "panel", "data-name": "styled-column-scope-column", title: "Column", help: "Select Column the Style is applied to", collapsedHelp: "Column the Style is applied to", compactSummary: columnCompactSummary, summary: _jsx(StyledColumnColumnScopeSummary, { data: data }), className: "twa:overflow-hidden twa:flex twa:flex-col", bodyClassName: "twa:min-h-[200px] twa:max-h-[420px] twa:overflow-hidden twa:flex twa:flex-col twa:!pt-0 twa:!pb-0 twa:px-1", children: _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-hidden twa:h-full twa:px-1 twa:pb-1 twa:flex twa:flex-col", children: _jsx(NewColumnSelector, { compactColumnList: true, availableColumns: sortableCols, selected: data.ColumnId ? [data.ColumnId] : [], singleSelect: true, onChange: handleColumnsChange, allowReorder: false }) }) }), _jsx(CollapsibleWizardCard, { ...bindCard('rows'), surface: "panel", "data-name": "styled-column-scope-rows", title: "Rows", help: "Select which kinds of Rows the Styled Column will render on", collapsedHelp: "Row kinds the Styled Column renders on", compactSummary: rowsCompactSummary, summary: _jsx(StyledColumnRowsScopeSummary, { data: data }), children: _jsx(StyledColumnRowScopePanel, { data: data, onRowKindChange: handleRowKindChange }) })] }));
238
224
  };
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { BarChartCellTextPlacement, BarChartCellTextProperties } from '../../../../../AdaptableState/StyledColumns/Common/BarChartCellText';
3
+ import { CellTextOption } from '../../../../../AdaptableState/StyledColumns/Common/CellTextOptions';
4
+ export declare const BarChartCellTextLayoutEditor: React.FunctionComponent<{
5
+ disabled?: boolean;
6
+ cellTextProperties?: BarChartCellTextProperties;
7
+ onToggle: (token: CellTextOption, show: boolean) => void;
8
+ onPlacementChange: (token: CellTextOption, patch: Partial<BarChartCellTextPlacement>) => void;
9
+ }>;