@perses-dev/gauge-chart-plugin 0.6.0 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/GaugeChartPanel.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Skeleton, Stack } from '@mui/material';\nimport { GaugeChart, GaugeSeries, useChartsTheme } from '@perses-dev/components';\nimport { CalculationsMap, DEFAULT_CALCULATION, TimeSeriesData } from '@perses-dev/core';\nimport { PanelProps } from '@perses-dev/plugin-system';\nimport type { GaugeSeriesOption } from 'echarts';\nimport merge from 'lodash/merge';\nimport { ReactElement, useMemo } from 'react';\nimport {\n DEFAULT_FORMAT,\n DEFAULT_MAX_PERCENT,\n DEFAULT_MAX_PERCENT_DECIMAL,\n GaugeChartOptions,\n} from './gauge-chart-model';\nimport { convertThresholds, defaultThresholdInput } from './thresholds';\n\nconst EMPTY_GAUGE_SERIES: GaugeSeries = { label: '', value: undefined };\nconst GAUGE_MIN_WIDTH = 90;\nconst PANEL_PADDING_OFFSET = 20;\n\nexport type GaugeChartPanelProps = PanelProps<GaugeChartOptions, TimeSeriesData>;\n\nexport function GaugeChartPanel(props: GaugeChartPanelProps): ReactElement | null {\n const { spec: pluginSpec, contentDimensions, queryResults } = props;\n const { calculation, max } = pluginSpec;\n\n const { thresholds: thresholdsColors } = useChartsTheme();\n\n // ensures all default format properties set if undef\n const format = merge({}, DEFAULT_FORMAT, pluginSpec.format);\n\n const thresholds = pluginSpec.thresholds ?? defaultThresholdInput;\n\n const gaugeData: GaugeSeries[] = useMemo(() => {\n if (queryResults[0]?.data === undefined) {\n return [];\n }\n\n if (CalculationsMap[calculation] === undefined) {\n console.warn(`Invalid GaugeChart panel calculation ${calculation}, fallback to ${DEFAULT_CALCULATION}`);\n }\n\n const calculate = CalculationsMap[calculation] ?? CalculationsMap[DEFAULT_CALCULATION];\n\n const seriesData: GaugeSeries[] = [];\n for (const timeSeries of queryResults[0].data.series) {\n const series = {\n value: calculate(timeSeries.values),\n label: timeSeries.formattedName ?? '',\n };\n seriesData.push(series);\n }\n return seriesData;\n }, [queryResults, calculation]);\n\n if (contentDimensions === undefined) return null;\n\n // needed for end value of last threshold color segment\n let thresholdMax = max;\n if (thresholdMax === undefined) {\n if (format.unit === 'percent') {\n thresholdMax = DEFAULT_MAX_PERCENT;\n } else {\n thresholdMax = DEFAULT_MAX_PERCENT_DECIMAL;\n }\n }\n const axisLineColors = convertThresholds(thresholds, format, thresholdMax, thresholdsColors);\n\n const axisLine: GaugeSeriesOption['axisLine'] = {\n show: true,\n lineStyle: {\n width: 5,\n color: axisLineColors,\n },\n };\n\n // no data message handled inside chart component\n if (gaugeData.length === 0) {\n return (\n <GaugeChart\n width={contentDimensions.width}\n height={contentDimensions.height}\n data={EMPTY_GAUGE_SERIES}\n format={format}\n axisLine={axisLine}\n max={thresholdMax}\n />\n );\n }\n\n // accounts for showing a separate chart for each time series\n let chartWidth = contentDimensions.width / gaugeData.length - PANEL_PADDING_OFFSET;\n if (chartWidth < GAUGE_MIN_WIDTH && gaugeData.length > 1) {\n // enables horizontal scroll when charts overflow outside of panel\n chartWidth = GAUGE_MIN_WIDTH;\n }\n\n const hasMultipleCharts = gaugeData.length > 1;\n\n return (\n <Stack\n direction=\"row\"\n spacing={hasMultipleCharts ? 2 : 0}\n justifyContent={hasMultipleCharts ? 'left' : 'center'}\n alignItems=\"center\"\n sx={{\n // so scrollbar only shows when necessary\n overflowX: gaugeData.length > 1 ? 'scroll' : 'auto',\n }}\n >\n {gaugeData.map((series, seriesIndex) => {\n return (\n <Box key={`gauge-series-${seriesIndex}`}>\n <GaugeChart\n width={chartWidth}\n height={contentDimensions.height}\n data={series}\n format={format}\n axisLine={axisLine}\n max={thresholdMax}\n />\n </Box>\n );\n })}\n </Stack>\n );\n}\n\nexport function GaugeChartLoading({ contentDimensions }: GaugeChartPanelProps): React.ReactElement | null {\n if (contentDimensions === undefined) return null;\n return (\n <Skeleton\n sx={{ margin: '0 auto' }}\n variant=\"circular\"\n width={contentDimensions.width > contentDimensions.height ? contentDimensions.height : contentDimensions.width}\n height={contentDimensions.height}\n />\n );\n}\n"],"names":["Box","Skeleton","Stack","GaugeChart","useChartsTheme","CalculationsMap","DEFAULT_CALCULATION","merge","useMemo","DEFAULT_FORMAT","DEFAULT_MAX_PERCENT","DEFAULT_MAX_PERCENT_DECIMAL","convertThresholds","defaultThresholdInput","EMPTY_GAUGE_SERIES","label","value","undefined","GAUGE_MIN_WIDTH","PANEL_PADDING_OFFSET","GaugeChartPanel","props","spec","pluginSpec","contentDimensions","queryResults","calculation","max","thresholds","thresholdsColors","format","gaugeData","data","console","warn","calculate","seriesData","timeSeries","series","values","formattedName","push","thresholdMax","unit","axisLineColors","axisLine","show","lineStyle","width","color","length","height","chartWidth","hasMultipleCharts","direction","spacing","justifyContent","alignItems","sx","overflowX","map","seriesIndex","GaugeChartLoading","margin","variant"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/GaugeChartPanel.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Skeleton, Stack } from '@mui/material';\nimport { useChartsTheme } from '@perses-dev/components';\nimport { CalculationsMap, DEFAULT_CALCULATION, TimeSeriesData } from '@perses-dev/core';\nimport { PanelProps } from '@perses-dev/plugin-system';\nimport type { GaugeSeriesOption } from 'echarts';\nimport merge from 'lodash/merge';\nimport { ReactElement, useMemo } from 'react';\nimport {\n DEFAULT_FORMAT,\n DEFAULT_MAX_PERCENT,\n DEFAULT_MAX_PERCENT_DECIMAL,\n GaugeChartOptions,\n} from './gauge-chart-model';\nimport { convertThresholds, defaultThresholdInput } from './thresholds';\nimport { GaugeChartBase, GaugeSeries } from './GaugeChartBase';\n\nconst EMPTY_GAUGE_SERIES: GaugeSeries = { label: '', value: undefined };\nconst GAUGE_MIN_WIDTH = 90;\nconst PANEL_PADDING_OFFSET = 20;\n\nexport type GaugeChartPanelProps = PanelProps<GaugeChartOptions, TimeSeriesData>;\n\nexport function GaugeChartPanel(props: GaugeChartPanelProps): ReactElement | null {\n const { spec: pluginSpec, contentDimensions, queryResults } = props;\n const { calculation, max } = pluginSpec;\n\n const { thresholds: thresholdsColors } = useChartsTheme();\n\n // ensures all default format properties set if undef\n const format = merge({}, DEFAULT_FORMAT, pluginSpec.format);\n\n const thresholds = pluginSpec.thresholds ?? defaultThresholdInput;\n\n const gaugeData: GaugeSeries[] = useMemo(() => {\n if (queryResults[0]?.data === undefined) {\n return [];\n }\n\n if (CalculationsMap[calculation] === undefined) {\n console.warn(`Invalid GaugeChart panel calculation ${calculation}, fallback to ${DEFAULT_CALCULATION}`);\n }\n\n const calculate = CalculationsMap[calculation] ?? CalculationsMap[DEFAULT_CALCULATION];\n\n const seriesData: GaugeSeries[] = [];\n for (const timeSeries of queryResults[0].data.series) {\n const series = {\n value: calculate(timeSeries.values),\n label: timeSeries.formattedName ?? '',\n };\n seriesData.push(series);\n }\n return seriesData;\n }, [queryResults, calculation]);\n\n if (contentDimensions === undefined) return null;\n\n // needed for end value of last threshold color segment\n let thresholdMax = max;\n if (thresholdMax === undefined) {\n if (format.unit === 'percent') {\n thresholdMax = DEFAULT_MAX_PERCENT;\n } else {\n thresholdMax = DEFAULT_MAX_PERCENT_DECIMAL;\n }\n }\n const axisLineColors = convertThresholds(thresholds, format, thresholdMax, thresholdsColors);\n\n const axisLine: GaugeSeriesOption['axisLine'] = {\n show: true,\n lineStyle: {\n width: 5,\n color: axisLineColors,\n },\n };\n\n // no data message handled inside chart component\n if (gaugeData.length === 0) {\n return (\n <GaugeChartBase\n width={contentDimensions.width}\n height={contentDimensions.height}\n data={EMPTY_GAUGE_SERIES}\n format={format}\n axisLine={axisLine}\n max={thresholdMax}\n />\n );\n }\n\n // accounts for showing a separate chart for each time series\n let chartWidth = contentDimensions.width / gaugeData.length - PANEL_PADDING_OFFSET;\n if (chartWidth < GAUGE_MIN_WIDTH && gaugeData.length > 1) {\n // enables horizontal scroll when charts overflow outside of panel\n chartWidth = GAUGE_MIN_WIDTH;\n }\n\n const hasMultipleCharts = gaugeData.length > 1;\n\n return (\n <Stack\n direction=\"row\"\n spacing={hasMultipleCharts ? 2 : 0}\n justifyContent={hasMultipleCharts ? 'left' : 'center'}\n alignItems=\"center\"\n sx={{\n // so scrollbar only shows when necessary\n overflowX: gaugeData.length > 1 ? 'scroll' : 'auto',\n }}\n >\n {gaugeData.map((series, seriesIndex) => {\n return (\n <Box key={`gauge-series-${seriesIndex}`}>\n <GaugeChartBase\n width={chartWidth}\n height={contentDimensions.height}\n data={series}\n format={format}\n axisLine={axisLine}\n max={thresholdMax}\n />\n </Box>\n );\n })}\n </Stack>\n );\n}\n\nexport function GaugeChartLoading({ contentDimensions }: GaugeChartPanelProps): React.ReactElement | null {\n if (contentDimensions === undefined) return null;\n return (\n <Skeleton\n sx={{ margin: '0 auto' }}\n variant=\"circular\"\n width={contentDimensions.width > contentDimensions.height ? contentDimensions.height : contentDimensions.width}\n height={contentDimensions.height}\n />\n );\n}\n"],"names":["Box","Skeleton","Stack","useChartsTheme","CalculationsMap","DEFAULT_CALCULATION","merge","useMemo","DEFAULT_FORMAT","DEFAULT_MAX_PERCENT","DEFAULT_MAX_PERCENT_DECIMAL","convertThresholds","defaultThresholdInput","GaugeChartBase","EMPTY_GAUGE_SERIES","label","value","undefined","GAUGE_MIN_WIDTH","PANEL_PADDING_OFFSET","GaugeChartPanel","props","spec","pluginSpec","contentDimensions","queryResults","calculation","max","thresholds","thresholdsColors","format","gaugeData","data","console","warn","calculate","seriesData","timeSeries","series","values","formattedName","push","thresholdMax","unit","axisLineColors","axisLine","show","lineStyle","width","color","length","height","chartWidth","hasMultipleCharts","direction","spacing","justifyContent","alignItems","sx","overflowX","map","seriesIndex","GaugeChartLoading","margin","variant"],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: all[name]
21
+ });
22
+ }
23
+ _export(exports, {
24
+ GaugeChartBase: function() {
25
+ return GaugeChartBase;
26
+ },
27
+ getResponsiveValueSize: function() {
28
+ return getResponsiveValueSize;
29
+ }
30
+ });
31
+ const _jsxruntime = require("react/jsx-runtime");
32
+ const _components = require("@perses-dev/components");
33
+ const _core = require("@perses-dev/core");
34
+ const _core1 = require("echarts/core");
35
+ const _charts = require("echarts/charts");
36
+ const _components1 = require("echarts/components");
37
+ const _renderers = require("echarts/renderers");
38
+ (0, _core1.use)([
39
+ _charts.GaugeChart,
40
+ _components1.GridComponent,
41
+ _components1.TitleComponent,
42
+ _components1.TooltipComponent,
43
+ _renderers.CanvasRenderer
44
+ ]);
45
+ const PROGRESS_WIDTH = 16;
46
+ // adjusts when to show pointer icon
47
+ const GAUGE_SMALL_BREAKPOINT = 170;
48
+ function GaugeChartBase(props) {
49
+ const { width, height, data, format, axisLine, max } = props;
50
+ const chartsTheme = (0, _components.useChartsTheme)();
51
+ // useDeepMemo ensures value size util does not rerun everytime you hover on the chart
52
+ const option = (0, _core.useDeepMemo)(()=>{
53
+ if (data.value === undefined) return chartsTheme.noDataOption;
54
+ // adjusts fontSize depending on number of characters
55
+ const valueSizeClamp = getResponsiveValueSize(data.value, format, width, height);
56
+ return {
57
+ title: {
58
+ show: false
59
+ },
60
+ tooltip: {
61
+ show: false
62
+ },
63
+ series: [
64
+ {
65
+ type: 'gauge',
66
+ center: [
67
+ '50%',
68
+ '65%'
69
+ ],
70
+ radius: '86%',
71
+ startAngle: 200,
72
+ endAngle: -20,
73
+ min: 0,
74
+ max,
75
+ silent: true,
76
+ progress: {
77
+ show: true,
78
+ width: PROGRESS_WIDTH,
79
+ itemStyle: {
80
+ color: 'auto'
81
+ }
82
+ },
83
+ pointer: {
84
+ show: false
85
+ },
86
+ axisLine: {
87
+ lineStyle: {
88
+ color: [
89
+ [
90
+ 1,
91
+ 'rgba(127,127,127,0.35)'
92
+ ]
93
+ ],
94
+ width: PROGRESS_WIDTH
95
+ }
96
+ },
97
+ axisTick: {
98
+ show: false,
99
+ distance: 0
100
+ },
101
+ splitLine: {
102
+ show: false
103
+ },
104
+ axisLabel: {
105
+ show: false,
106
+ distance: -18,
107
+ color: '#999',
108
+ fontSize: 12
109
+ },
110
+ anchor: {
111
+ show: false
112
+ },
113
+ title: {
114
+ show: false
115
+ },
116
+ detail: {
117
+ show: false
118
+ },
119
+ data: [
120
+ {
121
+ value: data.value
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ type: 'gauge',
127
+ center: [
128
+ '50%',
129
+ '65%'
130
+ ],
131
+ radius: '100%',
132
+ startAngle: 200,
133
+ endAngle: -20,
134
+ min: 0,
135
+ max,
136
+ pointer: {
137
+ show: true,
138
+ // pointer hidden for small panels, path taken from ex: https://echarts.apache.org/examples/en/editor.html?c=gauge-grade
139
+ icon: width > GAUGE_SMALL_BREAKPOINT ? 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z' : 'none',
140
+ length: 10,
141
+ width: 5,
142
+ offsetCenter: [
143
+ 0,
144
+ '-49%'
145
+ ],
146
+ itemStyle: {
147
+ color: 'auto'
148
+ }
149
+ },
150
+ axisLine,
151
+ axisTick: {
152
+ show: false
153
+ },
154
+ splitLine: {
155
+ show: false
156
+ },
157
+ axisLabel: {
158
+ show: false
159
+ },
160
+ detail: {
161
+ show: true,
162
+ width: '60%',
163
+ borderRadius: 8,
164
+ offsetCenter: [
165
+ 0,
166
+ '-9%'
167
+ ],
168
+ color: 'inherit',
169
+ fontSize: valueSizeClamp,
170
+ formatter: data.value === null ? // at this level because the `formatter` function argument is `NaN`
171
+ // when the value is `null`, making it difficult to differentiate
172
+ // `null` from a true `NaN` case.
173
+ ()=>'null' : (value)=>{
174
+ return (0, _core.formatValue)(value, format);
175
+ }
176
+ },
177
+ data: [
178
+ {
179
+ value: data.value,
180
+ name: data.label,
181
+ // TODO: new UX for series names, create separate React component or reuse ListLegendItem
182
+ // https://echarts.apache.org/en/option.html#series-gauge.data.title
183
+ title: {
184
+ show: true,
185
+ color: chartsTheme.echartsTheme.textStyle?.color ?? 'inherit',
186
+ offsetCenter: [
187
+ 0,
188
+ '55%'
189
+ ],
190
+ overflow: 'truncate',
191
+ fontSize: 12,
192
+ width: width * 0.8
193
+ }
194
+ }
195
+ ]
196
+ }
197
+ ]
198
+ };
199
+ }, [
200
+ data,
201
+ width,
202
+ height,
203
+ chartsTheme,
204
+ format,
205
+ axisLine,
206
+ max
207
+ ]);
208
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.EChart, {
209
+ sx: {
210
+ width: width,
211
+ height: height,
212
+ padding: `${chartsTheme.container.padding.default}px`
213
+ },
214
+ option: option,
215
+ theme: chartsTheme.echartsTheme
216
+ });
217
+ }
218
+ function getResponsiveValueSize(value, format, width, height) {
219
+ const MIN_SIZE = 3;
220
+ const MAX_SIZE = 24;
221
+ const SIZE_MULTIPLIER = 0.7;
222
+ const formattedValue = typeof value === 'number' ? (0, _core.formatValue)(value, format) : `${value}`;
223
+ const valueCharacters = formattedValue.length ?? 2;
224
+ const valueSize = Math.min(width, height) / valueCharacters * SIZE_MULTIPLIER;
225
+ return `clamp(${MIN_SIZE}px, ${valueSize}px, ${MAX_SIZE}px)`;
226
+ }
@@ -36,6 +36,7 @@ const _merge = /*#__PURE__*/ _interop_require_default(require("lodash/merge"));
36
36
  const _react = require("react");
37
37
  const _gaugechartmodel = require("./gauge-chart-model");
38
38
  const _thresholds = require("./thresholds");
39
+ const _GaugeChartBase = require("./GaugeChartBase");
39
40
  function _interop_require_default(obj) {
40
41
  return obj && obj.__esModule ? obj : {
41
42
  default: obj
@@ -95,7 +96,7 @@ function GaugeChartPanel(props) {
95
96
  };
96
97
  // no data message handled inside chart component
97
98
  if (gaugeData.length === 0) {
98
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.GaugeChart, {
99
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_GaugeChartBase.GaugeChartBase, {
99
100
  width: contentDimensions.width,
100
101
  height: contentDimensions.height,
101
102
  data: EMPTY_GAUGE_SERIES,
@@ -122,7 +123,7 @@ function GaugeChartPanel(props) {
122
123
  },
123
124
  children: gaugeData.map((series, seriesIndex)=>{
124
125
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
125
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.GaugeChart, {
126
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_GaugeChartBase.GaugeChartBase, {
126
127
  width: chartWidth,
127
128
  height: contentDimensions.height,
128
129
  data: series,
package/mf-manifest.json CHANGED
@@ -5,11 +5,11 @@
5
5
  "name": "GaugeChart",
6
6
  "type": "app",
7
7
  "buildInfo": {
8
- "buildVersion": "0.6.0",
8
+ "buildVersion": "0.7.0",
9
9
  "buildName": "@perses-dev/gauge-chart-plugin"
10
10
  },
11
11
  "remoteEntry": {
12
- "name": "__mf/js/GaugeChart.ab54e56d.js",
12
+ "name": "__mf/js/GaugeChart.01ff7edc.js",
13
13
  "path": "",
14
14
  "type": "global"
15
15
  },
@@ -111,7 +111,7 @@
111
111
  "__mf/js/async/623.afdd0af8.js"
112
112
  ],
113
113
  "sync": [
114
- "__mf/js/async/870.e225b77a.js"
114
+ "__mf/js/async/82.d6d76c84.js"
115
115
  ]
116
116
  },
117
117
  "css": {
@@ -138,12 +138,13 @@
138
138
  "__mf/js/async/238.3b90e0d1.js",
139
139
  "__mf/js/async/75.4ebd94ad.js",
140
140
  "__mf/js/async/623.afdd0af8.js",
141
- "__mf/js/async/996.ec5992e5.js",
142
- "__mf/js/async/870.e225b77a.js",
143
- "__mf/js/async/301.2cb371d7.js",
141
+ "__mf/js/async/413.8c98e66f.js",
142
+ "__mf/js/async/9.a35c8e86.js",
143
+ "__mf/js/async/82.d6d76c84.js",
144
+ "__mf/js/async/957.3c868e35.js",
144
145
  "__mf/js/async/774.db64c396.js",
145
146
  "__mf/js/async/738.e2de8ee4.js",
146
- "__mf/js/async/610.ba53bb1f.js",
147
+ "__mf/js/async/610.73ae67bf.js",
147
148
  "__mf/js/async/981.6ecc2fa1.js",
148
149
  "__mf/js/async/770.1ddcdb57.js",
149
150
  "__mf/js/async/296.6e15d7c1.js"
@@ -189,7 +190,7 @@
189
190
  "js": {
190
191
  "async": [],
191
192
  "sync": [
192
- "__mf/js/async/610.ba53bb1f.js"
193
+ "__mf/js/async/610.73ae67bf.js"
193
194
  ]
194
195
  },
195
196
  "css": {
@@ -352,10 +353,11 @@
352
353
  "assets": {
353
354
  "js": {
354
355
  "sync": [
356
+ "__mf/js/async/413.8c98e66f.js",
355
357
  "__mf/js/async/929.fde3d617.js",
356
358
  "__mf/js/async/808.4e339e11.js",
357
- "__mf/js/async/301.2cb371d7.js",
358
- "__mf/js/async/__federation_expose_GaugeChart.8d994ab0.js"
359
+ "__mf/js/async/957.3c868e35.js",
360
+ "__mf/js/async/__federation_expose_GaugeChart.15826471.js"
359
361
  ],
360
362
  "async": [
361
363
  "__mf/js/async/964.80d5e8c0.js",
@@ -366,9 +368,9 @@
366
368
  "__mf/js/async/238.3b90e0d1.js",
367
369
  "__mf/js/async/224.dd9ee618.js",
368
370
  "__mf/js/async/292.d6d07d9c.js",
369
- "__mf/js/async/996.ec5992e5.js",
371
+ "__mf/js/async/9.a35c8e86.js",
370
372
  "__mf/js/async/885.6fe431cc.js",
371
- "__mf/js/async/870.e225b77a.js",
373
+ "__mf/js/async/82.d6d76c84.js",
372
374
  "__mf/js/async/740.a7a03e99.js",
373
375
  "__mf/js/async/75.4ebd94ad.js",
374
376
  "__mf/js/async/623.afdd0af8.js",
@@ -376,7 +378,7 @@
376
378
  "__mf/js/async/162.e82ae267.js",
377
379
  "__mf/js/async/488.6e73b2c9.js",
378
380
  "__mf/js/async/738.e2de8ee4.js",
379
- "__mf/js/async/610.ba53bb1f.js",
381
+ "__mf/js/async/610.73ae67bf.js",
380
382
  "__mf/js/async/981.6ecc2fa1.js",
381
383
  "__mf/js/async/770.1ddcdb57.js",
382
384
  "__mf/js/async/296.6e15d7c1.js"
package/mf-stats.json CHANGED
@@ -5,11 +5,11 @@
5
5
  "name": "GaugeChart",
6
6
  "type": "app",
7
7
  "buildInfo": {
8
- "buildVersion": "0.6.0",
8
+ "buildVersion": "0.7.0",
9
9
  "buildName": "@perses-dev/gauge-chart-plugin"
10
10
  },
11
11
  "remoteEntry": {
12
- "name": "__mf/js/GaugeChart.ab54e56d.js",
12
+ "name": "__mf/js/GaugeChart.01ff7edc.js",
13
13
  "path": "",
14
14
  "type": "global"
15
15
  },
@@ -122,7 +122,7 @@
122
122
  "__mf/js/async/623.afdd0af8.js"
123
123
  ],
124
124
  "sync": [
125
- "__mf/js/async/870.e225b77a.js"
125
+ "__mf/js/async/82.d6d76c84.js"
126
126
  ]
127
127
  },
128
128
  "css": {
@@ -154,12 +154,13 @@
154
154
  "__mf/js/async/238.3b90e0d1.js",
155
155
  "__mf/js/async/75.4ebd94ad.js",
156
156
  "__mf/js/async/623.afdd0af8.js",
157
- "__mf/js/async/996.ec5992e5.js",
158
- "__mf/js/async/870.e225b77a.js",
159
- "__mf/js/async/301.2cb371d7.js",
157
+ "__mf/js/async/413.8c98e66f.js",
158
+ "__mf/js/async/9.a35c8e86.js",
159
+ "__mf/js/async/82.d6d76c84.js",
160
+ "__mf/js/async/957.3c868e35.js",
160
161
  "__mf/js/async/774.db64c396.js",
161
162
  "__mf/js/async/738.e2de8ee4.js",
162
- "__mf/js/async/610.ba53bb1f.js",
163
+ "__mf/js/async/610.73ae67bf.js",
163
164
  "__mf/js/async/981.6ecc2fa1.js",
164
165
  "__mf/js/async/770.1ddcdb57.js",
165
166
  "__mf/js/async/296.6e15d7c1.js"
@@ -213,7 +214,7 @@
213
214
  "js": {
214
215
  "async": [],
215
216
  "sync": [
216
- "__mf/js/async/610.ba53bb1f.js"
217
+ "__mf/js/async/610.73ae67bf.js"
217
218
  ]
218
219
  },
219
220
  "css": {
@@ -410,10 +411,11 @@
410
411
  "assets": {
411
412
  "js": {
412
413
  "sync": [
414
+ "__mf/js/async/413.8c98e66f.js",
413
415
  "__mf/js/async/929.fde3d617.js",
414
416
  "__mf/js/async/808.4e339e11.js",
415
- "__mf/js/async/301.2cb371d7.js",
416
- "__mf/js/async/__federation_expose_GaugeChart.8d994ab0.js"
417
+ "__mf/js/async/957.3c868e35.js",
418
+ "__mf/js/async/__federation_expose_GaugeChart.15826471.js"
417
419
  ],
418
420
  "async": [
419
421
  "__mf/js/async/964.80d5e8c0.js",
@@ -424,9 +426,9 @@
424
426
  "__mf/js/async/238.3b90e0d1.js",
425
427
  "__mf/js/async/224.dd9ee618.js",
426
428
  "__mf/js/async/292.d6d07d9c.js",
427
- "__mf/js/async/996.ec5992e5.js",
429
+ "__mf/js/async/9.a35c8e86.js",
428
430
  "__mf/js/async/885.6fe431cc.js",
429
- "__mf/js/async/870.e225b77a.js",
431
+ "__mf/js/async/82.d6d76c84.js",
430
432
  "__mf/js/async/740.a7a03e99.js",
431
433
  "__mf/js/async/75.4ebd94ad.js",
432
434
  "__mf/js/async/623.afdd0af8.js",
@@ -434,7 +436,7 @@
434
436
  "__mf/js/async/162.e82ae267.js",
435
437
  "__mf/js/async/488.6e73b2c9.js",
436
438
  "__mf/js/async/738.e2de8ee4.js",
437
- "__mf/js/async/610.ba53bb1f.js",
439
+ "__mf/js/async/610.73ae67bf.js",
438
440
  "__mf/js/async/981.6ecc2fa1.js",
439
441
  "__mf/js/async/770.1ddcdb57.js",
440
442
  "__mf/js/async/296.6e15d7c1.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perses-dev/gauge-chart-plugin",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "scripts": {
5
5
  "dev": "rsbuild dev",
6
6
  "build": "npm run build-mf && concurrently \"npm:build:*\"",
@@ -1 +0,0 @@
1
- (self.webpackChunkGaugeChart=self.webpackChunkGaugeChart||[]).push([["301"],{96586:function(t,n,r){var o=r(57753),e=r(82452),i=r(22115),u=r(38256),c=r(67426);function f(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}f.prototype.clear=o,f.prototype.delete=e,f.prototype.get=i,f.prototype.has=u,f.prototype.set=c,t.exports=f},36301:function(t,n,r){var o=r(63663),e=r(72470),i=r(66165),u=r(71873),c=r(52556);function f(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}f.prototype.clear=o,f.prototype.delete=e,f.prototype.get=i,f.prototype.has=u,f.prototype.set=c,t.exports=f},44538:function(t,n,r){var o=r(81822)(r(77400),"Map");t.exports=o},74554:function(t,n,r){var o=r(39448),e=r(7738),i=r(66575),u=r(7238),c=r(38738);function f(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}f.prototype.clear=o,f.prototype.delete=e,f.prototype.get=i,f.prototype.has=u,f.prototype.set=c,t.exports=f},23694:function(t,n,r){var o=r(36301),e=r(7354),i=r(5863),u=r(12367),c=r(90748),f=r(97569);function a(t){var n=this.__data__=new o(t);this.size=n.size}a.prototype.clear=e,a.prototype.delete=i,a.prototype.get=u,a.prototype.has=c,a.prototype.set=f,t.exports=a},96539:function(t,n,r){var o=r(77400).Symbol;t.exports=o},59942:function(t,n,r){var o=r(77400).Uint8Array;t.exports=o},79349:function(t){t.exports=function(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}},10263:function(t){t.exports=function(t,n){for(var r=-1,o=null==t?0:t.length,e=0,i=[];++r<o;){var u=t[r];n(u,r,t)&&(i[e++]=u)}return i}},98213:function(t,n,r){var o=r(24701),e=r(2900),i=r(19785),u=r(43854),c=r(42383),f=r(48519),a=Object.prototype.hasOwnProperty;t.exports=function(t,n){var r=i(t),s=!r&&e(t),p=!r&&!s&&u(t),v=!r&&!s&&!p&&f(t),l=r||s||p||v,h=l?o(t.length,String):[],y=h.length;for(var _ in t)(n||a.call(t,_))&&!(l&&("length"==_||p&&("offset"==_||"parent"==_)||v&&("buffer"==_||"byteLength"==_||"byteOffset"==_)||c(_,y)))&&h.push(_);return h}},73140:function(t,n,r){var o=r(88799),e=r(85638);t.exports=function(t,n,r){(void 0===r||e(t[n],r))&&(void 0!==r||n in t)||o(t,n,r)}},71928:function(t,n,r){var o=r(88799),e=r(85638),i=Object.prototype.hasOwnProperty;t.exports=function(t,n,r){var u=t[n];i.call(t,n)&&e(u,r)&&(void 0!==r||n in t)||o(t,n,r)}},93382:function(t,n,r){var o=r(85638);t.exports=function(t,n){for(var r=t.length;r--;)if(o(t[r][0],n))return r;return -1}},88799:function(t,n,r){var o=r(42630);t.exports=function(t,n,r){"__proto__"==n&&o?o(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}},80158:function(t,n,r){var o=r(11611),e=Object.create,i=function(){function t(){}return function(n){if(!o(n))return{};if(e)return e(n);t.prototype=n;var r=new t;return t.prototype=void 0,r}}();t.exports=i},49819:function(t,n,r){var o=r(18911)();t.exports=o},99736:function(t,n,r){var o=r(96539),e=r(34840),i=r(21258),u=o?o.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?e(t):i(t)}},55829:function(t,n,r){var o=r(99736),e=r(92360);t.exports=function(t){return e(t)&&"[object Arguments]"==o(t)}},46729:function(t,n,r){var o=r(28338),e=r(99678),i=r(11611),u=r(76532),c=/^\[object .+?Constructor\]$/,f=Object.prototype,a=Function.prototype.toString,s=f.hasOwnProperty,p=RegExp("^"+a.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||e(t))&&(o(t)?p:c).test(u(t))}},26972:function(t,n,r){var o=r(99736),e=r(84194),i=r(92360),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&e(t.length)&&!!u[o(t)]}},59464:function(t,n,r){var o=r(11611),e=r(56016),i=r(21586),u=Object.prototype.hasOwnProperty;t.exports=function(t){if(!o(t))return i(t);var n=e(t),r=[];for(var c in t)"constructor"==c&&(n||!u.call(t,c))||r.push(c);return r}},40015:function(t,n,r){var o=r(23694),e=r(73140),i=r(49819),u=r(68867),c=r(11611),f=r(53893),a=r(97494);t.exports=function t(n,r,s,p,v){n!==r&&i(r,function(i,f){if(v||(v=new o),c(i))u(n,r,f,s,t,p,v);else{var l=p?p(a(n,f),i,f+"",n,r,v):void 0;void 0===l&&(l=i),e(n,f,l)}},f)}},68867:function(t,n,r){var o=r(73140),e=r(2734),i=r(63428),u=r(37561),c=r(97635),f=r(2900),a=r(19785),s=r(36468),p=r(43854),v=r(28338),l=r(11611),h=r(40861),y=r(48519),_=r(97494),x=r(89328);t.exports=function(t,n,r,b,d,g,j){var O=_(t,r),w=_(n,r),A=j.get(w);if(A){o(t,r,A);return}var m=g?g(O,w,r+"",t,n,j):void 0,z=void 0===m;if(z){var P=a(w),S=!P&&p(w),F=!P&&!S&&y(w);m=w,P||S||F?a(O)?m=O:s(O)?m=u(O):S?(z=!1,m=e(w,!0)):F?(z=!1,m=i(w,!0)):m=[]:h(w)||f(w)?(m=O,f(O)?m=x(O):(!l(O)||v(O))&&(m=c(w))):z=!1}z&&(j.set(w,m),d(m,w,b,g,j),j.delete(w)),o(t,r,m)}},1197:function(t,n,r){var o=r(31137),e=r(11871),i=r(63132);t.exports=function(t,n){return i(e(t,n,o),t+"")}},54459:function(t,n,r){var o=r(551),e=r(42630),i=r(31137),u=e?function(t,n){return e(t,"toString",{configurable:!0,enumerable:!1,value:o(n),writable:!0})}:i;t.exports=u},24701:function(t){t.exports=function(t,n){for(var r=-1,o=Array(t);++r<t;)o[r]=n(r);return o}},39334:function(t){t.exports=function(t){return function(n){return t(n)}}},95825:function(t,n,r){var o=r(59942);t.exports=function(t){var n=new t.constructor(t.byteLength);return new o(n).set(new o(t)),n}},2734:function(t,n,r){t=r.nmd(t);var o=r(77400),e=n&&!n.nodeType&&n,i=e&&t&&!t.nodeType&&t,u=i&&i.exports===e?o.Buffer:void 0,c=u?u.allocUnsafe:void 0;t.exports=function(t,n){if(n)return t.slice();var r=t.length,o=c?c(r):new t.constructor(r);return t.copy(o),o}},63428:function(t,n,r){var o=r(95825);t.exports=function(t,n){var r=n?o(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},37561:function(t){t.exports=function(t,n){var r=-1,o=t.length;for(n||(n=Array(o));++r<o;)n[r]=t[r];return n}},35159:function(t,n,r){var o=r(71928),e=r(88799);t.exports=function(t,n,r,i){var u=!r;r||(r={});for(var c=-1,f=n.length;++c<f;){var a=n[c],s=i?i(r[a],t[a],a,r,t):void 0;void 0===s&&(s=t[a]),u?e(r,a,s):o(r,a,s)}return r}},64937:function(t,n,r){var o=r(77400)["__core-js_shared__"];t.exports=o},7270:function(t,n,r){var o=r(1197),e=r(57535);t.exports=function(t){return o(function(n,r){var o=-1,i=r.length,u=i>1?r[i-1]:void 0,c=i>2?r[2]:void 0;for(u=t.length>3&&"function"==typeof u?(i--,u):void 0,c&&e(r[0],r[1],c)&&(u=i<3?void 0:u,i=1),n=Object(n);++o<i;){var f=r[o];f&&t(n,f,o,u)}return n})}},18911:function(t){t.exports=function(t){return function(n,r,o){for(var e=-1,i=Object(n),u=o(n),c=u.length;c--;){var f=u[t?c:++e];if(!1===r(i[f],f,i))break}return n}}},42630:function(t,n,r){var o=r(81822),e=function(){try{var t=o(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=e},39120:function(t,n,r){var o="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;t.exports=o},95899:function(t,n,r){var o=r(54479);t.exports=function(t,n){var r=t.__data__;return o(n)?r["string"==typeof n?"string":"hash"]:r.map}},81822:function(t,n,r){var o=r(46729),e=r(15371);t.exports=function(t,n){var r=e(t,n);return o(r)?r:void 0}},2173:function(t,n,r){var o=r(58023)(Object.getPrototypeOf,Object);t.exports=o},34840:function(t,n,r){var o=r(96539),e=Object.prototype,i=e.hasOwnProperty,u=e.toString,c=o?o.toStringTag:void 0;t.exports=function(t){var n=i.call(t,c),r=t[c];try{t[c]=void 0;var o=!0}catch(t){}var e=u.call(t);return o&&(n?t[c]=r:delete t[c]),e}},15371:function(t){t.exports=function(t,n){return null==t?void 0:t[n]}},57753:function(t,n,r){var o=r(35718);t.exports=function(){this.__data__=o?o(null):{},this.size=0}},82452:function(t){t.exports=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=+!!n,n}},22115:function(t,n,r){var o=r(35718),e=Object.prototype.hasOwnProperty;t.exports=function(t){var n=this.__data__;if(o){var r=n[t];return"__lodash_hash_undefined__"===r?void 0:r}return e.call(n,t)?n[t]:void 0}},38256:function(t,n,r){var o=r(35718),e=Object.prototype.hasOwnProperty;t.exports=function(t){var n=this.__data__;return o?void 0!==n[t]:e.call(n,t)}},67426:function(t,n,r){var o=r(35718);t.exports=function(t,n){var r=this.__data__;return this.size+=+!this.has(t),r[t]=o&&void 0===n?"__lodash_hash_undefined__":n,this}},97635:function(t,n,r){var o=r(80158),e=r(2173),i=r(56016);t.exports=function(t){return"function"!=typeof t.constructor||i(t)?{}:o(e(t))}},42383:function(t){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,r){var o=typeof t;return!!(r=null==r?0x1fffffffffffff:r)&&("number"==o||"symbol"!=o&&n.test(t))&&t>-1&&t%1==0&&t<r}},57535:function(t,n,r){var o=r(85638),e=r(80068),i=r(42383),u=r(11611);t.exports=function(t,n,r){if(!u(r))return!1;var c=typeof n;return("number"==c?!!(e(r)&&i(n,r.length)):"string"==c&&n in r)&&o(r[n],t)}},54479:function(t){t.exports=function(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}},99678:function(t,n,r){var o,e=r(64937),i=(o=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";t.exports=function(t){return!!i&&i in t}},56016:function(t){var n=Object.prototype;t.exports=function(t){var r=t&&t.constructor;return t===("function"==typeof r&&r.prototype||n)}},63663:function(t){t.exports=function(){this.__data__=[],this.size=0}},72470:function(t,n,r){var o=r(93382),e=Array.prototype.splice;t.exports=function(t){var n=this.__data__,r=o(n,t);return!(r<0)&&(r==n.length-1?n.pop():e.call(n,r,1),--this.size,!0)}},66165:function(t,n,r){var o=r(93382);t.exports=function(t){var n=this.__data__,r=o(n,t);return r<0?void 0:n[r][1]}},71873:function(t,n,r){var o=r(93382);t.exports=function(t){return o(this.__data__,t)>-1}},52556:function(t,n,r){var o=r(93382);t.exports=function(t,n){var r=this.__data__,e=o(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this}},39448:function(t,n,r){var o=r(96586),e=r(36301),i=r(44538);t.exports=function(){this.size=0,this.__data__={hash:new o,map:new(i||e),string:new o}}},7738:function(t,n,r){var o=r(95899);t.exports=function(t){var n=o(this,t).delete(t);return this.size-=+!!n,n}},66575:function(t,n,r){var o=r(95899);t.exports=function(t){return o(this,t).get(t)}},7238:function(t,n,r){var o=r(95899);t.exports=function(t){return o(this,t).has(t)}},38738:function(t,n,r){var o=r(95899);t.exports=function(t,n){var r=o(this,t),e=r.size;return r.set(t,n),this.size+=+(r.size!=e),this}},35718:function(t,n,r){var o=r(81822)(Object,"create");t.exports=o},21586:function(t){t.exports=function(t){var n=[];if(null!=t)for(var r in Object(t))n.push(r);return n}},18125:function(t,n,r){t=r.nmd(t);var o=r(39120),e=n&&!n.nodeType&&n,i=e&&t&&!t.nodeType&&t,u=i&&i.exports===e&&o.process,c=function(){try{var t=i&&i.require&&i.require("util").types;if(t)return t;return u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=c},21258:function(t){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},58023:function(t){t.exports=function(t,n){return function(r){return t(n(r))}}},11871:function(t,n,r){var o=r(79349),e=Math.max;t.exports=function(t,n,r){return n=e(void 0===n?t.length-1:n,0),function(){for(var i=arguments,u=-1,c=e(i.length-n,0),f=Array(c);++u<c;)f[u]=i[n+u];u=-1;for(var a=Array(n+1);++u<n;)a[u]=i[u];return a[n]=r(f),o(t,this,a)}}},77400:function(t,n,r){var o=r(39120),e="object"==typeof self&&self&&self.Object===Object&&self,i=o||e||Function("return this")();t.exports=i},97494:function(t){t.exports=function(t,n){if(("constructor"!==n||"function"!=typeof t[n])&&"__proto__"!=n)return t[n]}},63132:function(t,n,r){var o=r(54459),e=r(49591)(o);t.exports=e},49591:function(t){var n=Date.now;t.exports=function(t){var r=0,o=0;return function(){var e=n(),i=16-(e-o);if(o=e,i>0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}},7354:function(t,n,r){var o=r(36301);t.exports=function(){this.__data__=new o,this.size=0}},5863:function(t){t.exports=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r}},12367:function(t){t.exports=function(t){return this.__data__.get(t)}},90748:function(t){t.exports=function(t){return this.__data__.has(t)}},97569:function(t,n,r){var o=r(36301),e=r(44538),i=r(74554);t.exports=function(t,n){var r=this.__data__;if(r instanceof o){var u=r.__data__;if(!e||u.length<199)return u.push([t,n]),this.size=++r.size,this;r=this.__data__=new i(u)}return r.set(t,n),this.size=r.size,this}},76532:function(t){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},551:function(t){t.exports=function(t){return function(){return t}}},85638:function(t){t.exports=function(t,n){return t===n||t!=t&&n!=n}},31137:function(t){t.exports=function(t){return t}},2900:function(t,n,r){var o=r(55829),e=r(92360),i=Object.prototype,u=i.hasOwnProperty,c=i.propertyIsEnumerable,f=o(function(){return arguments}())?o:function(t){return e(t)&&u.call(t,"callee")&&!c.call(t,"callee")};t.exports=f},19785:function(t){var n=Array.isArray;t.exports=n},80068:function(t,n,r){var o=r(28338),e=r(84194);t.exports=function(t){return null!=t&&e(t.length)&&!o(t)}},36468:function(t,n,r){var o=r(80068),e=r(92360);t.exports=function(t){return e(t)&&o(t)}},43854:function(t,n,r){t=r.nmd(t);var o=r(77400),e=r(57714),i=n&&!n.nodeType&&n,u=i&&t&&!t.nodeType&&t,c=u&&u.exports===i?o.Buffer:void 0,f=c?c.isBuffer:void 0;t.exports=f||e},28338:function(t,n,r){var o=r(99736),e=r(11611);t.exports=function(t){if(!e(t))return!1;var n=o(t);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}},84194:function(t){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=0x1fffffffffffff}},11611:function(t){t.exports=function(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}},92360:function(t){t.exports=function(t){return null!=t&&"object"==typeof t}},40861:function(t,n,r){var o=r(99736),e=r(2173),i=r(92360),u=Object.prototype,c=Function.prototype.toString,f=u.hasOwnProperty,a=c.call(Object);t.exports=function(t){if(!i(t)||"[object Object]"!=o(t))return!1;var n=e(t);if(null===n)return!0;var r=f.call(n,"constructor")&&n.constructor;return"function"==typeof r&&r instanceof r&&c.call(r)==a}},48519:function(t,n,r){var o=r(26972),e=r(39334),i=r(18125),u=i&&i.isTypedArray,c=u?e(u):o;t.exports=c},53893:function(t,n,r){var o=r(98213),e=r(59464),i=r(80068);t.exports=function(t){return i(t)?o(t,!0):e(t)}},15409:function(t,n,r){var o=r(40015),e=r(7270)(function(t,n,r){o(t,n,r)});t.exports=e},57714:function(t){t.exports=function(){return!1}},89328:function(t,n,r){var o=r(35159),e=r(53893);t.exports=function(t){return o(t,e(t))}}}]);