@splunk/visualizations 28.4.0 → 28.5.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 (160) hide show
  1. package/Area.config.js +28 -7
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +106 -39
  4. package/Area.js.map +2 -2
  5. package/Bar.config.js +28 -7
  6. package/Bar.config.js.map +2 -2
  7. package/Bar.js +106 -39
  8. package/Bar.js.map +2 -2
  9. package/Bubble.config.js +4 -4
  10. package/Bubble.config.js.map +2 -2
  11. package/Bubble.js +78 -30
  12. package/Bubble.js.map +2 -2
  13. package/CHANGELOG.external.md +89 -0
  14. package/ChoroplethSvg.js +74 -26
  15. package/ChoroplethSvg.js.map +2 -2
  16. package/Column.config.js +28 -7
  17. package/Column.config.js.map +2 -2
  18. package/Column.js +106 -39
  19. package/Column.js.map +2 -2
  20. package/Ellipse/config.d.ts.map +1 -1
  21. package/Ellipse.config.js +14 -5
  22. package/Ellipse.config.js.map +4 -4
  23. package/Ellipse.js +130 -73
  24. package/Ellipse.js.map +4 -4
  25. package/Events.js +74 -26
  26. package/Events.js.map +2 -2
  27. package/FillerGauge.js +234 -47
  28. package/FillerGauge.js.map +2 -2
  29. package/Image.js +74 -26
  30. package/Image.js.map +2 -2
  31. package/Line/lineUtils.d.ts.map +1 -1
  32. package/Line/mockdata/LineData.d.ts +95 -0
  33. package/Line/mockdata/LineData.d.ts.map +1 -1
  34. package/Line.config.js +28 -7
  35. package/Line.config.js.map +2 -2
  36. package/Line.js +122 -41
  37. package/Line.js.map +2 -2
  38. package/LinkGraph.js +74 -26
  39. package/LinkGraph.js.map +2 -2
  40. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  41. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  42. package/Map/PureMap/MapUtils.d.ts +2 -2
  43. package/Map/PureMap/MapUtils.d.ts.map +1 -1
  44. package/Map/PureMap/PureMap.d.ts.map +1 -1
  45. package/Map.js +111 -37
  46. package/Map.js.map +2 -2
  47. package/Markdown/config.d.ts.map +1 -1
  48. package/Markdown.config.js +14 -5
  49. package/Markdown.config.js.map +4 -4
  50. package/Markdown.js +91 -34
  51. package/Markdown.js.map +4 -4
  52. package/MarkerGauge.js +243 -56
  53. package/MarkerGauge.js.map +4 -4
  54. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  55. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  56. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -1
  57. package/NetworkGraph/PureNetworkGraph/utils/dragUtils.d.ts +78 -0
  58. package/NetworkGraph/PureNetworkGraph/utils/dragUtils.d.ts.map +1 -0
  59. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +1 -2
  60. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  61. package/NetworkGraph.config.js.map +2 -2
  62. package/NetworkGraph.js +365 -105
  63. package/NetworkGraph.js.map +4 -4
  64. package/PERFORMANCE.md +23 -0
  65. package/ParallelCoordinates/ParallelCoordinates.d.ts +1 -46
  66. package/ParallelCoordinates/ParallelCoordinates.d.ts.map +1 -1
  67. package/ParallelCoordinates/PureParallelCoordinates/PureParallelCoordinates.d.ts +12 -58
  68. package/ParallelCoordinates/PureParallelCoordinates/PureParallelCoordinates.d.ts.map +1 -1
  69. package/ParallelCoordinates/PureParallelCoordinates/src/ParallelCoordinatesChart.d.ts +1 -0
  70. package/ParallelCoordinates/PureParallelCoordinates/src/ParallelCoordinatesChart.d.ts.map +1 -1
  71. package/ParallelCoordinates.js +150 -153
  72. package/ParallelCoordinates.js.map +4 -4
  73. package/Pie/Pie.d.ts.map +1 -1
  74. package/Pie/config.d.ts.map +1 -1
  75. package/Pie/pieUtils.d.ts +4 -0
  76. package/Pie/pieUtils.d.ts.map +1 -1
  77. package/Pie.config.js +16 -0
  78. package/Pie.config.js.map +2 -2
  79. package/Pie.js +118 -35
  80. package/Pie.js.map +2 -2
  81. package/Punchcard.js +74 -26
  82. package/Punchcard.js.map +2 -2
  83. package/Rectangle/config.d.ts.map +1 -1
  84. package/Rectangle.config.js +14 -5
  85. package/Rectangle.config.js.map +4 -4
  86. package/Rectangle.js +92 -35
  87. package/Rectangle.js.map +4 -4
  88. package/Sankey/PureSankey/PureSankey.d.ts +26 -72
  89. package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
  90. package/Sankey/PureSankey/SankeyLink.d.ts +3 -19
  91. package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
  92. package/Sankey/PureSankey/SankeyNode.d.ts +3 -20
  93. package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
  94. package/Sankey/PureSankey/SankeyTooltip.d.ts +3 -24
  95. package/Sankey/PureSankey/SankeyTooltip.d.ts.map +1 -1
  96. package/Sankey.js +270 -336
  97. package/Sankey.js.map +2 -2
  98. package/Scatter.config.js +168 -147
  99. package/Scatter.config.js.map +4 -4
  100. package/Scatter.js +246 -179
  101. package/Scatter.js.map +4 -4
  102. package/SingleValue.js +96 -75
  103. package/SingleValue.js.map +2 -2
  104. package/SingleValueIcon/config.d.ts.map +1 -1
  105. package/SingleValueIcon.config.js +14 -5
  106. package/SingleValueIcon.config.js.map +4 -4
  107. package/SingleValueIcon.js +118 -76
  108. package/SingleValueIcon.js.map +4 -4
  109. package/SingleValueRadial/PureSingleValueRadial/GaugeGraph.d.ts.map +1 -1
  110. package/SingleValueRadial.js +95 -76
  111. package/SingleValueRadial.js.map +2 -2
  112. package/Table/Table.d.ts.map +1 -1
  113. package/Table/hooks.d.ts +2 -0
  114. package/Table/hooks.d.ts.map +1 -1
  115. package/Table.js +95 -49
  116. package/Table.js.map +2 -2
  117. package/Timeline/PureTimeline/PureTimeline.d.ts.map +1 -1
  118. package/Timeline/PureTimeline/src/TimelinePlugin.d.ts.map +1 -1
  119. package/Timeline/PureTimeline/src/TimelineYAxis.d.ts.map +1 -1
  120. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts +2 -1
  121. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts.map +1 -1
  122. package/Timeline.js +154 -54
  123. package/Timeline.js.map +2 -2
  124. package/common/GaugeMajorTicks.js +150 -13
  125. package/common/GaugeMajorTicks.js.map +4 -4
  126. package/common/GaugeValueMarker.js +84 -17
  127. package/common/GaugeValueMarker.js.map +4 -4
  128. package/common/OptionsDoc.js.map +1 -1
  129. package/common/OverviewDoc.d.ts.map +1 -1
  130. package/common/OverviewDoc.js +2 -2
  131. package/common/OverviewDoc.js.map +2 -2
  132. package/common/TimeSeriesChartWrapper.d.ts.map +1 -1
  133. package/common/TimeSeriesChartWrapper.js +72 -24
  134. package/common/TimeSeriesChartWrapper.js.map +2 -2
  135. package/common/chartingUtils.d.ts +9 -3
  136. package/common/chartingUtils.d.ts.map +1 -1
  137. package/common/chartingUtils.js +21 -16
  138. package/common/chartingUtils.js.map +2 -2
  139. package/common/editorConfig/AxesChartDataConfig.d.ts +3 -3
  140. package/common/editorConfig/AxesChartDataConfig.d.ts.map +1 -1
  141. package/common/editorConfig/AxesChartDataDisplay.d.ts +4 -0
  142. package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
  143. package/common/editorConfig/AxesChartLegend.d.ts.map +1 -1
  144. package/common/gaugeUtils.d.ts +37 -0
  145. package/common/gaugeUtils.d.ts.map +1 -1
  146. package/common/gaugeUtils.js +152 -2
  147. package/common/gaugeUtils.js.map +4 -4
  148. package/common/hocs/mockdata/trellisData.d.ts +119 -0
  149. package/common/hocs/mockdata/trellisData.d.ts.map +1 -1
  150. package/common/interfaces/Overview.d.ts +1 -0
  151. package/common/interfaces/Overview.d.ts.map +1 -1
  152. package/common/interfaces/VizConfig.d.ts +2 -1
  153. package/common/interfaces/VizConfig.d.ts.map +1 -1
  154. package/common/utils/mapUtils.js.map +1 -1
  155. package/common/utils/trellisUtils.d.ts.map +1 -1
  156. package/common/utils/trellisUtils.js +4 -6
  157. package/common/utils/trellisUtils.js.map +2 -2
  158. package/common/withDashboardViz.js +74 -26
  159. package/common/withDashboardViz.js.map +2 -2
  160. package/package.json +36 -36
@@ -81,19 +81,147 @@ var defaultImport3 = __toESM(require("styled-components"));
81
81
  __reExport(styled_components_exports, require("styled-components"));
82
82
  var styled_components_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
83
83
 
84
+ // esm-externals:lodash
85
+ var lodash_exports = {};
86
+ __export(lodash_exports, {
87
+ default: () => lodash_default
88
+ });
89
+ var defaultImport4 = __toESM(require("lodash"));
90
+ __reExport(lodash_exports, require("lodash"));
91
+ var lodash_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
92
+
93
+ // esm-externals:@splunk/visualizations-shared/colorConstants
94
+ var colorConstants_exports = {};
95
+ __export(colorConstants_exports, {
96
+ default: () => colorConstants_default
97
+ });
98
+ var defaultImport5 = __toESM(require("@splunk/visualizations-shared/colorConstants"));
99
+ __reExport(colorConstants_exports, require("@splunk/visualizations-shared/colorConstants"));
100
+ var colorConstants_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
101
+
84
102
  // esm-externals:@splunk/visualizations-shared/numberUtils
85
103
  var numberUtils_exports = {};
86
104
  __export(numberUtils_exports, {
87
105
  default: () => numberUtils_default
88
106
  });
89
- var defaultImport4 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
107
+ var defaultImport6 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
90
108
  __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
91
- var numberUtils_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
109
+ var numberUtils_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
92
110
 
93
- // src/common/GaugeMajorTicks.jsx
111
+ // esm-externals:@splunk/ui-utils/i18n
112
+ var i18n_exports = {};
113
+ __export(i18n_exports, {
114
+ default: () => i18n_default
115
+ });
116
+ var defaultImport7 = __toESM(require("@splunk/ui-utils/i18n"));
117
+ __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
118
+ var i18n_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
119
+
120
+ // src/common/gaugeUtils.ts
94
121
  var DEFAULT_NUM_OF_TICKS = 5;
122
+ var MAX_TICK_LABEL_DECIMAL_PLACES = 5;
123
+ var getDecimalPlaces = (value) => {
124
+ const numericValue = Number(value);
125
+ if (!Number.isFinite(numericValue)) {
126
+ return 0;
127
+ }
128
+ const fractionPart = numericValue.toString().split(".")[1];
129
+ return fractionPart ? fractionPart.length : 0;
130
+ };
131
+ var getUniqueDecimalPlaces = ({
132
+ values,
133
+ minimumDecimalPlaces
134
+ }) => {
135
+ if (values.length <= 1) {
136
+ return minimumDecimalPlaces;
137
+ }
138
+ for (let decimalPlaces = minimumDecimalPlaces; decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES; decimalPlaces += 1) {
139
+ const roundedValues = values.map((value) => Number(value.toFixed(decimalPlaces)));
140
+ if (new Set(roundedValues).size === roundedValues.length) {
141
+ return decimalPlaces;
142
+ }
143
+ }
144
+ return MAX_TICK_LABEL_DECIMAL_PLACES;
145
+ };
146
+ var getPercentageFromRange = ({ value, min, range }) => {
147
+ if (range === 0) {
148
+ return 0;
149
+ }
150
+ return (value - min) / range * 100;
151
+ };
152
+ var getNumOfTicks = ({
153
+ min,
154
+ max,
155
+ majorUnit,
156
+ usePercentageRange
157
+ }) => {
158
+ const range = max - min;
159
+ const majorUnitNumber = Number(majorUnit);
160
+ const isAutoMajorUnit = majorUnit === "auto" || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;
161
+ let numOfTicks = DEFAULT_NUM_OF_TICKS;
162
+ if (!isAutoMajorUnit) {
163
+ numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;
164
+ }
165
+ return { numOfTicks, isAutoMajorUnit, majorUnitNumber };
166
+ };
167
+ var getTickLabelFormatter = ({
168
+ min,
169
+ max,
170
+ majorUnit,
171
+ usePercentageRange
172
+ }) => {
173
+ const range = max - min;
174
+ const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({
175
+ min,
176
+ max,
177
+ majorUnit,
178
+ usePercentageRange
179
+ });
180
+ const numericStep = range / numOfTicks;
181
+ const tickValues = [];
182
+ for (let i = 0; i <= numOfTicks; i += 1) {
183
+ tickValues.push(min + numericStep * i);
184
+ }
185
+ if (!Number.isInteger(numOfTicks)) {
186
+ tickValues.push(max);
187
+ }
188
+ const minimumNumericDecimalPlaces = Math.min(
189
+ MAX_TICK_LABEL_DECIMAL_PLACES,
190
+ Math.max(
191
+ getDecimalPlaces(min),
192
+ getDecimalPlaces(max),
193
+ isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)
194
+ )
195
+ );
196
+ const numericLabelDecimalPlaces = getUniqueDecimalPlaces({
197
+ values: tickValues,
198
+ minimumDecimalPlaces: minimumNumericDecimalPlaces
199
+ });
200
+ const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({
201
+ values: tickValues.map((value) => getPercentageFromRange({ value, min, range })),
202
+ minimumDecimalPlaces: 0
203
+ });
204
+ const formatTickLabel = (value) => {
205
+ if (usePercentageRange) {
206
+ const percentageValue = getPercentageFromRange({ value, min, range });
207
+ return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;
208
+ }
209
+ const numericLabel = value.toFixed(numericLabelDecimalPlaces);
210
+ if (numericLabel.includes(".")) {
211
+ return numericLabel;
212
+ }
213
+ return (0, numberUtils_exports.formatNumber)(Number(numericLabel), 0, {
214
+ useThousandSeparators: true,
215
+ useTrendUnits: true
216
+ }).replace(/k$/, "K");
217
+ };
218
+ return { numOfTicks, numericStep, formatTickLabel };
219
+ };
220
+
221
+ // src/common/GaugeMajorTicks.jsx
95
222
  var TICK_LENGTH_DELTA = 5;
96
223
  var TICK_LABEL_PADDING_FACTOR = 3.2;
224
+ var VERTICAL_START_ANCHOR_OFFSET = 8;
97
225
  var MajorTickLine = styled_components_default.line`
98
226
  stroke: ${(props) => props.majorTickStrokeColor};
99
227
  stroke-width: 2px;
@@ -106,7 +234,7 @@ var MajorTickLabel = styled_components_default.text`
106
234
  sans-serif;
107
235
  line-height: 19px;
108
236
  fill: ${(props) => props.majorTickFillColor};
109
- text-anchor: middle;
237
+ text-anchor: ${(props) => props.textAnchor};
110
238
  text-align: center;
111
239
  `;
112
240
  var MajorTick = ({
@@ -119,6 +247,7 @@ var MajorTick = ({
119
247
  label,
120
248
  labelX,
121
249
  labelY,
250
+ textAnchor = "middle",
122
251
  majorTickStrokeColor,
123
252
  majorTickFillColor
124
253
  }) => /* @__PURE__ */ react_default.createElement("g", null, /* @__PURE__ */ react_default.createElement(
@@ -137,13 +266,11 @@ var MajorTick = ({
137
266
  {
138
267
  x: labelX,
139
268
  y: labelY,
269
+ textAnchor,
140
270
  majorTickFillColor,
141
271
  "data-test": "major-tick-label"
142
272
  },
143
- (0, numberUtils_exports.isNumerial)(label) ? (0, numberUtils_exports.formatNumber)(label, 0, {
144
- useThousandSeparators: true,
145
- useTrendUnits: true
146
- }) : label
273
+ label
147
274
  ));
148
275
  MajorTick.propTypes = {
149
276
  index: prop_types_default.number,
@@ -155,6 +282,7 @@ MajorTick.propTypes = {
155
282
  label: prop_types_default.oneOfType([prop_types_default.string, prop_types_default.number]),
156
283
  labelX: prop_types_default.number,
157
284
  labelY: prop_types_default.number,
285
+ textAnchor: prop_types_default.string,
158
286
  majorTickStrokeColor: prop_types_default.string,
159
287
  majorTickFillColor: prop_types_default.string
160
288
  };
@@ -171,7 +299,7 @@ var positionMajorTick = ({ width, height, startX, startY, orientation, numOfTick
171
299
  y1 = y;
172
300
  x2 += width + TICK_LENGTH_DELTA;
173
301
  y2 = y;
174
- labelX += width + TICK_LENGTH_DELTA * TICK_LABEL_PADDING_FACTOR;
302
+ labelX += width + TICK_LENGTH_DELTA * TICK_LABEL_PADDING_FACTOR - VERTICAL_START_ANCHOR_OFFSET;
175
303
  labelY = y;
176
304
  } else {
177
305
  const x = width / numOfTicks * i + startX;
@@ -200,10 +328,17 @@ var MajorTicks = (_a) => {
200
328
  majorTickFillColor,
201
329
  majorTickStrokeColor
202
330
  } = props;
203
- const range = max - min;
204
- const numOfTicks = majorUnit === "auto" || Number.isNaN(Number(majorUnit)) || majorUnit <= 0 ? DEFAULT_NUM_OF_TICKS : range / majorUnit;
331
+ const isVertical = orientation === "vertical";
332
+ const textAnchor = isVertical ? "start" : "middle";
333
+ const { numOfTicks, numericStep, formatTickLabel } = getTickLabelFormatter({
334
+ min,
335
+ max,
336
+ majorUnit,
337
+ usePercentageRange
338
+ });
205
339
  const majorTicks = [];
206
340
  for (let i = 0; i <= numOfTicks; i += 1) {
341
+ const tickValue = min + numericStep * i;
207
342
  const { x1, y1, x2, y2, labelX, labelY } = positionMajorTick({
208
343
  width,
209
344
  height,
@@ -213,7 +348,7 @@ var MajorTicks = (_a) => {
213
348
  numOfTicks,
214
349
  i
215
350
  });
216
- const label = usePercentageRange ? `${parseInt((i / numOfTicks - min / range) * 100, 10)}%` : parseInt(min + range / numOfTicks * i, 10);
351
+ const label = formatTickLabel(tickValue);
217
352
  majorTicks.push(
218
353
  /* @__PURE__ */ react_default.createElement(
219
354
  MajorTick,
@@ -228,6 +363,7 @@ var MajorTicks = (_a) => {
228
363
  label,
229
364
  labelX,
230
365
  labelY,
366
+ textAnchor,
231
367
  majorTickFillColor,
232
368
  majorTickStrokeColor
233
369
  }
@@ -256,9 +392,10 @@ var MajorTicks = (_a) => {
256
392
  x2,
257
393
  y2,
258
394
  showLabels,
259
- label: usePercentageRange ? "100%" : max,
395
+ label: formatTickLabel(max),
260
396
  labelX,
261
397
  labelY,
398
+ textAnchor,
262
399
  majorTickFillColor,
263
400
  majorTickStrokeColor
264
401
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/common/GaugeMajorTicks.jsx", "esm-externals:react", "esm-externals:prop-types", "esm-externals:styled-components", "esm-externals:@splunk/visualizations-shared/numberUtils"],
4
- "sourcesContent": ["import React from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { isNumerial, formatNumber } from '@splunk/visualizations-shared/numberUtils';\n\nconst DEFAULT_NUM_OF_TICKS = 5;\nconst TICK_LENGTH_DELTA = 5;\nconst TICK_LABEL_PADDING_FACTOR = 3.2;\n\nconst MajorTickLine = styled.line`\n stroke: ${props => props.majorTickStrokeColor};\n stroke-width: 2px;\n stroke-dasharray: ${props => (props.index === 0 ? 0 : 3)};\n`;\n\nconst MajorTickLabel = styled.text`\n font-size: 12px;\n font-family:\n Splunk Platform Sans,\n sans-serif;\n line-height: 19px;\n fill: ${props => props.majorTickFillColor};\n text-anchor: middle;\n text-align: center;\n`;\n\nexport const MajorTick = ({\n index,\n x1,\n y1,\n x2,\n y2,\n showLabels,\n label,\n labelX,\n labelY,\n majorTickStrokeColor,\n majorTickFillColor,\n}) => (\n <g>\n <MajorTickLine\n data-test=\"major-tick-line\"\n index={index}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n {showLabels && (\n <MajorTickLabel\n x={labelX}\n y={labelY}\n majorTickFillColor={majorTickFillColor}\n data-test=\"major-tick-label\"\n >\n {isNumerial(label)\n ? formatNumber(label, 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n })\n : label}\n </MajorTickLabel>\n )}\n </g>\n);\n\nMajorTick.propTypes = {\n index: T.number,\n x1: T.number,\n y1: T.number,\n x2: T.number,\n y2: T.number,\n showLabels: T.bool,\n label: T.oneOfType([T.string, T.number]),\n labelX: T.number,\n labelY: T.number,\n majorTickStrokeColor: T.string,\n majorTickFillColor: T.string,\n};\n\n/**\n * calculate position for each major tick\n * @method positionMajorTick\n * @param {Object} input\n * @param {Number} input.width\n * @param {Number} input.height\n * @param {Number} input.startX start x for rendering the first major tick\n * @param {Number} input.startY start y for rendering the first major tick\n * @param {String} input.orientation\n * @param {Number} input.numOfTicks how many ticks need to render\n * @param {Number} input.i index of major tick\n * @return {Object} MajorTick positions\n */\nexport const positionMajorTick = ({ width, height, startX, startY, orientation, numOfTicks, i }) => {\n let x1 = startX;\n let y1 = startY;\n let x2 = startX;\n let y2 = startY;\n let labelX = startX;\n let labelY;\n\n if (orientation === 'vertical') {\n const y = (height / numOfTicks) * (numOfTicks - i) + startY;\n x1 -= TICK_LENGTH_DELTA;\n y1 = y;\n x2 += width + TICK_LENGTH_DELTA;\n y2 = y;\n labelX += width + TICK_LENGTH_DELTA * TICK_LABEL_PADDING_FACTOR;\n labelY = y;\n } else {\n const x = (width / numOfTicks) * i + startX;\n x1 = x;\n y1 -= TICK_LENGTH_DELTA;\n x2 = x;\n y2 += height + TICK_LENGTH_DELTA;\n labelX = x;\n labelY = y2 + 16;\n }\n\n return { x1, y1, x2, y2, labelX, labelY };\n};\n\nconst MajorTicks = ({ ...props }) => {\n const {\n width,\n height,\n startX,\n startY,\n min = 0,\n max = 100,\n majorUnit = 'auto',\n orientation = 'horizontal',\n showLabels = true,\n usePercentageRange = false,\n majorTickFillColor,\n majorTickStrokeColor,\n } = props;\n\n const range = max - min;\n const numOfTicks =\n majorUnit === 'auto' || Number.isNaN(Number(majorUnit)) || majorUnit <= 0\n ? DEFAULT_NUM_OF_TICKS\n : range / majorUnit;\n const majorTicks = [];\n\n for (let i = 0; i <= numOfTicks; i += 1) {\n const { x1, y1, x2, y2, labelX, labelY } = positionMajorTick({\n width,\n height,\n startX,\n startY,\n orientation,\n numOfTicks,\n i,\n });\n const label = usePercentageRange\n ? `${parseInt((i / numOfTicks - min / range) * 100, 10)}%`\n : parseInt(min + (range / numOfTicks) * i, 10);\n\n majorTicks.push(\n <MajorTick\n key={i}\n index={i}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n showLabels={showLabels}\n label={label}\n labelX={labelX}\n labelY={labelY}\n majorTickFillColor={majorTickFillColor}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n );\n }\n\n // if the gauge is not divided evenly, put the last tick at the end of the gauge\n if (!Number.isInteger(numOfTicks)) {\n const extraNumOfTicks = Math.ceil(numOfTicks);\n const { x1, y1, x2, y2, labelX, labelY } = positionMajorTick({\n width,\n height,\n startX,\n startY,\n orientation,\n numOfTicks: extraNumOfTicks,\n i: extraNumOfTicks,\n });\n\n majorTicks.push(\n <MajorTick\n key={extraNumOfTicks}\n id={extraNumOfTicks}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n showLabels={showLabels}\n label={usePercentageRange ? '100%' : max}\n labelX={labelX}\n labelY={labelY}\n majorTickFillColor={majorTickFillColor}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n );\n }\n\n return <g>{majorTicks}</g>;\n};\n\nMajorTicks.propTypes = {\n width: T.number,\n height: T.number,\n startX: T.number,\n startY: T.number,\n min: T.number,\n max: T.number,\n majorUnit: T.oneOfType([T.string, T.number]),\n orientation: T.string,\n showLabels: T.bool,\n usePercentageRange: T.bool,\n majorTickFillColor: T.string,\n majorTickStrokeColor: T.string,\n};\n\nexport default MajorTicks;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport", "defaultImport"]
3
+ "sources": ["../src/common/GaugeMajorTicks.jsx", "esm-externals:react", "esm-externals:prop-types", "esm-externals:styled-components", "esm-externals:lodash", "esm-externals:@splunk/visualizations-shared/colorConstants", "esm-externals:@splunk/visualizations-shared/numberUtils", "esm-externals:@splunk/ui-utils/i18n", "../src/common/gaugeUtils.ts"],
4
+ "sourcesContent": ["import React from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { getTickLabelFormatter } from './gaugeUtils';\n\nconst TICK_LENGTH_DELTA = 5;\nconst TICK_LABEL_PADDING_FACTOR = 3.2;\nconst VERTICAL_START_ANCHOR_OFFSET = 8;\n\nconst MajorTickLine = styled.line`\n stroke: ${props => props.majorTickStrokeColor};\n stroke-width: 2px;\n stroke-dasharray: ${props => (props.index === 0 ? 0 : 3)};\n`;\n\nconst MajorTickLabel = styled.text`\n font-size: 12px;\n font-family:\n Splunk Platform Sans,\n sans-serif;\n line-height: 19px;\n fill: ${props => props.majorTickFillColor};\n text-anchor: ${props => props.textAnchor};\n text-align: center;\n`;\n\nexport const MajorTick = ({\n index,\n x1,\n y1,\n x2,\n y2,\n showLabels,\n label,\n labelX,\n labelY,\n textAnchor = 'middle',\n majorTickStrokeColor,\n majorTickFillColor,\n}) => (\n <g>\n <MajorTickLine\n data-test=\"major-tick-line\"\n index={index}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n {showLabels && (\n <MajorTickLabel\n x={labelX}\n y={labelY}\n textAnchor={textAnchor}\n majorTickFillColor={majorTickFillColor}\n data-test=\"major-tick-label\"\n >\n {label}\n </MajorTickLabel>\n )}\n </g>\n);\n\nMajorTick.propTypes = {\n index: T.number,\n x1: T.number,\n y1: T.number,\n x2: T.number,\n y2: T.number,\n showLabels: T.bool,\n label: T.oneOfType([T.string, T.number]),\n labelX: T.number,\n labelY: T.number,\n textAnchor: T.string,\n majorTickStrokeColor: T.string,\n majorTickFillColor: T.string,\n};\n\n/**\n * calculate position for each major tick\n * @method positionMajorTick\n * @param {Object} input\n * @param {Number} input.width\n * @param {Number} input.height\n * @param {Number} input.startX start x for rendering the first major tick\n * @param {Number} input.startY start y for rendering the first major tick\n * @param {String} input.orientation\n * @param {Number} input.numOfTicks how many ticks need to render\n * @param {Number} input.i index of major tick\n * @return {Object} MajorTick positions\n */\nexport const positionMajorTick = ({ width, height, startX, startY, orientation, numOfTicks, i }) => {\n let x1 = startX;\n let y1 = startY;\n let x2 = startX;\n let y2 = startY;\n let labelX = startX;\n let labelY;\n\n if (orientation === 'vertical') {\n const y = (height / numOfTicks) * (numOfTicks - i) + startY;\n x1 -= TICK_LENGTH_DELTA;\n y1 = y;\n x2 += width + TICK_LENGTH_DELTA;\n y2 = y;\n // Compensate for start-anchor labels so single-digit left padding matches previous middle-anchor layout.\n labelX += width + TICK_LENGTH_DELTA * TICK_LABEL_PADDING_FACTOR - VERTICAL_START_ANCHOR_OFFSET;\n labelY = y;\n } else {\n const x = (width / numOfTicks) * i + startX;\n x1 = x;\n y1 -= TICK_LENGTH_DELTA;\n x2 = x;\n y2 += height + TICK_LENGTH_DELTA;\n labelX = x;\n labelY = y2 + 16;\n }\n\n return { x1, y1, x2, y2, labelX, labelY };\n};\n\nconst MajorTicks = ({ ...props }) => {\n const {\n width,\n height,\n startX,\n startY,\n min = 0,\n max = 100,\n majorUnit = 'auto',\n orientation = 'horizontal',\n showLabels = true,\n usePercentageRange = false,\n majorTickFillColor,\n majorTickStrokeColor,\n } = props;\n const isVertical = orientation === 'vertical';\n const textAnchor = isVertical ? 'start' : 'middle';\n\n const { numOfTicks, numericStep, formatTickLabel } = getTickLabelFormatter({\n min,\n max,\n majorUnit,\n usePercentageRange,\n });\n\n const majorTicks = [];\n\n for (let i = 0; i <= numOfTicks; i += 1) {\n const tickValue = min + numericStep * i;\n const { x1, y1, x2, y2, labelX, labelY } = positionMajorTick({\n width,\n height,\n startX,\n startY,\n orientation,\n numOfTicks,\n i,\n });\n const label = formatTickLabel(tickValue);\n\n majorTicks.push(\n <MajorTick\n key={i}\n index={i}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n showLabels={showLabels}\n label={label}\n labelX={labelX}\n labelY={labelY}\n textAnchor={textAnchor}\n majorTickFillColor={majorTickFillColor}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n );\n }\n\n // if the gauge is not divided evenly, put the last tick at the end of the gauge\n if (!Number.isInteger(numOfTicks)) {\n const extraNumOfTicks = Math.ceil(numOfTicks);\n const { x1, y1, x2, y2, labelX, labelY } = positionMajorTick({\n width,\n height,\n startX,\n startY,\n orientation,\n numOfTicks: extraNumOfTicks,\n i: extraNumOfTicks,\n });\n\n majorTicks.push(\n <MajorTick\n key={extraNumOfTicks}\n id={extraNumOfTicks}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n showLabels={showLabels}\n label={formatTickLabel(max)}\n labelX={labelX}\n labelY={labelY}\n textAnchor={textAnchor}\n majorTickFillColor={majorTickFillColor}\n majorTickStrokeColor={majorTickStrokeColor}\n />\n );\n }\n\n return <g>{majorTicks}</g>;\n};\n\nMajorTicks.propTypes = {\n width: T.number,\n height: T.number,\n startX: T.number,\n startY: T.number,\n min: T.number,\n max: T.number,\n majorUnit: T.oneOfType([T.string, T.number]),\n orientation: T.string,\n showLabels: T.bool,\n usePercentageRange: T.bool,\n majorTickFillColor: T.string,\n majorTickStrokeColor: T.string,\n};\n\nexport default MajorTicks;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorConstants\";\nexport * from \"@splunk/visualizations-shared/colorConstants\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { chain, mapKeys, omit, uniqBy } from 'lodash';\nimport {\n SEMANTIC_SUCCESS,\n SEMANTIC_WARNING,\n SEMANTIC_ERROR,\n} from '@splunk/visualizations-shared/colorConstants';\nimport { formatNumber } from '@splunk/visualizations-shared/numberUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nexport const GAUGE_THICKNESS = 50;\nexport const FILL_THICKNESS = 38;\nconst GRADIENT_STOP_OFFSET_MIN = 0;\nconst GRADIENT_STOP_OFFSET_MAX = 100;\nconst DEFAULT_NUM_OF_TICKS = 5;\nconst MAX_TICK_LABEL_DECIMAL_PLACES = 5;\nconst MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;\nconst MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;\n\n/**\n * get width for the whole gauge viz for horizontal or vertical view\n * @method getGaugeWidth\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {String} orientation\n * @return {Number} width\n */\nexport const getGaugeWidth = ({ containerWidth, orientation }) =>\n orientation === 'vertical' ? GAUGE_THICKNESS : containerWidth * 0.8;\n\n/**\n * get height for the whole gauge viz for horizontal or vertical view\n * @method getGaugeHeight\n * @param {Object} input\n * @param {Number} containerHeight\n * @param {String} orientation\n * @return {Number} height\n */\nexport const getGaugeHeight = ({ containerHeight, orientation }) =>\n orientation === 'vertical' ? containerHeight * 0.8 : GAUGE_THICKNESS;\n\n/**\n * get how long the gauge shoud be.\n * In horizontal view, gauge length equals to gauge width. In vertical view, it equals to gauge height.\n * @method getGaugeLength\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation\n * @return {Number} gaugeLength\n */\nexport const getGaugeLength = ({ containerWidth, containerHeight, orientation }) =>\n orientation === 'vertical'\n ? getGaugeHeight({ containerHeight, orientation })\n : getGaugeWidth({ containerWidth, orientation });\n\n/**\n * get start x and y for rendering gauge\n * @method getGaugeStartPosition\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {Number} containerHeight\n * @param {Number} gaugeLength\n * @param {String} orientation\n * @return {Object} position\n * @return {Number} position.gaugeStartX\n * @return {Number} position.gaugeStartY\n */\nexport const getGaugeStartPosition = ({ containerWidth, containerHeight, gaugeLength, orientation }) => {\n // for horizontal view\n let gaugeStartX = (containerWidth - gaugeLength) / 2.0;\n let gaugeStartY = (containerHeight - GAUGE_THICKNESS) / 2.0;\n\n if (orientation === 'vertical') {\n gaugeStartX = (containerWidth - GAUGE_THICKNESS) / 2.0;\n gaugeStartY = (containerHeight - gaugeLength) / 2.0;\n }\n\n return { gaugeStartX, gaugeStartY };\n};\n\n/**\n * get dimensions for the whole gauge viz,\n * which can be useful to calculate background bar and major ticks positions.\n * @method getGaugeDimensions\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation 'horizontal' or 'vertical'\n * @return {Object} gaugeDimensions\n * @return {Number} gaugeDimensions.gaugeLength how long the gauge shoud be in horizontal or vertical orientation.\n * @return {Number} gaugeDimensions.gaugeStartX start x to render gauge\n * @return {Number} gaugeDimensions.gaugeStartY start y to render gauge\n * @return {Number} gaugeDimensions.gaugeWidth natural width of gauge\n * @return {Number} gaugeDimensions.gaugeHeight natural height of gauge\n */\nexport const getGaugeDimensions = ({ containerWidth, containerHeight, orientation }) => {\n const gaugeLength = getGaugeLength({\n containerWidth,\n containerHeight,\n orientation,\n });\n const { gaugeStartX, gaugeStartY } = getGaugeStartPosition({\n containerWidth,\n containerHeight,\n gaugeLength,\n orientation,\n });\n const gaugeWidth = getGaugeWidth({ containerWidth, orientation });\n const gaugeHeight = getGaugeHeight({ containerHeight, orientation });\n\n return {\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n };\n};\n\n/**\n * if gaugeColor is not specified, auto assign a gauge color to the fill bar\n * based on how much percentage the value is taken between min and max\n * @method assignGaugeColor\n * @params\n * */\nexport const assignGaugeColor = ({ value, min, max }) => {\n const rate = (value - min) / (max - min);\n\n if (rate <= 0.3) {\n return SEMANTIC_SUCCESS;\n }\n if (rate > 0.3 && rate <= 0.6) {\n return SEMANTIC_WARNING;\n }\n\n return SEMANTIC_ERROR;\n};\n\n/**\n * get inner bar length in gauge\n * @method getGaugeBarLength\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @return {Number} gaugeBarLength\n */\nexport const getGaugeBarLength = ({ gaugeLength, value, min, max }) => {\n if (max < min) {\n return null;\n }\n\n if (value >= max) {\n return gaugeLength;\n }\n\n if (value < min) {\n return 0;\n }\n\n return (gaugeLength * (value - min)) / (max - min);\n};\n\n/**\n * get x and y position for rendering inner bar in gauge\n * @method getGaugeBarStartPositions\n * @param {Object} input\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth\n * @param {Number} input.gaugeHeight\n * @param {Number} input.gaugeBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.gaugeBarX\n * @return {Number} position.gaugeBarY\n */\nexport const getGaugeBarStartPositions = ({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n}) => {\n let gaugeBarX = gaugeStartX;\n let gaugeBarY = gaugeStartY;\n\n if (orientation === 'vertical') {\n gaugeBarX += (gaugeWidth - FILL_THICKNESS) / 2;\n gaugeBarY += gaugeHeight - gaugeBarLength;\n } else {\n gaugeBarY += (gaugeHeight - FILL_THICKNESS) / 2;\n }\n\n return {\n gaugeBarX,\n gaugeBarY,\n };\n};\n\n/**\n * get width of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarWidth\n */\nexport const getGaugeBarWidth = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? FILL_THICKNESS : gaugeBarLength;\n\n/**\n * get height of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarHeight\n */\nexport const getGaugeBarHeight = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? gaugeBarLength : FILL_THICKNESS;\n\n/**\n * get dimensions for the fill bar in the gauge\n * @method getFillBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {Number} input.value,\n * @param {Number} input.min,\n * @param {Number} input.max,\n * @param {String} input.orientation\n * @return {Object} fillBarDimensions\n * @return {Number} fillBarDimensions.fillBarLength\n * @return {Number} fillBarDimensions.fillBarX\n * @return {Number} fillBarDimensions.fillBarY\n * @return {Number} fillBarDimensions.fillBarWidth\n * @return {Number} fillBarDimensions.fillBarHeight\n */\nexport const getFillBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n value,\n min,\n max,\n orientation,\n}) => {\n const gaugeBarLength = getGaugeBarLength({ gaugeLength, value, max, min });\n const { gaugeBarX: fillBarX, gaugeBarY: fillBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const fillBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const fillBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n fillBarLength: gaugeBarLength,\n fillBarX,\n fillBarY,\n fillBarWidth,\n fillBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in filler gauge\n * @method getFillerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.fillBarX\n * @param {Number} input.fillBarY\n * @param {Number} input.fillBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getFillerGaugeValueMarkerPositions = ({ fillBarX, fillBarY, fillBarLength, orientation }) => {\n let valueMarkerX = fillBarX;\n let valueMarkerY = fillBarY;\n\n if (orientation === 'vertical') {\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += fillBarLength;\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * get dimensions for the marker bar in the gauge\n * @method getMarkerBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {String} input.orientation\n * @return {Object} markerBarDimensions\n * @return {Number} markerBarDimensions.markerBarLength\n * @return {Number} markerBarDimensions.markerBarX\n * @return {Number} markerBarDimensions.markerBarY\n * @return {Number} markerBarDimensions.markerBarWidth\n * @return {Number} markerBarDimensions.markerBarHeight\n */\nexport const getMarkerBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n orientation,\n}) => {\n const gaugeBarLength = gaugeLength; // For marker gauge, inner marker bar spans the entire gauge\n const { gaugeBarX: markerBarX, gaugeBarY: markerBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const markerBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const markerBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n markerBarLength: gaugeBarLength,\n markerBarX,\n markerBarY,\n markerBarWidth,\n markerBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in marker gauge\n * @method getMarkerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.markerBarX\n * @param {Number} input.markerBarY\n * @param {Number} input.markerBarHeight\n * @param {Number} input.markerBarLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getMarkerGaugeValueMarkerPositions = ({\n markerBarX,\n markerBarY,\n markerBarHeight,\n markerBarLength: gaugeLength,\n orientation,\n value,\n min,\n max,\n}) => {\n let valueMarkerX = markerBarX;\n let valueMarkerY = markerBarY;\n if (orientation === 'vertical') {\n valueMarkerY += markerBarHeight - getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * sort the ranges in ascending order\n * @method getSortedRanges\n * @param {Array} ranges\n * @return {Array} sortedRanges\n */\nexport const getSortedRanges = ranges => ranges.sort((a, b) => a.from - b.from);\n\n/**\n * validate whether ranges prop is valid - continuous ranges, range.to < range.from, range.from != range.to\n * @method validateRanges\n * @param {Array} ranges\n * @return {String} error\n */\nexport const validateRanges = ranges => {\n if (!ranges.length) {\n return _('Prop \"ranges\" is missing entries');\n }\n\n // check whether a range has \"from\" >= \"to\" eg: 10 - 10, 100 - 10, -20 - -10 are invalid\n if (ranges.some(range => range.from >= range.to)) {\n return _('Prop \"ranges\" has invalid entries: invalid range');\n }\n\n // check whether ranges have duplicate \"from/to\" eg: 0 - 50, 25 - 50\n if (ranges.length !== uniqBy(ranges, 'to').length || ranges.length !== uniqBy(ranges, 'from').length) {\n return _('Prop \"ranges\" has invalid entries: duplicate values');\n }\n\n const sortedRanges = getSortedRanges(ranges);\n\n // check whether ranges are continuous eg: 0 - 10, 10 - 20, 20 - 30\n for (let i = 1; i < sortedRanges.length; i += 1) {\n if (sortedRanges[i].from !== sortedRanges[i - 1].to) {\n return _('Prop \"ranges\" has invalid entries: discontinuous ranges');\n }\n }\n\n return null;\n};\n\n/**\n * calculate min and max value of gauge\n * @method getGaugeRange\n * @param {Array} ranges\n * @return {Object} gaugeRange\n * @return {Number} gaugeRange.min\n * @return {Number} gaugeRange.max\n */\nexport const getGaugeRange = ranges => {\n const min = Math.min(...ranges.map(range => range.from));\n const max = Math.max(...ranges.map(range => range.to));\n return { min, max };\n};\n\n/**\n * calculate stop offsets for linear gradient\n * @method getGradientStopOffsets\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} cumulativeOffsets\n */\nexport const getGradientStopOffsets = ({ ranges, orientation }) => {\n const { min, max } = getGaugeRange(ranges);\n const offsetScale = (GRADIENT_STOP_OFFSET_MAX - GRADIENT_STOP_OFFSET_MIN) / (max - min);\n let offsets = ranges.map(range => Math.abs(range.from - range.to) * offsetScale);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n offsets = orientation === 'vertical' ? offsets.reverse() : offsets;\n const cumulativeOffsets = [];\n offsets.reduce((accumulator, currentValue, idx) => {\n cumulativeOffsets[idx] = accumulator + currentValue;\n return cumulativeOffsets[idx];\n }, 0);\n return cumulativeOffsets;\n};\n\n/**\n * calculate stop colors for linear gradient\n * @method getGradientStopColors\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stopColors\n */\nexport const getGradientStopColors = ({ ranges, orientation }) => {\n const stopColors = ranges.map(range => range.value);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n return orientation === 'vertical' ? stopColors.reverse() : stopColors;\n};\n\n/**\n * calculate linear gradient stops from ranges\n * @method getGradientStops\n * @param {Object} input\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stops\n */\nexport const getGradientStops = ({ ranges, orientation }) => {\n const stops = [];\n const offsets = getGradientStopOffsets({ ranges, orientation });\n const stopColors = getGradientStopColors({ ranges, orientation });\n // Initialize stops with the first color stop\n stops.push({ offset: `${offsets[0]}%`, stopColor: stopColors[0] });\n // Add the remaining color stops with gradient change at each stop\n for (let i = 1; i < ranges.length; i += 1) {\n stops.push({ offset: `${offsets[i - 1]}%`, stopColor: stopColors[i] });\n stops.push({ offset: `${offsets[i]}%`, stopColor: stopColors[i] });\n }\n return stops;\n};\n\n/**\n * calculate linear gradient dimensions\n * @method getGradientDimensions\n * @param {String} orientation\n * @return {Object} dimensions\n * @return {String} dimensions.x1\n * @return {String} dimensions.y1\n * @return {String} dimensions.x2\n * @return {String} dimensions.y2\n */\nexport const getGradientDimensions = orientation => {\n const x1 = '0%';\n const y1 = '0%';\n const x2 = orientation === 'horizontal' ? '100%' : '0%';\n const y2 = orientation === 'horizontal' ? '0%' : '100%';\n return { x1, y1, x2, y2 };\n};\n\ntype NumericInput = number | string;\n\ninterface UniqueDecimalPlacesInput {\n values: number[];\n minimumDecimalPlaces: number;\n}\n\ninterface PercentageFromRangeInput {\n value: number;\n min: number;\n range: number;\n}\n\ninterface NumOfTicksInput {\n min: number;\n max: number;\n majorUnit: number | string;\n usePercentageRange: boolean;\n}\n\ninterface TickLabelFormatterResult {\n numOfTicks: number;\n numericStep: number;\n formatTickLabel: (value: number) => string;\n}\n\ninterface FormatGaugeValueLabelInput {\n value: NumericInput;\n min: number;\n max: number;\n usePercentageValue: boolean;\n}\n\n// Returns the number of fractional digits in a numeric input.\nexport const getDecimalPlaces = (value: NumericInput): number => {\n const numericValue = Number(value);\n if (!Number.isFinite(numericValue)) {\n return 0;\n }\n\n const fractionPart = numericValue.toString().split('.')[1];\n return fractionPart ? fractionPart.length : 0;\n};\n\n// Finds the smallest precision that keeps all rounded tick values unique.\n// This avoids duplicated rendered labels caused by rounding collisions.\nexport const getUniqueDecimalPlaces = ({\n values,\n minimumDecimalPlaces,\n}: UniqueDecimalPlacesInput): number => {\n if (values.length <= 1) {\n return minimumDecimalPlaces;\n }\n\n for (\n let decimalPlaces = minimumDecimalPlaces;\n decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES;\n decimalPlaces += 1\n ) {\n const roundedValues = values.map(value => Number(value.toFixed(decimalPlaces)));\n if (new Set(roundedValues).size === roundedValues.length) {\n return decimalPlaces;\n }\n }\n\n return MAX_TICK_LABEL_DECIMAL_PLACES;\n};\n\n// Converts a value within [min, max] to percentage space.\nexport const getPercentageFromRange = ({ value, min, range }: PercentageFromRangeInput): number => {\n if (range === 0) {\n return 0;\n }\n return ((value - min) / range) * 100;\n};\n\n// Computes interval count from auto mode or explicit majorUnit.\nexport const getNumOfTicks = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): { numOfTicks: number; isAutoMajorUnit: boolean; majorUnitNumber: number } => {\n const range = max - min;\n const majorUnitNumber = Number(majorUnit);\n const isAutoMajorUnit = majorUnit === 'auto' || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;\n\n let numOfTicks = DEFAULT_NUM_OF_TICKS;\n if (!isAutoMajorUnit) {\n numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;\n }\n\n return { numOfTicks, isAutoMajorUnit, majorUnitNumber };\n};\n\n// Builds a reusable formatter and step size for major tick rendering.\nexport const getTickLabelFormatter = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): TickLabelFormatterResult => {\n const range = max - min;\n const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({\n min,\n max,\n majorUnit,\n usePercentageRange,\n });\n const numericStep = range / numOfTicks;\n const tickValues = [];\n\n // Materialize all candidate tick values (plus max for uneven divisions).\n for (let i = 0; i <= numOfTicks; i += 1) {\n tickValues.push(min + numericStep * i);\n }\n\n if (!Number.isInteger(numOfTicks)) {\n tickValues.push(max);\n }\n\n const minimumNumericDecimalPlaces = Math.min(\n MAX_TICK_LABEL_DECIMAL_PLACES,\n Math.max(\n getDecimalPlaces(min),\n getDecimalPlaces(max),\n isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)\n )\n );\n const numericLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues,\n minimumDecimalPlaces: minimumNumericDecimalPlaces,\n });\n const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues.map(value => getPercentageFromRange({ value, min, range })),\n minimumDecimalPlaces: 0,\n });\n\n // Keep fixed-width decimal formatting when decimals are needed; otherwise use trend formatting.\n const formatTickLabel = value => {\n if (usePercentageRange) {\n const percentageValue = getPercentageFromRange({ value, min, range });\n return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;\n }\n\n const numericLabel = value.toFixed(numericLabelDecimalPlaces);\n if (numericLabel.includes('.')) {\n return numericLabel;\n }\n\n return formatNumber(Number(numericLabel), 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n }).replace(/k$/, 'K');\n };\n\n return { numOfTicks, numericStep, formatTickLabel };\n};\n\n// Limits decimal places so displayed value length stays within a fixed digit budget.\nconst getDigitsBeforeDecimal = (numericValue: NumericInput): number =>\n Math.abs(Math.trunc(Number(numericValue))).toString().length;\n\nconst getCappedDecimalPlaces = (\n numericValue: NumericInput,\n rawDecimalPlaces: number,\n maxDigits: number\n): number => {\n const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);\n const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);\n return Math.min(rawDecimalPlaces, maxDecimalPlaces);\n};\n\n// Formats the marker value label in number or percentage mode with capped precision.\nexport const formatGaugeValueLabel = ({\n value,\n min,\n max,\n usePercentageValue,\n}: FormatGaugeValueLabelInput): string => {\n const numericValue = Number(value);\n const range = max - min || 1;\n const percentageValue = getPercentageFromRange({ value: numericValue, min, range });\n const trendFormatOptions = {\n useThousandSeparators: true,\n useTrendUnits: true,\n };\n\n if (usePercentageValue) {\n // Use the same number-mode formatting behavior (including K/M/B/T) for percentages.\n const percentageDecimalPlaces = getCappedDecimalPlaces(\n percentageValue,\n 2,\n MAX_VALUE_LABEL_DIGITS_WITH_PERCENT\n );\n return `${formatNumber(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;\n }\n\n const valueDecimalPlaces = getCappedDecimalPlaces(\n numericValue,\n getDecimalPlaces(numericValue),\n MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT\n );\n return formatNumber(numericValue, valueDecimalPlaces, trendFormatOptions);\n};\n\ninterface GaugeOptions {\n [key: string]: any;\n}\n\n// map for new options names to old option names\nconst gaugeOptionsMapping = {\n majorTickInterval: 'majorUnit',\n gaugeRanges: 'ranges',\n};\n\n/**\n * Helper method to update the option names which can be mapped to pure component options\n * @method mapToOldKey\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToOldKey = (options: GaugeOptions): GaugeOptions =>\n mapKeys(options, (val, key) => (gaugeOptionsMapping[key] ? gaugeOptionsMapping[key] : key));\n\ntype LabelOrValue = 'label' | 'value';\n\n/**\n * Helper method to map labelDisplay and valueDisplay options to pure component option names\n * @method mapToOldKey\n * @param {string} labelOrValue\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapValueLabelDisplay = (labelOrValue: LabelOrValue, options: GaugeOptions): GaugeOptions => {\n const rangeOrValue: string = labelOrValue === 'value' ? 'Value' : 'Range';\n const showKey: string = labelOrValue === 'value' ? 'showValue' : 'showLabels';\n const percentKey = `usePercentage${rangeOrValue}`;\n const optionString = `${labelOrValue}Display`;\n const newOptions = { ...options };\n if (newOptions[optionString]) {\n if (newOptions[optionString] === 'number') {\n newOptions[showKey] = true;\n newOptions[percentKey] = false;\n } else if (newOptions[optionString] === 'percentage') {\n newOptions[showKey] = true;\n newOptions[percentKey] = true;\n } else {\n newOptions[showKey] = false;\n newOptions[percentKey] = false;\n }\n }\n return omit(newOptions, [optionString]);\n};\n\n/**\n * Chained helper for mapping the option properties (and values) we expose in config.ts into property values that pure component accepts\n * This is for options that has new key name and can not directly be mapped with pure component props\n * @method convertToGaugeProperties\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertToGaugeProperties = (originalOptions: GaugeOptions): GaugeOptions =>\n chain(mapToOldKey(originalOptions))\n .thru(options => mapValueLabelDisplay('label', options))\n .thru(options => mapValueLabelDisplay('value', options))\n .value();\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport"]
7
7
  }
@@ -81,32 +81,102 @@ var defaultImport3 = __toESM(require("styled-components"));
81
81
  __reExport(styled_components_exports, require("styled-components"));
82
82
  var styled_components_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
83
83
 
84
- // esm-externals:@splunk/visualizations-shared/numberUtils
85
- var numberUtils_exports = {};
86
- __export(numberUtils_exports, {
87
- default: () => numberUtils_default
88
- });
89
- var defaultImport4 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
90
- __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
91
- var numberUtils_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
92
-
93
84
  // esm-externals:@splunk/ui-utils/format
94
85
  var format_exports = {};
95
86
  __export(format_exports, {
96
87
  default: () => format_default
97
88
  });
98
- var defaultImport5 = __toESM(require("@splunk/ui-utils/format"));
89
+ var defaultImport4 = __toESM(require("@splunk/ui-utils/format"));
99
90
  __reExport(format_exports, require("@splunk/ui-utils/format"));
100
- var format_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
91
+ var format_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
101
92
 
102
93
  // esm-externals:@splunk/ui-utils/i18n
103
94
  var i18n_exports = {};
104
95
  __export(i18n_exports, {
105
96
  default: () => i18n_default
106
97
  });
107
- var defaultImport6 = __toESM(require("@splunk/ui-utils/i18n"));
98
+ var defaultImport5 = __toESM(require("@splunk/ui-utils/i18n"));
108
99
  __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
109
- var i18n_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
100
+ var i18n_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
101
+
102
+ // esm-externals:lodash
103
+ var lodash_exports = {};
104
+ __export(lodash_exports, {
105
+ default: () => lodash_default
106
+ });
107
+ var defaultImport6 = __toESM(require("lodash"));
108
+ __reExport(lodash_exports, require("lodash"));
109
+ var lodash_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
110
+
111
+ // esm-externals:@splunk/visualizations-shared/colorConstants
112
+ var colorConstants_exports = {};
113
+ __export(colorConstants_exports, {
114
+ default: () => colorConstants_default
115
+ });
116
+ var defaultImport7 = __toESM(require("@splunk/visualizations-shared/colorConstants"));
117
+ __reExport(colorConstants_exports, require("@splunk/visualizations-shared/colorConstants"));
118
+ var colorConstants_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
119
+
120
+ // esm-externals:@splunk/visualizations-shared/numberUtils
121
+ var numberUtils_exports = {};
122
+ __export(numberUtils_exports, {
123
+ default: () => numberUtils_default
124
+ });
125
+ var defaultImport8 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
126
+ __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
127
+ var numberUtils_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
128
+
129
+ // src/common/gaugeUtils.ts
130
+ var MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;
131
+ var MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;
132
+ var getDecimalPlaces = (value) => {
133
+ const numericValue = Number(value);
134
+ if (!Number.isFinite(numericValue)) {
135
+ return 0;
136
+ }
137
+ const fractionPart = numericValue.toString().split(".")[1];
138
+ return fractionPart ? fractionPart.length : 0;
139
+ };
140
+ var getPercentageFromRange = ({ value, min, range }) => {
141
+ if (range === 0) {
142
+ return 0;
143
+ }
144
+ return (value - min) / range * 100;
145
+ };
146
+ var getDigitsBeforeDecimal = (numericValue) => Math.abs(Math.trunc(Number(numericValue))).toString().length;
147
+ var getCappedDecimalPlaces = (numericValue, rawDecimalPlaces, maxDigits) => {
148
+ const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);
149
+ const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);
150
+ return Math.min(rawDecimalPlaces, maxDecimalPlaces);
151
+ };
152
+ var formatGaugeValueLabel = ({
153
+ value,
154
+ min,
155
+ max,
156
+ usePercentageValue
157
+ }) => {
158
+ const numericValue = Number(value);
159
+ const range = max - min || 1;
160
+ const percentageValue = getPercentageFromRange({ value: numericValue, min, range });
161
+ const trendFormatOptions = {
162
+ useThousandSeparators: true,
163
+ useTrendUnits: true
164
+ };
165
+ if (usePercentageValue) {
166
+ const percentageDecimalPlaces = getCappedDecimalPlaces(
167
+ percentageValue,
168
+ 2,
169
+ MAX_VALUE_LABEL_DIGITS_WITH_PERCENT
170
+ );
171
+ return `${(0, numberUtils_exports.formatNumber)(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;
172
+ }
173
+ const valueDecimalPlaces = getCappedDecimalPlaces(
174
+ numericValue,
175
+ getDecimalPlaces(numericValue),
176
+ MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT
177
+ );
178
+ return (0, numberUtils_exports.formatNumber)(numericValue, valueDecimalPlaces, trendFormatOptions);
179
+ };
110
180
 
111
181
  // src/common/GaugeValueMarker.jsx
112
182
  var MARKER_THICKNESS = 15;
@@ -229,10 +299,7 @@ var ValueMarker = (_a) => {
229
299
  valueMarkerLabelFillColor,
230
300
  "aria-label": (0, format_exports.sprintf)((0, i18n_exports._)("Marker gauge value: %s"), value)
231
301
  },
232
- usePercentageValue ? `${(value / (max - min) * 100).toFixed(2)}%` : (0, numberUtils_exports.formatNumber)(value, 0, {
233
- useThousandSeparators: true,
234
- useTrendUnits: true
235
- })
302
+ formatGaugeValueLabel({ value, min, max, usePercentageValue })
236
303
  )));
237
304
  };
238
305
  ValueMarker.propTypes = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/common/GaugeValueMarker.jsx", "esm-externals:react", "esm-externals:prop-types", "esm-externals:styled-components", "esm-externals:@splunk/visualizations-shared/numberUtils", "esm-externals:@splunk/ui-utils/format", "esm-externals:@splunk/ui-utils/i18n"],
4
- "sourcesContent": ["import React from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { formatNumber } from '@splunk/visualizations-shared/numberUtils';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nconst MARKER_THICKNESS = 15;\nconst MARKER_INNER_LENGTH = 30;\n\nconst MARKER_LABEL_WIDTH = 60;\nconst MARKER_LABEL_HEIGHT = 25;\nconst RADIUS = 2;\nconst DELTA_LENGTH = 12;\n\nconst ValueMarkerRect = styled.path`\n stroke-width: 2px;\n fill: ${props => props.valueMarkerFillColor};\n`;\n\nconst ValueMarkerLabelRect = styled.rect`\n fill: ${props => props.valueMarkerFillColor};\n`;\n\nconst ValueMarkerLabel = styled.text`\n fill: ${props => props.valueMarkerLabelFillColor};\n font-size: 14px;\n font-family:\n Splunk Platform Sans,\n sans-serif;\n line-height: 16px;\n text-anchor: middle;\n text-align: center;\n dominant-baseline: middle;\n`;\n\n/**\n * calculate the path of Value Marker shape\n * @method positionValueMarkerRect\n * @param {Object} input\n * @param {Number} input.x\n * @param {Number} input.y\n * @param {String} input.orientation\n * @param {Number} input.valueMarkerRectLength\n * @return {String} d containing a series of path commands that define the path to be\n */\nexport const positionValueMarkerRect = ({\n x,\n y,\n orientation,\n valueMarkerRectLength,\n alignCenter = false,\n}) => {\n let hLength = MARKER_THICKNESS;\n let vLength = valueMarkerRectLength;\n let markerStartX = alignCenter ? x - MARKER_THICKNESS / 2 : x - MARKER_THICKNESS;\n let markerStartY = y;\n\n let innerHLength = hLength / 3;\n let innerVLength = MARKER_INNER_LENGTH;\n let innerStartX = markerStartX + innerHLength;\n let innerStartY = markerStartY + 7;\n\n if (orientation === 'vertical') {\n hLength = valueMarkerRectLength;\n vLength = MARKER_THICKNESS;\n markerStartX = x;\n markerStartY = alignCenter ? y - MARKER_THICKNESS / 2 : y;\n\n innerHLength = MARKER_INNER_LENGTH;\n innerVLength = vLength / 3;\n innerStartX = markerStartX + 7;\n innerStartY = markerStartY + innerVLength;\n }\n\n return (\n `M${markerStartX},${markerStartY}h${hLength}a${RADIUS},${RADIUS} 0 0 1 ${RADIUS},${RADIUS}v${\n vLength - 2 * RADIUS\n }a${RADIUS},${RADIUS} 0 0 1 ${-RADIUS},${RADIUS}h${-hLength}a${RADIUS},${RADIUS} 0 0 1 ${-RADIUS},${-RADIUS}v${\n 2 * RADIUS - vLength\n }a${RADIUS},${RADIUS} 0 0 1 ${RADIUS},${-RADIUS}z` +\n `M${innerStartX},${innerStartY}v${\n innerVLength - RADIUS\n }a${RADIUS},${RADIUS} 0 0 0 ${RADIUS},${RADIUS}h${\n innerHLength - 2 * RADIUS\n }a${RADIUS},${RADIUS} 0 0 0 ${RADIUS},${-RADIUS}v${\n RADIUS - innerVLength\n }a${RADIUS},${RADIUS} 0 0 0 ${-RADIUS},${-RADIUS}h${\n 2 * RADIUS - innerHLength\n }a${RADIUS},${RADIUS} 0 0 0 ${-RADIUS},${RADIUS}z`\n );\n};\n\n/**\n * calculate the position of value marker label\n * @method positionLabel\n * @param {Object} input\n * @param {Number} input.x\n * @param {Number} input.y\n * @param {Number} input.length gauge thickness\n * @param {String} input.orientation\n * @return {Object} positions\n * @return {Number} positions.labelRectX x of value marker label rect\n * @return {Number} positions.labelRectY y of value marker label rect\n * @return {Number} positions.labelX x of value marker label text\n * @return {Number} positions.labelY y of value marker label text\n */\nexport const positionLabel = ({ x, y, length, orientation, alignCenter = false }) => {\n // for horizontal view\n let labelRectX = alignCenter\n ? x - MARKER_LABEL_WIDTH / 2\n : x - MARKER_THICKNESS / 2 - MARKER_LABEL_WIDTH / 2;\n let labelRectY = y + length;\n if (orientation === 'vertical') {\n labelRectX = x + length;\n labelRectY = alignCenter\n ? y - MARKER_LABEL_HEIGHT / 2\n : y - (MARKER_LABEL_HEIGHT - MARKER_THICKNESS) / 2;\n }\n const labelX = labelRectX + MARKER_LABEL_WIDTH / 2;\n const labelY = labelRectY + MARKER_LABEL_HEIGHT / 2;\n return { labelRectX, labelRectY, labelX, labelY };\n};\n\nconst ValueMarker = ({ ...props }) => {\n const {\n x,\n y,\n length,\n min = 0,\n max = 100,\n value,\n orientation = 'horizontal',\n showValue = true,\n usePercentageValue = false,\n valueMarkerFillColor,\n valueMarkerLabelFillColor,\n alignCenter = false,\n } = props;\n\n const valueMarkerRectLength = length + DELTA_LENGTH;\n const { labelRectX, labelRectY, labelX, labelY } = positionLabel({\n x,\n y,\n length,\n orientation,\n alignCenter,\n });\n\n return (\n <g>\n <ValueMarkerRect\n data-test=\"value-marker-rect\"\n d={positionValueMarkerRect({\n x,\n y,\n orientation,\n valueMarkerRectLength,\n alignCenter,\n })}\n valueMarkerFillColor={valueMarkerFillColor}\n />\n {showValue && (\n <g>\n <ValueMarkerLabelRect\n data-test=\"value-marker-label-rect\"\n x={labelRectX}\n y={labelRectY}\n width={MARKER_LABEL_WIDTH}\n height={MARKER_LABEL_HEIGHT}\n rx={RADIUS}\n ry={RADIUS}\n valueMarkerFillColor={valueMarkerFillColor}\n />\n <ValueMarkerLabel\n data-test=\"value-marker-label\"\n x={labelX}\n y={labelY}\n valueMarkerLabelFillColor={valueMarkerLabelFillColor}\n aria-label={sprintf(_('Marker gauge value: %s'), value)}\n >\n {usePercentageValue\n ? `${((value / (max - min)) * 100).toFixed(2)}%`\n : formatNumber(value, 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n })}\n </ValueMarkerLabel>\n </g>\n )}\n </g>\n );\n};\n\nValueMarker.propTypes = {\n x: T.number,\n y: T.number,\n length: T.number,\n min: T.number,\n max: T.number,\n value: T.number,\n orientation: T.string,\n showValue: T.bool,\n usePercentageValue: T.bool,\n valueMarkerFillColor: T.string,\n valueMarkerLabelFillColor: T.string,\n alignCenter: T.bool,\n};\n\nexport default ValueMarker;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/format\";\nexport * from \"@splunk/ui-utils/format\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport"]
3
+ "sources": ["../src/common/GaugeValueMarker.jsx", "esm-externals:react", "esm-externals:prop-types", "esm-externals:styled-components", "esm-externals:@splunk/ui-utils/format", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:lodash", "esm-externals:@splunk/visualizations-shared/colorConstants", "esm-externals:@splunk/visualizations-shared/numberUtils", "../src/common/gaugeUtils.ts"],
4
+ "sourcesContent": ["import React from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { sprintf } from '@splunk/ui-utils/format';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { formatGaugeValueLabel } from './gaugeUtils';\n\nconst MARKER_THICKNESS = 15;\nconst MARKER_INNER_LENGTH = 30;\n\nconst MARKER_LABEL_WIDTH = 60;\nconst MARKER_LABEL_HEIGHT = 25;\nconst RADIUS = 2;\nconst DELTA_LENGTH = 12;\n\nconst ValueMarkerRect = styled.path`\n stroke-width: 2px;\n fill: ${props => props.valueMarkerFillColor};\n`;\n\nconst ValueMarkerLabelRect = styled.rect`\n fill: ${props => props.valueMarkerFillColor};\n`;\n\nconst ValueMarkerLabel = styled.text`\n fill: ${props => props.valueMarkerLabelFillColor};\n font-size: 14px;\n font-family:\n Splunk Platform Sans,\n sans-serif;\n line-height: 16px;\n text-anchor: middle;\n text-align: center;\n dominant-baseline: middle;\n`;\n\n/**\n * calculate the path of Value Marker shape\n * @method positionValueMarkerRect\n * @param {Object} input\n * @param {Number} input.x\n * @param {Number} input.y\n * @param {String} input.orientation\n * @param {Number} input.valueMarkerRectLength\n * @return {String} d containing a series of path commands that define the path to be\n */\nexport const positionValueMarkerRect = ({\n x,\n y,\n orientation,\n valueMarkerRectLength,\n alignCenter = false,\n}) => {\n let hLength = MARKER_THICKNESS;\n let vLength = valueMarkerRectLength;\n let markerStartX = alignCenter ? x - MARKER_THICKNESS / 2 : x - MARKER_THICKNESS;\n let markerStartY = y;\n\n let innerHLength = hLength / 3;\n let innerVLength = MARKER_INNER_LENGTH;\n let innerStartX = markerStartX + innerHLength;\n let innerStartY = markerStartY + 7;\n\n if (orientation === 'vertical') {\n hLength = valueMarkerRectLength;\n vLength = MARKER_THICKNESS;\n markerStartX = x;\n markerStartY = alignCenter ? y - MARKER_THICKNESS / 2 : y;\n\n innerHLength = MARKER_INNER_LENGTH;\n innerVLength = vLength / 3;\n innerStartX = markerStartX + 7;\n innerStartY = markerStartY + innerVLength;\n }\n\n return (\n `M${markerStartX},${markerStartY}h${hLength}a${RADIUS},${RADIUS} 0 0 1 ${RADIUS},${RADIUS}v${\n vLength - 2 * RADIUS\n }a${RADIUS},${RADIUS} 0 0 1 ${-RADIUS},${RADIUS}h${-hLength}a${RADIUS},${RADIUS} 0 0 1 ${-RADIUS},${-RADIUS}v${\n 2 * RADIUS - vLength\n }a${RADIUS},${RADIUS} 0 0 1 ${RADIUS},${-RADIUS}z` +\n `M${innerStartX},${innerStartY}v${\n innerVLength - RADIUS\n }a${RADIUS},${RADIUS} 0 0 0 ${RADIUS},${RADIUS}h${\n innerHLength - 2 * RADIUS\n }a${RADIUS},${RADIUS} 0 0 0 ${RADIUS},${-RADIUS}v${\n RADIUS - innerVLength\n }a${RADIUS},${RADIUS} 0 0 0 ${-RADIUS},${-RADIUS}h${\n 2 * RADIUS - innerHLength\n }a${RADIUS},${RADIUS} 0 0 0 ${-RADIUS},${RADIUS}z`\n );\n};\n\n/**\n * calculate the position of value marker label\n * @method positionLabel\n * @param {Object} input\n * @param {Number} input.x\n * @param {Number} input.y\n * @param {Number} input.length gauge thickness\n * @param {String} input.orientation\n * @return {Object} positions\n * @return {Number} positions.labelRectX x of value marker label rect\n * @return {Number} positions.labelRectY y of value marker label rect\n * @return {Number} positions.labelX x of value marker label text\n * @return {Number} positions.labelY y of value marker label text\n */\nexport const positionLabel = ({ x, y, length, orientation, alignCenter = false }) => {\n // for horizontal view\n let labelRectX = alignCenter\n ? x - MARKER_LABEL_WIDTH / 2\n : x - MARKER_THICKNESS / 2 - MARKER_LABEL_WIDTH / 2;\n let labelRectY = y + length;\n if (orientation === 'vertical') {\n labelRectX = x + length;\n labelRectY = alignCenter\n ? y - MARKER_LABEL_HEIGHT / 2\n : y - (MARKER_LABEL_HEIGHT - MARKER_THICKNESS) / 2;\n }\n const labelX = labelRectX + MARKER_LABEL_WIDTH / 2;\n const labelY = labelRectY + MARKER_LABEL_HEIGHT / 2;\n return { labelRectX, labelRectY, labelX, labelY };\n};\n\nconst ValueMarker = ({ ...props }) => {\n const {\n x,\n y,\n length,\n min = 0,\n max = 100,\n value,\n orientation = 'horizontal',\n showValue = true,\n usePercentageValue = false,\n valueMarkerFillColor,\n valueMarkerLabelFillColor,\n alignCenter = false,\n } = props;\n\n const valueMarkerRectLength = length + DELTA_LENGTH;\n const { labelRectX, labelRectY, labelX, labelY } = positionLabel({\n x,\n y,\n length,\n orientation,\n alignCenter,\n });\n\n return (\n <g>\n <ValueMarkerRect\n data-test=\"value-marker-rect\"\n d={positionValueMarkerRect({\n x,\n y,\n orientation,\n valueMarkerRectLength,\n alignCenter,\n })}\n valueMarkerFillColor={valueMarkerFillColor}\n />\n {showValue && (\n <g>\n <ValueMarkerLabelRect\n data-test=\"value-marker-label-rect\"\n x={labelRectX}\n y={labelRectY}\n width={MARKER_LABEL_WIDTH}\n height={MARKER_LABEL_HEIGHT}\n rx={RADIUS}\n ry={RADIUS}\n valueMarkerFillColor={valueMarkerFillColor}\n />\n <ValueMarkerLabel\n data-test=\"value-marker-label\"\n x={labelX}\n y={labelY}\n valueMarkerLabelFillColor={valueMarkerLabelFillColor}\n aria-label={sprintf(_('Marker gauge value: %s'), value)}\n >\n {formatGaugeValueLabel({ value, min, max, usePercentageValue })}\n </ValueMarkerLabel>\n </g>\n )}\n </g>\n );\n};\n\nValueMarker.propTypes = {\n x: T.number,\n y: T.number,\n length: T.number,\n min: T.number,\n max: T.number,\n value: T.number,\n orientation: T.string,\n showValue: T.bool,\n usePercentageValue: T.bool,\n valueMarkerFillColor: T.string,\n valueMarkerLabelFillColor: T.string,\n alignCenter: T.bool,\n};\n\nexport default ValueMarker;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/format\";\nexport * from \"@splunk/ui-utils/format\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorConstants\";\nexport * from \"@splunk/visualizations-shared/colorConstants\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { chain, mapKeys, omit, uniqBy } from 'lodash';\nimport {\n SEMANTIC_SUCCESS,\n SEMANTIC_WARNING,\n SEMANTIC_ERROR,\n} from '@splunk/visualizations-shared/colorConstants';\nimport { formatNumber } from '@splunk/visualizations-shared/numberUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nexport const GAUGE_THICKNESS = 50;\nexport const FILL_THICKNESS = 38;\nconst GRADIENT_STOP_OFFSET_MIN = 0;\nconst GRADIENT_STOP_OFFSET_MAX = 100;\nconst DEFAULT_NUM_OF_TICKS = 5;\nconst MAX_TICK_LABEL_DECIMAL_PLACES = 5;\nconst MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;\nconst MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;\n\n/**\n * get width for the whole gauge viz for horizontal or vertical view\n * @method getGaugeWidth\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {String} orientation\n * @return {Number} width\n */\nexport const getGaugeWidth = ({ containerWidth, orientation }) =>\n orientation === 'vertical' ? GAUGE_THICKNESS : containerWidth * 0.8;\n\n/**\n * get height for the whole gauge viz for horizontal or vertical view\n * @method getGaugeHeight\n * @param {Object} input\n * @param {Number} containerHeight\n * @param {String} orientation\n * @return {Number} height\n */\nexport const getGaugeHeight = ({ containerHeight, orientation }) =>\n orientation === 'vertical' ? containerHeight * 0.8 : GAUGE_THICKNESS;\n\n/**\n * get how long the gauge shoud be.\n * In horizontal view, gauge length equals to gauge width. In vertical view, it equals to gauge height.\n * @method getGaugeLength\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation\n * @return {Number} gaugeLength\n */\nexport const getGaugeLength = ({ containerWidth, containerHeight, orientation }) =>\n orientation === 'vertical'\n ? getGaugeHeight({ containerHeight, orientation })\n : getGaugeWidth({ containerWidth, orientation });\n\n/**\n * get start x and y for rendering gauge\n * @method getGaugeStartPosition\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {Number} containerHeight\n * @param {Number} gaugeLength\n * @param {String} orientation\n * @return {Object} position\n * @return {Number} position.gaugeStartX\n * @return {Number} position.gaugeStartY\n */\nexport const getGaugeStartPosition = ({ containerWidth, containerHeight, gaugeLength, orientation }) => {\n // for horizontal view\n let gaugeStartX = (containerWidth - gaugeLength) / 2.0;\n let gaugeStartY = (containerHeight - GAUGE_THICKNESS) / 2.0;\n\n if (orientation === 'vertical') {\n gaugeStartX = (containerWidth - GAUGE_THICKNESS) / 2.0;\n gaugeStartY = (containerHeight - gaugeLength) / 2.0;\n }\n\n return { gaugeStartX, gaugeStartY };\n};\n\n/**\n * get dimensions for the whole gauge viz,\n * which can be useful to calculate background bar and major ticks positions.\n * @method getGaugeDimensions\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation 'horizontal' or 'vertical'\n * @return {Object} gaugeDimensions\n * @return {Number} gaugeDimensions.gaugeLength how long the gauge shoud be in horizontal or vertical orientation.\n * @return {Number} gaugeDimensions.gaugeStartX start x to render gauge\n * @return {Number} gaugeDimensions.gaugeStartY start y to render gauge\n * @return {Number} gaugeDimensions.gaugeWidth natural width of gauge\n * @return {Number} gaugeDimensions.gaugeHeight natural height of gauge\n */\nexport const getGaugeDimensions = ({ containerWidth, containerHeight, orientation }) => {\n const gaugeLength = getGaugeLength({\n containerWidth,\n containerHeight,\n orientation,\n });\n const { gaugeStartX, gaugeStartY } = getGaugeStartPosition({\n containerWidth,\n containerHeight,\n gaugeLength,\n orientation,\n });\n const gaugeWidth = getGaugeWidth({ containerWidth, orientation });\n const gaugeHeight = getGaugeHeight({ containerHeight, orientation });\n\n return {\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n };\n};\n\n/**\n * if gaugeColor is not specified, auto assign a gauge color to the fill bar\n * based on how much percentage the value is taken between min and max\n * @method assignGaugeColor\n * @params\n * */\nexport const assignGaugeColor = ({ value, min, max }) => {\n const rate = (value - min) / (max - min);\n\n if (rate <= 0.3) {\n return SEMANTIC_SUCCESS;\n }\n if (rate > 0.3 && rate <= 0.6) {\n return SEMANTIC_WARNING;\n }\n\n return SEMANTIC_ERROR;\n};\n\n/**\n * get inner bar length in gauge\n * @method getGaugeBarLength\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @return {Number} gaugeBarLength\n */\nexport const getGaugeBarLength = ({ gaugeLength, value, min, max }) => {\n if (max < min) {\n return null;\n }\n\n if (value >= max) {\n return gaugeLength;\n }\n\n if (value < min) {\n return 0;\n }\n\n return (gaugeLength * (value - min)) / (max - min);\n};\n\n/**\n * get x and y position for rendering inner bar in gauge\n * @method getGaugeBarStartPositions\n * @param {Object} input\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth\n * @param {Number} input.gaugeHeight\n * @param {Number} input.gaugeBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.gaugeBarX\n * @return {Number} position.gaugeBarY\n */\nexport const getGaugeBarStartPositions = ({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n}) => {\n let gaugeBarX = gaugeStartX;\n let gaugeBarY = gaugeStartY;\n\n if (orientation === 'vertical') {\n gaugeBarX += (gaugeWidth - FILL_THICKNESS) / 2;\n gaugeBarY += gaugeHeight - gaugeBarLength;\n } else {\n gaugeBarY += (gaugeHeight - FILL_THICKNESS) / 2;\n }\n\n return {\n gaugeBarX,\n gaugeBarY,\n };\n};\n\n/**\n * get width of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarWidth\n */\nexport const getGaugeBarWidth = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? FILL_THICKNESS : gaugeBarLength;\n\n/**\n * get height of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarHeight\n */\nexport const getGaugeBarHeight = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? gaugeBarLength : FILL_THICKNESS;\n\n/**\n * get dimensions for the fill bar in the gauge\n * @method getFillBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {Number} input.value,\n * @param {Number} input.min,\n * @param {Number} input.max,\n * @param {String} input.orientation\n * @return {Object} fillBarDimensions\n * @return {Number} fillBarDimensions.fillBarLength\n * @return {Number} fillBarDimensions.fillBarX\n * @return {Number} fillBarDimensions.fillBarY\n * @return {Number} fillBarDimensions.fillBarWidth\n * @return {Number} fillBarDimensions.fillBarHeight\n */\nexport const getFillBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n value,\n min,\n max,\n orientation,\n}) => {\n const gaugeBarLength = getGaugeBarLength({ gaugeLength, value, max, min });\n const { gaugeBarX: fillBarX, gaugeBarY: fillBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const fillBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const fillBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n fillBarLength: gaugeBarLength,\n fillBarX,\n fillBarY,\n fillBarWidth,\n fillBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in filler gauge\n * @method getFillerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.fillBarX\n * @param {Number} input.fillBarY\n * @param {Number} input.fillBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getFillerGaugeValueMarkerPositions = ({ fillBarX, fillBarY, fillBarLength, orientation }) => {\n let valueMarkerX = fillBarX;\n let valueMarkerY = fillBarY;\n\n if (orientation === 'vertical') {\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += fillBarLength;\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * get dimensions for the marker bar in the gauge\n * @method getMarkerBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {String} input.orientation\n * @return {Object} markerBarDimensions\n * @return {Number} markerBarDimensions.markerBarLength\n * @return {Number} markerBarDimensions.markerBarX\n * @return {Number} markerBarDimensions.markerBarY\n * @return {Number} markerBarDimensions.markerBarWidth\n * @return {Number} markerBarDimensions.markerBarHeight\n */\nexport const getMarkerBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n orientation,\n}) => {\n const gaugeBarLength = gaugeLength; // For marker gauge, inner marker bar spans the entire gauge\n const { gaugeBarX: markerBarX, gaugeBarY: markerBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const markerBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const markerBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n markerBarLength: gaugeBarLength,\n markerBarX,\n markerBarY,\n markerBarWidth,\n markerBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in marker gauge\n * @method getMarkerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.markerBarX\n * @param {Number} input.markerBarY\n * @param {Number} input.markerBarHeight\n * @param {Number} input.markerBarLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getMarkerGaugeValueMarkerPositions = ({\n markerBarX,\n markerBarY,\n markerBarHeight,\n markerBarLength: gaugeLength,\n orientation,\n value,\n min,\n max,\n}) => {\n let valueMarkerX = markerBarX;\n let valueMarkerY = markerBarY;\n if (orientation === 'vertical') {\n valueMarkerY += markerBarHeight - getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * sort the ranges in ascending order\n * @method getSortedRanges\n * @param {Array} ranges\n * @return {Array} sortedRanges\n */\nexport const getSortedRanges = ranges => ranges.sort((a, b) => a.from - b.from);\n\n/**\n * validate whether ranges prop is valid - continuous ranges, range.to < range.from, range.from != range.to\n * @method validateRanges\n * @param {Array} ranges\n * @return {String} error\n */\nexport const validateRanges = ranges => {\n if (!ranges.length) {\n return _('Prop \"ranges\" is missing entries');\n }\n\n // check whether a range has \"from\" >= \"to\" eg: 10 - 10, 100 - 10, -20 - -10 are invalid\n if (ranges.some(range => range.from >= range.to)) {\n return _('Prop \"ranges\" has invalid entries: invalid range');\n }\n\n // check whether ranges have duplicate \"from/to\" eg: 0 - 50, 25 - 50\n if (ranges.length !== uniqBy(ranges, 'to').length || ranges.length !== uniqBy(ranges, 'from').length) {\n return _('Prop \"ranges\" has invalid entries: duplicate values');\n }\n\n const sortedRanges = getSortedRanges(ranges);\n\n // check whether ranges are continuous eg: 0 - 10, 10 - 20, 20 - 30\n for (let i = 1; i < sortedRanges.length; i += 1) {\n if (sortedRanges[i].from !== sortedRanges[i - 1].to) {\n return _('Prop \"ranges\" has invalid entries: discontinuous ranges');\n }\n }\n\n return null;\n};\n\n/**\n * calculate min and max value of gauge\n * @method getGaugeRange\n * @param {Array} ranges\n * @return {Object} gaugeRange\n * @return {Number} gaugeRange.min\n * @return {Number} gaugeRange.max\n */\nexport const getGaugeRange = ranges => {\n const min = Math.min(...ranges.map(range => range.from));\n const max = Math.max(...ranges.map(range => range.to));\n return { min, max };\n};\n\n/**\n * calculate stop offsets for linear gradient\n * @method getGradientStopOffsets\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} cumulativeOffsets\n */\nexport const getGradientStopOffsets = ({ ranges, orientation }) => {\n const { min, max } = getGaugeRange(ranges);\n const offsetScale = (GRADIENT_STOP_OFFSET_MAX - GRADIENT_STOP_OFFSET_MIN) / (max - min);\n let offsets = ranges.map(range => Math.abs(range.from - range.to) * offsetScale);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n offsets = orientation === 'vertical' ? offsets.reverse() : offsets;\n const cumulativeOffsets = [];\n offsets.reduce((accumulator, currentValue, idx) => {\n cumulativeOffsets[idx] = accumulator + currentValue;\n return cumulativeOffsets[idx];\n }, 0);\n return cumulativeOffsets;\n};\n\n/**\n * calculate stop colors for linear gradient\n * @method getGradientStopColors\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stopColors\n */\nexport const getGradientStopColors = ({ ranges, orientation }) => {\n const stopColors = ranges.map(range => range.value);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n return orientation === 'vertical' ? stopColors.reverse() : stopColors;\n};\n\n/**\n * calculate linear gradient stops from ranges\n * @method getGradientStops\n * @param {Object} input\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stops\n */\nexport const getGradientStops = ({ ranges, orientation }) => {\n const stops = [];\n const offsets = getGradientStopOffsets({ ranges, orientation });\n const stopColors = getGradientStopColors({ ranges, orientation });\n // Initialize stops with the first color stop\n stops.push({ offset: `${offsets[0]}%`, stopColor: stopColors[0] });\n // Add the remaining color stops with gradient change at each stop\n for (let i = 1; i < ranges.length; i += 1) {\n stops.push({ offset: `${offsets[i - 1]}%`, stopColor: stopColors[i] });\n stops.push({ offset: `${offsets[i]}%`, stopColor: stopColors[i] });\n }\n return stops;\n};\n\n/**\n * calculate linear gradient dimensions\n * @method getGradientDimensions\n * @param {String} orientation\n * @return {Object} dimensions\n * @return {String} dimensions.x1\n * @return {String} dimensions.y1\n * @return {String} dimensions.x2\n * @return {String} dimensions.y2\n */\nexport const getGradientDimensions = orientation => {\n const x1 = '0%';\n const y1 = '0%';\n const x2 = orientation === 'horizontal' ? '100%' : '0%';\n const y2 = orientation === 'horizontal' ? '0%' : '100%';\n return { x1, y1, x2, y2 };\n};\n\ntype NumericInput = number | string;\n\ninterface UniqueDecimalPlacesInput {\n values: number[];\n minimumDecimalPlaces: number;\n}\n\ninterface PercentageFromRangeInput {\n value: number;\n min: number;\n range: number;\n}\n\ninterface NumOfTicksInput {\n min: number;\n max: number;\n majorUnit: number | string;\n usePercentageRange: boolean;\n}\n\ninterface TickLabelFormatterResult {\n numOfTicks: number;\n numericStep: number;\n formatTickLabel: (value: number) => string;\n}\n\ninterface FormatGaugeValueLabelInput {\n value: NumericInput;\n min: number;\n max: number;\n usePercentageValue: boolean;\n}\n\n// Returns the number of fractional digits in a numeric input.\nexport const getDecimalPlaces = (value: NumericInput): number => {\n const numericValue = Number(value);\n if (!Number.isFinite(numericValue)) {\n return 0;\n }\n\n const fractionPart = numericValue.toString().split('.')[1];\n return fractionPart ? fractionPart.length : 0;\n};\n\n// Finds the smallest precision that keeps all rounded tick values unique.\n// This avoids duplicated rendered labels caused by rounding collisions.\nexport const getUniqueDecimalPlaces = ({\n values,\n minimumDecimalPlaces,\n}: UniqueDecimalPlacesInput): number => {\n if (values.length <= 1) {\n return minimumDecimalPlaces;\n }\n\n for (\n let decimalPlaces = minimumDecimalPlaces;\n decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES;\n decimalPlaces += 1\n ) {\n const roundedValues = values.map(value => Number(value.toFixed(decimalPlaces)));\n if (new Set(roundedValues).size === roundedValues.length) {\n return decimalPlaces;\n }\n }\n\n return MAX_TICK_LABEL_DECIMAL_PLACES;\n};\n\n// Converts a value within [min, max] to percentage space.\nexport const getPercentageFromRange = ({ value, min, range }: PercentageFromRangeInput): number => {\n if (range === 0) {\n return 0;\n }\n return ((value - min) / range) * 100;\n};\n\n// Computes interval count from auto mode or explicit majorUnit.\nexport const getNumOfTicks = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): { numOfTicks: number; isAutoMajorUnit: boolean; majorUnitNumber: number } => {\n const range = max - min;\n const majorUnitNumber = Number(majorUnit);\n const isAutoMajorUnit = majorUnit === 'auto' || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;\n\n let numOfTicks = DEFAULT_NUM_OF_TICKS;\n if (!isAutoMajorUnit) {\n numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;\n }\n\n return { numOfTicks, isAutoMajorUnit, majorUnitNumber };\n};\n\n// Builds a reusable formatter and step size for major tick rendering.\nexport const getTickLabelFormatter = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): TickLabelFormatterResult => {\n const range = max - min;\n const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({\n min,\n max,\n majorUnit,\n usePercentageRange,\n });\n const numericStep = range / numOfTicks;\n const tickValues = [];\n\n // Materialize all candidate tick values (plus max for uneven divisions).\n for (let i = 0; i <= numOfTicks; i += 1) {\n tickValues.push(min + numericStep * i);\n }\n\n if (!Number.isInteger(numOfTicks)) {\n tickValues.push(max);\n }\n\n const minimumNumericDecimalPlaces = Math.min(\n MAX_TICK_LABEL_DECIMAL_PLACES,\n Math.max(\n getDecimalPlaces(min),\n getDecimalPlaces(max),\n isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)\n )\n );\n const numericLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues,\n minimumDecimalPlaces: minimumNumericDecimalPlaces,\n });\n const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues.map(value => getPercentageFromRange({ value, min, range })),\n minimumDecimalPlaces: 0,\n });\n\n // Keep fixed-width decimal formatting when decimals are needed; otherwise use trend formatting.\n const formatTickLabel = value => {\n if (usePercentageRange) {\n const percentageValue = getPercentageFromRange({ value, min, range });\n return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;\n }\n\n const numericLabel = value.toFixed(numericLabelDecimalPlaces);\n if (numericLabel.includes('.')) {\n return numericLabel;\n }\n\n return formatNumber(Number(numericLabel), 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n }).replace(/k$/, 'K');\n };\n\n return { numOfTicks, numericStep, formatTickLabel };\n};\n\n// Limits decimal places so displayed value length stays within a fixed digit budget.\nconst getDigitsBeforeDecimal = (numericValue: NumericInput): number =>\n Math.abs(Math.trunc(Number(numericValue))).toString().length;\n\nconst getCappedDecimalPlaces = (\n numericValue: NumericInput,\n rawDecimalPlaces: number,\n maxDigits: number\n): number => {\n const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);\n const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);\n return Math.min(rawDecimalPlaces, maxDecimalPlaces);\n};\n\n// Formats the marker value label in number or percentage mode with capped precision.\nexport const formatGaugeValueLabel = ({\n value,\n min,\n max,\n usePercentageValue,\n}: FormatGaugeValueLabelInput): string => {\n const numericValue = Number(value);\n const range = max - min || 1;\n const percentageValue = getPercentageFromRange({ value: numericValue, min, range });\n const trendFormatOptions = {\n useThousandSeparators: true,\n useTrendUnits: true,\n };\n\n if (usePercentageValue) {\n // Use the same number-mode formatting behavior (including K/M/B/T) for percentages.\n const percentageDecimalPlaces = getCappedDecimalPlaces(\n percentageValue,\n 2,\n MAX_VALUE_LABEL_DIGITS_WITH_PERCENT\n );\n return `${formatNumber(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;\n }\n\n const valueDecimalPlaces = getCappedDecimalPlaces(\n numericValue,\n getDecimalPlaces(numericValue),\n MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT\n );\n return formatNumber(numericValue, valueDecimalPlaces, trendFormatOptions);\n};\n\ninterface GaugeOptions {\n [key: string]: any;\n}\n\n// map for new options names to old option names\nconst gaugeOptionsMapping = {\n majorTickInterval: 'majorUnit',\n gaugeRanges: 'ranges',\n};\n\n/**\n * Helper method to update the option names which can be mapped to pure component options\n * @method mapToOldKey\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToOldKey = (options: GaugeOptions): GaugeOptions =>\n mapKeys(options, (val, key) => (gaugeOptionsMapping[key] ? gaugeOptionsMapping[key] : key));\n\ntype LabelOrValue = 'label' | 'value';\n\n/**\n * Helper method to map labelDisplay and valueDisplay options to pure component option names\n * @method mapToOldKey\n * @param {string} labelOrValue\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapValueLabelDisplay = (labelOrValue: LabelOrValue, options: GaugeOptions): GaugeOptions => {\n const rangeOrValue: string = labelOrValue === 'value' ? 'Value' : 'Range';\n const showKey: string = labelOrValue === 'value' ? 'showValue' : 'showLabels';\n const percentKey = `usePercentage${rangeOrValue}`;\n const optionString = `${labelOrValue}Display`;\n const newOptions = { ...options };\n if (newOptions[optionString]) {\n if (newOptions[optionString] === 'number') {\n newOptions[showKey] = true;\n newOptions[percentKey] = false;\n } else if (newOptions[optionString] === 'percentage') {\n newOptions[showKey] = true;\n newOptions[percentKey] = true;\n } else {\n newOptions[showKey] = false;\n newOptions[percentKey] = false;\n }\n }\n return omit(newOptions, [optionString]);\n};\n\n/**\n * Chained helper for mapping the option properties (and values) we expose in config.ts into property values that pure component accepts\n * This is for options that has new key name and can not directly be mapped with pure component props\n * @method convertToGaugeProperties\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertToGaugeProperties = (originalOptions: GaugeOptions): GaugeOptions =>\n chain(mapToOldKey(originalOptions))\n .thru(options => mapValueLabelDisplay('label', options))\n .thru(options => mapValueLabelDisplay('value', options))\n .value();\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport"]
7
7
  }