@mwater/visualization 5.2.0 → 5.3.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 (254) 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/LocaleContextInjector.d.ts +5 -11
  10. package/lib/LocaleContextInjector.js +4 -12
  11. package/lib/MWaterAddRelatedFormComponent.js +3 -3
  12. package/lib/MWaterAddRelatedIndicatorComponent.d.ts +1 -4
  13. package/lib/MWaterAddRelatedIndicatorComponent.js +6 -6
  14. package/lib/MWaterCompleteTableSelectComponent.d.ts +5 -16
  15. package/lib/MWaterCompleteTableSelectComponent.js +36 -36
  16. package/lib/MWaterContextComponent.d.ts +4 -6
  17. package/lib/MWaterContextComponent.js +4 -13
  18. package/lib/MWaterLoaderComponent.d.ts +5 -3
  19. package/lib/MWaterLoaderComponent.js +2 -1
  20. package/lib/MWaterTableSelectComponent.d.ts +1 -4
  21. package/lib/MWaterTableSelectComponent.js +10 -12
  22. package/lib/UIComponents.d.ts +2 -2
  23. package/lib/UIComponents.js +4 -12
  24. package/lib/axes/AxisBuilder.d.ts +7 -4
  25. package/lib/axes/AxisBuilder.js +3 -1
  26. package/lib/axes/AxisComponent.d.ts +2 -5
  27. package/lib/axes/AxisComponent.js +1 -2
  28. package/lib/axes/ColorPaletteCollectionComponent.d.ts +5 -12
  29. package/lib/axes/ColorPaletteCollectionComponent.js +67 -36
  30. package/lib/dashboards/DashboardComponent.d.ts +4 -12
  31. package/lib/dashboards/DashboardComponent.js +18 -38
  32. package/lib/dashboards/DashboardDesign.d.ts +3 -3
  33. package/lib/dashboards/DashboardUpgrader.js +36 -1
  34. package/lib/dashboards/DashboardViewComponent.d.ts +5 -34
  35. package/lib/dashboards/DashboardViewComponent.js +109 -132
  36. package/lib/dashboards/FontStyleEditor.d.ts +8 -0
  37. package/lib/dashboards/FontStyleEditor.js +130 -0
  38. package/lib/dashboards/LayoutOptionsComponent.d.ts +0 -1
  39. package/lib/dashboards/LayoutOptionsComponent.js +211 -42
  40. package/lib/dashboards/ServerDashboardDataSource.d.ts +1 -2
  41. package/lib/dashboards/ServerDashboardDataSource.js +52 -33
  42. package/lib/dashboards/WidgetComponent.d.ts +3 -3
  43. package/lib/dashboards/WidgetComponent.js +3 -6
  44. package/lib/dashboards/WidgetDataSourcePrioritizer.d.ts +20 -0
  45. package/lib/dashboards/WidgetDataSourcePrioritizer.js +72 -0
  46. package/lib/dashboards/layoutOptions.d.ts +83 -0
  47. package/lib/dashboards/layoutOptions.js +436 -10
  48. package/lib/datagrids/DatagridDesign.d.ts +7 -6
  49. package/lib/datagrids/ServerDatagridDataSource.d.ts +7 -6
  50. package/lib/datagrids/ServerDatagridDataSource.js +87 -33
  51. package/lib/demo.js +3 -3
  52. package/lib/index.css +5 -0
  53. package/lib/index.d.ts +1 -1
  54. package/lib/index.js +0 -1
  55. package/lib/layouts/LayoutManager.d.ts +33 -29
  56. package/lib/layouts/LayoutManager.js +2 -8
  57. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +26 -57
  58. package/lib/layouts/blocks/BlocksDisplayComponent.js +122 -205
  59. package/lib/layouts/blocks/BlocksLayoutManager.d.ts +6 -22
  60. package/lib/layouts/blocks/BlocksLayoutManager.js +5 -14
  61. package/lib/layouts/blocks/HorizontalBlockComponent.d.ts +5 -4
  62. package/lib/layouts/blocks/HorizontalBlockComponent.js +5 -5
  63. package/lib/mWaterLoader.d.ts +2 -0
  64. package/lib/mWaterLoader.js +2 -1
  65. package/lib/maps/AddLayerComponent.d.ts +6 -8
  66. package/lib/maps/AddLayerComponent.js +6 -6
  67. package/lib/maps/BingLayer.js +10 -20
  68. package/lib/maps/BufferLayer.js +2 -1
  69. package/lib/maps/ChoroplethLayer.js +2 -1
  70. package/lib/maps/DirectMapDataSource.d.ts +5 -2
  71. package/lib/maps/DirectMapDataSource.js +2 -1
  72. package/lib/maps/EditPopupComponent.js +2 -1
  73. package/lib/maps/MapComponent.d.ts +1 -4
  74. package/lib/maps/MapComponent.js +3 -3
  75. package/lib/maps/MarkersLayer.js +30 -25
  76. package/lib/maps/RasterMapViewComponent.d.ts +1 -4
  77. package/lib/maps/RasterMapViewComponent.js +3 -3
  78. package/lib/maps/ServerMapDataSource.d.ts +2 -3
  79. package/lib/maps/ServerMapDataSource.js +5 -5
  80. package/lib/maps/VectorMapViewComponent.js +2 -1
  81. package/lib/maps/mapSymbols.js +2 -0
  82. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  83. package/lib/maps/vectorMaps.js +61 -55
  84. package/lib/quickfilter/QuickfiltersComponent.d.ts +1 -4
  85. package/lib/quickfilter/QuickfiltersComponent.js +3 -3
  86. package/lib/richtext/DropdownPaletteItem.d.ts +32 -0
  87. package/lib/richtext/DropdownPaletteItem.js +82 -0
  88. package/lib/richtext/FontColorPaletteItem.d.ts +1 -5
  89. package/lib/richtext/FontColorPaletteItem.js +32 -27
  90. package/lib/richtext/ItemsHtmlConverter.js +12 -3
  91. package/lib/richtext/RichTextComponent.d.ts +26 -52
  92. package/lib/richtext/RichTextComponent.js +166 -128
  93. package/lib/valueFormatter.js +6 -1
  94. package/lib/wellknown.d.ts +5 -0
  95. package/lib/wellknown.js +288 -0
  96. package/lib/widgets/DropdownWidgetComponent.d.ts +8 -25
  97. package/lib/widgets/DropdownWidgetComponent.js +48 -25
  98. package/lib/widgets/IFrameWidgetComponent.d.ts +1 -2
  99. package/lib/widgets/ImageWidgetComponent.d.ts +2 -3
  100. package/lib/widgets/MapWidget.d.ts +2 -0
  101. package/lib/widgets/MapWidget.js +2 -1
  102. package/lib/widgets/TOCWidget.js +2 -1
  103. package/lib/widgets/Widget.d.ts +2 -0
  104. package/lib/widgets/WidgetDataSource.d.ts +3 -1
  105. package/lib/widgets/charts/Chart.d.ts +0 -1
  106. package/lib/widgets/charts/ChartViewComponent.d.ts +4 -0
  107. package/lib/widgets/charts/ChartViewComponent.js +11 -3
  108. package/lib/widgets/charts/ChartWidget.d.ts +1 -62
  109. package/lib/widgets/charts/ChartWidget.js +4 -183
  110. package/lib/widgets/charts/ChartWidgetComponent.d.ts +51 -0
  111. package/lib/widgets/charts/ChartWidgetComponent.js +167 -0
  112. package/lib/widgets/charts/calendar/CalendarChartViewComponent.d.ts +1 -4
  113. package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +4 -4
  114. package/lib/widgets/charts/layered/LayeredChart.d.ts +5 -10
  115. package/lib/widgets/charts/layered/LayeredChart.js +6 -7
  116. package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +4 -2
  117. package/lib/widgets/charts/layered/LayeredChartCompiler.js +46 -32
  118. package/lib/widgets/charts/layered/LayeredChartDesign.d.ts +4 -0
  119. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.d.ts +3 -0
  120. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +21 -3
  121. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.d.ts +1 -2
  122. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +2 -1
  123. package/lib/widgets/charts/layered/LayeredChartViewComponent.d.ts +1 -4
  124. package/lib/widgets/charts/layered/LayeredChartViewComponent.js +89 -38
  125. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.d.ts +5 -112
  126. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.js +122 -166
  127. package/lib/widgets/charts/pivot/PivotChart.d.ts +6 -0
  128. package/lib/widgets/charts/pivot/PivotChart.js +47 -17
  129. package/lib/widgets/charts/pivot/PivotChartDesign.d.ts +11 -0
  130. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +1 -1
  131. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +1 -1
  132. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.d.ts +2 -2
  133. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.js +20 -36
  134. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +0 -1
  135. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.d.ts +23 -2
  136. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.js +215 -181
  137. package/lib/widgets/charts/pivot/PivotChartUtils.d.ts +2 -2
  138. package/lib/widgets/charts/pivot/PivotChartViewComponent.d.ts +9 -28
  139. package/lib/widgets/charts/pivot/PivotChartViewComponent.js +20 -60
  140. package/lib/widgets/charts/table/TableChart.js +8 -4
  141. package/lib/widgets/charts/table/TableChartDesignerComponent.js +3 -3
  142. package/lib/widgets/charts/table/TableChartViewComponent.js +11 -11
  143. package/lib/widgets/text/TextComponent.d.ts +5 -12
  144. package/lib/widgets/text/TextComponent.js +19 -39
  145. package/lib/widgets/text/TextWidget.d.ts +2 -1
  146. package/lib/widgets/text/TextWidget.js +5 -1
  147. package/lib/widgets/text/TextWidgetComponent.d.ts +15 -3
  148. package/lib/widgets/text/TextWidgetComponent.js +76 -19
  149. package/lib/widgets/text/TextWidgetDesign.d.ts +13 -1
  150. package/lib/widgets/text/TextWidgetDesign.js +6 -0
  151. package/package.json +4 -4
  152. package/src/ColorComponent.tsx +177 -0
  153. package/src/ColorSchemeFactory.ts +12 -6
  154. package/src/CustomColorsContext.tsx +9 -0
  155. package/src/FiltersDesignerComponent.ts +3 -4
  156. package/src/LocaleContextInjector.tsx +14 -13
  157. package/src/MWaterAddRelatedFormComponent.ts +3 -3
  158. package/src/MWaterAddRelatedIndicatorComponent.ts +6 -6
  159. package/src/MWaterCompleteTableSelectComponent.tsx +36 -36
  160. package/src/MWaterContextComponent.tsx +8 -17
  161. package/src/MWaterLoaderComponent.ts +6 -3
  162. package/src/MWaterTableSelectComponent.tsx +11 -12
  163. package/src/{UIComponents.ts → UIComponents.tsx} +7 -15
  164. package/src/axes/AxisBuilder.ts +7 -5
  165. package/src/axes/AxisComponent.ts +3 -4
  166. package/src/axes/{ColorPaletteCollectionComponent.ts → ColorPaletteCollectionComponent.tsx} +87 -61
  167. package/src/dashboards/DashboardComponent.tsx +71 -107
  168. package/src/dashboards/DashboardDesign.ts +3 -3
  169. package/src/dashboards/DashboardUpgrader.ts +41 -1
  170. package/src/dashboards/DashboardViewComponent.tsx +313 -0
  171. package/src/dashboards/FontStyleEditor.tsx +166 -0
  172. package/src/dashboards/LayoutOptionsComponent.tsx +380 -75
  173. package/src/dashboards/ServerDashboardDataSource.ts +52 -33
  174. package/src/dashboards/WidgetComponent.tsx +6 -12
  175. package/src/dashboards/WidgetDataSourcePrioritizer.ts +82 -0
  176. package/src/dashboards/layoutOptions.tsx +581 -0
  177. package/src/datagrids/DatagridDesign.ts +8 -3
  178. package/src/datagrids/ServerDatagridDataSource.ts +106 -43
  179. package/src/demo.ts +3 -3
  180. package/src/index.css +5 -0
  181. package/src/index.ts +1 -1
  182. package/src/layouts/LayoutManager.ts +44 -42
  183. package/src/layouts/blocks/BlocksDisplayComponent.tsx +498 -0
  184. package/src/layouts/blocks/BlocksLayoutManager.ts +6 -15
  185. package/src/layouts/blocks/HorizontalBlockComponent.ts +9 -8
  186. package/src/mWaterLoader.ts +4 -1
  187. package/src/maps/AddLayerComponent.ts +9 -9
  188. package/src/maps/BingLayer.ts +16 -26
  189. package/src/maps/BufferLayer.ts +2 -1
  190. package/src/maps/ChoroplethLayer.ts +2 -1
  191. package/src/maps/DirectMapDataSource.ts +12 -3
  192. package/src/maps/EditPopupComponent.ts +2 -1
  193. package/src/maps/MapComponent.ts +3 -3
  194. package/src/maps/MarkersLayer.ts +38 -41
  195. package/src/maps/RasterMapViewComponent.ts +3 -3
  196. package/src/maps/ServerMapDataSource.ts +7 -7
  197. package/src/maps/VectorMapViewComponent.tsx +2 -1
  198. package/src/maps/mapSymbols.ts +2 -0
  199. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  200. package/src/maps/vectorMaps.tsx +79 -74
  201. package/src/quickfilter/QuickfiltersComponent.ts +3 -3
  202. package/src/richtext/DropdownPaletteItem.tsx +144 -0
  203. package/src/richtext/FontColorPaletteItem.tsx +160 -0
  204. package/src/richtext/ItemsHtmlConverter.ts +15 -5
  205. package/src/richtext/RichTextComponent.tsx +274 -232
  206. package/src/valueFormatter.ts +5 -1
  207. package/src/wellknown.ts +286 -0
  208. package/src/widgets/DropdownWidgetComponent.tsx +75 -0
  209. package/src/widgets/MapWidget.ts +5 -2
  210. package/src/widgets/TOCWidget.ts +2 -1
  211. package/src/widgets/Widget.ts +3 -0
  212. package/src/widgets/WidgetDataSource.ts +3 -1
  213. package/src/widgets/charts/Chart.ts +1 -1
  214. package/src/widgets/charts/ChartViewComponent.ts +16 -3
  215. package/src/widgets/charts/ChartWidget.ts +3 -275
  216. package/src/widgets/charts/ChartWidgetComponent.tsx +281 -0
  217. package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +4 -4
  218. package/src/widgets/charts/layered/LayeredChart.ts +4 -6
  219. package/src/widgets/charts/layered/LayeredChartCompiler.ts +80 -63
  220. package/src/widgets/charts/layered/LayeredChartDesign.ts +7 -1
  221. package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +43 -10
  222. package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +6 -6
  223. package/src/widgets/charts/layered/LayeredChartViewComponent.ts +140 -88
  224. package/src/widgets/charts/pivot/IntersectionDesignerComponent.tsx +305 -221
  225. package/src/widgets/charts/pivot/PivotChart.ts +56 -18
  226. package/src/widgets/charts/pivot/PivotChartDesign.ts +12 -0
  227. package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +4 -3
  228. package/src/widgets/charts/pivot/PivotChartLayoutBuilder.ts +39 -76
  229. package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +0 -1
  230. package/src/widgets/charts/pivot/PivotChartQueryBuilder.ts +230 -189
  231. package/src/widgets/charts/pivot/PivotChartUtils.ts +4 -4
  232. package/src/widgets/charts/pivot/{PivotChartViewComponent.ts → PivotChartViewComponent.tsx} +86 -89
  233. package/src/widgets/charts/table/TableChart.ts +8 -4
  234. package/src/widgets/charts/table/TableChartDesignerComponent.ts +4 -4
  235. package/src/widgets/charts/table/TableChartViewComponent.ts +13 -14
  236. package/src/widgets/text/TextComponent.tsx +47 -49
  237. package/src/widgets/text/TextWidget.ts +8 -3
  238. package/src/widgets/text/TextWidgetComponent.tsx +249 -0
  239. package/src/widgets/text/TextWidgetDesign.ts +22 -1
  240. package/src/ColorComponent.ts +0 -117
  241. package/src/dashboards/DashboardViewComponent.ts +0 -303
  242. package/src/dashboards/layoutOptions.ts +0 -40
  243. package/src/layout-styles.css +0 -263
  244. package/src/layouts/blocks/BlocksDisplayComponent.ts +0 -461
  245. package/src/layouts/grid/GridLayoutComponent.ts +0 -67
  246. package/src/layouts/grid/GridLayoutManager.ts +0 -185
  247. package/src/layouts/grid/LegoLayoutEngine.ts +0 -142
  248. package/src/layouts/grid/PaletteItemComponent.ts +0 -28
  249. package/src/layouts/grid/README.md +0 -14
  250. package/src/layouts/grid/WidgetContainerComponent.ts +0 -420
  251. package/src/richtext/FontColorPaletteItem.ts +0 -172
  252. package/src/richtext/FontSizePaletteItem.ts +0 -110
  253. package/src/widgets/DropdownWidgetComponent.ts +0 -78
  254. package/src/widgets/text/TextWidgetComponent.ts +0 -120
@@ -4,22 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
- const R = react_1.default.createElement;
8
7
  const lodash_1 = __importDefault(require("lodash"));
9
8
  const expressions_ui_1 = require("@mwater/expressions-ui");
10
9
  const ItemsHtmlConverter_1 = __importDefault(require("./ItemsHtmlConverter"));
11
10
  const react_float_affixed_1 = __importDefault(require("react-float-affixed"));
12
11
  const FontColorPaletteItem_1 = __importDefault(require("./FontColorPaletteItem"));
13
- const FontSizePaletteItem_1 = __importDefault(require("./FontSizePaletteItem"));
12
+ const DropdownPaletteItem_1 = __importDefault(require("./DropdownPaletteItem"));
14
13
  class RichTextComponent extends react_1.default.Component {
15
14
  static defaultProps = {
16
15
  includeHeadings: true,
17
16
  items: [],
18
17
  itemsHtmlConverter: new ItemsHtmlConverter_1.default(),
19
18
  };
20
- entireComponent;
21
- contentEditable;
22
- paletteComponent;
19
+ entireComponent = null;
20
+ contentEditable = null;
21
+ paletteComponent = null;
22
+ /** Number of changes in progress. Used with beginChanges and endChanges
23
+ * to prevent onChange being called during a change */
24
+ changesInProgress = 0;
23
25
  constructor(props) {
24
26
  super(props);
25
27
  this.state = {
@@ -40,21 +42,19 @@ class RichTextComponent extends react_1.default.Component {
40
42
  focus() {
41
43
  this.contentEditable.focus();
42
44
  }
45
+ beginChanges() {
46
+ this.changesInProgress++;
47
+ }
48
+ endChanges() {
49
+ this.changesInProgress--;
50
+ if (this.changesInProgress === 0) {
51
+ this.handleChange(this.contentEditable.getEditor());
52
+ }
53
+ }
43
54
  handleInsertExpr = (item) => {
44
55
  const html = '<div data-embed="' + lodash_1.default.escape(JSON.stringify(item)) + '"></div>';
45
56
  this.contentEditable.pasteHTML(html);
46
57
  };
47
- handleSetFontSize = (size) => {
48
- // Requires a selection
49
- let html = this.contentEditable.getSelectedHTML();
50
- if (!html) {
51
- return alert("Please select text first to set size");
52
- }
53
- // Clear existing font-size styles. This is clearly a hack, but font sizes are absolute in execCommand which
54
- // doesn't mix with our various dashboard stylings, so we need to use percentages
55
- html = html.replace(/font-size:\s*\d+%;?/g, "");
56
- return this.contentEditable.pasteHTML(`<span style=\"font-size:${size}\">` + html + "</span>");
57
- };
58
58
  handleSetFontColor = (color) => {
59
59
  // Requires a selection
60
60
  const html = this.contentEditable.getSelectedHTML();
@@ -63,7 +63,60 @@ class RichTextComponent extends react_1.default.Component {
63
63
  }
64
64
  this.handleCommand("foreColor", color);
65
65
  };
66
+ handleSetFontSize = (tag, size) => {
67
+ this.beginChanges();
68
+ try {
69
+ this.handleCommand("formatBlock", `<${tag}>`);
70
+ const selection = window.getSelection();
71
+ if (!selection || !selection.rangeCount)
72
+ return;
73
+ // Function to apply or remove font size
74
+ const applyFontSize = (element) => {
75
+ if (size === null) {
76
+ element.style.removeProperty("font-size");
77
+ }
78
+ else {
79
+ element.style.fontSize = size;
80
+ }
81
+ };
82
+ // Get the start and end containers of the selection
83
+ const range = selection.getRangeAt(0);
84
+ let startNode = range.startContainer.nodeType === Node.TEXT_NODE ? range.startContainer.parentElement : range.startContainer.childNodes[range.startOffset];
85
+ let endNode = range.endContainer.nodeType === Node.TEXT_NODE ? range.endContainer.parentElement : range.endContainer.childNodes[range.endOffset];
86
+ // Find element that has parent with contentEditable
87
+ while (startNode && !startNode.parentElement?.contentEditable) {
88
+ startNode = startNode.parentElement;
89
+ }
90
+ while (endNode && !endNode.parentElement?.contentEditable) {
91
+ endNode = endNode.parentElement;
92
+ }
93
+ if (!startNode || !endNode || startNode.nodeType !== Node.ELEMENT_NODE || endNode.nodeType !== Node.ELEMENT_NODE) {
94
+ return;
95
+ }
96
+ // Get array of nodes between start and end
97
+ const rootElements = [];
98
+ let node = startNode;
99
+ while (node !== null) {
100
+ if (node.nodeType === Node.ELEMENT_NODE) {
101
+ rootElements.push(node);
102
+ }
103
+ if (node === endNode) {
104
+ break;
105
+ }
106
+ node = node.nextSibling;
107
+ }
108
+ for (const element of rootElements) {
109
+ applyFontSize(element);
110
+ }
111
+ }
112
+ finally {
113
+ this.endChanges();
114
+ }
115
+ };
66
116
  handleChange = (elem) => {
117
+ if (this.changesInProgress > 0) {
118
+ return;
119
+ }
67
120
  const items = this.props.itemsHtmlConverter.convertElemToItems(elem);
68
121
  // Check if changed
69
122
  if (!lodash_1.default.isEqual(items, this.props.items)) {
@@ -75,10 +128,10 @@ class RichTextComponent extends react_1.default.Component {
75
128
  }
76
129
  };
77
130
  handleFocus = () => {
78
- return this.setState({ focused: true });
131
+ this.setState({ focused: true });
79
132
  };
80
133
  handleBlur = () => {
81
- return this.setState({ focused: false });
134
+ this.setState({ focused: false });
82
135
  };
83
136
  // Perform a command such as bold, underline, etc.
84
137
  handleCommand = (command, param, ev) => {
@@ -88,10 +141,10 @@ class RichTextComponent extends react_1.default.Component {
88
141
  if (["foreColor"].includes(command)) {
89
142
  document.execCommand("styleWithCSS", null, true);
90
143
  document.execCommand(command, false, param);
91
- return document.execCommand("styleWithCSS", null, false);
144
+ document.execCommand("styleWithCSS", null, false);
92
145
  }
93
146
  else {
94
- return document.execCommand(command, false, param);
147
+ document.execCommand(command, false, param);
95
148
  }
96
149
  };
97
150
  handleCreateLink = (ev) => {
@@ -108,10 +161,11 @@ class RichTextComponent extends react_1.default.Component {
108
161
  if (!this.state.focused) {
109
162
  this.setState({ focused: true });
110
163
  }
111
- if (ev.target.dataset?.embed || ev.target.parentElement?.dataset?.embed) {
112
- const item = JSON.parse(ev.target.dataset?.embed || ev.target.parentElement?.dataset?.embed);
164
+ const target = ev.target;
165
+ if (target.dataset?.embed || target.parentElement?.dataset?.embed) {
166
+ const item = JSON.parse(target.dataset?.embed || target.parentElement?.dataset?.embed);
113
167
  if (item != null) {
114
- return this.props.onItemClick?.(item);
168
+ this.props.onItemClick?.(item);
115
169
  }
116
170
  }
117
171
  };
@@ -130,126 +184,110 @@ class RichTextComponent extends react_1.default.Component {
130
184
  }
131
185
  elem = elem.parentElement;
132
186
  }
133
- return R(react_float_affixed_1.default, {
134
- style: { zIndex },
135
- edges: "over,under,left,right",
136
- align: "center",
137
- render: this.renderPaletteContent,
138
- });
187
+ return (react_1.default.createElement(react_float_affixed_1.default, { style: { zIndex }, edges: "over,under,left,right", align: "center", render: this.renderPaletteContent }));
139
188
  }
140
189
  renderPaletteContent = (schemeName, { edges }) => {
141
- return R("div", {
142
- key: "palette",
143
- className: "mwater-visualization-text-palette",
144
- ref: (c) => {
190
+ return (react_1.default.createElement("div", { key: "palette", className: "mwater-visualization-text-palette", ref: (c) => {
145
191
  this.paletteComponent = c;
146
- },
147
- }, R("div", {
148
- key: "bold",
149
- className: "mwater-visualization-text-palette-item",
150
- onMouseDown: this.handleCommand.bind(null, "bold", null),
151
- }, R("b", null, "B")), R("div", {
152
- key: "italic",
153
- className: "mwater-visualization-text-palette-item",
154
- onMouseDown: this.handleCommand.bind(null, "italic", null),
155
- }, R("i", null, "I")), R("div", {
156
- key: "underline",
157
- className: "mwater-visualization-text-palette-item",
158
- onMouseDown: this.handleCommand.bind(null, "underline", null),
159
- }, R("span", { style: { textDecoration: "underline" } }, "U")), R(FontColorPaletteItem_1.default, {
160
- key: "foreColor",
161
- onSetColor: this.handleSetFontColor,
162
- position: schemeName === "over" ? "under" : "over",
163
- }), R(FontSizePaletteItem_1.default, {
164
- key: "fontSize",
165
- onSetSize: this.handleSetFontSize,
166
- position: schemeName === "over" ? "under" : "over",
167
- }), R("div", { key: "link", className: "mwater-visualization-text-palette-item", onMouseDown: this.handleCreateLink }, R("i", { className: "fa fa-link" })), R("div", {
168
- key: "justifyLeft",
169
- className: "mwater-visualization-text-palette-item",
170
- onMouseDown: this.handleCommand.bind(null, "justifyLeft", null),
171
- }, R("i", { className: "fa fa-align-left" })), R("div", {
172
- key: "justifyCenter",
173
- className: "mwater-visualization-text-palette-item",
174
- onMouseDown: this.handleCommand.bind(null, "justifyCenter", null),
175
- }, R("i", { className: "fa fa-align-center" })), R("div", {
176
- key: "justifyRight",
177
- className: "mwater-visualization-text-palette-item",
178
- onMouseDown: this.handleCommand.bind(null, "justifyRight", null),
179
- }, R("i", { className: "fa fa-align-right" })), R("div", {
180
- key: "justifyFull",
181
- className: "mwater-visualization-text-palette-item",
182
- onMouseDown: this.handleCommand.bind(null, "justifyFull", null),
183
- }, R("i", { className: "fa fa-align-justify" })), R("div", {
184
- key: "insertUnorderedList",
185
- className: "mwater-visualization-text-palette-item",
186
- onMouseDown: this.handleCommand.bind(null, "insertUnorderedList", null),
187
- }, R("i", { className: "fa fa-list-ul" })), R("div", {
188
- key: "insertOrderedList",
189
- className: "mwater-visualization-text-palette-item",
190
- onMouseDown: this.handleCommand.bind(null, "insertOrderedList", null),
191
- }, R("i", { className: "fa fa-list-ol" })), this.props.includeHeadings
192
- ? [
193
- R("div", {
194
- key: "h1",
195
- className: "mwater-visualization-text-palette-item",
196
- onMouseDown: this.handleCommand.bind(null, "formatBlock", "<H1>"),
197
- }, R("i", { className: "fa fa-header" })),
198
- R("div", {
199
- key: "h2",
200
- className: "mwater-visualization-text-palette-item",
201
- onMouseDown: this.handleCommand.bind(null, "formatBlock", "<H2>"),
202
- }, R("i", { className: "fa fa-header", style: { fontSize: "80%" } })),
203
- R("div", {
204
- key: "p",
205
- className: "mwater-visualization-text-palette-item",
206
- onMouseDown: this.handleCommand.bind(null, "formatBlock", "<div>"),
207
- }, "\u00b6"),
208
- ]
209
- : undefined, R("div", {
210
- key: "removeFormat",
211
- className: "mwater-visualization-text-palette-item",
212
- onMouseDown: this.handleCommand.bind(null, "removeFormat", null),
213
- style: { paddingLeft: 5, paddingRight: 5 },
214
- }, R("img", { src: removeFormatIcon, style: { height: 20 } })), this.props.extraPaletteButtons);
192
+ } },
193
+ react_1.default.createElement("div", { key: "bold", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("bold", null, ev) },
194
+ react_1.default.createElement("i", { className: "fas fa-bold" })),
195
+ react_1.default.createElement("div", { key: "italic", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("italic", null, ev) },
196
+ react_1.default.createElement("i", { className: "fas fa-italic" })),
197
+ react_1.default.createElement("div", { key: "underline", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("underline", null, ev) },
198
+ react_1.default.createElement("i", { className: "fas fa-underline" })),
199
+ react_1.default.createElement(FontColorPaletteItem_1.default, { key: "foreColor", onSetColor: this.handleSetFontColor, position: schemeName === "over" ? "under" : "over" }),
200
+ react_1.default.createElement("div", { key: "link", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCreateLink(ev) },
201
+ react_1.default.createElement("i", { className: "fas fa-link" })),
202
+ react_1.default.createElement("div", { key: "removeFormat", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("removeFormat", null, ev), style: { paddingLeft: 5, paddingRight: 5 } },
203
+ react_1.default.createElement("i", { className: "fas fa-remove-format" })),
204
+ react_1.default.createElement(DropdownPaletteItem_1.default, { key: "justify", items: [
205
+ { label: react_1.default.createElement("span", null,
206
+ react_1.default.createElement("i", { className: "fas fa-align-left fa-fw" }),
207
+ " Left"), value: "justifyLeft" },
208
+ { label: react_1.default.createElement("span", null,
209
+ react_1.default.createElement("i", { className: "fas fa-align-center fa-fw" }),
210
+ " Center"), value: "justifyCenter" },
211
+ { label: react_1.default.createElement("span", null,
212
+ react_1.default.createElement("i", { className: "fas fa-align-right fa-fw" }),
213
+ " Right"), value: "justifyRight" },
214
+ { label: react_1.default.createElement("span", null,
215
+ react_1.default.createElement("i", { className: "fas fa-align-justify fa-fw" }),
216
+ " Justify"), value: "justifyFull" },
217
+ ], onSelect: (value) => this.handleCommand(value, null), position: schemeName === "over" ? "under" : "over", label: react_1.default.createElement("i", { className: "fas fa-align-left" }) }),
218
+ react_1.default.createElement("div", { key: "insertUnorderedList", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("insertUnorderedList", null, ev) },
219
+ react_1.default.createElement("i", { className: "fas fa-list-ul" })),
220
+ react_1.default.createElement("div", { key: "insertOrderedList", className: "mwater-visualization-text-palette-item", onMouseDown: (ev) => this.handleCommand("insertOrderedList", null, ev) },
221
+ react_1.default.createElement("i", { className: "fas fa-list-ol" })),
222
+ this.props.includeHeadings && [
223
+ react_1.default.createElement(DropdownPaletteItem_1.default, { key: "paragraph", items: [
224
+ { label: "Heading 1", value: "h1" },
225
+ { label: "Heading 2", value: "h2" },
226
+ { label: "Extra Small", value: "xsmall" },
227
+ { label: "Small", value: "small" },
228
+ { label: "Normal", value: "normal" },
229
+ { label: "Large", value: "large" },
230
+ { label: "Extra Large", value: "xlarge" },
231
+ { label: "6px", value: "6px", more: true },
232
+ { label: "7px", value: "7px", more: true },
233
+ { label: "8px", value: "8px", more: true },
234
+ { label: "9px", value: "9px", more: true },
235
+ { label: "10px", value: "10px", more: true },
236
+ { label: "11px", value: "11px", more: true },
237
+ { label: "12px", value: "12px", more: true },
238
+ { label: "14px", value: "14px", more: true },
239
+ { label: "16px", value: "16px", more: true },
240
+ { label: "18px", value: "18px", more: true },
241
+ { label: "20px", value: "20px", more: true },
242
+ { label: "22px", value: "22px", more: true },
243
+ { label: "24px", value: "24px", more: true },
244
+ { label: "30px", value: "30px", more: true },
245
+ { label: "36px", value: "36px", more: true },
246
+ ], onSelect: (tag) => {
247
+ if (tag.startsWith("h")) {
248
+ this.handleSetFontSize(tag, null);
249
+ }
250
+ else if (tag === "normal") {
251
+ this.handleSetFontSize("div", null);
252
+ }
253
+ else if (tag === "large") {
254
+ this.handleSetFontSize("div", "120%");
255
+ }
256
+ else if (tag === "xlarge") {
257
+ this.handleSetFontSize("div", "150%");
258
+ }
259
+ else if (tag === "small") {
260
+ this.handleSetFontSize("div", "87.5%");
261
+ }
262
+ else if (tag === "xsmall") {
263
+ this.handleSetFontSize("div", "75%");
264
+ }
265
+ else {
266
+ this.handleSetFontSize("div", tag);
267
+ }
268
+ }, position: schemeName === "over" ? "under" : "over", label: react_1.default.createElement("i", { className: "fas fa-text-size" }) })
269
+ ],
270
+ this.props.extraPaletteButtons));
215
271
  };
216
272
  refContentEditable = (c) => {
217
273
  this.contentEditable = c;
218
274
  };
219
275
  renderHtml() {
220
276
  if (this.props.onItemsChange != null) {
221
- return R("div", { key: "contents", style: this.props.style, className: this.props.className }, R(expressions_ui_1.ContentEditableComponent, {
222
- ref: this.refContentEditable,
223
- style: { outline: "none" },
224
- html: this.createHtml(),
225
- onChange: this.handleChange,
226
- onClick: this.handleEditorClick,
227
- onFocus: this.handleFocus,
228
- onBlur: this.handleBlur,
229
- }), this.props.items?.[0] == null
230
- ? R("div", {
231
- key: "placeholder",
232
- style: { color: "#DDD", position: "absolute", top: 0, left: 0, right: 0, pointerEvents: "none" },
233
- }, "Click to Edit")
234
- : undefined);
277
+ return (react_1.default.createElement("div", { key: "contents", style: this.props.style, className: this.props.className },
278
+ react_1.default.createElement(expressions_ui_1.ContentEditableComponent, { ref: this.refContentEditable, style: { outline: "none" }, html: this.createHtml(), onChange: this.handleChange, onClick: this.handleEditorClick, onFocus: this.handleFocus, onBlur: this.handleBlur }),
279
+ this.props.items?.[0] == null ? (react_1.default.createElement("div", { key: "placeholder", style: { color: "#DDD", position: "absolute", top: 0, left: 0, right: 0, pointerEvents: "none" } }, "Click to Edit")) : undefined));
235
280
  }
236
281
  else {
237
- return R("div", {
238
- key: "contents",
239
- style: this.props.style,
240
- className: this.props.className,
241
- dangerouslySetInnerHTML: { __html: this.createHtml() },
242
- });
282
+ return (react_1.default.createElement("div", { key: "contents", style: this.props.style, className: this.props.className, dangerouslySetInnerHTML: { __html: this.createHtml() } }));
243
283
  }
244
284
  }
245
285
  render() {
246
- return R("div", {
247
- style: { position: "relative" },
248
- ref: (c) => {
286
+ return (react_1.default.createElement("div", { style: { position: "relative" }, ref: (c) => {
249
287
  this.entireComponent = c;
250
- },
251
- }, this.renderHtml(), this.state.focused ? this.renderPalette() : undefined);
288
+ } },
289
+ this.renderHtml(),
290
+ this.state.focused ? this.renderPalette() : undefined));
252
291
  }
253
292
  }
254
293
  exports.default = RichTextComponent;
255
- var removeFormatIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAr0lEQVQ4y91U2w3CMAy8VB0kbFA2YYVuABOZbsAmGaFscnzgSlGSBgfCB1g6OXbkkx+yHUn0lgFfkN8hHSt/lma71kxdhIv6Dom/HGicflB97NVTD2ACsPQc1En1zUpqKb+pdEumzaVbSNPSRRFL7iNZQ1BstvApsmODZJXUa8A58W9Ea4nwFWkNa0Sc/Q+F1dyDRD30AO6qJV/wtgxNPR3fOEJXALO+5092/0+P9APt7i9xOIlepwAAAABJRU5ErkJggg==";
@@ -7,6 +7,7 @@ exports.formatValue = exports.getDefaultFormat = exports.getFormatOptions = expo
7
7
  const d3_format_1 = require("d3-format");
8
8
  const utm_1 = require("utm");
9
9
  const dayjs_1 = __importDefault(require("./dayjs"));
10
+ const wellknown_1 = require("./wellknown");
10
11
  /** Determine if can format type */
11
12
  function canFormatType(type) {
12
13
  return type == "number" || type == "geometry" || type === "date" || type === "datetime";
@@ -29,7 +30,8 @@ function getFormatOptions(type) {
29
30
  if (type == "geometry") {
30
31
  return [
31
32
  { value: "lat, lng", label: "Latitude, Longitude" },
32
- { value: "UTM", label: "UTM" }
33
+ { value: "UTM", label: "UTM" },
34
+ { value: "WKT", label: "Well-Known Text" }
33
35
  ];
34
36
  }
35
37
  if (type == "date") {
@@ -126,6 +128,9 @@ function formatValue(type, value, format, locale, legacyPercentFormat) {
126
128
  }
127
129
  return value.type;
128
130
  }
131
+ else if (format == "WKT") {
132
+ return (0, wellknown_1.stringify)(value);
133
+ }
129
134
  else {
130
135
  // Display as lat/lng if Point, otherwise type
131
136
  if (value.type == "Point") {
@@ -0,0 +1,5 @@
1
+ export declare function parse(input: string): any;
2
+ /**
3
+ * Stringifies a GeoJSON object into WKT
4
+ */
5
+ export declare function stringify(gj: any): string;