From 24c1285c4a86fb0270c30d3beb92c1f77a6e0712 Mon Sep 17 00:00:00 2001 From: Phillip Kelley-Dotson Date: Mon, 17 Aug 2020 17:29:54 -0700 Subject: [PATCH] chore(legacy-deckgl): add deckgl control panels to deckgl monorepo (#17) * add deckgl control panels to deckgl monorepo * fix lint errors * readd chart-controls as dependency? * restructure deck layer folder files and convert chart to emotions * move peers back to depends * move dependencies * add lock file * fix for eslint bug? * update breaking package * Update index.js --- .../superset-ui-plugins-deckgl/package.json | 9 +- .../package.json | 19 +- .../src/DeckGLContainer.jsx | 10 +- .../src/layers/Arc/controlPanel.js | 137 +++ .../src/layers/Arc/index.js | 2 + .../src/layers/Geojson/controlPanel.js | 97 +++ .../src/layers/Geojson/index.js | 2 + .../src/layers/Grid/controlPanel.js | 62 ++ .../src/layers/Grid/index.js | 2 + .../src/layers/Hex/controlPanel.js | 97 +++ .../src/layers/Hex/index.js | 2 + .../src/layers/Path/controlPanel.js | 69 ++ .../src/layers/Path/index.js | 2 + .../src/layers/Polygon/controlPanel.js | 157 ++++ .../src/layers/Polygon/index.js | 2 + .../src/layers/Scatter/controlPanel.js | 151 ++++ .../src/layers/Scatter/index.js | 2 + .../src/layers/Screengrid/controlPanel.js | 67 ++ .../src/layers/Screengrid/index.js | 2 + .../src/utilities/Shared_DeckGL.jsx | 403 +++++++++ .../src/utilities/controls.jsx | 52 ++ .../src/utilities/utils.js | 88 ++ .../yarn.lock | 819 ++++++++++++++++++ 23 files changed, 2242 insertions(+), 11 deletions(-) create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/controlPanel.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/controls.jsx create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/utils.js create mode 100644 superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/yarn.lock diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/package.json b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/package.json index db3ffcb2949c..d86b003fc244 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/package.json +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/package.json @@ -47,7 +47,7 @@ "@airbnb/config-typescript": "^2.1.2", "@airbnb/nimbus": "^2.1.3", "@superset-ui/commit-config": "^0.0.9", - "@superset-ui/superset-ui": "^0.13.9", + "@superset-ui/superset-ui": "^0.14.9", "@types/enzyme": "^3.10.3", "@types/jest": "^25.1.1", "@types/jsdom": "^12.2.4", @@ -119,7 +119,12 @@ "rules": { "react/jsx-no-literals": "off", "prefer-exponentiation-operator": "off", - "@typescript-eslint/no-explicit-any": ["warn", { "fixToUnknown": false }] + "@typescript-eslint/no-explicit-any": [ + "warn", + { + "fixToUnknown": false + } + ] } } ] diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/package.json b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/package.json index 71becb92b9de..db43bccdea37 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/package.json +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/package.json @@ -46,14 +46,17 @@ "xss": "^1.0.6" }, "peerDependencies": { - "@superset-ui/chart": "^0.12.0 || ^0.13.3", - "@superset-ui/color": "^0.12.0 || ^0.13.3", - "@superset-ui/connection": "^0.12.0 || ^0.13.3", - "@superset-ui/core": "^0.12.0 || ^0.13.3", - "@superset-ui/dimension": "^0.12.0 || ^0.13.3", - "@superset-ui/number-format": "^0.12.0 || ^0.13.3", - "@superset-ui/time-format": "^0.12.0 || ^0.13.3", - "@superset-ui/translation": "^0.12.0 || ^0.13.3", + "@superset-ui/chart": "^0.14.9", + "@superset-ui/chart-controls": "^0.14.9", + "@superset-ui/color": "^0.14.9", + "@superset-ui/connection": "^0.14.9", + "@superset-ui/core": "^0.14.9", + "@superset-ui/dimension": "^0.14.9", + "@superset-ui/number-format": "^0.14.9", + "@superset-ui/style": "^0.14.9", + "@superset-ui/time-format": "^0.14.9", + "@superset-ui/translation": "^0.14.9", + "@superset-ui/validator": "^0.14.9", "react": "^15 || ^16" } } diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/DeckGLContainer.jsx b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/DeckGLContainer.jsx index 94ef8cc7c13e..6c974400fa0f 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/DeckGLContainer.jsx +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/DeckGLContainer.jsx @@ -24,6 +24,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { StaticMap } from 'react-map-gl'; import DeckGL from 'deck.gl'; +import styled from '@superset-ui/style'; // eslint-disable-next-line import/extensions import Tooltip from './components/Tooltip'; import 'mapbox-gl/dist/mapbox-gl.css'; @@ -49,7 +50,7 @@ const defaultProps = { bottomMargin: 0, }; -export default class DeckGLContainer extends React.Component { +class DeckGLContainer extends React.Component { constructor(props) { super(props); this.tick = this.tick.bind(this); @@ -129,3 +130,10 @@ export default class DeckGLContainer extends React.Component { DeckGLContainer.propTypes = propTypes; DeckGLContainer.defaultProps = defaultProps; + +export default styled(DeckGLContainer)` + .deckgl-tooltip > div { + overflow: hidden; + text-overflow: ellipsis; + } +`; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/controlPanel.js new file mode 100644 index 000000000000..93b7a417bf4f --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/controlPanel.js @@ -0,0 +1,137 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty, legacyValidateInteger } from '@superset-ui/validator'; +import timeGrainSqlaAnimationOverrides, { + columnChoices, + PRIMARY_COLOR, +} from '../../utilities/controls'; +import { formatSelectOptions } from '../../utilities/utils'; +import { + filterNulls, + autozoom, + dimension, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + legendFormat, + legendPosition, + viewport, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + [ + { + name: 'start_spatial', + config: { + type: 'SpatialControl', + label: t('Start Longitude & Latitude'), + validators: [validateNonEmpty], + description: t('Point to your spatial columns'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + }, + }, + { + name: 'end_spatial', + config: { + type: 'SpatialControl', + label: t('End Longitude & Latitude'), + validators: [validateNonEmpty], + description: t('Point to your spatial columns'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + }, + }, + ], + ['row_limit', filterNulls], + ['adhoc_filters'], + ], + }, + { + label: t('Map'), + controlSetRows: [ + [mapboxStyle, viewport], + [autozoom, null], + ], + }, + { + label: t('Arc'), + controlSetRows: [ + [ + 'color_picker', + { + name: 'target_color_picker', + config: { + label: t('Target Color'), + description: t('Color of the target location'), + type: 'ColorPickerControl', + default: PRIMARY_COLOR, + renderTrigger: true, + }, + }, + ], + [ + { + ...dimension, + label: t('Categorical Color'), + description: t('Pick a dimension from which categorical colors are defined'), + }, + 'color_scheme', + 'label_colors', + ], + [ + { + name: 'stroke_width', + color: { + type: 'SelectControl', + freeForm: true, + label: t('Stroke Width'), + validators: [legacyValidateInteger], + default: null, + renderTrigger: true, + choices: formatSelectOptions([1, 2, 3, 4, 5]), + }, + }, + legendPosition, + ], + [legendFormat, null], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], + controlOverrides: { + size: { + validators: [], + }, + time_grain_sqla: timeGrainSqlaAnimationOverrides, + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/index.js index 5c527227fc3f..d46296d9d11b 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Arc/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class ArcChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Arc'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/controlPanel.js new file mode 100644 index 000000000000..f31a4431b739 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/controlPanel.js @@ -0,0 +1,97 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty, legacyValidateInteger } from '@superset-ui/validator'; +import { formatSelectOptions } from '../../utilities/utils'; +import { columnChoices } from '../../utilities/controls'; +import { + filterNulls, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + fillColorPicker, + strokeColorPicker, + filled, + stroked, + extruded, + viewport, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + [ + { + name: 'geojson', + config: { + type: 'SelectControl', + label: t('GeoJson Column'), + validators: [validateNonEmpty], + description: t('Select the geojson column'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + }, + }, + null, + ], + ['row_limit', filterNulls], + ['adhoc_filters'], + ], + }, + { + label: t('Map'), + controlSetRows: [ + [mapboxStyle, viewport], + // TODO [autozoom, null], // import { autozoom } from './Shared_DeckGL' + ], + }, + { + label: t('GeoJson Settings'), + controlSetRows: [ + [fillColorPicker, strokeColorPicker], + [filled, stroked], + [extruded, null], + [ + { + name: 'point_radius_scale', + config: { + type: 'SelectControl', + freeForm: true, + label: t('Point Radius Scale'), + validators: [legacyValidateInteger], + default: null, + choices: formatSelectOptions([0, 100, 200, 300, 500]), + }, + }, + null, + ], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/index.js index d8dd156e66e1..de1bc44262c6 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Geojson/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class GeojsonChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Geojson'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/controlPanel.js new file mode 100644 index 000000000000..aa0447be75f7 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/controlPanel.js @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty } from '@superset-ui/validator'; +import { + filterNulls, + autozoom, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + extruded, + gridSize, + viewport, + spatial, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [[spatial, 'size'], ['row_limit', filterNulls], ['adhoc_filters']], + }, + { + label: t('Map'), + controlSetRows: [ + [mapboxStyle, viewport], + ['color_picker', autozoom], + [gridSize, extruded], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], + controlOverrides: { + size: { + label: t('Height'), + description: t('Metric used to control height'), + validators: [validateNonEmpty], + }, + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/index.js index 631c0d5c779a..3571c05ad88a 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Grid/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class GridChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Grid'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/controlPanel.js new file mode 100644 index 000000000000..f31a4431b739 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/controlPanel.js @@ -0,0 +1,97 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty, legacyValidateInteger } from '@superset-ui/validator'; +import { formatSelectOptions } from '../../utilities/utils'; +import { columnChoices } from '../../utilities/controls'; +import { + filterNulls, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + fillColorPicker, + strokeColorPicker, + filled, + stroked, + extruded, + viewport, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + [ + { + name: 'geojson', + config: { + type: 'SelectControl', + label: t('GeoJson Column'), + validators: [validateNonEmpty], + description: t('Select the geojson column'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + }, + }, + null, + ], + ['row_limit', filterNulls], + ['adhoc_filters'], + ], + }, + { + label: t('Map'), + controlSetRows: [ + [mapboxStyle, viewport], + // TODO [autozoom, null], // import { autozoom } from './Shared_DeckGL' + ], + }, + { + label: t('GeoJson Settings'), + controlSetRows: [ + [fillColorPicker, strokeColorPicker], + [filled, stroked], + [extruded, null], + [ + { + name: 'point_radius_scale', + config: { + type: 'SelectControl', + freeForm: true, + label: t('Point Radius Scale'), + validators: [legacyValidateInteger], + default: null, + choices: formatSelectOptions([0, 100, 200, 300, 500]), + }, + }, + null, + ], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/index.js index 14ab40375e90..759eb6a813d2 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Hex/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class HexChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Hex'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/controlPanel.js new file mode 100644 index 000000000000..430153718194 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/controlPanel.js @@ -0,0 +1,69 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { + filterNulls, + autozoom, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + lineColumn, + viewport, + lineWidth, + lineType, + reverseLongLat, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + [ + lineColumn, + { + ...lineType, + choices: [ + ['polyline', 'Polyline'], + ['json', 'JSON'], + ], + }, + ], + ['row_limit', filterNulls], + ['adhoc_filters'], + ], + }, + { + label: t('Map'), + expanded: true, + controlSetRows: [ + [mapboxStyle, viewport], + ['color_picker', lineWidth], + [reverseLongLat, autozoom], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/index.js index 0dce4bebedf6..b2b0a7f802f0 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Path/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class PathChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Path'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/controlPanel.js new file mode 100644 index 000000000000..3aafae56d801 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/controlPanel.js @@ -0,0 +1,157 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import timeGrainSqlaAnimationOverrides from '../../utilities/controls'; +import { formatSelectOptions } from '../../utilities/utils'; +import { + filterNulls, + autozoom, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + legendFormat, + legendPosition, + lineColumn, + fillColorPicker, + strokeColorPicker, + filled, + stroked, + extruded, + viewport, + pointRadiusFixed, + multiplier, + lineWidth, + lineType, + reverseLongLat, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + [ + { ...lineColumn, label: t('Polygon Column') }, + { ...lineType, label: t('Polygon Encoding') }, + ], + ['adhoc_filters'], + ['metric', { ...pointRadiusFixed, label: t('Elevation') }], + ['row_limit', null], + [reverseLongLat, filterNulls], + ], + }, + { + label: t('Map'), + expanded: true, + controlSetRows: [ + [mapboxStyle, viewport], + [autozoom, null], + ], + }, + { + label: t('Polygon Settings'), + expanded: true, + controlSetRows: [ + [fillColorPicker, strokeColorPicker], + [filled, stroked], + [extruded, multiplier], + [lineWidth, null], + [ + 'linear_color_scheme', + { + name: 'opacity', + config: { + type: 'SliderControl', + label: t('Opacity'), + default: 80, + step: 1, + min: 0, + max: 100, + renderTrigger: true, + description: t('Opacity, expects values between 0 and 100'), + }, + }, + ], + [ + { + name: 'num_buckets', + config: { + type: 'SelectControl', + multi: false, + freeForm: true, + label: t('Number of buckets to group data'), + default: 5, + choices: formatSelectOptions([2, 3, 5, 10]), + description: t('How many buckets should the data be grouped in.'), + renderTrigger: true, + }, + }, + { + name: 'break_points', + config: { + type: 'SelectControl', + multi: true, + freeForm: true, + label: t('Bucket break points'), + choices: formatSelectOptions([]), + description: t('List of n+1 values for bucketing metric into n buckets.'), + renderTrigger: true, + }, + }, + ], + [ + { + name: 'table_filter', + config: { + type: 'CheckboxControl', + label: t('Emit Filter Events'), + renderTrigger: true, + default: false, + description: t('Whether to apply filter when items are clicked'), + }, + }, + { + name: 'toggle_polygons', + config: { + type: 'CheckboxControl', + label: t('Multiple filtering'), + renderTrigger: true, + default: true, + description: t('Allow sending multiple polygons as a filter event'), + }, + }, + ], + [legendPosition, legendFormat], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], + controlOverrides: { + metric: { + validators: [], + }, + time_grain_sqla: timeGrainSqlaAnimationOverrides, + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/index.js index a99430e69e64..ec0793dbf9cc 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Polygon/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class PolygonChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Polygon'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.js new file mode 100644 index 000000000000..8d2bc51303f0 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.js @@ -0,0 +1,151 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty } from '@superset-ui/validator'; +import timeGrainSqlaAnimationOverrides from '../../utilities/controls'; +import { + filterNulls, + autozoom, + dimension, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + legendFormat, + legendPosition, + viewport, + spatial, + pointRadiusFixed, + multiplier, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + onInit: controlState => ({ + ...controlState, + time_grain_sqla: { + ...controlState.time_grain_sqla, + value: null, + }, + granularity: { + ...controlState.granularity, + value: null, + }, + }), + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [[spatial, null], ['row_limit', filterNulls], ['adhoc_filters']], + }, + { + label: t('Map'), + expanded: true, + controlSetRows: [ + [mapboxStyle, viewport], + [autozoom, null], + ], + }, + { + label: t('Point Size'), + controlSetRows: [ + [ + pointRadiusFixed, + { + name: 'point_unit', + config: { + type: 'SelectControl', + label: t('Point Unit'), + default: 'square_m', + clearable: false, + choices: [ + ['square_m', 'Square meters'], + ['square_km', 'Square kilometers'], + ['square_miles', 'Square miles'], + ['radius_m', 'Radius in meters'], + ['radius_km', 'Radius in kilometers'], + ['radius_miles', 'Radius in miles'], + ], + description: t('The unit of measure for the specified point radius'), + }, + }, + ], + [ + { + name: 'min_radius', + config: { + type: 'TextControl', + label: t('Minimum Radius'), + isFloat: true, + validators: [validateNonEmpty], + renderTrigger: true, + default: 2, + description: t( + 'Minimum radius size of the circle, in pixels. As the zoom level changes, this ' + + 'insures that the circle respects this minimum radius.', + ), + }, + }, + { + name: 'max_radius', + config: { + type: 'TextControl', + label: t('Maximum Radius'), + isFloat: true, + validators: [validateNonEmpty], + renderTrigger: true, + default: 250, + description: t( + 'Maxium radius size of the circle, in pixels. As the zoom level changes, this ' + + 'insures that the circle respects this maximum radius.', + ), + }, + }, + ], + [multiplier, null], + ], + }, + { + label: t('Point Color'), + controlSetRows: [ + ['color_picker', legendPosition], + [null, legendFormat], + [ + { + ...dimension, + label: t('Categorical Color'), + description: t('Pick a dimension from which categorical colors are defined'), + }, + 'color_scheme', + 'label_colors', + ], + ], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], + controlOverrides: { + size: { + validators: [], + }, + time_grain_sqla: timeGrainSqlaAnimationOverrides, + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/index.js index 6e574d1437c8..f3f7ec30af82 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Scatter/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class ScatterChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Scatter'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/controlPanel.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/controlPanel.js new file mode 100644 index 000000000000..2747313a6526 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/controlPanel.js @@ -0,0 +1,67 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { t } from '@superset-ui/translation'; +import { validateNonEmpty } from '@superset-ui/validator'; +import timeGrainSqlaAnimationOverrides from '../../utilities/controls'; +import { + filterNulls, + autozoom, + jsColumns, + jsDataMutator, + jsTooltip, + jsOnclickHref, + gridSize, + viewport, + spatial, + mapboxStyle, +} from '../../utilities/Shared_DeckGL'; + +export default { + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [[spatial, 'size'], ['row_limit', filterNulls], ['adhoc_filters']], + }, + { + label: t('Map'), + controlSetRows: [ + [mapboxStyle, viewport], + [autozoom, null], + ], + }, + { + label: t('Grid'), + expanded: true, + controlSetRows: [[gridSize, 'color_picker']], + }, + { + label: t('Advanced'), + controlSetRows: [[jsColumns], [jsDataMutator], [jsTooltip], [jsOnclickHref]], + }, + ], + controlOverrides: { + size: { + label: t('Weight'), + description: t("Metric used as a weight for the grid's coloring"), + validators: [validateNonEmpty], + }, + time_grain_sqla: timeGrainSqlaAnimationOverrides, + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/index.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/index.js index 50e95638d826..5c1848fb091f 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/index.js +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/layers/Screengrid/index.js @@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation'; import { ChartMetadata, ChartPlugin } from '@superset-ui/chart'; import thumbnail from './images/thumbnail.png'; import transformProps from '../../transformProps'; +import controlPanel from './controlPanel'; const metadata = new ChartMetadata({ credits: ['https://uber.github.io/deck.gl'], @@ -33,6 +34,7 @@ export default class ScreengridChartPlugin extends ChartPlugin { constructor() { super({ loadChart: () => import('./Screengrid'), + controlPanel, metadata, transformProps, }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx new file mode 100644 index 000000000000..2ca1714ffe75 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx @@ -0,0 +1,403 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// These are control configurations that are shared ONLY within the DeckGL viz plugin repo. + +import React from 'react'; +import { t } from '@superset-ui/translation'; +import { validateNonEmpty } from '@superset-ui/validator'; +import { ColumnOption } from '@superset-ui/chart-controls'; +import { D3_FORMAT_OPTIONS, columnChoices, PRIMARY_COLOR } from './controls'; + +const timeColumnOption = { + verbose_name: 'Time', + column_name: '__timestamp', + // eslint-disable-next-line no-useless-concat + description: t('A reference to the [Time] configuration, taking granularity into ' + 'account'), +}; + +const DEFAULT_VIEWPORT = { + longitude: 6.85236157047845, + latitude: 31.222656842808707, + zoom: 1, + bearing: 0, + pitch: 0, +}; + +const groupByControl = { + type: 'SelectControl', + multi: true, + freeForm: true, + label: t('Group by'), + default: [], + includeTime: false, + description: t('One or many controls to group by'), + optionRenderer: c => , + valueRenderer: c => , + valueKey: 'column_name', + allowAll: true, + filterOption: (opt, text) => + (opt.column_name && opt.column_name.toLowerCase().includes(text.toLowerCase())) || + (opt.verbose_name && opt.verbose_name.toLowerCase().includes(text.toLowerCase())), + promptTextCreator: label => label, + mapStateToProps: (state, control) => { + const newState = {}; + if (state.datasource) { + newState.options = state.datasource.columns.filter(c => c.groupby); + if (control && control.includeTime) { + newState.options.push(timeColumnOption); + } + } + return newState; + }, + commaChoosesOption: false, +}; + +const sandboxUrl = + 'https://github.com/apache/incubator-superset/' + + 'blob/master/superset-frontend/src/modules/sandbox.js'; +const jsFunctionInfo = ( +
+ {t( + 'For more information about objects are in context in the scope of this function, refer to the', + )} + {t(" source code of Superset's sandboxed parser")}.. +
+); + +function jsFunctionControl(label, description, extraDescr = null, height = 100, defaultText = '') { + return { + type: 'TextAreaControl', + language: 'javascript', + label, + description, + height, + default: defaultText, + aboveEditorSection: ( +
+

{description}

+

{jsFunctionInfo}

+ {extraDescr} +
+ ), + mapStateToProps: state => ({ + // eslint-disable-next-line no-negated-condition + warning: !state.common.conf.ENABLE_JAVASCRIPT_CONTROLS + ? t('This functionality is disabled in your environment for security reasons.') + : null, + readOnly: !state.common.conf.ENABLE_JAVASCRIPT_CONTROLS, + }), + }; +} + +export const filterNulls = { + name: 'filter_nulls', + config: { + type: 'CheckboxControl', + label: t('Ignore null locations'), + default: true, + description: t('Whether to ignore locations that are null'), + }, +}; + +export const autozoom = { + name: 'autozoom', + config: { + type: 'CheckboxControl', + label: t('Auto Zoom'), + default: true, + renderTrigger: true, + description: t('When checked, the map will zoom to your data after each query'), + }, +}; + +export const dimension = { + name: 'dimension', + config: { + ...groupByControl, + label: t('Dimension'), + description: t('Select a dimension'), + multi: false, + default: null, + }, +}; + +export const jsColumns = { + name: 'js_columns', + config: { + ...groupByControl, + label: t('Extra data for JS'), + default: [], + description: t('List of extra columns made available in Javascript functions'), + }, +}; + +export const jsDataMutator = { + name: 'js_data_mutator', + config: jsFunctionControl( + t('Javascript data interceptor'), + t( + 'Define a javascript function that receives the data array used in the visualization ' + + 'and is expected to return a modified version of that array. This can be used ' + + 'to alter properties of the data, filter, or enrich the array.', + ), + ), +}; + +export const jsTooltip = { + name: 'js_tooltip', + config: jsFunctionControl( + t('Javascript tooltip generator'), + t('Define a function that receives the input and outputs the content for a tooltip'), + ), +}; + +export const jsOnclickHref = { + name: 'js_onclick_href', + config: jsFunctionControl( + t('Javascript onClick href'), + t('Define a function that returns a URL to navigate to when user clicks'), + ), +}; + +export const legendFormat = { + name: 'legend_format', + config: { + label: t('Legend Format'), + description: t('Choose the format for legend values'), + type: 'SelectControl', + clearable: false, + default: D3_FORMAT_OPTIONS[0], + choices: D3_FORMAT_OPTIONS, + renderTrigger: true, + }, +}; + +export const legendPosition = { + name: 'legend_position', + config: { + label: t('Legend Position'), + description: t('Choose the position of the legend'), + type: 'SelectControl', + clearable: false, + default: 'tr', + choices: [ + [null, 'None'], + ['tl', 'Top left'], + ['tr', 'Top right'], + ['bl', 'Bottom left'], + ['br', 'Bottom right'], + ], + renderTrigger: true, + }, +}; + +export const lineColumn = { + name: 'line_column', + config: { + type: 'SelectControl', + label: t('Lines column'), + default: null, + description: t('The database columns that contains lines information'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + validators: [validateNonEmpty], + }, +}; + +export const lineWidth = { + name: 'line_width', + config: { + type: 'TextControl', + label: t('Line width'), + renderTrigger: true, + isInt: true, + default: 10, + description: t('The width of the lines'), + }, +}; + +export const fillColorPicker = { + name: 'fill_color_picker', + config: { + label: t('Fill Color'), + description: t( + ' Set the opacity to 0 if you do not want to override the color specified in the GeoJSON', + ), + type: 'ColorPickerControl', + default: PRIMARY_COLOR, + renderTrigger: true, + }, +}; + +export const strokeColorPicker = { + name: 'stroke_color_picker', + config: { + label: t('Stroke Color'), + description: t( + ' Set the opacity to 0 if you do not want to override the color specified in the GeoJSON', + ), + type: 'ColorPickerControl', + default: PRIMARY_COLOR, + renderTrigger: true, + }, +}; + +export const filled = { + name: 'filled', + config: { + type: 'CheckboxControl', + label: t('Filled'), + renderTrigger: true, + description: t('Whether to fill the objects'), + default: true, + }, +}; + +export const stroked = { + name: 'stroked', + config: { + type: 'CheckboxControl', + label: t('Stroked'), + renderTrigger: true, + description: t('Whether to display the stroke'), + default: false, + }, +}; + +export const extruded = { + name: 'extruded', + config: { + type: 'CheckboxControl', + label: t('Extruded'), + renderTrigger: true, + default: true, + description: 'Whether to make the grid 3D', + }, +}; + +export const gridSize = { + name: 'grid_size', + config: { + type: 'TextControl', + label: t('Grid Size'), + renderTrigger: true, + default: 20, + isInt: true, + description: t('Defines the grid size in pixels'), + }, +}; + +export const viewport = { + name: 'viewport', + config: { + type: 'ViewportControl', + label: t('Viewport'), + renderTrigger: false, + description: t('Parameters related to the view and perspective on the map'), + // default is whole world mostly centered + default: DEFAULT_VIEWPORT, + // Viewport changes shouldn't prompt user to re-run query + dontRefreshOnChange: true, + }, +}; + +export const spatial = { + name: 'spatial', + config: { + type: 'SpatialControl', + label: t('Longitude & Latitude'), + validators: [validateNonEmpty], + description: t('Point to your spatial columns'), + mapStateToProps: state => ({ + choices: columnChoices(state.datasource), + }), + }, +}; + +export const pointRadiusFixed = { + name: 'point_radius_fixed', + config: { + type: 'FixedOrMetricControl', + label: t('Point Size'), + default: { type: 'fix', value: 1000 }, + description: t('Fixed point radius'), + mapStateToProps: state => ({ + datasource: state.datasource, + }), + }, +}; + +export const multiplier = { + name: 'multiplier', + config: { + type: 'TextControl', + label: t('Multiplier'), + isFloat: true, + renderTrigger: true, + default: 1, + description: t('Factor to multiply the metric by'), + }, +}; + +export const lineType = { + name: 'line_type', + config: { + type: 'SelectControl', + label: t('Lines encoding'), + clearable: false, + default: 'json', + description: t('The encoding format of the lines'), + choices: [ + ['polyline', 'Polyline'], + ['json', 'JSON'], + ['geohash', 'geohash (square)'], + ], + }, +}; + +export const reverseLongLat = { + name: 'reverse_long_lat', + config: { + type: 'CheckboxControl', + label: t('Reverse Lat & Long'), + default: false, + }, +}; + +export const mapboxStyle = { + name: 'mapbox_style', + config: { + type: 'SelectControl', + label: t('Map Style'), + clearable: false, + renderTrigger: true, + choices: [ + ['mapbox://styles/mapbox/streets-v9', 'Streets'], + ['mapbox://styles/mapbox/dark-v9', 'Dark'], + ['mapbox://styles/mapbox/light-v9', 'Light'], + ['mapbox://styles/mapbox/satellite-streets-v9', 'Satellite Streets'], + ['mapbox://styles/mapbox/satellite-v9', 'Satellite'], + ['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'], + ], + default: 'mapbox://styles/mapbox/light-v9', + description: t('Base layer map style'), + }, +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/controls.jsx b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/controls.jsx new file mode 100644 index 000000000000..9cab4af54969 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/controls.jsx @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +export function columnChoices(datasource) { + if (datasource && datasource.columns) { + return datasource.columns + .map(col => [col.column_name, col.verbose_name || col.column_name]) + .sort((opt1, opt2) => (opt1[1].toLowerCase() > opt2[1].toLowerCase() ? 1 : -1)); + } + return []; +} + +// input choices & options +export const D3_FORMAT_OPTIONS = [ + ['SMART_NUMBER', 'Adaptative formating'], + ['~g', 'Original value'], + [',d', ',d (12345.432 => 12,345)'], + ['.1s', '.1s (12345.432 => 10k)'], + ['.3s', '.3s (12345.432 => 12.3k)'], + [',.1%', ',.1% (12345.432 => 1,234,543.2%)'], + ['.3%', '.3% (12345.432 => 1234543.200%)'], + ['.4r', '.4r (12345.432 => 12350)'], + [',.3f', ',.3f (12345.432 => 12,345.432)'], + ['+,', '+, (12345.432 => +12,345.432)'], + ['$,.2f', '$,.2f (12345.432 => $12,345.43)'], + ['DURATION', 'Duration in ms (66000 => 1m 6s)'], + ['DURATION_SUB', 'Duration in ms (100.40008 => 100ms 400µs 80ns)'], +]; + +export const PRIMARY_COLOR = { r: 0, g: 122, b: 135, a: 1 }; + +export default { + default: null, + mapStateToProps: state => ({ + choices: state.datasource ? state.datasource.time_grain_sqla.filter(o => o[0] !== null) : null, + }), +}; diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/utils.js b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/utils.js new file mode 100644 index 000000000000..1fa8a3288c44 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/src/utilities/utils.js @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* eslint camelcase: 0 */ +import $ from 'jquery'; + +/** + * Sets the body and title content of a modal, and shows it. Assumes HTML for modal exists and that + * it handles closing (i.e., works with bootstrap) + * + * @param {object} options object of the form + * { + * title: {string}, + * body: {string}, + * modalSelector: {string, default: '.misc-modal' }, + * titleSelector: {string, default: '.misc-modal .modal-title' }, + * bodySelector: {string, default: '.misc-modal .modal-body' }, + * } + */ +export function showModal(options) { + /* eslint no-param-reassign: 0 */ + options.modalSelector = options.modalSelector || '.misc-modal'; + options.titleSelector = options.titleSelector || '.misc-modal .modal-title'; + options.bodySelector = options.bodySelector || '.misc-modal .modal-body'; + $(options.titleSelector).html(options.title || ''); + $(options.bodySelector).html(options.body || ''); + $(options.modalSelector).modal('show'); +} + +export function formatSelectOptionsForRange(start, end) { + // outputs array of arrays + // formatSelectOptionsForRange(1, 5) + // returns [[1,1], [2,2], [3,3], [4,4], [5,5]] + const options = []; + // eslint-disable-next-line no-plusplus + for (let i = start; i <= end; i++) { + options.push([i, i.toString()]); + } + return options; +} + +export function formatSelectOptions(options) { + return options.map(opt => [opt, opt.toString()]); +} + +export function getDatasourceParameter(datasourceId, datasourceType) { + return `${datasourceId}__${datasourceType}`; +} + +export function getParam(name) { + /* eslint no-useless-escape: 0 */ + const formattedName = name.replace(/\[/, '\\[').replace(/]/, '\\]'); + const regex = new RegExp(`[\\?&]${formattedName}=([^&#]*)`); + // eslint-disable-next-line no-restricted-globals + const results = regex.exec(location.search); + return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); +} + +export function mainMetric(savedMetrics) { + // Using 'count' as default metric if it exists, otherwise using whatever one shows up first + let metric; + if (savedMetrics && savedMetrics.length > 0) { + savedMetrics.forEach(m => { + if (m.metric_name === 'count') { + metric = 'count'; + } + }); + if (!metric) { + metric = savedMetrics[0].metric_name; + } + } + return metric; +} diff --git a/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/yarn.lock b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/yarn.lock new file mode 100644 index 000000000000..01b0902ca1f9 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui-plugins-deckgl/packages/superset-ui-legacy-preset-chart-deckgl/yarn.lock @@ -0,0 +1,819 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.3.1": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== + dependencies: + regenerator-runtime "^0.13.4" + +"@deck.gl/aggregation-layers@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/aggregation-layers/-/aggregation-layers-7.1.11.tgz#6b66f81a9ff0b120f5b8997c1eee38bf40e106ba" + integrity sha512-CHsr+UJhf06Mqb/q60iP7ftHQv3ftHUhJbVO4550PRo+QMFFhHfhxo53gQDDgrQ3stxpAcLT3lXRSNghMoU34g== + dependencies: + d3-hexbin "^0.2.1" + +"@deck.gl/core@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-7.1.11.tgz#b5da356053b28767b95d16c29afc1010e21f4e89" + integrity sha512-jUi1CcsnF5KPL2sv7Z0H3x+8amee5csqliZXGbXEBYox1l8naC4PhHg5jTgLaB0ZOHfVDsldPwGdPC+Mi4jP/Q== + dependencies: + "@luma.gl/core" "^7.1.0" + gl-matrix "^3.0.0" + math.gl "^2.3.0" + mjolnir.js "^2.1.2" + probe.gl "^3.0.1" + seer "^0.2.4" + viewport-mercator-project "^6.1.0" + +"@deck.gl/geo-layers@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/geo-layers/-/geo-layers-7.1.11.tgz#d574a607af10d793194f6a9ee3ce440488da422a" + integrity sha512-gIJ1K98IFSZ12hB+zHyQC+9pMncb9BKVhJTA7pjUpxwcmEkkroqet9zkYQQMeSInK0a67BR9GXjebb/N0U04qA== + dependencies: + h3-js "^3.4.3" + long "^3.2.0" + s2-geometry "^1.2.10" + +"@deck.gl/google-maps@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/google-maps/-/google-maps-7.1.11.tgz#d85cf3a81ee2a5123e46b4c85d0c8ef7034c4476" + integrity sha512-gYp3NFIsyT5p65HgKjXFWTDzFf7K8+6ce9d9MIqaNgVWFZdsjUy9JL5TttDMQXshaQ1aZpxtLL6ZO3BiI1w8fw== + +"@deck.gl/json@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/json/-/json-7.1.11.tgz#8342322e3cfca8a0e14a970766a793b4e7cb4e06" + integrity sha512-obYAXq5VZ0qCTVS8hopS64aXGicUeBNg0/03AAfo+Q5z62cNqagAktGKVZMUsJ13bV8CPohJ2zRWMXO+mAJtew== + dependencies: + d3-dsv "^1.0.8" + +"@deck.gl/layers@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-7.1.11.tgz#d53175a9adfb03869084acc33145c846458d40c8" + integrity sha512-hOylm7Pf3CSvqpDoiCJLnqLAU3PAePISskJ5jjhpXtgHBrm1/Gk4boP4/7t7kFZdbSvVIXin13pPRbT0SWCRPw== + dependencies: + "@loaders.gl/core" "^1.0.3" + "@loaders.gl/images" "^1.0.3" + "@mapbox/tiny-sdf" "^1.1.0" + earcut "^2.0.6" + +"@deck.gl/mapbox@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/mapbox/-/mapbox-7.1.11.tgz#87d2e9306f0ce7679ddc95b11e33b7c2d1ee9d9d" + integrity sha512-V4cc9vwXzAOBtWV8x+WtvPVXElGChogkvQketeR2uhz6wIHuH+3sBBRg/Ma476w/II+DKjeHg2AzAZeX3SK7yQ== + +"@deck.gl/mesh-layers@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-7.1.11.tgz#f2eef1962e1f868957b88113f6f57dc94636ba64" + integrity sha512-rI8ffUNh7ac2GpMcGLEiKyRarOPeLfVRlMRKjl9LXU61Wgx6DaHqsMmeqxzjoXEzgiRlY/XgCjepVg0dY6btlQ== + dependencies: + "@loaders.gl/core" "^1.0.3" + "@loaders.gl/images" "^1.0.3" + +"@deck.gl/react@7.1.11": + version "7.1.11" + resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-7.1.11.tgz#dbd84a2bec4551841e4592da58a064e0d0d80693" + integrity sha512-WUzxhvM3jZIZkBAQgdQR+tFBAVDm5opLCKMWI9YkJUsdJzdv9uwiWCsk3Se1pCTFIa5Asb8U6YAi1CHl+OOFyA== + dependencies: + prop-types "^15.6.0" + +"@loaders.gl/core@^1.0.3": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-1.3.7.tgz#86ae42b7f16b67035a7a561affa393c4fd98076a" + integrity sha512-dFZkJQc+i2PoqlBMz/aO8Gnn0y6ICafQp8u6cTpCm96h/HHulE8qDBodQlHGHn9EMJDSgVl/zjni+QhqIK31dg== + dependencies: + "@babel/runtime" "^7.3.1" + +"@loaders.gl/images@^1.0.3": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-1.3.7.tgz#fa0975e76cba12379c423df50de1940b32f3df00" + integrity sha512-TKqW94vjvWc4RIChhr0Yx6HaVTe8K6h6GFeXcahsKeCxq9/k2qpcigRkXfmb6/37dkp2Qy5COHp73ECgN/q+NA== + +"@luma.gl/constants@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-7.3.2.tgz#99c5d665f9e6d21192525038e47ec4acfbbbe0a6" + integrity sha512-hr6JOOwsGPjjoHnil4sQ6AWsc8P6XXYtRL10TwNYfFTcNxrhSrjQvutYoCzXHH5U0vfHBfPMMUyLASK9FqiHOA== + +"@luma.gl/core@^7.1.0": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-7.3.2.tgz#1d006da99ead3f1a7d6323e5c39e1dd6086f1ecf" + integrity sha512-XyQPSUJRkZcc//gVX0AgjLLNTkCOO68NRnm7RkIhikRBEUdovb4IOcpmWMCB1/Gyj4hzg/Z1FOAVT4pG1E+agw== + dependencies: + "@babel/runtime" "^7.0.0" + "@luma.gl/constants" "7.3.2" + "@luma.gl/shadertools" "7.3.2" + "@luma.gl/webgl" "7.3.2" + "@luma.gl/webgl-state-tracker" "7.3.2" + "@luma.gl/webgl2-polyfill" "7.3.2" + math.gl "^3.0.0" + probe.gl "^3.1.1" + seer "^0.2.4" + +"@luma.gl/shadertools@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-7.3.2.tgz#f850aed1b3e1dedfb236ce02b0129cccd018f651" + integrity sha512-GiOZTvdEr164zYFy1DNRc7mzduSWLNJ34s+YbkJ/0i07E6tK7gHgM29QNCZ/gROvUDDJ5CHxngZqGkb+XquOMQ== + dependencies: + "@babel/runtime" "^7.0.0" + math.gl "^3.0.0" + +"@luma.gl/webgl-state-tracker@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/webgl-state-tracker/-/webgl-state-tracker-7.3.2.tgz#b927e1c7689fbc75432197eaf0468fc8f0e18a76" + integrity sha512-0LuK3veReSm2UPOiDwC2CRDeE2xk4irqXdhyFO0WSAU1w+YhzbD1hGbjizGczvgfkbz8dFl9h98LbbH75efcKw== + dependencies: + "@babel/runtime" "^7.0.0" + "@luma.gl/constants" "7.3.2" + +"@luma.gl/webgl2-polyfill@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/webgl2-polyfill/-/webgl2-polyfill-7.3.2.tgz#266a7a2d2c2c338360e8f766984cf559d2230521" + integrity sha512-PMt5xqQ+u7tIqfUaL3s4nuWl604WFNcl1F1ohSUFeEzIIuxFiF6gsdEEvC5VqGoMFxI8T4FOTSeHYIr6uP4+4w== + dependencies: + "@babel/runtime" "^7.0.0" + "@luma.gl/constants" "7.3.2" + +"@luma.gl/webgl@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-7.3.2.tgz#57d6ef58d7180cf429a9f98c8389215665b4c3d7" + integrity sha512-eWoPPRJOF5xSpqgggdwspsm8exclwxz20c8vqu8D1b3LJTY7cEpq57CMLvITHcJMMJ834TX/r598efTcF76lpw== + dependencies: + "@babel/runtime" "^7.0.0" + "@luma.gl/constants" "7.3.2" + "@luma.gl/webgl-state-tracker" "7.3.2" + "@luma.gl/webgl2-polyfill" "7.3.2" + probe.gl "^3.1.1" + +"@mapbox/geojson-area@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA= + dependencies: + wgs84 "0.0.0" + +"@mapbox/geojson-rewind@^0.4.0": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz#357d79300adb7fec7c1f091512988bca6458f068" + integrity sha512-mxo2MEr7izA1uOXcDsw99Kgg6xW3P4H2j4n1lmldsgviIelpssvP+jQDivFKOHrOVJDpTTi5oZJvRcHtU9Uufw== + dependencies: + "@mapbox/geojson-area" "0.2.2" + concat-stream "~1.6.0" + minimist "^1.2.5" + sharkdown "^0.1.0" + +"@mapbox/geojson-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== + +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= + +"@mapbox/mapbox-gl-supported@^1.4.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" + integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== + +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= + +"@mapbox/tiny-sdf@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff" + integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg== + +"@mapbox/unitbezier@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + +"@math.gl/core@3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-3.2.2.tgz#929eccc724b8fafce92e3762988c2f07859232a9" + integrity sha512-R1UQwg699pfReLHy0N+ach2KdGqH4XsniEPKM7H0WbeDhEvuoMRWB9oNtIw9qPQV39lBv3Dzplaw5DPscwgMPQ== + dependencies: + "@babel/runtime" "^7.0.0" + gl-matrix "^3.0.0" + +"@math.gl/web-mercator@^3.1.3": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@math.gl/web-mercator/-/web-mercator-3.2.2.tgz#93e66ded7f3004b92bc931da3e32ef244189679b" + integrity sha512-uZbLlST7gbfJV227Ev1oShpYQGon9Nk/i0AoM81mVoEYtd+XxKuoDBYaRIdPNVkkALwF9xFG1lwxHqblrs3v5w== + dependencies: + "@babel/runtime" "^7.0.0" + gl-matrix "^3.0.0" + +"@probe.gl/stats@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@probe.gl/stats/-/stats-3.3.0.tgz#66f684ead7cee1f2aad5ee5e9d297e84e08c5536" + integrity sha512-CV4c3EgallqZTO88u34/u9L5asL0nCVP1BEkb4qcXlh8Qz2Vmygbyjz1ViQsct6rSi2lJ52lo6W0PnlpZJJvcA== + dependencies: + "@babel/runtime" "^7.0.0" + +"@types/d3-array@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.0.0.tgz#a0d63a296a2d8435a9ec59393dcac746c6174a96" + integrity sha512-rGqfPVowNDTszSFvwoZIXvrPG7s/qKzm9piCRIH6xwTTRu7pPZ3ootULFnPkTt74B6i5lN0FpLQL24qGOw1uZA== + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8= + +bootstrap-slider@9.9.0: + version "9.9.0" + resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-9.9.0.tgz#4e14ecc6401901da1ddf7681aa24e33b00dadce8" + integrity sha1-ThTsxkAZAdod33aBqiTjOwDa3Og= + +bootstrap-slider@^10.0.0: + version "10.6.2" + resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-10.6.2.tgz#7341f468c012bdaa6a1d8625d989fdeb8ed7dd38" + integrity sha512-8JTPZB9QVOdrGzYF3YgC3YW6ssfPeBvBwZnXffiZ7YH/zz1D0EKlZvmQsm/w3N0XjVNYQEoQ0ax+jHrErV4K1Q== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cardinal@~0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz#ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2" + integrity sha1-ylu2iltRG5D+k7ms6km97lwyv+I= + dependencies: + ansicolors "~0.2.1" + redeyed "~0.4.0" + +commander@2, commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-stream@~1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +csscolorparser@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= + +d3-array@^1.2.0, d3-array@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1, d3-color@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-dsv@^1.0.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" + integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-format@1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" + integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== + +d3-hexbin@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/d3-hexbin/-/d3-hexbin-0.2.2.tgz#9c5837dacfd471ab05337a9e91ef10bfc4f98831" + integrity sha1-nFg32s/UcasFM3qeke8Qv8T5iDE= + +d3-interpolate@1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-scale@^2.1.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" + integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-time-format@2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" + integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== + dependencies: + d3-time "1" + +d3-time@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + +deck.gl@7.1.11: + version "7.1.11" + resolved "https://registry.yarnpkg.com/deck.gl/-/deck.gl-7.1.11.tgz#bed2b80b87670a9efa239ac95a9edb50ac46e9e8" + integrity sha512-OUj9JE544N6Y/DCdfdnsbqKn9o72bWgRfsKhyi8aZ8v76hq7XyelmO2GljBmHGYmuMNVLrKcymNMV0m8EEgpZA== + dependencies: + "@deck.gl/aggregation-layers" "7.1.11" + "@deck.gl/core" "7.1.11" + "@deck.gl/geo-layers" "7.1.11" + "@deck.gl/google-maps" "7.1.11" + "@deck.gl/json" "7.1.11" + "@deck.gl/layers" "7.1.11" + "@deck.gl/mapbox" "7.1.11" + "@deck.gl/mesh-layers" "7.1.11" + "@deck.gl/react" "7.1.11" + +earcut@^2.0.6, earcut@^2.1.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" + integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== + +es6bindall@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/es6bindall/-/es6bindall-0.0.9.tgz#71e00afa69f8dd59ac5ac898a0d31c978df817d5" + integrity sha1-ceAK+mn43VmsWsiYoNMcl434F9U= + +esm@^3.0.84: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + +esm@~3.0.84: + version "3.0.84" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" + integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== + +esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + +geojson-vt@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== + +gl-matrix@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" + integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== + +grid-index@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" + integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== + +h3-js@^3.4.3: + version "3.6.4" + resolved "https://registry.yarnpkg.com/h3-js/-/h3-js-3.6.4.tgz#eb14f63a1fe1efec04194266271ec0af9c021566" + integrity sha512-wMu0Y+vdh4xx2WT1jqy4QDBgJupjBfHsGaMtMsFocdZdIsfxLFufzjGcmReOSfKQ+twRO2XjXAmDY9h1nq99EA== + +hammerjs@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" + integrity sha1-BO93hiz/K7edMPdpIJWTAiK/YPE= + +iconv-lite@0.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.12: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +jquery@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== + +lodash@^4.17.15: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +mapbox-gl@^0.53.0: + version "0.53.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-0.53.1.tgz#08a956d8da54b04bc7f29ab1319bddb9c97ddedf" + integrity sha512-dTtW/qlkUowKGlqOhE8fqII2Tj4lcokvlZwUDLnkjy4uQ9zMFnVBULGeSzzTVkj9HtQZ3Zbey10/jmoVPV9t5w== + dependencies: + "@mapbox/geojson-rewind" "^0.4.0" + "@mapbox/geojson-types" "^1.0.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^1.4.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.0" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.2" + earcut "^2.1.5" + esm "^3.0.84" + geojson-vt "^3.2.1" + gl-matrix "^3.0.0" + grid-index "^1.1.0" + minimist "0.0.8" + murmurhash-js "^1.0.0" + pbf "^3.0.5" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^6.0.1" + tinyqueue "^2.0.0" + vt-pbf "^3.1.1" + +mapbox-gl@~0.54.0: + version "0.54.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-0.54.1.tgz#f666103132df93d4c90d1e96b1c367bad4638db9" + integrity sha512-HtY+HobYTHTsFOJ3buTHtNvZv/Tjfp0vararhEWCjI7wQq8XxK16sEpsXucokrAhuu94js4KJylo13bKJx6l0Q== + dependencies: + "@mapbox/geojson-rewind" "^0.4.0" + "@mapbox/geojson-types" "^1.0.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^1.4.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.0" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.2" + earcut "^2.1.5" + esm "~3.0.84" + geojson-vt "^3.2.1" + gl-matrix "^3.0.0" + grid-index "^1.1.0" + minimist "0.0.8" + murmurhash-js "^1.0.0" + pbf "^3.0.5" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^6.0.1" + tinyqueue "^2.0.0" + vt-pbf "^3.1.1" + +math.gl@^2.3.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-2.3.3.tgz#69d07904507145c639835aefcd0ec5e790cd3046" + integrity sha512-wZhx7574KHUpJVMzkaQ559zfn3R8iB0BOilwNrfL/fOLQfPo2TPWsKX96PdfS4svKA2XIGi3yfizrv2Redcv0g== + dependencies: + "@babel/runtime" "^7.0.0" + gl-matrix "^3.0.0" + +math.gl@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-3.2.2.tgz#d19e68b903b43ecbde677f8086a03b91fbab3c33" + integrity sha512-lkM9y3DirpOBMpCCrsOMV3AWkxtwql8fvF98EUN0SLOMWAIjnkQBS9NPleN5uvqpnjSVZd3Y3cn+fbIuA4npmQ== + dependencies: + "@math.gl/core" "3.2.2" + +minimist@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" + integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mjolnir.js@^2.1.2, mjolnir.js@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.4.1.tgz#63cc66b7d1a52490904103cc1becc597be60c6cf" + integrity sha512-bpqKc70aNlijeQCapJ8529EmjVj8VSfYdzh1WsbhWp0XEQSm9hAB6X350OyRVDpH5oTdAyX/NeYFqtwyuO4ZKA== + dependencies: + "@babel/runtime" "^7.0.0" + hammerjs "^2.0.8" + +moment@^2.20.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + +mousetrap@^1.6.1: + version "1.6.5" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" + integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== + +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +pbf@^3.0.5: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + +potpack@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" + integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== + +probe.gl@^3.0.1, probe.gl@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/probe.gl/-/probe.gl-3.3.0.tgz#a64e2f007d36a6262b12f3b1e99ca5dc3762b3c3" + integrity sha512-59E6AEw4N8sU4PKfAl7S2UBYJCOa064WpEFcXfeFOB/36FJtplYY+261DqLjLAvOqRRHiKVEQUBo63PQ3jKeWA== + dependencies: + "@babel/runtime" "^7.0.0" + "@probe.gl/stats" "3.3.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prop-types@^15.6.0, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +protocol-buffers-schema@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae" + integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA== + +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + +react-bootstrap-slider@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/react-bootstrap-slider/-/react-bootstrap-slider-2.1.5.tgz#2f79e57b69ddf2b5bd23310bddbd2de0c6bdfef3" + integrity sha512-7rO3JlCVIpr+XtwiSfg8r+MPqyl9KdLI61pNuSMBYYQZ42IWBC+kk/UDyYevp76aGAMtd9SCW8erxOvq+VpekQ== + dependencies: + bootstrap-slider "9.9.0" + es6bindall "^0.0.9" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-map-gl@^4.0.10: + version "4.1.16" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-4.1.16.tgz#32c383801df9d57d9a369ba5b3d0b4b1e9b57862" + integrity sha512-EtiHCeqM69wKR9RDyLvtk6pTPS5+OFeAPIsYw6afnlGTauFAq3iD40SHuAOElgoJmm7J+cjPfHqu7m7tB4/FfA== + dependencies: + "@babel/runtime" "^7.0.0" + mapbox-gl "~0.54.0" + mjolnir.js "^2.2.0" + prop-types "^15.7.2" + react-virtualized-auto-sizer "^1.0.2" + viewport-mercator-project "^6.2.1" + +react-virtualized-auto-sizer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd" + integrity sha512-MYXhTY1BZpdJFjUovvYHVBmkq79szK/k7V3MO+36gJkWGkrXKtyr4vCPtpphaTLRAdDNoYEYFZWE8LjN+PIHNg== + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +redeyed@~0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz#37e990a6f2b21b2a11c2e6a48fd4135698cba97f" + integrity sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8= + dependencies: + esprima "~1.0.4" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + +rw@1, rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + +s2-geometry@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/s2-geometry/-/s2-geometry-1.2.10.tgz#c6ff22f3eccafd0eea491b60b44c141b9887acab" + integrity sha1-xv8i8+zK/Q7qSRtgtEwUG5iHrKs= + dependencies: + long "^3.2.0" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +seer@^0.2.4: + version "0.2.5" + resolved "https://registry.yarnpkg.com/seer/-/seer-0.2.5.tgz#f0975153741f4d1c3916a144eef4738458bcb05a" + integrity sha512-//0Zwt0x97KQhIWrp4oq9AVNvGA2ctCx4dmFddpkORjRr6bW+hyC8eOhWBVIhiU3uHv1XLU1dekfFKOi28RGHA== + +sharkdown@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sharkdown/-/sharkdown-0.1.1.tgz#64484bd0f08f347f8319e9ff947a670f6b48b1b2" + integrity sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg== + dependencies: + cardinal "~0.4.2" + minimist "0.0.5" + split "~0.2.10" + +split@~0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57" + integrity sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc= + dependencies: + through "2" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +supercluster@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.2.tgz#aa2eaae185ef97872f388c683ec29f6991721ee3" + integrity sha512-aa0v2HURjBTOpbcknilcfxGDuArM8khklKSmZ/T8ZXL0BuRwb5aRw95lz+2bmWpFvCXDX/+FzqHxmg0TIaJErw== + dependencies: + kdbush "^3.0.0" + +through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tinyqueue@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +underscore@^1.8.3: + version "1.10.2" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf" + integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg== + +urijs@^1.18.10: + version "1.19.2" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a" + integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +viewport-mercator-project@^6.1.0, viewport-mercator-project@^6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-6.2.3.tgz#4122040f51ef9553fa41a46bcc6502977b3909c6" + integrity sha512-QQb0/qCLlP4DdfbHHSWVYXpghB2wkLIiiZQnoelOB59mXKQSyZVxjreq1S+gaBJFpcGkWEcyVtre0+2y2DTl/Q== + dependencies: + "@babel/runtime" "^7.0.0" + gl-matrix "^3.0.0" + +vt-pbf@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" + integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.0.5" + +wgs84@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= + +xss@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.7.tgz#a554cbd5e909324bd6893fb47fff441ad54e2a95" + integrity sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10"