@mwater/visualization 5.1.0 → 5.3.0

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 (305) hide show
  1. package/lib/ColorComponent.d.ts +10 -11
  2. package/lib/ColorComponent.js +78 -29
  3. package/lib/ColorSchemeFactory.d.ts +13 -2
  4. package/lib/ColorSchemeFactory.js +7 -5
  5. package/lib/CustomColorsContext.d.ts +6 -0
  6. package/lib/CustomColorsContext.js +6 -0
  7. package/lib/FiltersDesignerComponent.d.ts +1 -4
  8. package/lib/FiltersDesignerComponent.js +2 -3
  9. package/lib/GlobalFilter.d.ts +13 -0
  10. package/lib/GlobalFilter.js +2 -0
  11. package/lib/LocaleContextInjector.d.ts +5 -11
  12. package/lib/LocaleContextInjector.js +4 -12
  13. package/lib/MWaterAddRelatedFormComponent.js +3 -3
  14. package/lib/MWaterAddRelatedIndicatorComponent.d.ts +1 -4
  15. package/lib/MWaterAddRelatedIndicatorComponent.js +6 -6
  16. package/lib/MWaterCompleteTableSelectComponent.d.ts +7 -25
  17. package/lib/MWaterCompleteTableSelectComponent.js +36 -36
  18. package/lib/MWaterContextComponent.d.ts +19 -9
  19. package/lib/MWaterContextComponent.js +38 -22
  20. package/lib/MWaterCustomTablesetListComponent.js +9 -3
  21. package/lib/MWaterGlobalFiltersComponent.d.ts +6 -5
  22. package/lib/MWaterGlobalFiltersComponent.js +4 -4
  23. package/lib/MWaterLoaderComponent.d.ts +15 -3
  24. package/lib/MWaterLoaderComponent.js +11 -2
  25. package/lib/MWaterTableSelectComponent.d.ts +1 -4
  26. package/lib/MWaterTableSelectComponent.js +10 -12
  27. package/lib/UIComponents.d.ts +2 -2
  28. package/lib/UIComponents.js +4 -12
  29. package/lib/axes/Axis.d.ts +20 -25
  30. package/lib/axes/AxisBuilder.d.ts +7 -4
  31. package/lib/axes/AxisBuilder.js +12 -8
  32. package/lib/axes/AxisComponent.d.ts +6 -9
  33. package/lib/axes/AxisComponent.js +1 -2
  34. package/lib/axes/ColorPaletteCollectionComponent.d.ts +5 -12
  35. package/lib/axes/ColorPaletteCollectionComponent.js +67 -36
  36. package/lib/dashboards/DashboardComponent.d.ts +4 -17
  37. package/lib/dashboards/DashboardComponent.js +20 -67
  38. package/lib/dashboards/DashboardDesign.d.ts +5 -20
  39. package/lib/dashboards/DashboardUpgrader.js +36 -1
  40. package/lib/dashboards/DashboardViewComponent.d.ts +5 -34
  41. package/lib/dashboards/DashboardViewComponent.js +112 -136
  42. package/lib/dashboards/FontStyleEditor.d.ts +8 -0
  43. package/lib/dashboards/FontStyleEditor.js +130 -0
  44. package/lib/dashboards/LayoutOptionsComponent.d.ts +0 -1
  45. package/lib/dashboards/LayoutOptionsComponent.js +209 -39
  46. package/lib/dashboards/ServerDashboardDataSource.d.ts +1 -2
  47. package/lib/dashboards/ServerDashboardDataSource.js +52 -33
  48. package/lib/dashboards/SettingsModalComponent.d.ts +4 -15
  49. package/lib/dashboards/SettingsModalComponent.js +24 -38
  50. package/lib/dashboards/WidgetComponent.d.ts +3 -3
  51. package/lib/dashboards/WidgetComponent.js +3 -6
  52. package/lib/dashboards/WidgetDataSourcePrioritizer.d.ts +20 -0
  53. package/lib/dashboards/WidgetDataSourcePrioritizer.js +72 -0
  54. package/lib/dashboards/layoutOptions.d.ts +83 -0
  55. package/lib/dashboards/layoutOptions.js +436 -10
  56. package/lib/datagrids/DatagridComponent.d.ts +2 -9
  57. package/lib/datagrids/DatagridDataSource.d.ts +3 -3
  58. package/lib/datagrids/DatagridDataSource.js +0 -14
  59. package/lib/datagrids/DatagridDesign.d.ts +7 -6
  60. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -93
  61. package/lib/datagrids/DatagridDesignerComponent.js +8 -6
  62. package/lib/datagrids/DatagridViewComponent.js +1 -1
  63. package/lib/datagrids/FindReplaceModalComponent.d.ts +4 -20
  64. package/lib/datagrids/FindReplaceModalComponent.js +27 -13
  65. package/lib/datagrids/ServerDatagridDataSource.d.ts +8 -7
  66. package/lib/datagrids/ServerDatagridDataSource.js +88 -36
  67. package/lib/demo.js +4 -4
  68. package/lib/index.css +5 -0
  69. package/lib/index.d.ts +2 -1
  70. package/lib/index.js +0 -1
  71. package/lib/layouts/LayoutManager.d.ts +33 -29
  72. package/lib/layouts/LayoutManager.js +2 -8
  73. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +26 -56
  74. package/lib/layouts/blocks/BlocksDisplayComponent.js +122 -205
  75. package/lib/layouts/blocks/BlocksLayoutManager.d.ts +6 -22
  76. package/lib/layouts/blocks/BlocksLayoutManager.js +5 -14
  77. package/lib/layouts/blocks/HorizontalBlockComponent.d.ts +5 -4
  78. package/lib/layouts/blocks/HorizontalBlockComponent.js +5 -5
  79. package/lib/layouts/grid/GridLayoutManager.d.ts +2 -1
  80. package/lib/mWaterLoader.d.ts +2 -0
  81. package/lib/mWaterLoader.js +2 -1
  82. package/lib/maps/AddLayerComponent.d.ts +6 -8
  83. package/lib/maps/AddLayerComponent.js +6 -6
  84. package/lib/maps/BingLayer.js +10 -20
  85. package/lib/maps/BufferLayer.js +5 -2
  86. package/lib/maps/ChoroplethLayer.js +2 -1
  87. package/lib/maps/ClusterLayer.js +3 -1
  88. package/lib/maps/DirectMapDataSource.d.ts +5 -2
  89. package/lib/maps/DirectMapDataSource.js +2 -1
  90. package/lib/maps/EditPopupComponent.js +2 -1
  91. package/lib/maps/GridLayer.js +5 -3
  92. package/lib/maps/GridLayerDesigner.js +0 -1
  93. package/lib/maps/LayerSwitcherComponent.js +1 -1
  94. package/lib/maps/MapComponent.d.ts +3 -11
  95. package/lib/maps/MapComponent.js +3 -3
  96. package/lib/maps/MapDesign.d.ts +2 -13
  97. package/lib/maps/MapFiltersDesignerComponent.d.ts +0 -4
  98. package/lib/maps/MapFiltersDesignerComponent.js +4 -5
  99. package/lib/maps/MarkersLayer.js +30 -25
  100. package/lib/maps/RasterMapViewComponent.d.ts +3 -13
  101. package/lib/maps/RasterMapViewComponent.js +3 -3
  102. package/lib/maps/RegionSelectComponent.d.ts +2 -1
  103. package/lib/maps/ServerMapDataSource.d.ts +3 -4
  104. package/lib/maps/ServerMapDataSource.js +5 -5
  105. package/lib/maps/VectorMapViewComponent.js +2 -1
  106. package/lib/maps/mapSymbols.js +2 -0
  107. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  108. package/lib/maps/vectorMaps.d.ts +1 -0
  109. package/lib/maps/vectorMaps.js +70 -56
  110. package/lib/quickfilter/QuickfilterCompiler.d.ts +1 -1
  111. package/lib/quickfilter/QuickfiltersComponent.d.ts +1 -4
  112. package/lib/quickfilter/QuickfiltersComponent.js +3 -3
  113. package/lib/richtext/DropdownPaletteItem.d.ts +32 -0
  114. package/lib/richtext/DropdownPaletteItem.js +82 -0
  115. package/lib/richtext/FontColorPaletteItem.d.ts +1 -5
  116. package/lib/richtext/FontColorPaletteItem.js +32 -27
  117. package/lib/richtext/ItemsHtmlConverter.js +12 -3
  118. package/lib/richtext/RichTextComponent.d.ts +26 -52
  119. package/lib/richtext/RichTextComponent.js +166 -128
  120. package/lib/valueFormatter.js +6 -1
  121. package/lib/wellknown.d.ts +5 -0
  122. package/lib/wellknown.js +288 -0
  123. package/lib/widgets/DropdownWidgetComponent.d.ts +8 -25
  124. package/lib/widgets/DropdownWidgetComponent.js +48 -25
  125. package/lib/widgets/IFrameWidgetComponent.d.ts +3 -11
  126. package/lib/widgets/ImageWidgetComponent.d.ts +8 -27
  127. package/lib/widgets/MapWidget.d.ts +4 -7
  128. package/lib/widgets/MapWidget.js +2 -1
  129. package/lib/widgets/MarkdownWidget.d.ts +2 -7
  130. package/lib/widgets/TOCWidget.d.ts +2 -9
  131. package/lib/widgets/TOCWidget.js +2 -1
  132. package/lib/widgets/Widget.d.ts +2 -0
  133. package/lib/widgets/WidgetDataSource.d.ts +3 -1
  134. package/lib/widgets/charts/Chart.d.ts +0 -1
  135. package/lib/widgets/charts/ChartViewComponent.d.ts +4 -0
  136. package/lib/widgets/charts/ChartViewComponent.js +11 -3
  137. package/lib/widgets/charts/ChartWidget.d.ts +1 -74
  138. package/lib/widgets/charts/ChartWidget.js +4 -183
  139. package/lib/widgets/charts/ChartWidgetComponent.d.ts +51 -0
  140. package/lib/widgets/charts/ChartWidgetComponent.js +167 -0
  141. package/lib/widgets/charts/calendar/CalendarChartViewComponent.d.ts +1 -4
  142. package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +4 -4
  143. package/lib/widgets/charts/imagemosaic/ImagePopupComponent.d.ts +2 -7
  144. package/lib/widgets/charts/layered/LayeredChart.d.ts +5 -10
  145. package/lib/widgets/charts/layered/LayeredChart.js +6 -7
  146. package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +4 -2
  147. package/lib/widgets/charts/layered/LayeredChartCompiler.js +46 -32
  148. package/lib/widgets/charts/layered/LayeredChartDesign.d.ts +4 -0
  149. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.d.ts +5 -31
  150. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +21 -3
  151. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.d.ts +1 -7
  152. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +2 -1
  153. package/lib/widgets/charts/layered/LayeredChartViewComponent.d.ts +1 -4
  154. package/lib/widgets/charts/layered/LayeredChartViewComponent.js +89 -38
  155. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.d.ts +5 -105
  156. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.js +122 -166
  157. package/lib/widgets/charts/pivot/PivotChart.d.ts +6 -0
  158. package/lib/widgets/charts/pivot/PivotChart.js +47 -17
  159. package/lib/widgets/charts/pivot/PivotChartDesign.d.ts +11 -0
  160. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +11 -7
  161. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +1 -1
  162. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.d.ts +2 -2
  163. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.js +20 -36
  164. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +0 -1
  165. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.d.ts +23 -2
  166. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.js +215 -181
  167. package/lib/widgets/charts/pivot/PivotChartUtils.d.ts +2 -2
  168. package/lib/widgets/charts/pivot/PivotChartViewComponent.d.ts +9 -47
  169. package/lib/widgets/charts/pivot/PivotChartViewComponent.js +20 -60
  170. package/lib/widgets/charts/pivot/SegmentDesignerComponent.d.ts +55 -58
  171. package/lib/widgets/charts/table/TableChart.js +8 -4
  172. package/lib/widgets/charts/table/TableChartDesignerComponent.js +3 -3
  173. package/lib/widgets/charts/table/TableChartViewComponent.js +30 -16
  174. package/lib/widgets/text/ExprInsertModalComponent.d.ts +2 -13
  175. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +2 -13
  176. package/lib/widgets/text/TextComponent.d.ts +5 -12
  177. package/lib/widgets/text/TextComponent.js +19 -39
  178. package/lib/widgets/text/TextWidget.d.ts +2 -1
  179. package/lib/widgets/text/TextWidget.js +5 -1
  180. package/lib/widgets/text/TextWidgetComponent.d.ts +15 -3
  181. package/lib/widgets/text/TextWidgetComponent.js +76 -19
  182. package/lib/widgets/text/TextWidgetDesign.d.ts +16 -2
  183. package/lib/widgets/text/TextWidgetDesign.js +6 -0
  184. package/package.json +4 -4
  185. package/src/ColorComponent.tsx +177 -0
  186. package/src/ColorSchemeFactory.ts +12 -6
  187. package/src/CustomColorsContext.tsx +8 -0
  188. package/src/FiltersDesignerComponent.ts +3 -4
  189. package/src/GlobalFilter.ts +17 -0
  190. package/src/LocaleContextInjector.tsx +14 -13
  191. package/src/MWaterAddRelatedFormComponent.ts +3 -3
  192. package/src/MWaterAddRelatedIndicatorComponent.ts +6 -6
  193. package/src/MWaterCompleteTableSelectComponent.tsx +36 -36
  194. package/src/MWaterContextComponent.tsx +42 -33
  195. package/src/MWaterCustomTablesetListComponent.tsx +21 -3
  196. package/src/MWaterGlobalFiltersComponent.ts +8 -8
  197. package/src/MWaterLoaderComponent.ts +14 -4
  198. package/src/MWaterTableSelectComponent.tsx +11 -12
  199. package/src/{UIComponents.ts → UIComponents.tsx} +7 -15
  200. package/src/axes/Axis.ts +24 -25
  201. package/src/axes/AxisBuilder.ts +16 -13
  202. package/src/axes/AxisComponent.ts +3 -4
  203. package/src/axes/{ColorPaletteCollectionComponent.ts → ColorPaletteCollectionComponent.tsx} +87 -61
  204. package/src/dashboards/DashboardComponent.tsx +73 -147
  205. package/src/dashboards/DashboardDesign.ts +5 -25
  206. package/src/dashboards/DashboardUpgrader.ts +41 -1
  207. package/src/dashboards/DashboardViewComponent.tsx +313 -0
  208. package/src/dashboards/FontStyleEditor.tsx +166 -0
  209. package/src/dashboards/LayoutOptionsComponent.tsx +377 -71
  210. package/src/dashboards/ServerDashboardDataSource.ts +52 -33
  211. package/src/dashboards/SettingsModalComponent.tsx +170 -0
  212. package/src/dashboards/WidgetComponent.tsx +6 -12
  213. package/src/dashboards/WidgetDataSourcePrioritizer.ts +82 -0
  214. package/src/dashboards/layoutOptions.tsx +581 -0
  215. package/src/datagrids/DatagridDataSource.ts +6 -12
  216. package/src/datagrids/DatagridDesign.ts +8 -3
  217. package/src/datagrids/DatagridDesignerComponent.tsx +22 -18
  218. package/src/datagrids/DatagridViewComponent.ts +3 -3
  219. package/src/datagrids/ExprCellComponent.ts +0 -1
  220. package/src/datagrids/FindReplaceModalComponent.ts +39 -22
  221. package/src/datagrids/ServerDatagridDataSource.ts +107 -45
  222. package/src/demo.ts +4 -4
  223. package/src/index.css +5 -0
  224. package/src/index.ts +2 -1
  225. package/src/layouts/LayoutManager.ts +44 -42
  226. package/src/layouts/blocks/BlocksDisplayComponent.tsx +498 -0
  227. package/src/layouts/blocks/BlocksLayoutManager.ts +6 -15
  228. package/src/layouts/blocks/HorizontalBlockComponent.ts +9 -8
  229. package/src/mWaterLoader.ts +4 -1
  230. package/src/maps/AddLayerComponent.ts +9 -9
  231. package/src/maps/BingLayer.ts +16 -26
  232. package/src/maps/BufferLayer.ts +5 -2
  233. package/src/maps/ChoroplethLayer.ts +2 -1
  234. package/src/maps/ClusterLayer.ts +3 -1
  235. package/src/maps/DirectMapDataSource.ts +12 -3
  236. package/src/maps/EditPopupComponent.ts +2 -1
  237. package/src/maps/GridLayer.ts +5 -3
  238. package/src/maps/GridLayerDesigner.tsx +0 -1
  239. package/src/maps/LayerSwitcherComponent.tsx +1 -1
  240. package/src/maps/MapComponent.ts +3 -3
  241. package/src/maps/MapDesign.ts +2 -17
  242. package/src/maps/{MapFiltersDesignerComponent.ts → MapFiltersDesignerComponent.tsx} +25 -25
  243. package/src/maps/MarkersLayer.ts +38 -41
  244. package/src/maps/RasterMapViewComponent.ts +3 -3
  245. package/src/maps/ServerMapDataSource.ts +8 -8
  246. package/src/maps/VectorMapViewComponent.tsx +2 -2
  247. package/src/maps/mapSymbols.ts +2 -0
  248. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  249. package/src/maps/vectorMaps.tsx +88 -74
  250. package/src/quickfilter/QuickfilterCompiler.ts +1 -1
  251. package/src/quickfilter/QuickfiltersComponent.ts +3 -3
  252. package/src/richtext/DropdownPaletteItem.tsx +144 -0
  253. package/src/richtext/FontColorPaletteItem.tsx +160 -0
  254. package/src/richtext/ItemsHtmlConverter.ts +15 -5
  255. package/src/richtext/RichTextComponent.tsx +274 -232
  256. package/src/valueFormatter.ts +5 -1
  257. package/src/wellknown.ts +286 -0
  258. package/src/widgets/DropdownWidgetComponent.tsx +75 -0
  259. package/src/widgets/MapWidget.ts +5 -2
  260. package/src/widgets/TOCWidget.ts +2 -1
  261. package/src/widgets/Widget.ts +3 -0
  262. package/src/widgets/WidgetDataSource.ts +3 -1
  263. package/src/widgets/charts/Chart.ts +1 -1
  264. package/src/widgets/charts/ChartViewComponent.ts +16 -3
  265. package/src/widgets/charts/ChartWidget.ts +3 -275
  266. package/src/widgets/charts/ChartWidgetComponent.tsx +281 -0
  267. package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +4 -4
  268. package/src/widgets/charts/layered/LayeredChart.ts +4 -6
  269. package/src/widgets/charts/layered/LayeredChartCompiler.ts +80 -63
  270. package/src/widgets/charts/layered/LayeredChartDesign.ts +7 -1
  271. package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +43 -10
  272. package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +6 -6
  273. package/src/widgets/charts/layered/LayeredChartViewComponent.ts +140 -88
  274. package/src/widgets/charts/pivot/IntersectionDesignerComponent.tsx +305 -221
  275. package/src/widgets/charts/pivot/PivotChart.ts +56 -18
  276. package/src/widgets/charts/pivot/PivotChartDesign.ts +12 -0
  277. package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +4 -3
  278. package/src/widgets/charts/pivot/PivotChartLayoutBuilder.ts +39 -76
  279. package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +0 -1
  280. package/src/widgets/charts/pivot/PivotChartQueryBuilder.ts +230 -189
  281. package/src/widgets/charts/pivot/PivotChartUtils.ts +4 -4
  282. package/src/widgets/charts/pivot/{PivotChartViewComponent.ts → PivotChartViewComponent.tsx} +86 -89
  283. package/src/widgets/charts/table/TableChart.ts +8 -4
  284. package/src/widgets/charts/table/TableChartDesignerComponent.ts +4 -4
  285. package/src/widgets/charts/table/TableChartViewComponent.ts +32 -19
  286. package/src/widgets/text/TextComponent.tsx +47 -49
  287. package/src/widgets/text/TextWidget.ts +8 -3
  288. package/src/widgets/text/TextWidgetComponent.tsx +249 -0
  289. package/src/widgets/text/TextWidgetDesign.ts +26 -2
  290. package/src/ColorComponent.ts +0 -117
  291. package/src/dashboards/DashboardViewComponent.ts +0 -304
  292. package/src/dashboards/SettingsModalComponent.ts +0 -169
  293. package/src/dashboards/layoutOptions.ts +0 -40
  294. package/src/layout-styles.css +0 -263
  295. package/src/layouts/blocks/BlocksDisplayComponent.ts +0 -461
  296. package/src/layouts/grid/GridLayoutComponent.ts +0 -67
  297. package/src/layouts/grid/GridLayoutManager.ts +0 -185
  298. package/src/layouts/grid/LegoLayoutEngine.ts +0 -142
  299. package/src/layouts/grid/PaletteItemComponent.ts +0 -28
  300. package/src/layouts/grid/README.md +0 -14
  301. package/src/layouts/grid/WidgetContainerComponent.ts +0 -420
  302. package/src/richtext/FontColorPaletteItem.ts +0 -172
  303. package/src/richtext/FontSizePaletteItem.ts +0 -110
  304. package/src/widgets/DropdownWidgetComponent.ts +0 -78
  305. package/src/widgets/text/TextWidgetComponent.ts +0 -120
@@ -4,23 +4,18 @@ import { DataSource, Schema } from "@mwater/expressions";
4
4
  import { LayeredChartDesign } from "./LayeredChartDesign";
5
5
  import { WidgetDataSource } from "../../WidgetDataSource";
6
6
  import { JsonQLFilter } from "../../..";
7
+ import LayeredChartViewComponent from "./LayeredChartViewComponent";
8
+ import LayeredChartDesignerComponent from "./LayeredChartDesignerComponent";
7
9
  export default class LayeredChart extends Chart {
8
10
  cleanDesign(design: LayeredChartDesign, schema: Schema): LayeredChartDesign;
9
11
  validateDesign(design: LayeredChartDesign, schema: Schema): string | null | undefined;
10
12
  isEmpty(design: any): boolean;
11
- createDesignerElement(options: any): React.FunctionComponentElement<{
12
- schema: any;
13
- dataSource: any;
14
- design: LayeredChartDesign;
15
- filters: any;
16
- onDesignChange: (design: any) => any;
17
- }>;
13
+ createDesignerElement(options: any): React.CElement<import("./LayeredChartDesignerComponent").LayeredChartDesignerComponentProps, LayeredChartDesignerComponent>;
18
14
  getData(design: any, schema: Schema, dataSource: DataSource, filters: JsonQLFilter[], callback: any): void;
19
- createViewElement(options: ChartCreateViewElementOptions): React.DetailedReactHTMLElement<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
15
+ createViewElement(options: ChartCreateViewElementOptions): React.CElement<any, LayeredChartViewComponent>;
20
16
  createDropdownItems(design: any, schema: Schema, widgetDataSource: WidgetDataSource, filters: any): {
21
17
  label: string;
22
- icon: string;
23
- onClick: () => void;
18
+ onClick: () => void | AbortController | undefined;
24
19
  }[];
25
20
  createDataTable(design: LayeredChartDesign, schema: Schema, dataSource: DataSource, data: any, locale: string): any[][];
26
21
  getFilterableTables(design: LayeredChartDesign, schema: Schema): string[];
@@ -28,7 +28,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const lodash_1 = __importDefault(require("lodash"));
30
30
  const react_1 = __importDefault(require("react"));
31
- const R = react_1.default.createElement;
32
31
  const async_1 = __importDefault(require("async"));
33
32
  const immer_1 = __importDefault(require("immer"));
34
33
  const immer_2 = require("immer");
@@ -39,6 +38,8 @@ const AxisBuilder_1 = __importDefault(require("../../../axes/AxisBuilder"));
39
38
  const LayeredChartSvgFileSaver_1 = __importDefault(require("./LayeredChartSvgFileSaver"));
40
39
  const LayeredChartUtils = __importStar(require("./LayeredChartUtils"));
41
40
  const TextWidget_1 = __importDefault(require("../../text/TextWidget"));
41
+ const LayeredChartViewComponent_1 = __importDefault(require("./LayeredChartViewComponent"));
42
+ const LayeredChartDesignerComponent_1 = __importDefault(require("./LayeredChartDesignerComponent"));
42
43
  // See LayeredChart Design.md for the design
43
44
  class LayeredChart extends Chart_1.default {
44
45
  cleanDesign(design, schema) {
@@ -151,7 +152,6 @@ class LayeredChart extends Chart_1.default {
151
152
  // filters: array of filters
152
153
  createDesignerElement(options) {
153
154
  // Require here to prevent server require problems
154
- const LayeredChartDesignerComponent = require("./LayeredChartDesignerComponent").default;
155
155
  const props = {
156
156
  schema: options.schema,
157
157
  dataSource: options.dataSource,
@@ -163,7 +163,7 @@ class LayeredChart extends Chart_1.default {
163
163
  return options.onDesignChange(design);
164
164
  }
165
165
  };
166
- return react_1.default.createElement(LayeredChartDesignerComponent, props);
166
+ return react_1.default.createElement(LayeredChartDesignerComponent_1.default, props);
167
167
  }
168
168
  // Get data for the chart asynchronously
169
169
  // design: design of the chart
@@ -212,7 +212,6 @@ class LayeredChart extends Chart_1.default {
212
212
  // scope: current scope of the view element
213
213
  // onScopeChange: called when scope changes with new scope
214
214
  createViewElement(options) {
215
- const LayeredChartViewComponent = require("./LayeredChartViewComponent").default;
216
215
  // Create chart
217
216
  const props = {
218
217
  schema: options.schema,
@@ -225,7 +224,7 @@ class LayeredChart extends Chart_1.default {
225
224
  scope: options.scope,
226
225
  onScopeChange: options.onScopeChange
227
226
  };
228
- return react_1.default.createElement(LayeredChartViewComponent, props);
227
+ return react_1.default.createElement(LayeredChartViewComponent_1.default, props);
229
228
  }
230
229
  createDropdownItems(design, schema, widgetDataSource, filters) {
231
230
  // TODO validate design before allowing save
@@ -245,8 +244,8 @@ class LayeredChart extends Chart_1.default {
245
244
  return [];
246
245
  }
247
246
  return [
248
- { label: "Save as SVG", icon: "picture", onClick: save.bind(null, "svg") },
249
- { label: "Save as PNG", icon: "camera", onClick: save.bind(null, "png") }
247
+ { label: "Save as SVG", onClick: save.bind(null, "svg") },
248
+ { label: "Save as PNG", onClick: save.bind(null, "png") }
250
249
  ];
251
250
  }
252
251
  createDataTable(design, schema, dataSource, data, locale) {
@@ -17,6 +17,8 @@ interface C3Data {
17
17
  columns: PrimitiveArray[];
18
18
  xAxisType?: "category" | "indexed" | "log" | "timeseries";
19
19
  xAxisTickFit?: boolean;
20
+ /** Whether to allow multiline x axis tick labels (default true) */
21
+ xAxisTickMultiline?: boolean;
20
22
  xs?: {
21
23
  [key: string]: string;
22
24
  };
@@ -35,8 +37,8 @@ interface C3Data {
35
37
  titleText?: string;
36
38
  legendHide?: boolean;
37
39
  /**
38
- * Set custom data name.
39
- */
40
+ * Set custom data name.
41
+ */
40
42
  names?: {
41
43
  [key: string]: string;
42
44
  };
@@ -41,13 +41,13 @@ const chartTypes = {
41
41
  scatter: billboard_js_1.scatter,
42
42
  area: billboard_js_1.area,
43
43
  pie: billboard_js_1.pie,
44
- donut: billboard_js_1.donut,
44
+ donut: billboard_js_1.donut
45
45
  };
46
46
  const commaFormatter = d3Format.format(",");
47
47
  const compactFormatter = (d) => {
48
48
  // Only if large, otherwise use standard formatting
49
49
  if (Math.abs(d) > 999) {
50
- return d3Format.format("~s")(d).replace('G', 'B');
50
+ return d3Format.format("~s")(d).replace("G", "B");
51
51
  }
52
52
  else {
53
53
  return commaFormatter(d);
@@ -240,7 +240,11 @@ class LayeredChartCompiler {
240
240
  },
241
241
  // Hide if one layer with no color axis
242
242
  legend: {
243
- hide: options.design.layers.length === 1 && !options.design.layers[0].axes.color ? true : c3Data.legendHide
243
+ hide: options.design.layers.length === 1 && !options.design.layers[0].axes.color
244
+ ? true
245
+ : options.design.hideLegend === true
246
+ ? true
247
+ : c3Data.legendHide
244
248
  },
245
249
  grid: { focus: { show: false } },
246
250
  axis: {
@@ -250,7 +254,12 @@ class LayeredChartCompiler {
250
254
  text: cleanString(c3Data.xAxisLabelText),
251
255
  position: options.design.transpose ? "outer-middle" : "outer-center"
252
256
  },
253
- tick: { fit: c3Data.xAxisTickFit }
257
+ tick: {
258
+ multiline: options.design.xAxisTickMultiline,
259
+ culling: false,
260
+ fit: c3Data.xAxisTickFit
261
+ },
262
+ clipPath: false
254
263
  },
255
264
  y: {
256
265
  label: {
@@ -291,14 +300,15 @@ class LayeredChartCompiler {
291
300
  },
292
301
  expand: false // Don't expand/contract
293
302
  },
294
- transition: { duration: 0 } // Transitions interfere with scoping
303
+ transition: { duration: 0 }, // Transitions interfere with scoping
304
+ // padding: !isPolar ? { mode: "fit" } : undefined
295
305
  };
296
306
  // && (options.design.type === "pie" || options.design.type === "donut")
297
307
  if (options.design.labels) {
298
308
  // same color values gets hidden!! https://github.com/naver/billboard.js/issues/871
299
309
  chartDesign.data.labels = {
300
310
  colors: chartDesign.data.columns.reduce((a, c) => {
301
- a[c[0]] = '#000';
311
+ a[c[0]] = "#000";
302
312
  return a;
303
313
  }, {})
304
314
  };
@@ -307,7 +317,7 @@ class LayeredChartCompiler {
307
317
  ...chartDesign.data.labels,
308
318
  position: {
309
319
  y: 15
310
- }, // TODO why does this not type correctly?
320
+ } // TODO why does this not type correctly?
311
321
  };
312
322
  }
313
323
  }
@@ -340,7 +350,7 @@ class LayeredChartCompiler {
340
350
  }
341
351
  if (options.design.yThresholds) {
342
352
  chartDesign.grid.y = {
343
- lines: lodash_1.default.map(options.design.yThresholds, (t) => ({
353
+ lines: lodash_1.default.map(options.design.yThresholds, t => ({
344
354
  value: t.value,
345
355
  text: t.label
346
356
  }))
@@ -355,7 +365,7 @@ class LayeredChartCompiler {
355
365
  }
356
366
  isCategoricalX(design) {
357
367
  // Check if categorical x axis (bar charts always are)
358
- let categoricalX = design.type === "bar" || lodash_1.default.any(design.layers, (l) => l.type === "bar");
368
+ let categoricalX = design.type === "bar" || lodash_1.default.any(design.layers, l => l.type === "bar");
359
369
  // Check if x axis is categorical type
360
370
  const xType = this.axisBuilder.getAxisType(design.layers[0].axes.x);
361
371
  if (["enum", "text", "boolean"].includes(xType || "")) {
@@ -371,7 +381,7 @@ class LayeredChartCompiler {
371
381
  // Outputs: columns, types, names, colors. Also dataMap which is a map of "layername:index" to { layerIndex, row }
372
382
  compileData(design, data, locale) {
373
383
  // If polar chart (no x axis)
374
- if (["pie", "donut"].includes(design.type) || lodash_1.default.any(design.layers, (l) => ["pie", "donut"].includes(l.type))) {
384
+ if (["pie", "donut"].includes(design.type) || lodash_1.default.any(design.layers, l => ["pie", "donut"].includes(l.type))) {
375
385
  return this.compileDataPolar(design, data, locale);
376
386
  }
377
387
  if (this.isCategoricalX(design)) {
@@ -400,7 +410,7 @@ class LayeredChartCompiler {
400
410
  // Get indexed ordering of categories (lookup from value to index) without removing excluded values
401
411
  const categoryOrder = lodash_1.default.zipObject(lodash_1.default.map(categories, (c, i) => [c.value, i]));
402
412
  // Sort by category order
403
- layerData = lodash_1.default.sortBy(layerData, (row) => categoryOrder[row.color]);
413
+ layerData = lodash_1.default.sortBy(layerData, row => categoryOrder[row.color]);
404
414
  // Create a series for each row
405
415
  lodash_1.default.each(layerData, (row, rowIndex) => {
406
416
  // Skip if value excluded
@@ -487,7 +497,7 @@ class LayeredChartCompiler {
487
497
  layerData = this.makeRowsCumulative(layerData);
488
498
  }
489
499
  // Remove excluded values
490
- layerData = lodash_1.default.filter(layerData, (row) => !lodash_1.default.includes(layer.axes.x.excludedValues || [], row.x));
500
+ layerData = lodash_1.default.filter(layerData, row => !lodash_1.default.includes(layer.axes.x.excludedValues || [], row.x));
491
501
  // If has color axis
492
502
  if (layer.axes.color) {
493
503
  // Create a series for each color value
@@ -498,11 +508,11 @@ class LayeredChartCompiler {
498
508
  // Get indexed ordering of categories (lookup from value to index) without removing excluded values
499
509
  const categoryOrder = lodash_1.default.zipObject(lodash_1.default.map(categories, (c, i) => [c.value, i]));
500
510
  // Sort
501
- colorValues = lodash_1.default.sortBy(colorValues, (v) => categoryOrder[v]);
511
+ colorValues = lodash_1.default.sortBy(colorValues, v => categoryOrder[v]);
502
512
  // Exclude excluded ones
503
513
  colorValues = lodash_1.default.difference(colorValues, layer.axes.color.excludedValues || []);
504
514
  // For each color value
505
- lodash_1.default.each(colorValues, (colorValue) => {
515
+ lodash_1.default.each(colorValues, colorValue => {
506
516
  // One series for x values, one for y
507
517
  const seriesX = `${layerIndex}:${colorValue}:x`;
508
518
  const seriesY = `${layerIndex}:${colorValue}:y`;
@@ -614,7 +624,7 @@ class LayeredChartCompiler {
614
624
  }
615
625
  for (var x of xs) {
616
626
  // Find existing row
617
- const existingRow = lodash_1.default.find(flatRows, (r) => r.x === x && r.color === row.color);
627
+ const existingRow = lodash_1.default.find(flatRows, r => r.x === x && r.color === row.color);
618
628
  if (existingRow) {
619
629
  existingRow.y += row.y;
620
630
  }
@@ -651,11 +661,14 @@ class LayeredChartCompiler {
651
661
  return (xValues = lodash_1.default.union(xValues, lodash_1.default.uniq(lodash_1.default.pluck(layerData, "x"))));
652
662
  });
653
663
  // Categories will be in form [{ value, label }]
654
- let categories = this.axisBuilder.getCategories(xAxis, xValues, { locale, onlyValuesPresent: design.layers[0].xAxisOnlyValuesPresent });
664
+ let categories = this.axisBuilder.getCategories(xAxis, xValues, {
665
+ locale,
666
+ onlyValuesPresent: design.layers[0].xAxisOnlyValuesPresent
667
+ });
655
668
  // Get indexed ordering of categories (lookup from value to index) without removing excluded values
656
669
  const categoryOrder = lodash_1.default.zipObject(lodash_1.default.map(categories, (c, i) => [c.value, i]));
657
670
  // Exclude excluded values
658
- categories = lodash_1.default.filter(categories, (category) => !lodash_1.default.includes(xAxis.excludedValues || [], category.value));
671
+ categories = lodash_1.default.filter(categories, category => !lodash_1.default.includes(xAxis.excludedValues || [], category.value));
659
672
  // Limit categories to prevent crashes in C3 (https://github.com/mWater/mwater-visualization/issues/272)
660
673
  if (xType !== "enumset") {
661
674
  // Take last ones to make dates prettier (enough to show all weeks)
@@ -665,7 +678,7 @@ class LayeredChartCompiler {
665
678
  // Create map of category value to index
666
679
  const categoryMap = lodash_1.default.object(lodash_1.default.map(categories, (c, i) => [c.value, i]));
667
680
  // Create common x series
668
- columns.push(["x"].concat(lodash_1.default.map(categories, (category) => this.axisBuilder.formatCategory(xAxis, category))));
681
+ columns.push(["x"].concat(lodash_1.default.map(categories, category => this.axisBuilder.formatCategory(xAxis, category))));
669
682
  // For each layer
670
683
  lodash_1.default.each(design.layers, (layer, layerIndex) => {
671
684
  // Get data of layer
@@ -678,14 +691,14 @@ class LayeredChartCompiler {
678
691
  layerData = this.flattenRowData(layerData);
679
692
  }
680
693
  // Reorder to category order for x-axis
681
- layerData = lodash_1.default.sortBy(layerData, (row) => categoryOrder[row.x]);
694
+ layerData = lodash_1.default.sortBy(layerData, row => categoryOrder[row.x]);
682
695
  // Make rows cumulative
683
696
  if (layer.cumulative) {
684
697
  layerData = this.makeRowsCumulative(layerData);
685
698
  }
686
699
  // Filter out categories that were removed
687
700
  if (xType !== "enumset") {
688
- layerData = lodash_1.default.filter(layerData, (row) => categoryXs[row.x] != null);
701
+ layerData = lodash_1.default.filter(layerData, row => categoryXs[row.x] != null);
689
702
  }
690
703
  // If has color axis
691
704
  if (layer.axes.color) {
@@ -697,11 +710,11 @@ class LayeredChartCompiler {
697
710
  // Get indexed ordering of categories (lookup from value to index) without removing excluded values
698
711
  const colorCategoryOrder = lodash_1.default.zipObject(lodash_1.default.map(colorCategories, (c, i) => [c.value, i]));
699
712
  // Sort
700
- colorValues = lodash_1.default.sortBy(colorValues, (v) => colorCategoryOrder[v]);
713
+ colorValues = lodash_1.default.sortBy(colorValues, v => colorCategoryOrder[v]);
701
714
  // Exclude excluded ones
702
715
  colorValues = lodash_1.default.difference(colorValues, layer.axes.color.excludedValues || []);
703
716
  if (colorValues.length > 0) {
704
- lodash_1.default.each(colorValues, (colorValue) => {
717
+ lodash_1.default.each(colorValues, colorValue => {
705
718
  // One series for y values
706
719
  const series = `${layerIndex}:${colorValue}`;
707
720
  // Get specific color if present
@@ -713,9 +726,9 @@ class LayeredChartCompiler {
713
726
  // Get rows for this series
714
727
  const rows = lodash_1.default.where(layerData, { color: colorValue });
715
728
  // Create empty series
716
- const column = lodash_1.default.map(categories, (c) => null);
729
+ const column = lodash_1.default.map(categories, c => null);
717
730
  // Set rows
718
- lodash_1.default.each(rows, (row) => {
731
+ lodash_1.default.each(rows, row => {
719
732
  // Get index
720
733
  const index = categoryMap[row.x];
721
734
  if (index != null) {
@@ -742,7 +755,7 @@ class LayeredChartCompiler {
742
755
  else {
743
756
  //c3 acts funny when there is a split axis but no data
744
757
  series = `${layerIndex}:dumm`;
745
- column = lodash_1.default.map(categories, (c) => null);
758
+ column = lodash_1.default.map(categories, c => null);
746
759
  columns.push([series].concat(column));
747
760
  types[series] = this.getLayerType(design, layerIndex);
748
761
  names[series] = this.axisBuilder.formatValue(layer.axes.color, null, locale, true);
@@ -754,9 +767,9 @@ class LayeredChartCompiler {
754
767
  // One series for y
755
768
  series = `${layerIndex}`;
756
769
  // Create empty series
757
- column = lodash_1.default.map(categories, (c) => null);
770
+ column = lodash_1.default.map(categories, c => null);
758
771
  // Set rows
759
- lodash_1.default.each(layerData, (row) => {
772
+ lodash_1.default.each(layerData, row => {
760
773
  // Skip if value excluded
761
774
  if (lodash_1.default.includes(layer.axes.x.excludedValues || [], row.x)) {
762
775
  return;
@@ -813,11 +826,11 @@ class LayeredChartCompiler {
813
826
  const defaultStacked = layer.axes.color != null;
814
827
  const stacked = layer.stacked != null ? layer.stacked : defaultStacked;
815
828
  if (stacked) {
816
- groups.push(lodash_1.default.filter(lodash_1.default.keys(names), (series) => series.split(":")[0] === `${layerIndex}`));
829
+ groups.push(lodash_1.default.filter(lodash_1.default.keys(names), series => series.split(":")[0] === `${layerIndex}`));
817
830
  }
818
831
  }
819
832
  // Remove empty groups
820
- groups = lodash_1.default.filter(groups, (g) => g.length > 1);
833
+ groups = lodash_1.default.filter(groups, g => g.length > 1);
821
834
  }
822
835
  // If proportional
823
836
  if (design.proportional) {
@@ -859,6 +872,7 @@ class LayeredChartCompiler {
859
872
  classes,
860
873
  xAxisType: "category",
861
874
  xAxisTickFit: xType !== "date",
875
+ xAxisTickMultiline: design.xAxisTickMultiline,
862
876
  xAxisLabelText: this.compileXAxisLabelText(design, locale),
863
877
  yAxisLabelText: this.compileYAxisLabelText(design, locale),
864
878
  titleText: this.compileTitleText(design, locale),
@@ -1072,14 +1086,14 @@ function cleanString(str) {
1072
1086
  function calculateLinearRegression(ys, xs) {
1073
1087
  // If xs are dates, convert to numbers
1074
1088
  if (lodash_1.default.isString(xs[0])) {
1075
- xs = lodash_1.default.map(xs, (x) => Date.parse(x));
1089
+ xs = lodash_1.default.map(xs, x => Date.parse(x));
1076
1090
  }
1077
1091
  // Remove null ys
1078
1092
  const nonNullxs = lodash_1.default.filter(xs, (x, index) => ys[index] !== null);
1079
1093
  const nonNullys = lodash_1.default.filter(ys, (y, index) => ys[index] !== null);
1080
1094
  const n = nonNullys.length;
1081
1095
  const sumXY = lodash_1.default.sum(lodash_1.default.map(nonNullxs, (x, i) => x * nonNullys[i]));
1082
- const sumXX = lodash_1.default.sum(lodash_1.default.map(nonNullxs, (x) => x * x));
1096
+ const sumXX = lodash_1.default.sum(lodash_1.default.map(nonNullxs, x => x * x));
1083
1097
  const sumX = lodash_1.default.sum(nonNullxs);
1084
1098
  const sumY = lodash_1.default.sum(nonNullys);
1085
1099
  // Calculate denominator
@@ -1088,5 +1102,5 @@ function calculateLinearRegression(ys, xs) {
1088
1102
  const slope = (n * sumXY - sumX * sumY) / den;
1089
1103
  // Calculate intercept
1090
1104
  const intercept = (sumY * sumXX - sumX * sumXY) / den;
1091
- return lodash_1.default.map(xs, (x) => x * slope + intercept);
1105
+ return lodash_1.default.map(xs, x => x * slope + intercept);
1092
1106
  }
@@ -38,6 +38,10 @@ export interface LayeredChartDesign {
38
38
  yMin?: number;
39
39
  /** true to show popout lines for small values */
40
40
  popoutSmallValues?: boolean;
41
+ /** true to hide the legend */
42
+ hideLegend?: boolean;
43
+ /** Whether to allow multiline x axis tick labels (default true) */
44
+ xAxisTickMultiline?: boolean;
41
45
  }
42
46
  export interface LayeredChartDesignLayer {
43
47
  /** bar/line/spline/scatter/area/pie/donut (overrides main one) */
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import TabbedComponent from "@mwater/react-library/lib/TabbedComponent";
2
3
  import * as uiComponents from "../../../UIComponents";
3
4
  import { DataSource, Schema } from "@mwater/expressions";
4
5
  import { LayeredChartDesign } from "./LayeredChartDesign";
@@ -15,6 +16,7 @@ export default class LayeredChartDesignerComponent extends React.Component<Layer
15
16
  updateDesign(changes: any): void;
16
17
  handleTypeChange: (type: any) => void;
17
18
  handleTransposeChange: (value: any) => void;
19
+ handleHideLegendChange: (value: any) => void;
18
20
  handleStackedChange: (value: any) => void;
19
21
  handleProportionalChange: (value: any) => void;
20
22
  handleLabelsChange: (value: any) => void;
@@ -31,7 +33,9 @@ export default class LayeredChartDesignerComponent extends React.Component<Layer
31
33
  handleToggleYAxisLabelClick: (ev: any) => void;
32
34
  handleYMinChange: (yMin: any) => void;
33
35
  handleYMaxChange: (yMax: any) => void;
36
+ handleXAxisTickMultilineChange: (value: boolean) => void;
34
37
  renderLabels(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement> | undefined;
38
+ renderChartOptions(): React.JSX.Element;
35
39
  renderType(): React.CElement<uiComponents.SectionComponentProps, uiComponents.SectionComponent>;
36
40
  renderLayer: (index: any) => React.DetailedReactHTMLElement<{
37
41
  style: {
@@ -46,35 +50,5 @@ export default class LayeredChartDesignerComponent extends React.Component<Layer
46
50
  }, HTMLElement> | undefined;
47
51
  renderThresholds(): React.CElement<uiComponents.SectionComponentProps, uiComponents.SectionComponent> | null;
48
52
  renderYRange(): React.CElement<uiComponents.SectionComponentProps, uiComponents.SectionComponent> | null;
49
- render(): React.CElement<{
50
- initialTabId: string;
51
- tabs: ({
52
- id: string;
53
- label: string;
54
- elem: React.DetailedReactHTMLElement<{
55
- style: {
56
- paddingBottom: number;
57
- };
58
- }, HTMLElement>;
59
- } | {
60
- id: string;
61
- label: string;
62
- elem: React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
63
- })[];
64
- }, React.Component<{
65
- initialTabId: string;
66
- tabs: ({
67
- id: string;
68
- label: string;
69
- elem: React.DetailedReactHTMLElement<{
70
- style: {
71
- paddingBottom: number;
72
- };
73
- }, HTMLElement>;
74
- } | {
75
- id: string;
76
- label: string;
77
- elem: React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
78
- })[];
79
- }, any, any>>;
53
+ render(): React.CElement<any, TabbedComponent>;
80
54
  }
@@ -52,6 +52,9 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
52
52
  handleTransposeChange = (value) => {
53
53
  return this.updateDesign({ transpose: value });
54
54
  };
55
+ handleHideLegendChange = (value) => {
56
+ return this.updateDesign({ hideLegend: value });
57
+ };
55
58
  handleStackedChange = (value) => {
56
59
  return this.updateDesign({ stacked: value });
57
60
  };
@@ -106,6 +109,9 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
106
109
  handleYMaxChange = (yMax) => {
107
110
  return this.updateDesign({ yMax });
108
111
  };
112
+ handleXAxisTickMultilineChange = (value) => {
113
+ this.updateDesign({ xAxisTickMultiline: value });
114
+ };
109
115
  renderLabels() {
110
116
  if (!this.props.design.type) {
111
117
  return;
@@ -133,6 +139,11 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
133
139
  : undefined)
134
140
  : undefined);
135
141
  }
142
+ renderChartOptions() {
143
+ return (react_1.default.createElement("div", null,
144
+ react_1.default.createElement(bootstrap_1.Checkbox, { key: "hideLegend", value: this.props.design.hideLegend, onChange: this.handleHideLegendChange }, "Hide legend"),
145
+ react_1.default.createElement(bootstrap_1.Checkbox, { key: "xAxisTickMultiline", value: this.props.design.xAxisTickMultiline ?? true, onChange: this.handleXAxisTickMultilineChange }, "Multiline X-Axis Labels")));
146
+ }
136
147
  renderType() {
137
148
  const chartTypes = [
138
149
  { id: "bar", name: "Bar", desc: "Best for most charts" },
@@ -150,7 +161,7 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
150
161
  editor: (onClose) => {
151
162
  return R(uiComponents.OptionListComponent, {
152
163
  hint: "Select a Chart Type",
153
- items: lodash_1.default.map(chartTypes, (ct) => ({
164
+ items: lodash_1.default.map(chartTypes, ct => ({
154
165
  name: ct.name,
155
166
  desc: ct.desc,
156
167
  onClick: () => {
@@ -208,7 +219,9 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
208
219
  { value: "natural", label: "Natural Order" }
209
220
  ], inline: true })
210
221
  ]
211
- : undefined, (design.labels && design.type === "bar" && !design.transpose) ? R('div', null, react_1.default.createElement(bootstrap_1.Checkbox, { inline: true, key: "labels", value: design.popoutSmallValues || false, onChange: this.handleLabelsPopoutChange }, "Show Popout labels for small values")) : undefined);
222
+ : undefined, design.labels && design.type === "bar" && !design.transpose
223
+ ? R("div", null, react_1.default.createElement(bootstrap_1.Checkbox, { inline: true, key: "labels", value: design.popoutSmallValues || false, onChange: this.handleLabelsPopoutChange }, "Show Popout labels for small values"))
224
+ : undefined);
212
225
  }
213
226
  renderThresholds() {
214
227
  // Doesn't apply to polar
@@ -256,6 +269,11 @@ class LayeredChartDesignerComponent extends react_1.default.Component {
256
269
  elem: R("div", null, R("br"), this.renderLabels())
257
270
  });
258
271
  }
272
+ tabs.push({
273
+ id: "options",
274
+ label: "Options",
275
+ elem: R("div", null, R("br"), this.renderChartOptions())
276
+ });
259
277
  return R(TabbedComponent_1.default, {
260
278
  initialTabId: "design",
261
279
  tabs
@@ -298,7 +316,7 @@ class ThresholdComponent extends react_1.default.Component {
298
316
  style: { display: "inline-block" },
299
317
  size: "sm",
300
318
  value: this.props.threshold.value,
301
- onChange: (v) => this.props.onThresholdChange(lodash_1.default.extend({}, this.props.threshold, { value: v }))
319
+ onChange: v => this.props.onThresholdChange(lodash_1.default.extend({}, this.props.threshold, { value: v }))
302
320
  })), " ", R(LabeledInlineComponent, { key: "label", label: "Label:" }, R(ui.TextInput, {
303
321
  style: { display: "inline-block", width: "8em" },
304
322
  size: "sm",
@@ -46,13 +46,7 @@ export default class LayeredChartLayerDesignerComponent extends React.Component<
46
46
  }, HTMLElement> | null;
47
47
  renderTable(): React.CElement<uiComponents.SectionComponentProps, uiComponents.SectionComponent>;
48
48
  handlexAxisOnlyValuesPresentChange: (xAxisOnlyValuesPresent: boolean) => void;
49
- renderXAxis(): (React.CElement<uiComponents.SectionComponentProps, uiComponents.SectionComponent> | React.CElement<{
50
- value: any;
51
- onChange: (xAxisOnlyValuesPresent: boolean) => void;
52
- }, React.Component<{
53
- value: any;
54
- onChange: (xAxisOnlyValuesPresent: boolean) => void;
55
- }, any, any>> | undefined)[] | undefined;
49
+ renderXAxis(): (React.JSX.Element | null)[] | undefined;
56
50
  renderColorAxis(): React.DetailedReactHTMLElement<{
57
51
  className: string;
58
52
  }, HTMLElement> | undefined;
@@ -214,7 +214,8 @@ class LayeredChartLayerDesignerComponent extends react_1.default.Component {
214
214
  categoricalX ? R(ui.Checkbox, {
215
215
  value: layer.xAxisOnlyValuesPresent,
216
216
  onChange: this.handlexAxisOnlyValuesPresentChange
217
- }, "Only show values actually present", R(PopoverHelpComponent_1.default, { placement: 'bottom' }, "Limits values to those that are present in the data, as opposed to all choices or all dates within range")) : undefined
217
+ }, "Only show values actually present ", R(PopoverHelpComponent_1.default, { placement: 'bottom' }, "Limits values to those that are present in the data, as opposed to all choices or all dates within range")) : null,
218
+ react_1.default.createElement("br", null)
218
219
  ];
219
220
  }
220
221
  renderColorAxis() {
@@ -1,4 +1,3 @@
1
- import PropTypes from "prop-types";
2
1
  import React from "react";
3
2
  import { DataSource, Schema } from "@mwater/expressions";
4
3
  import { LayeredChartDesign } from "./LayeredChartDesign";
@@ -21,9 +20,7 @@ interface LayeredChartViewComponentState {
21
20
  footerHeight: any;
22
21
  }
23
22
  export default class LayeredChartViewComponent extends React.Component<LayeredChartViewComponentProps, LayeredChartViewComponentState> {
24
- static contextTypes: {
25
- locale: PropTypes.Requireable<string>;
26
- };
23
+ static contextType: React.Context<string>;
27
24
  header: HTMLElement | null;
28
25
  footer: HTMLElement | null;
29
26
  constructor(props: any);