From 18f34d2acaea396a9fb444856d3fd324533791a5 Mon Sep 17 00:00:00 2001 From: friedjoff Date: Tue, 5 Feb 2019 23:41:21 +0100 Subject: [PATCH] feat(netlify-cms-widget-map): add map widget (#2051) --- dev-test/config.yml | 1 + packages/netlify-cms-core/webpack.config.js | 2 +- packages/netlify-cms-widget-map/CHANGELOG.md | 4 + packages/netlify-cms-widget-map/README.md | 11 ++ packages/netlify-cms-widget-map/package.json | 41 +++++ .../netlify-cms-widget-map/src/MapPreview.js | 13 ++ packages/netlify-cms-widget-map/src/index.js | 5 + .../src/withMapControl.js | 76 ++++++++ .../netlify-cms-widget-map/webpack.config.js | 17 ++ packages/netlify-cms/package.json | 1 + packages/netlify-cms/src/widgets.js | 2 + website/content/docs/widgets/map.md | 18 ++ yarn.lock | 163 +++++++++++++++++- 13 files changed, 352 insertions(+), 2 deletions(-) create mode 100644 packages/netlify-cms-widget-map/CHANGELOG.md create mode 100644 packages/netlify-cms-widget-map/README.md create mode 100644 packages/netlify-cms-widget-map/package.json create mode 100644 packages/netlify-cms-widget-map/src/MapPreview.js create mode 100644 packages/netlify-cms-widget-map/src/index.js create mode 100644 packages/netlify-cms-widget-map/src/withMapControl.js create mode 100644 packages/netlify-cms-widget-map/webpack.config.js create mode 100644 website/content/docs/widgets/map.md diff --git a/dev-test/config.yml b/dev-test/config.yml index 3746ffd9..0b6fdd43 100644 --- a/dev-test/config.yml +++ b/dev-test/config.yml @@ -91,6 +91,7 @@ collections: # A list of collections the CMS should be able to edit valueField: 'title' - { label: 'Title', name: 'title', widget: 'string' } - { label: 'Boolean', name: 'boolean', widget: 'boolean', default: true } + - { label: 'Map', name: 'map', widget: 'map' } - { label: 'Text', name: 'text', widget: 'text', hint: 'Plain text, not markdown' } - { label: 'Number', name: 'number', widget: 'number', hint: 'To infinity and beyond!' } - { label: 'Markdown', name: 'markdown', widget: 'markdown' } diff --git a/packages/netlify-cms-core/webpack.config.js b/packages/netlify-cms-core/webpack.config.js index cf981587..92a5d71b 100644 --- a/packages/netlify-cms-core/webpack.config.js +++ b/packages/netlify-cms-core/webpack.config.js @@ -28,7 +28,7 @@ module.exports = { }, { test: /\.css$/, - include: [/(redux-notifications|react-datetime)/], + include: [/(ol|redux-notifications|react-datetime)/], use: ['to-string-loader', 'css-loader'], }, ], diff --git a/packages/netlify-cms-widget-map/CHANGELOG.md b/packages/netlify-cms-widget-map/CHANGELOG.md new file mode 100644 index 00000000..e4d87c4d --- /dev/null +++ b/packages/netlify-cms-widget-map/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. diff --git a/packages/netlify-cms-widget-map/README.md b/packages/netlify-cms-widget-map/README.md new file mode 100644 index 00000000..d9f3032a --- /dev/null +++ b/packages/netlify-cms-widget-map/README.md @@ -0,0 +1,11 @@ +# Docs coming soon! + +Netlify CMS was recently converted from a single npm package to a "monorepo" of over 20 packages. +That's over 20 Readme's! We haven't created one for this package yet, but we will soon. + +In the meantime, you can: + +1. Check out the [main readme](https://github.com/netlify/netlify-cms/#readme) or the [documentation + site](https://www.netlifycms.org) for more info. +2. Reach out to the [community chat](https://gitter.im/netlify/netlifycms/) if you need help. +3. Help out and [write the readme yourself](https://github.com/netlify/netlify-cms/edit/master/packages/netlify-cms-widget-map/README.md)! diff --git a/packages/netlify-cms-widget-map/package.json b/packages/netlify-cms-widget-map/package.json new file mode 100644 index 00000000..ef97d9e3 --- /dev/null +++ b/packages/netlify-cms-widget-map/package.json @@ -0,0 +1,41 @@ +{ + "name": "netlify-cms-widget-map", + "description": "Widget for editing spatial data in Netlify CMS.", + "version": "1.0.0", + "homepage": "https://www.netlifycms.org/docs/widgets/#map", + "repository": "https://github.com/netlify/netlify-cms/tree/master/packages/netlify-cms-widget-map", + "bugs": "https://github.com/netlify/netlify-cms/issues", + "main": "dist/netlify-cms-widget-map.js", + "license": "MIT", + "keywords": [ + "netlify", + "netlify-cms", + "widget", + "spatial", + "map" + ], + "sideEffects": false, + "scripts": { + "watch": "webpack -w", + "develop": "npm run watch", + "build": "cross-env NODE_ENV=production webpack" + }, + "devDependencies": { + "cross-env": "^5.2.0", + "css-loader": "^2.1.0", + "to-string-loader": "^1.1.5", + "webpack": "^4.16.1", + "webpack-cli": "^3.1.0" + }, + "peerDependencies": { + "emotion": "^9.2.6", + "lodash": "^4.17.10", + "netlify-cms-ui-default": "^2.0.0", + "prop-types": "^15.5.10", + "react": "^16.4.1", + "react-immutable-proptypes": "^2.1.0" + }, + "dependencies": { + "ol": "^5.3.0" + } +} diff --git a/packages/netlify-cms-widget-map/src/MapPreview.js b/packages/netlify-cms-widget-map/src/MapPreview.js new file mode 100644 index 00000000..4e208a72 --- /dev/null +++ b/packages/netlify-cms-widget-map/src/MapPreview.js @@ -0,0 +1,13 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { WidgetPreviewContainer } from 'netlify-cms-ui-default'; + +const MapPreview = ({ value }) => ( + {value ? value.toString() : null} +); + +MapPreview.propTypes = { + value: PropTypes.string, +}; + +export default MapPreview; diff --git a/packages/netlify-cms-widget-map/src/index.js b/packages/netlify-cms-widget-map/src/index.js new file mode 100644 index 00000000..c5ae4dbe --- /dev/null +++ b/packages/netlify-cms-widget-map/src/index.js @@ -0,0 +1,5 @@ +import withMapControl from './withMapControl'; + +export { withMapControl }; +export const MapControl = withMapControl(); +export MapPreview from './MapPreview'; diff --git a/packages/netlify-cms-widget-map/src/withMapControl.js b/packages/netlify-cms-widget-map/src/withMapControl.js new file mode 100644 index 00000000..eefa0443 --- /dev/null +++ b/packages/netlify-cms-widget-map/src/withMapControl.js @@ -0,0 +1,76 @@ +import olStyles from 'ol/ol.css'; +import Map from 'ol/Map.js'; +import View from 'ol/View.js'; +import GeoJSON from 'ol/format/GeoJSON'; +import Draw from 'ol/interaction/Draw.js'; +import TileLayer from 'ol/layer/Tile.js'; +import VectorLayer from 'ol/layer/Vector.js'; +import OSMSource from 'ol/source/OSM.js'; +import VectorSource from 'ol/source/Vector.js'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { injectGlobal } from 'react-emotion'; + +injectGlobal` + ${olStyles} +`; + +const formatOptions = { + dataProjection: 'EPSG:4326', + featureProjection: 'EPSG:3857', +}; +const getDefaultFormat = () => new GeoJSON(formatOptions); + +const getDefaultMap = (target, featuresLayer) => + new Map({ + target, + layers: [new TileLayer({ source: new OSMSource() }), featuresLayer], + view: new View({ center: [0, 0], zoom: 2 }), + }); + +export default function withMapControl({ getFormat, getMap } = {}) { + return class MapControl extends React.Component { + static propTypes = { + onChange: PropTypes.func.isRequired, + field: PropTypes.object.isRequired, + value: PropTypes.node, + }; + + static defaultProps = { + value: '', + }; + + constructor(props) { + super(props); + this.mapContainer = React.createRef(); + } + + componentDidMount() { + const { field, onChange, value } = this.props; + const format = getFormat ? getFormat(field) : getDefaultFormat(field); + const features = value ? [format.readFeature(value)] : []; + + const featuresSource = new VectorSource({ features, wrapX: false }); + const featuresLayer = new VectorLayer({ source: featuresSource }); + + const target = this.mapContainer.current; + const map = getMap ? getMap(target, featuresLayer) : getDefaultMap(target, featuresLayer); + if (features.length > 0) { + map.getView().fit(featuresSource.getExtent(), { maxZoom: 16, padding: [80, 80, 80, 80] }); + } + + const draw = new Draw({ source: featuresSource, type: field.get('type', 'Point') }); + map.addInteraction(draw); + + const writeOptions = { decimals: field.get('decimals', 7) }; + draw.on('drawend', ({ feature }) => { + featuresSource.clear(); + onChange(format.writeGeometry(feature.getGeometry(), writeOptions)); + }); + } + + render() { + return
; + } + }; +} diff --git a/packages/netlify-cms-widget-map/webpack.config.js b/packages/netlify-cms-widget-map/webpack.config.js new file mode 100644 index 00000000..ca6a676d --- /dev/null +++ b/packages/netlify-cms-widget-map/webpack.config.js @@ -0,0 +1,17 @@ +const { getConfig } = require('../../scripts/webpack.js'); + +const baseWebpackConfig = getConfig(); + +module.exports = { + ...baseWebpackConfig, + module: { + rules: [ + ...baseWebpackConfig.module.rules, + { + test: /\.css$/, + include: [/ol/], + use: ['to-string-loader', 'css-loader'], + }, + ], + }, +}; diff --git a/packages/netlify-cms/package.json b/packages/netlify-cms/package.json index ee0c7e94..b7c77abe 100644 --- a/packages/netlify-cms/package.json +++ b/packages/netlify-cms/package.json @@ -37,6 +37,7 @@ "netlify-cms-widget-file": "^2.2.0", "netlify-cms-widget-image": "^2.1.1", "netlify-cms-widget-list": "^2.1.0", + "netlify-cms-widget-map": "^1.0.0", "netlify-cms-widget-markdown": "^2.1.0", "netlify-cms-widget-number": "^2.0.5", "netlify-cms-widget-object": "^2.0.5", diff --git a/packages/netlify-cms/src/widgets.js b/packages/netlify-cms/src/widgets.js index 37a250ed..df08ec5d 100644 --- a/packages/netlify-cms/src/widgets.js +++ b/packages/netlify-cms/src/widgets.js @@ -12,6 +12,7 @@ import { ListControl, ListPreview } from 'netlify-cms-widget-list/src'; import { ObjectControl, ObjectPreview } from 'netlify-cms-widget-object/src'; import { RelationControl, RelationPreview } from 'netlify-cms-widget-relation/src'; import { BooleanControl } from 'netlify-cms-widget-boolean/src'; +import { MapControl, MapPreview } from 'netlify-cms-widget-map/src'; const { registerWidget } = cms; @@ -28,3 +29,4 @@ registerWidget('select', SelectControl, SelectPreview); registerWidget('object', ObjectControl, ObjectPreview); registerWidget('relation', RelationControl, RelationPreview); registerWidget('boolean', BooleanControl); +registerWidget('map', MapControl, MapPreview); diff --git a/website/content/docs/widgets/map.md b/website/content/docs/widgets/map.md new file mode 100644 index 00000000..4e83e077 --- /dev/null +++ b/website/content/docs/widgets/map.md @@ -0,0 +1,18 @@ +--- +title: map +label: "Map" +--- + +The map widget allows you to edit spatial data using an interactive map. Spatial data is saved as a GeoJSON string in WGS84 projection and is limited to a single geometry. + +- **Name:** `map` +- **UI:** interactive map +- **Data type:** GeoJSON string +- **Options:** + - `decimals`: accepts a number to specify precision of saved coordinates; defaults to 7 decimals + - `default`: accepts a GeoJSON string containing a single geometry; defaults to an empty string + - `type`: accepts one string value of `Point`, `LineString` or `Polygon`; defaults to `Point` +- **Example:** + ```yaml + - {label: "Location", name: "location", widget: "map" } + ``` diff --git a/yarn.lock b/yarn.lock index d96ee39f..8dd9e6ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2505,6 +2505,11 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" @@ -2961,6 +2966,15 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -3676,6 +3690,22 @@ css-loader@^1.0.0: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" +css-loader@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.0.tgz#42952ac22bca5d076978638e9813abce49b8f0cc" + integrity sha512-MoOu+CStsGrSt5K2OeZ89q3Snf+IkxRfAIt9aAKg4piioTrhtP1iEFPu+OVn3Ohz24FO6L+rw9UJxBILiSBw5Q== + dependencies: + icss-utils "^4.0.0" + loader-utils "^1.2.1" + lodash "^4.17.11" + postcss "^7.0.6" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^2.0.3" + postcss-modules-scope "^2.0.0" + postcss-modules-values "^2.0.0" + postcss-value-parser "^3.3.0" + schema-utils "^1.0.0" + css-select-base-adapter@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz#0102b3d14630df86c3eb9fa9f5456270106cf990" @@ -6026,7 +6056,14 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@^1.1.11, ieee754@^1.1.4: +icss-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.0.0.tgz#d52cf4bcdcfa1c45c2dbefb4ffdf6b00ef608098" + integrity sha512-bA/xGiwWM17qjllIs9X/y0EjsB7e0AV08F3OL8UPsoNkNRibIuu8f1eKTnQ8QO1DteKKTxTUAn+IEWUToIwGOA== + dependencies: + postcss "^7.0.5" + +ieee754@^1.1.11, ieee754@^1.1.4, ieee754@^1.1.6: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== @@ -7263,6 +7300,13 @@ json5@^0.5.0, json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + jsonfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" @@ -7529,6 +7573,15 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" +loader-utils@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + localforage@^1.4.2: version "1.7.2" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.7.2.tgz#fa4442602f806edd2bca6a54ab4e656f031f121c" @@ -8626,6 +8679,15 @@ obuf@^1.0.0, obuf@^1.1.1: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== +ol@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ol/-/ol-5.3.0.tgz#106b870561fabb9b790b5869b3d93025cb03d389" + integrity sha512-UrOJGNI5XdYfE9n43RJdsMq25SjI4nIi5Kf0kxi+q6vEknzeRxM/wgYf8FMs7Ss3URuIbsKmetW9dVMOYB/DkQ== + dependencies: + pbf "3.1.0" + pixelworks "1.1.0" + rbush "2.0.2" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -9016,6 +9078,14 @@ pause-stream@0.0.11: dependencies: through "~2.3" +pbf@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.1.0.tgz#f70004badcb281761eabb1e76c92f179f08189e9" + integrity sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w== + dependencies: + ieee754 "^1.1.6" + resolve-protobuf-schema "^2.0.0" + pbkdf2@^3.0.3: version "3.0.16" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" @@ -9064,6 +9134,11 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pixelworks@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pixelworks/-/pixelworks-1.1.0.tgz#1f095ad48dca8bf8a1c8258e0092031a44f22ca5" + integrity sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU= + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -9136,6 +9211,13 @@ postcss-modules-extract-imports@^1.2.0: dependencies: postcss "^6.0.1" +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" @@ -9144,6 +9226,15 @@ postcss-modules-local-by-default@^1.2.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" +postcss-modules-local-by-default@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.4.tgz#a000bb07e4f57f412ba35c904d035cfd4a7b9446" + integrity sha512-WvuSaTKXUqYJbnT7R3YrsNrHv/C5vRfr5VglS4bFOk0MYT4CLBfc/xgExA+x2RftlYgiBDvWmVs191Xv8S8gZQ== + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^7.0.6" + postcss-value-parser "^3.3.1" + postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" @@ -9152,6 +9243,14 @@ postcss-modules-scope@^1.1.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" +postcss-modules-scope@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.0.1.tgz#2c0f2394cde4cd09147db054c68917e38f6d43a4" + integrity sha512-7+6k9c3/AuZ5c596LJx9n923A/j3nF3ormewYBF1RrIQvjvjXe1xE8V8A1KFyFwXbvnshT6FBZFX0k/F1igneg== + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^7.0.6" + postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" @@ -9160,6 +9259,14 @@ postcss-modules-values@^1.3.0: icss-replace-symbols "^1.1.0" postcss "^6.0.1" +postcss-modules-values@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" + integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^7.0.6" + postcss-reporter@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3" @@ -9221,6 +9328,11 @@ postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= +postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss@6.0.22: version "6.0.22" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" @@ -9258,6 +9370,15 @@ postcss@^7.0.0, postcss@^7.0.1: source-map "^0.6.1" supports-color "^5.4.0" +postcss@^7.0.5, postcss@^7.0.6: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9372,6 +9493,11 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protocol-buffers-schema@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" + integrity sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w== + protoduck@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" @@ -9500,6 +9626,11 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +quickselect@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" + integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== + raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" @@ -9551,6 +9682,13 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" +rbush@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" + integrity sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA== + dependencies: + quickselect "^1.0.1" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -10447,6 +10585,13 @@ resolve-pathname@^2.2.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +resolve-protobuf-schema@^2.0.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" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -10628,6 +10773,15 @@ schema-utils@^0.4.4, schema-utils@^0.4.5: ajv "^6.1.0" ajv-keywords "^3.1.0" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + section-iterator@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/section-iterator/-/section-iterator-2.0.0.tgz#bf444d7afeeb94ad43c39ad2fb26151627ccba2a" @@ -11581,6 +11735,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + svg-inline-loader@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/svg-inline-loader/-/svg-inline-loader-0.8.0.tgz#7e9d905d80d0b4e68d2df21afcd08ee9e9a3ea6e"