sea-chart 0.0.1

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 (214) hide show
  1. package/README.md +4 -0
  2. package/lib/assets/icons/area-chart.svg +10 -0
  3. package/lib/assets/icons/bar-chart.svg +12 -0
  4. package/lib/assets/icons/card.svg +22 -0
  5. package/lib/assets/icons/combination-chart.svg +17 -0
  6. package/lib/assets/icons/dtable-logo.svg +16 -0
  7. package/lib/assets/icons/facet-chart.svg +12 -0
  8. package/lib/assets/icons/gauge.svg +18 -0
  9. package/lib/assets/icons/heat-map.svg +14 -0
  10. package/lib/assets/icons/histogram.svg +12 -0
  11. package/lib/assets/icons/line-chart.svg +12 -0
  12. package/lib/assets/icons/map.svg +20 -0
  13. package/lib/assets/icons/pie-chart.svg +11 -0
  14. package/lib/assets/icons/rectangular-tree-diagram.svg +10 -0
  15. package/lib/assets/icons/scatter-chart.svg +15 -0
  16. package/lib/assets/icons/type-change.svg +17 -0
  17. package/lib/assets/img/area-chart.png +0 -0
  18. package/lib/assets/img/area-group-chart.png +0 -0
  19. package/lib/assets/img/bar-group.png +0 -0
  20. package/lib/assets/img/bar-stack.png +0 -0
  21. package/lib/assets/img/bar.png +0 -0
  22. package/lib/assets/img/combination-chart.png +0 -0
  23. package/lib/assets/img/compared-chart.png +0 -0
  24. package/lib/assets/img/completeness-chart.png +0 -0
  25. package/lib/assets/img/custom-bar.png +0 -0
  26. package/lib/assets/img/dashboard-chart.png +0 -0
  27. package/lib/assets/img/group-completeness-chart.png +0 -0
  28. package/lib/assets/img/group_line.png +0 -0
  29. package/lib/assets/img/heat-map.png +0 -0
  30. package/lib/assets/img/horizontal-bar.png +0 -0
  31. package/lib/assets/img/horizontal-group-bar.png +0 -0
  32. package/lib/assets/img/line.png +0 -0
  33. package/lib/assets/img/map-bubble.png +0 -0
  34. package/lib/assets/img/map.png +0 -0
  35. package/lib/assets/img/mirror.png +0 -0
  36. package/lib/assets/img/number-card.png +0 -0
  37. package/lib/assets/img/pie.png +0 -0
  38. package/lib/assets/img/pivot-table.png +0 -0
  39. package/lib/assets/img/ring.png +0 -0
  40. package/lib/assets/img/scatter.png +0 -0
  41. package/lib/assets/img/stacked-horizontal-bar.png +0 -0
  42. package/lib/assets/img/treemap.png +0 -0
  43. package/lib/assets/img/trend-chart.png +0 -0
  44. package/lib/assets/img/world-map-bubble.png +0 -0
  45. package/lib/assets/img/world-map.png +0 -0
  46. package/lib/components/collaborator/index.js +24 -0
  47. package/lib/components/formatter/area.js +162 -0
  48. package/lib/components/formatter/bar-group.js +160 -0
  49. package/lib/components/formatter/bar.js +150 -0
  50. package/lib/components/formatter/basic-number-card.js +138 -0
  51. package/lib/components/formatter/chart-component.js +266 -0
  52. package/lib/components/formatter/combination.js +407 -0
  53. package/lib/components/formatter/dashboard.js +182 -0
  54. package/lib/components/formatter/horizontal-bar-group.js +161 -0
  55. package/lib/components/formatter/horizontal-bar.js +152 -0
  56. package/lib/components/formatter/horizontal-component.js +91 -0
  57. package/lib/components/formatter/index.js +181 -0
  58. package/lib/components/formatter/line-group.js +157 -0
  59. package/lib/components/formatter/line.js +170 -0
  60. package/lib/components/formatter/pie.js +201 -0
  61. package/lib/components/formatter/ring.js +277 -0
  62. package/lib/components/formatter/table/index.css +103 -0
  63. package/lib/components/formatter/table/index.js +42 -0
  64. package/lib/components/formatter/table/one-dimension-table-no-numeric-columns.js +145 -0
  65. package/lib/components/formatter/table/one-dimension-table-with-numeric-columns.js +193 -0
  66. package/lib/components/formatter/table/pivot-table-display-name.js +249 -0
  67. package/lib/components/formatter/table/two-dimension-table.js +241 -0
  68. package/lib/components/formatter/treemap.js +213 -0
  69. package/lib/components/icon/index.css +5 -0
  70. package/lib/components/icon/index.js +22 -0
  71. package/lib/components/index.js +5 -0
  72. package/lib/components/loading/index.css +54 -0
  73. package/lib/components/loading/index.js +10 -0
  74. package/lib/components/number-input/index.js +31 -0
  75. package/lib/components/pixel-editor/index.css +29 -0
  76. package/lib/components/pixel-editor/index.js +42 -0
  77. package/lib/components/select-group/index.css +67 -0
  78. package/lib/components/select-group/index.js +63 -0
  79. package/lib/components/settings/advance-bar-settings/data-settings.js +120 -0
  80. package/lib/components/settings/advance-bar-settings/index.js +3 -0
  81. package/lib/components/settings/advance-bar-settings/style-settings.js +149 -0
  82. package/lib/components/settings/bar-settings/data-settings.js +137 -0
  83. package/lib/components/settings/bar-settings/index.js +3 -0
  84. package/lib/components/settings/bar-settings/style-settings.js +163 -0
  85. package/lib/components/settings/basic-number-card/data-settings.js +121 -0
  86. package/lib/components/settings/basic-number-card/index.js +3 -0
  87. package/lib/components/settings/basic-number-card/style-settings.js +42 -0
  88. package/lib/components/settings/combination-settings/data-settings.js +256 -0
  89. package/lib/components/settings/combination-settings/index.js +3 -0
  90. package/lib/components/settings/combination-settings/style-settings.js +183 -0
  91. package/lib/components/settings/dashboard-settings/data-settings.js +167 -0
  92. package/lib/components/settings/dashboard-settings/index.js +2 -0
  93. package/lib/components/settings/data-settings.js +67 -0
  94. package/lib/components/settings/horizontal-bar-settings/data-settings.js +45 -0
  95. package/lib/components/settings/horizontal-bar-settings/index.js +3 -0
  96. package/lib/components/settings/horizontal-bar-settings/style-settings.js +38 -0
  97. package/lib/components/settings/index.css +73 -0
  98. package/lib/components/settings/index.js +74 -0
  99. package/lib/components/settings/pie-settings/data-settings.js +123 -0
  100. package/lib/components/settings/pie-settings/index.js +3 -0
  101. package/lib/components/settings/pie-settings/style-settings.js +123 -0
  102. package/lib/components/settings/style-settings.js +100 -0
  103. package/lib/components/settings/table-settings/data-settings.js +488 -0
  104. package/lib/components/settings/table-settings/index.js +2 -0
  105. package/lib/components/settings/time-comparison-settings/data-settings.js +157 -0
  106. package/lib/components/settings/time-comparison-settings/index.js +3 -0
  107. package/lib/components/settings/time-comparison-settings/style-settings.js +191 -0
  108. package/lib/components/settings/widgets/basic-summary/index.css +12 -0
  109. package/lib/components/settings/widgets/basic-summary/index.js +173 -0
  110. package/lib/components/settings/widgets/common-data-settings.js +42 -0
  111. package/lib/components/settings/widgets/data-filter/index.css +17 -0
  112. package/lib/components/settings/widgets/data-filter/index.js +76 -0
  113. package/lib/components/settings/widgets/data-sort.js +38 -0
  114. package/lib/components/settings/widgets/date-summary-item.js +126 -0
  115. package/lib/components/settings/widgets/display-values-settings/index.css +13 -0
  116. package/lib/components/settings/widgets/display-values-settings/index.js +37 -0
  117. package/lib/components/settings/widgets/divider/index.css +4 -0
  118. package/lib/components/settings/widgets/divider/index.js +10 -0
  119. package/lib/components/settings/widgets/font-settings/font-size-settings.js +31 -0
  120. package/lib/components/settings/widgets/font-settings/font-weight-settings.js +46 -0
  121. package/lib/components/settings/widgets/font-settings/index.js +3 -0
  122. package/lib/components/settings/widgets/group-by.js +168 -0
  123. package/lib/components/settings/widgets/label-color.js +30 -0
  124. package/lib/components/settings/widgets/min-max-setting.js +64 -0
  125. package/lib/components/settings/widgets/mininum-slice-percent.js +72 -0
  126. package/lib/components/settings/widgets/numeric-summary-item.js +109 -0
  127. package/lib/components/settings/widgets/select-table/index.css +0 -0
  128. package/lib/components/settings/widgets/select-table/index.js +49 -0
  129. package/lib/components/settings/widgets/stack.js +58 -0
  130. package/lib/components/settings/widgets/statistic-type/index.css +31 -0
  131. package/lib/components/settings/widgets/statistic-type/index.js +54 -0
  132. package/lib/components/settings/widgets/summary-method-setting.js +80 -0
  133. package/lib/components/settings/widgets/summary-settings.js +394 -0
  134. package/lib/components/settings/widgets/switch/index.css +37 -0
  135. package/lib/components/settings/widgets/switch/index.js +21 -0
  136. package/lib/components/settings/widgets/text-horizontal-settings.js +23 -0
  137. package/lib/components/settings/widgets/time-picker.js +182 -0
  138. package/lib/components/settings/widgets/title-settings/index.js +58 -0
  139. package/lib/components/settings/widgets/title-settings/title-text.js +31 -0
  140. package/lib/components/settings/widgets/x-axios.js +0 -0
  141. package/lib/components/settings/widgets/y-axis-group-settings.js +399 -0
  142. package/lib/components/types-dialog/index.css +97 -0
  143. package/lib/components/types-dialog/index.js +127 -0
  144. package/lib/constants/geolocation.js +11 -0
  145. package/lib/constants/index.js +164 -0
  146. package/lib/constants/model.js +167 -0
  147. package/lib/constants/style.js +13 -0
  148. package/lib/constants/type-image.js +32 -0
  149. package/lib/constants/type.js +97 -0
  150. package/lib/context.js +49 -0
  151. package/lib/index.js +6 -0
  152. package/lib/intl.js +37 -0
  153. package/lib/layout/index.js +4 -0
  154. package/lib/layout/statistic/index.css +53 -0
  155. package/lib/layout/statistic/index.js +190 -0
  156. package/lib/layout/title/index.css +3 -0
  157. package/lib/layout/title/index.js +41 -0
  158. package/lib/locale/index.js +11 -0
  159. package/lib/locale/lang/de.js +141 -0
  160. package/lib/locale/lang/en.js +143 -0
  161. package/lib/locale/lang/es.js +141 -0
  162. package/lib/locale/lang/fr.js +141 -0
  163. package/lib/locale/lang/pt.js +141 -0
  164. package/lib/locale/lang/ru.js +141 -0
  165. package/lib/locale/lang/zh_CN.js +143 -0
  166. package/lib/model/area-group.js +51 -0
  167. package/lib/model/area.js +42 -0
  168. package/lib/model/bar-group.js +54 -0
  169. package/lib/model/bar-stack.js +51 -0
  170. package/lib/model/bar.js +48 -0
  171. package/lib/model/base-model.js +11 -0
  172. package/lib/model/basic-number-card.js +32 -0
  173. package/lib/model/combination.js +48 -0
  174. package/lib/model/compare-bar.js +49 -0
  175. package/lib/model/completeness-group.js +34 -0
  176. package/lib/model/completeness.js +28 -0
  177. package/lib/model/dashboard.js +26 -0
  178. package/lib/model/generic-model.js +235 -0
  179. package/lib/model/heat-map.js +33 -0
  180. package/lib/model/horizontal-bar.js +48 -0
  181. package/lib/model/horizontal-group-bar.js +53 -0
  182. package/lib/model/index.js +36 -0
  183. package/lib/model/line-group.js +54 -0
  184. package/lib/model/line.js +48 -0
  185. package/lib/model/map-bubble.js +37 -0
  186. package/lib/model/map.js +37 -0
  187. package/lib/model/mirror.js +36 -0
  188. package/lib/model/pie.js +36 -0
  189. package/lib/model/ring.js +36 -0
  190. package/lib/model/scatter.js +29 -0
  191. package/lib/model/stacked-horizontal-bar.js +42 -0
  192. package/lib/model/statistic.js +22 -0
  193. package/lib/model/table.js +33 -0
  194. package/lib/model/tree-map.js +30 -0
  195. package/lib/model/trend.js +34 -0
  196. package/lib/model/user.js +22 -0
  197. package/lib/model/world-map-bubble.js +36 -0
  198. package/lib/model/world-map.js +36 -0
  199. package/lib/utils/cell-format-utils.js +41 -0
  200. package/lib/utils/chart.js +6 -0
  201. package/lib/utils/collaborator-utils.js +40 -0
  202. package/lib/utils/column-utils.js +247 -0
  203. package/lib/utils/custom-g2.js +612 -0
  204. package/lib/utils/data-filter/filter-item-utils.js +80 -0
  205. package/lib/utils/data-filter/filters-utils.js +406 -0
  206. package/lib/utils/data-filter/index.js +3 -0
  207. package/lib/utils/date-translate.js +66 -0
  208. package/lib/utils/index.js +50 -0
  209. package/lib/utils/key-generator.js +13 -0
  210. package/lib/utils/object-utils.js +61 -0
  211. package/lib/utils/options-utils.js +61 -0
  212. package/lib/utils/statistic-column-2-sql-column-utils.js +499 -0
  213. package/lib/utils/statistic-utils.js +1685 -0
  214. package/package.json +160 -0
@@ -0,0 +1,488 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { FormGroup, Label } from 'reactstrap';
3
+ import { CellType, COLUMNS_ICON_CONFIG, DATE_COLUMN_OPTIONS, getTableById, getTableColumnByKey } from 'dtable-utils';
4
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
5
+ import CommonDataSettings from '../widgets/common-data-settings';
6
+ import Divider from '../widgets/divider';
7
+ import GroupBy from '../widgets/group-by';
8
+ import Switch from '../widgets/switch';
9
+ import BasicSummary from '../widgets/basic-summary';
10
+ import NumericSummaryItem from '../widgets/numeric-summary-item';
11
+ import { eventStopPropagation, StatisticsUtils } from '../../../utils';
12
+ import { STATISTIC_SUMMARY_TYPE, STATISTIC_Y_GROUP_TYPE, STATISTIC_SUMMARY_SHOW, STATISTIC_SUMMARY_CALCULATION_METHOD, STATISTIC_DATE_SUMMARY_CALCULATION_METHOD, GEOLOCATION_FORMAT_CITY, GEOLOCATION_FORMAT_MAP } from '../../../constants';
13
+ import intl from '../../../intl';
14
+ var DataSettings = function DataSettings(_ref) {
15
+ var statistic = _ref.statistic,
16
+ tables = _ref.tables,
17
+ FilterSettings = _ref.FilterSettings,
18
+ onChange = _ref.onChange;
19
+ var selectedTable = useMemo(function () {
20
+ var table_id = statistic.config.table_id;
21
+ return getTableById(tables, table_id);
22
+ }, [tables, statistic.config]);
23
+ var numericColumns = useMemo(function () {
24
+ if (!selectedTable) return [];
25
+ var columns = selectedTable.columns;
26
+ return columns.filter(function (column) {
27
+ return StatisticsUtils.isNumericSummaryColumn(column) || StatisticsUtils.isDateSummaryColumn(column);
28
+ });
29
+ }, [selectedTable]);
30
+ var numericColumnOptions = useMemo(function () {
31
+ return numericColumns.map(function (column) {
32
+ return {
33
+ value: column,
34
+ label: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
35
+ className: "header-icon"
36
+ }, /*#__PURE__*/React.createElement("i", {
37
+ className: COLUMNS_ICON_CONFIG[column.type]
38
+ })), /*#__PURE__*/React.createElement("span", {
39
+ className: "select-module select-module-name ml-0"
40
+ }, column.name))
41
+ };
42
+ });
43
+ }, [numericColumns]);
44
+ var groupTypeOptions = useMemo(function () {
45
+ var column_groupby_column_key = statistic.config.column_groupby_column_key;
46
+ var options = [{
47
+ value: STATISTIC_Y_GROUP_TYPE.COUNT,
48
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
49
+ className: "select-module select-module-name ml-0"
50
+ }, intl.get(STATISTIC_SUMMARY_SHOW['count'])), /*#__PURE__*/React.createElement("div", {
51
+ className: "summary-type-explanation"
52
+ }, intl.get('Count_the_number_of_records_in_each_group')))
53
+ }, {
54
+ value: STATISTIC_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN,
55
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
56
+ className: "select-module select-module-name ml-0"
57
+ }, intl.get(STATISTIC_SUMMARY_SHOW['advanced'])), /*#__PURE__*/React.createElement("div", {
58
+ className: "summary-type-explanation"
59
+ }, intl.get('Compute_the_sum_maximum_or_minimum_value_of_records_in_each_group_by_a_field')))
60
+ }];
61
+ if (!column_groupby_column_key) {
62
+ options.push({
63
+ value: STATISTIC_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN,
64
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
65
+ className: "select-module select-module-name ml-0"
66
+ }, intl.get('Summarize_multiple_fields')), /*#__PURE__*/React.createElement("div", {
67
+ className: "summary-type-explanation"
68
+ }, intl.get('Compute_the_sum_maximum_or_minimum_value_of_records_in_each_group_by_multiple_fields')))
69
+ });
70
+ }
71
+ return options;
72
+ }, [statistic.config]);
73
+ var onGroupByColumnChange = useCallback(function (option) {
74
+ var config = statistic.config;
75
+ var groupby_column_key = config.groupby_column_key;
76
+ var column = option.value;
77
+ var newColumnKey = column.key,
78
+ type = column.type;
79
+ var validValue = newColumnKey === 'Groupby_null' ? null : newColumnKey;
80
+ if (groupby_column_key === validValue) return;
81
+ var update = {
82
+ groupby_column_key: validValue
83
+ };
84
+ if (!validValue) {
85
+ update['groupby_date_granularity'] = null;
86
+ update['groupby_geolocation_granularity'] = null;
87
+ } else {
88
+ if (StatisticsUtils.isDateSummaryColumn(column)) {
89
+ update['groupby_date_granularity'] = STATISTIC_SUMMARY_TYPE.MONTH;
90
+ update['groupby_geolocation_granularity'] = null;
91
+ } else if (type === CellType.GEOLOCATION) {
92
+ var _ref2 = column.data || {},
93
+ geo_format = _ref2.geo_format;
94
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
95
+ update['groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
96
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
97
+ update['groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
98
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
99
+ update['groupby_geolocation_granularity'] = 'district';
100
+ } else {
101
+ update['groupby_geolocation_granularity'] = null;
102
+ }
103
+ update['groupby_date_granularity'] = null;
104
+ }
105
+ }
106
+ onChange && onChange(update);
107
+ }, [statistic, onChange]);
108
+ var onGroupbyDateGranularityChange = useCallback(function (option) {
109
+ var config = statistic.config;
110
+ var groupby_date_granularity = config.groupby_date_granularity;
111
+ var value = option.value;
112
+ if (value === groupby_date_granularity) return;
113
+ onChange && onChange({
114
+ groupby_date_granularity: value
115
+ });
116
+ }, [statistic, onChange]);
117
+ var onGroupbyGeolocationGranularityChange = useCallback(function (option) {
118
+ var config = statistic.config;
119
+ var groupby_geolocation_granularity = config.groupby_geolocation_granularity;
120
+ var value = option.value;
121
+ if (value === groupby_geolocation_granularity) return;
122
+ onChange && onChange({
123
+ groupby_geolocation_granularity: value
124
+ });
125
+ }, [statistic, onChange]);
126
+ var onColumnGroupByColumnChange = useCallback(function (option) {
127
+ var config = statistic.config;
128
+ var column_groupby_column_key = config.column_groupby_column_key;
129
+ var column = option.value;
130
+ var newColumnKey = column.key,
131
+ type = column.type;
132
+ var validValue = newColumnKey === 'Groupby_null' ? null : newColumnKey;
133
+ if (column_groupby_column_key === validValue) return;
134
+ var update = {
135
+ column_groupby_column_key: validValue,
136
+ summary_columns: []
137
+ };
138
+ if (!validValue) {
139
+ update['column_groupby_date_granularity'] = null;
140
+ update['column_groupby_geolocation_granularity'] = null;
141
+ } else {
142
+ if (DATE_COLUMN_OPTIONS.includes(type)) {
143
+ update['column_groupby_date_granularity'] = STATISTIC_SUMMARY_TYPE.MONTH;
144
+ update['column_groupby_geolocation_granularity'] = null;
145
+ } else if (type === CellType.GEOLOCATION) {
146
+ var _ref3 = column.data || {},
147
+ geo_format = _ref3.geo_format;
148
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
149
+ update['column_groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
150
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
151
+ update['column_groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
152
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
153
+ update['column_groupby_geolocation_granularity'] = 'district';
154
+ } else {
155
+ update['column_groupby_geolocation_granularity'] = null;
156
+ }
157
+ update['column_groupby_date_granularity'] = null;
158
+ }
159
+ }
160
+ onChange && onChange(update);
161
+ }, [statistic, onChange]);
162
+ var onColumnGroupbyDateGranularityChange = useCallback(function (option) {
163
+ var config = statistic.config;
164
+ var column_groupby_date_granularity = config.column_groupby_date_granularity;
165
+ var value = option.value;
166
+ if (value === column_groupby_date_granularity) return;
167
+ onChange && onChange({
168
+ column_groupby_date_granularity: value
169
+ });
170
+ }, [statistic, onChange]);
171
+ var onColumnGroupbyGeolocationGranularityChange = useCallback(function (option) {
172
+ var config = statistic.config;
173
+ var column_groupby_geolocation_granularity = config.column_groupby_geolocation_granularity;
174
+ var value = option.value;
175
+ if (value === column_groupby_geolocation_granularity) return;
176
+ onChange && onChange({
177
+ column_groupby_geolocation_granularity: value
178
+ });
179
+ }, [statistic, onChange]);
180
+ var onIncludeEmptyChange = useCallback(function (event) {
181
+ eventStopPropagation(event);
182
+ var config = statistic.config;
183
+ var groupby_include_empty_cells = config.groupby_include_empty_cells;
184
+ onChange && onChange({
185
+ groupby_include_empty_cells: !groupby_include_empty_cells
186
+ });
187
+ }, [statistic, onChange]);
188
+ var onGroupTypeChange = useCallback(function (option) {
189
+ var value = option.value;
190
+ var config = statistic.config;
191
+ var column_groupby_column_key = config.column_groupby_column_key,
192
+ column_groupby_date_granularity = config.column_groupby_date_granularity,
193
+ column_groupby_geolocation_granularity = config.column_groupby_geolocation_granularity,
194
+ column_groupby_multiple_numeric_column = config.column_groupby_multiple_numeric_column,
195
+ summary_columns = config.summary_columns,
196
+ summary_type = config.summary_type,
197
+ summary_method = config.summary_method,
198
+ summary_column_key = config.summary_column_key;
199
+ column_groupby_column_key = column_groupby_column_key || null;
200
+ column_groupby_date_granularity = column_groupby_date_granularity || null;
201
+ column_groupby_geolocation_granularity = column_groupby_geolocation_granularity || null;
202
+ if (value === STATISTIC_Y_GROUP_TYPE.COUNT) {
203
+ summary_type = STATISTIC_SUMMARY_TYPE.COUNT;
204
+ column_groupby_multiple_numeric_column = false;
205
+ summary_columns = [];
206
+ summary_column_key = null;
207
+ summary_method = '';
208
+ } else if (value === STATISTIC_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN) {
209
+ summary_type = STATISTIC_SUMMARY_TYPE.ADVANCED;
210
+ column_groupby_multiple_numeric_column = false;
211
+ summary_columns = [];
212
+ summary_method = summary_method || STATISTIC_SUMMARY_CALCULATION_METHOD[0];
213
+ summary_column_key = null;
214
+ if (numericColumns && numericColumns[0]) {
215
+ summary_column_key = numericColumns[0].key;
216
+ summary_method = StatisticsUtils.isDateSummaryColumn(numericColumns[0]) ? STATISTIC_DATE_SUMMARY_CALCULATION_METHOD[0] : STATISTIC_SUMMARY_CALCULATION_METHOD[0];
217
+ }
218
+ } else if (value === STATISTIC_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN) {
219
+ summary_type = STATISTIC_SUMMARY_TYPE.ADVANCED;
220
+ column_groupby_multiple_numeric_column = true;
221
+ summary_columns = [];
222
+ column_groupby_column_key = null;
223
+ column_groupby_date_granularity = null;
224
+ column_groupby_geolocation_granularity = null;
225
+ summary_method = summary_method || STATISTIC_SUMMARY_CALCULATION_METHOD[0];
226
+ summary_column_key = null;
227
+ if (numericColumns && numericColumns[0]) {
228
+ summary_column_key = numericColumns[0].key;
229
+ summary_method = StatisticsUtils.isDateSummaryColumn(numericColumns[0]) ? STATISTIC_DATE_SUMMARY_CALCULATION_METHOD[0] : STATISTIC_SUMMARY_CALCULATION_METHOD[0];
230
+ }
231
+ }
232
+ var update = {
233
+ column_groupby_column_key: column_groupby_column_key,
234
+ column_groupby_date_granularity: column_groupby_date_granularity,
235
+ column_groupby_geolocation_granularity: column_groupby_geolocation_granularity,
236
+ column_groupby_multiple_numeric_column: column_groupby_multiple_numeric_column,
237
+ summary_columns: summary_columns,
238
+ summary_type: summary_type,
239
+ summary_method: summary_method,
240
+ summary_column_key: summary_column_key
241
+ };
242
+ onChange && onChange(update);
243
+ }, [statistic, numericColumns, onChange]);
244
+ var getSelectedGroupType = useCallback(function () {
245
+ var config = statistic.config;
246
+ var column_groupby_multiple_numeric_column = config.column_groupby_multiple_numeric_column,
247
+ summary_type = config.summary_type,
248
+ column_groupby_column_key = config.column_groupby_column_key;
249
+ if (summary_type === STATISTIC_SUMMARY_TYPE.ADVANCED && column_groupby_column_key) {
250
+ return groupTypeOptions[1];
251
+ }
252
+ if (column_groupby_multiple_numeric_column) {
253
+ return groupTypeOptions.find(function (item) {
254
+ return item.value === STATISTIC_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN;
255
+ });
256
+ }
257
+ if (summary_type === STATISTIC_SUMMARY_TYPE.COUNT) {
258
+ return groupTypeOptions[0];
259
+ }
260
+ if (summary_type === STATISTIC_SUMMARY_TYPE.ADVANCED) {
261
+ return groupTypeOptions[1];
262
+ }
263
+ }, [statistic, groupTypeOptions]);
264
+ var onAddNumericColumn = useCallback(function (column) {
265
+ var config = statistic.config;
266
+ var summary_columns = config.summary_columns;
267
+ var columnKey = column.key;
268
+ var newSummaryColumns = [];
269
+ var summaryMethod = StatisticsUtils.isDateSummaryColumn(column) ? STATISTIC_DATE_SUMMARY_CALCULATION_METHOD[0] : STATISTIC_SUMMARY_CALCULATION_METHOD[0];
270
+ if (Array.isArray(summary_columns)) {
271
+ newSummaryColumns = summary_columns.slice(0);
272
+ newSummaryColumns.push({
273
+ column_key: columnKey,
274
+ summary_method: summaryMethod
275
+ });
276
+ } else {
277
+ newSummaryColumns = [{
278
+ column_key: columnKey,
279
+ summary_method: summaryMethod
280
+ }];
281
+ }
282
+ onChange && onChange({
283
+ summary_columns: newSummaryColumns
284
+ });
285
+ }, [statistic, onChange]);
286
+ var onDeleteNumericColumnItem = useCallback(function (index) {
287
+ var config = statistic.config;
288
+ var summary_columns = config.summary_columns;
289
+ summary_columns = summary_columns || [];
290
+ var newSummaryColumns = summary_columns.slice(0);
291
+ newSummaryColumns.splice(index - 1, 1);
292
+ onChange && onChange({
293
+ summary_columns: newSummaryColumns
294
+ });
295
+ }, [statistic, onChange]);
296
+ var onGroupbyNumericColumnChange = useCallback(function (option, index) {
297
+ var column = option.value;
298
+ var config = statistic.config;
299
+ var summaryMethods = StatisticsUtils.isDateSummaryColumn(column) ? STATISTIC_DATE_SUMMARY_CALCULATION_METHOD : STATISTIC_SUMMARY_CALCULATION_METHOD;
300
+ if (index === 0) {
301
+ var _summary_method = config.summary_method;
302
+ var summaryMethod = summaryMethods.includes(_summary_method) ? _summary_method : summaryMethods[0];
303
+ onChange && onChange({
304
+ summary_column_key: column.key,
305
+ summary_method: summaryMethod
306
+ });
307
+ return;
308
+ }
309
+ var summary_columns = config.summary_columns;
310
+ summary_columns = summary_columns || [];
311
+ var newSummaryColumns = summary_columns.slice(0);
312
+ var selectedItem = summary_columns[index - 1];
313
+ var _selectedItem = selectedItem,
314
+ summary_method = _selectedItem.summary_method;
315
+ if (summaryMethods.includes(summary_method)) {
316
+ selectedItem = Object.assign({}, selectedItem, {
317
+ column_key: column.key
318
+ });
319
+ } else {
320
+ selectedItem = Object.assign({}, selectedItem, {
321
+ column_key: column.key,
322
+ summary_method: summaryMethods[0]
323
+ });
324
+ }
325
+ newSummaryColumns[index - 1] = selectedItem;
326
+ onChange && onChange({
327
+ summary_columns: newSummaryColumns
328
+ });
329
+ }, [statistic, onChange]);
330
+ var onSummaryMethodChange = useCallback(function (option, index) {
331
+ var value = option.value;
332
+ var config = statistic.config;
333
+ if (index === 0) {
334
+ onChange && onChange({
335
+ summary_method: value
336
+ });
337
+ return;
338
+ }
339
+ var summary_columns = config.summary_columns;
340
+ summary_columns = summary_columns || [];
341
+ var newSummaryColumns = summary_columns.slice(0);
342
+ var selectedItem = summary_columns[index - 1];
343
+ selectedItem = Object.assign({}, selectedItem, {
344
+ summary_method: value
345
+ });
346
+ newSummaryColumns[index - 1] = selectedItem;
347
+ onChange && onChange({
348
+ summary_columns: newSummaryColumns
349
+ });
350
+ }, [statistic, onChange]);
351
+ var renderGroupbyNumericColumns = useCallback(function () {
352
+ var config = statistic.config;
353
+ var summary_columns = config.summary_columns,
354
+ summary_column_key = config.summary_column_key;
355
+ if (!summary_columns || !Array.isArray(summary_columns)) return null;
356
+ var usedSummaryColumnKeys = summary_columns.map(function (item) {
357
+ return item.column_key;
358
+ });
359
+ usedSummaryColumnKeys.push(summary_column_key);
360
+ return summary_columns.map(function (item, index) {
361
+ var currentUsedSummaryColumnKeys = usedSummaryColumnKeys.filter(function (columnKey) {
362
+ return item.column_key !== columnKey;
363
+ });
364
+ return /*#__PURE__*/React.createElement(NumericSummaryItem, {
365
+ key: "number-column-".concat(index),
366
+ statistic: statistic,
367
+ numericColumnOptions: numericColumnOptions.filter(function (item) {
368
+ return !currentUsedSummaryColumnKeys.includes(item.value.key);
369
+ }),
370
+ index: index + 1,
371
+ value: item,
372
+ onDelete: onDeleteNumericColumnItem,
373
+ onColumnOptionChange: onGroupbyNumericColumnChange,
374
+ onSummaryMethodChange: onSummaryMethodChange
375
+ });
376
+ });
377
+ }, [statistic, numericColumnOptions, onDeleteNumericColumnItem, onGroupbyNumericColumnChange, onSummaryMethodChange]);
378
+ var renderAdvancedStatistic = useCallback(function () {
379
+ var config = statistic.config;
380
+ var table_id = config.table_id,
381
+ column_groupby_column_key = config.column_groupby_column_key,
382
+ summary_type = config.summary_type,
383
+ column_groupby_multiple_numeric_column = config.column_groupby_multiple_numeric_column,
384
+ summary_column_key = config.summary_column_key,
385
+ summary_method = config.summary_method,
386
+ summary_columns = config.summary_columns;
387
+ if (summary_type !== STATISTIC_SUMMARY_TYPE.ADVANCED) return null;
388
+ if (column_groupby_multiple_numeric_column) {
389
+ var columnGroupbyColumn = getTableColumnByKey(selectedTable, column_groupby_column_key);
390
+ var usedSummaryColumnKeys = Array.isArray(summary_columns) ? summary_columns.map(function (item) {
391
+ return item.column_key;
392
+ }) : [];
393
+ var unUsedSummaryColumns = numericColumns.filter(function (column) {
394
+ return column.key !== summary_column_key && !usedSummaryColumnKeys.includes(column.key);
395
+ });
396
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !columnGroupbyColumn && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(NumericSummaryItem, {
397
+ index: 0,
398
+ value: {
399
+ column_key: summary_column_key,
400
+ summary_method: summary_method
401
+ },
402
+ statistic: statistic,
403
+ numericColumnOptions: numericColumnOptions.filter(function (item) {
404
+ return !usedSummaryColumnKeys.includes(item.value.key);
405
+ }),
406
+ onColumnOptionChange: onGroupbyNumericColumnChange,
407
+ onSummaryMethodChange: onSummaryMethodChange
408
+ }), /*#__PURE__*/React.createElement("div", {
409
+ className: "statistics-add-number"
410
+ }, renderGroupbyNumericColumns()), Array.isArray(unUsedSummaryColumns) && unUsedSummaryColumns.length > 0 && /*#__PURE__*/React.createElement("div", {
411
+ className: "statistics-add-number-columns d-flex align-items-center",
412
+ onClick: function onClick() {
413
+ return onAddNumericColumn(unUsedSummaryColumns[0]);
414
+ }
415
+ }, /*#__PURE__*/React.createElement("i", {
416
+ className: "dtable-font dtable-icon-add-table mr-2"
417
+ }), /*#__PURE__*/React.createElement("span", {
418
+ className: "number-column-item add-number-column-description"
419
+ }, intl.get('Add_new_field')))));
420
+ }
421
+ return /*#__PURE__*/React.createElement(BasicSummary, {
422
+ showSummaryTypes: false,
423
+ className: "selected-y-axis",
424
+ label: intl.get('Summary_field'),
425
+ statistic: statistic,
426
+ selectedTableId: table_id,
427
+ tables: tables,
428
+ summaryTypeKey: 'summary_type',
429
+ summaryMethodKey: 'summary_method',
430
+ summaryColumnKey: 'summary_column_key',
431
+ onChange: onChange
432
+ });
433
+ }, [statistic, tables, numericColumns, selectedTable, onChange, numericColumnOptions, onGroupbyNumericColumnChange, onSummaryMethodChange, renderGroupbyNumericColumns, onAddNumericColumn]);
434
+ var config = statistic.config;
435
+ var table_id = config.table_id,
436
+ groupby_column_key = config.groupby_column_key,
437
+ groupby_date_granularity = config.groupby_date_granularity,
438
+ groupby_geolocation_granularity = config.groupby_geolocation_granularity,
439
+ groupby_include_empty_cells = config.groupby_include_empty_cells,
440
+ column_groupby_column_key = config.column_groupby_column_key,
441
+ column_groupby_date_granularity = config.column_groupby_date_granularity,
442
+ column_groupby_geolocation_granularity = config.column_groupby_geolocation_granularity;
443
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonDataSettings, {
444
+ statistic: statistic,
445
+ tables: tables,
446
+ onChange: onChange,
447
+ FilterSettings: FilterSettings
448
+ }), /*#__PURE__*/React.createElement(GroupBy, {
449
+ tables: tables,
450
+ className: "selected-x-axis",
451
+ label: intl.get('Row_grouping_field'),
452
+ selectedTableId: table_id,
453
+ selectedColumnKey: groupby_column_key,
454
+ selectedDateGranularity: groupby_date_granularity,
455
+ selectedGeolocationGranularity: groupby_geolocation_granularity,
456
+ onGroupByChange: onGroupByColumnChange,
457
+ onGroupbyDateGranularityChange: onGroupbyDateGranularityChange,
458
+ onGroupbyGeolocationGranularityChange: onGroupbyGeolocationGranularityChange
459
+ }), /*#__PURE__*/React.createElement(Switch, {
460
+ key: "groupby_include_empty_cells",
461
+ checked: groupby_include_empty_cells,
462
+ placeholder: intl.get('Include_empty'),
463
+ onChange: onIncludeEmptyChange
464
+ }), /*#__PURE__*/React.createElement(Divider, {
465
+ className: "mt-4"
466
+ }), /*#__PURE__*/React.createElement(GroupBy, {
467
+ tables: tables,
468
+ className: "selected-x-axis",
469
+ label: intl.get('Column_grouping_field'),
470
+ selectedTableId: table_id,
471
+ selectedColumnKey: column_groupby_column_key,
472
+ selectedDateGranularity: column_groupby_date_granularity,
473
+ selectedGeolocationGranularity: column_groupby_geolocation_granularity,
474
+ onGroupByChange: onColumnGroupByColumnChange,
475
+ onGroupbyDateGranularityChange: onColumnGroupbyDateGranularityChange,
476
+ onGroupbyGeolocationGranularityChange: onColumnGroupbyGeolocationGranularityChange
477
+ }), /*#__PURE__*/React.createElement(Divider, {
478
+ className: "mt-4"
479
+ }), /*#__PURE__*/React.createElement(FormGroup, {
480
+ className: "seastatistic-parameter-item"
481
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Summary_type')), /*#__PURE__*/React.createElement(DTableSelect, {
482
+ classNamePrefix: "chart-summary-types",
483
+ value: getSelectedGroupType(),
484
+ onChange: onGroupTypeChange,
485
+ options: groupTypeOptions
486
+ })), renderAdvancedStatistic);
487
+ };
488
+ export default DataSettings;
@@ -0,0 +1,2 @@
1
+ import TableDataSettings from './data-settings';
2
+ export { TableDataSettings };
@@ -0,0 +1,157 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import React, { useCallback } from 'react';
3
+ import { FormGroup, Label } from 'reactstrap';
4
+ import { CellType, DATE_COLUMN_OPTIONS } from 'dtable-utils';
5
+ import CommonDataSettings from '../widgets/common-data-settings';
6
+ import Divider from '../widgets/divider';
7
+ import GroupBy from '../widgets/group-by';
8
+ import Switch from '../widgets/switch';
9
+ import BasicSummary from '../widgets/basic-summary';
10
+ import TimePicker from '../widgets/time-picker';
11
+ import { eventStopPropagation } from '../../../utils';
12
+ import { STATISTIC_SUMMARY_TYPE, GEOLOCATION_FORMAT_CITY, GEOLOCATION_FORMAT_MAP } from '../../../constants';
13
+ import intl from '../../../intl';
14
+ var DataSettings = function DataSettings(_ref) {
15
+ var statistic = _ref.statistic,
16
+ tables = _ref.tables,
17
+ FilterSettings = _ref.FilterSettings,
18
+ onChange = _ref.onChange;
19
+ var onXAxisColumnChange = useCallback(function (option) {
20
+ var config = statistic.config;
21
+ var x_axis_column_key = config.x_axis_column_key;
22
+ var column = option.value;
23
+ var newXAxisColumnKey = column.key,
24
+ type = column.type;
25
+ var validValue = newXAxisColumnKey === 'Groupby_null' ? null : newXAxisColumnKey;
26
+ if (x_axis_column_key === validValue) return;
27
+ var update = {
28
+ x_axis_column_key: validValue
29
+ };
30
+ if (!validValue) {
31
+ update['x_axis_date_granularity'] = null;
32
+ update['x_axis_geolocation_granularity'] = null;
33
+ } else {
34
+ if (DATE_COLUMN_OPTIONS.includes(type)) {
35
+ update['x_axis_date_granularity'] = STATISTIC_SUMMARY_TYPE.MONTH;
36
+ update['x_axis_geolocation_granularity'] = null;
37
+ } else if (type === CellType.GEOLOCATION) {
38
+ var _ref2 = column.data || {},
39
+ geo_format = _ref2.geo_format;
40
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
41
+ update['x_axis_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
42
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
43
+ update['x_axis_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
44
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
45
+ update['x_axis_geolocation_granularity'] = 'district';
46
+ } else {
47
+ update['x_axis_geolocation_granularity'] = null;
48
+ }
49
+ update['x_axis_date_granularity'] = null;
50
+ }
51
+ }
52
+ onChange && onChange(update);
53
+ }, [statistic, onChange]);
54
+ var onGroupbyDateGranularityChange = useCallback(function (option) {
55
+ var config = statistic.config;
56
+ var x_axis_date_granularity = config.x_axis_date_granularity;
57
+ var value = option.value;
58
+ if (value === x_axis_date_granularity) return;
59
+ onChange && onChange({
60
+ x_axis_date_granularity: value
61
+ });
62
+ }, [statistic, onChange]);
63
+ var onGroupbyGeolocationGranularityChange = useCallback(function (option) {
64
+ var config = statistic.config;
65
+ var x_axis_geolocation_granularity = config.x_axis_geolocation_granularity;
66
+ var value = option.value;
67
+ if (value === x_axis_geolocation_granularity) return;
68
+ onChange && onChange({
69
+ x_axis_geolocation_granularity: value
70
+ });
71
+ }, [statistic, onChange]);
72
+ var onDateChange = useCallback(function (key, value) {
73
+ var config = statistic.config;
74
+ var oldValue = config[key];
75
+ if (value === oldValue) return;
76
+ onChange && onChange(_defineProperty({}, key, value));
77
+ }, [statistic, onChange]);
78
+ var onDisplayIncreaseChange = useCallback(function (event) {
79
+ eventStopPropagation(event);
80
+ var config = statistic.config;
81
+ var display_increase = config.display_increase;
82
+ onChange && onChange({
83
+ display_increase: !display_increase
84
+ });
85
+ }, [statistic, onChange]);
86
+ var _statistic$config = statistic.config,
87
+ table_id = _statistic$config.table_id,
88
+ x_axis_column_key = _statistic$config.x_axis_column_key,
89
+ x_axis_date_granularity = _statistic$config.x_axis_date_granularity,
90
+ x_axis_geolocation_granularity = _statistic$config.x_axis_geolocation_granularity,
91
+ x_axis_date_range_start = _statistic$config.x_axis_date_range_start,
92
+ x_axis_date_range_end = _statistic$config.x_axis_date_range_end,
93
+ x_axis_compared_date_range_start = _statistic$config.x_axis_compared_date_range_start,
94
+ x_axis_compared_date_range_end = _statistic$config.x_axis_compared_date_range_end,
95
+ display_increase = _statistic$config.display_increase;
96
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonDataSettings, {
97
+ statistic: statistic,
98
+ tables: tables,
99
+ FilterSettings: FilterSettings,
100
+ onChange: onChange
101
+ }), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(GroupBy, {
102
+ tables: tables,
103
+ className: "selected-x-axis",
104
+ label: intl.get('X_axis'),
105
+ selectedTableId: table_id,
106
+ selectedColumnKey: x_axis_column_key,
107
+ selectedDateGranularity: x_axis_date_granularity,
108
+ selectedGeolocationGranularity: x_axis_geolocation_granularity,
109
+ onGroupByChange: onXAxisColumnChange,
110
+ onGroupbyDateGranularityChange: onGroupbyDateGranularityChange,
111
+ onGroupbyGeolocationGranularityChange: onGroupbyGeolocationGranularityChange
112
+ }), /*#__PURE__*/React.createElement(FormGroup, {
113
+ className: "seastatistic-parameter-item"
114
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Date_range')), /*#__PURE__*/React.createElement("div", {
115
+ className: "time-input-container"
116
+ }, /*#__PURE__*/React.createElement(TimePicker, {
117
+ onChange: function onChange(value) {
118
+ return onDateChange('x_axis_date_range_start', value);
119
+ },
120
+ value: x_axis_date_range_start
121
+ }), /*#__PURE__*/React.createElement("div", {
122
+ className: "concat"
123
+ }, ' - '), /*#__PURE__*/React.createElement(TimePicker, {
124
+ onChange: function onChange(value) {
125
+ return onDateChange('x_axis_date_range_end', value);
126
+ },
127
+ value: x_axis_date_range_end
128
+ }))), /*#__PURE__*/React.createElement(FormGroup, {
129
+ className: "seastatistic-parameter-item"
130
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Compare_to_date_range')), /*#__PURE__*/React.createElement("div", {
131
+ className: "time-input-container"
132
+ }, /*#__PURE__*/React.createElement(TimePicker, {
133
+ onChange: function onChange(value) {
134
+ return onDateChange('x_axis_compared_date_range_start', value);
135
+ },
136
+ value: x_axis_compared_date_range_start
137
+ }), /*#__PURE__*/React.createElement("div", {
138
+ className: "concat"
139
+ }, ' - '), /*#__PURE__*/React.createElement(TimePicker, {
140
+ onChange: function onChange(value) {
141
+ return onDateChange('x_axis_compared_date_range_end', value);
142
+ },
143
+ value: x_axis_compared_date_range_end
144
+ }))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(BasicSummary, {
145
+ className: "selected-y-axis",
146
+ label: intl.get('Y_axis'),
147
+ statistic: statistic,
148
+ selectedTableId: table_id,
149
+ tables: tables,
150
+ onChange: onChange
151
+ }), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Switch, {
152
+ checked: display_increase || false,
153
+ placeholder: intl.get('Display_increase'),
154
+ onChange: onDisplayIncreaseChange
155
+ }));
156
+ };
157
+ export default DataSettings;
@@ -0,0 +1,3 @@
1
+ import TimeComparisonDataSettings from './data-settings';
2
+ import TimeComparisonStyleSettings from './style-settings';
3
+ export { TimeComparisonDataSettings, TimeComparisonStyleSettings };