react-spatial 2.0.0-beta.1 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +5 -10
  2. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +243 -220
  3. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -1
  4. package/components/BaseLayerSwitcher/BaseLayerSwitcher.scss +6 -5
  5. package/components/BaseLayerSwitcher/index.js +1 -3
  6. package/components/BaseLayerSwitcher/index.js.map +7 -1
  7. package/components/BasicMap/BasicMap.js +165 -285
  8. package/components/BasicMap/BasicMap.js.map +7 -1
  9. package/components/BasicMap/index.js +1 -3
  10. package/components/BasicMap/index.js.map +7 -1
  11. package/components/CanvasSaveButton/CanvasSaveButton.js +434 -556
  12. package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -1
  13. package/components/CanvasSaveButton/CanvasSaveButton.md.scss +1 -1
  14. package/components/CanvasSaveButton/index.js +1 -3
  15. package/components/CanvasSaveButton/index.js.map +7 -1
  16. package/components/Copyright/Copyright.js +44 -77
  17. package/components/Copyright/Copyright.js.map +7 -1
  18. package/components/Copyright/index.js +1 -3
  19. package/components/Copyright/index.js.map +7 -1
  20. package/components/FeatureExportButton/FeatureExportButton.js +44 -92
  21. package/components/FeatureExportButton/FeatureExportButton.js.map +7 -1
  22. package/components/FeatureExportButton/index.js +1 -3
  23. package/components/FeatureExportButton/index.js.map +7 -1
  24. package/components/FitExtent/FitExtent.js +31 -46
  25. package/components/FitExtent/FitExtent.js.map +7 -1
  26. package/components/FitExtent/index.js +1 -3
  27. package/components/FitExtent/index.js.map +7 -1
  28. package/components/Geolocation/Geolocation.js +158 -228
  29. package/components/Geolocation/Geolocation.js.map +7 -1
  30. package/components/Geolocation/Geolocation.scss +7 -5
  31. package/components/Geolocation/index.js +1 -3
  32. package/components/Geolocation/index.js.map +7 -1
  33. package/components/LayerTree/LayerTree.js +359 -357
  34. package/components/LayerTree/LayerTree.js.map +7 -1
  35. package/components/LayerTree/LayerTree.scss +4 -6
  36. package/components/LayerTree/index.js +1 -3
  37. package/components/LayerTree/index.js.map +7 -1
  38. package/components/MousePosition/MousePosition.js +71 -109
  39. package/components/MousePosition/MousePosition.js.map +7 -1
  40. package/components/MousePosition/index.js +1 -3
  41. package/components/MousePosition/index.js.map +7 -1
  42. package/components/NorthArrow/NorthArrow.js +37 -61
  43. package/components/NorthArrow/NorthArrow.js.map +7 -1
  44. package/components/NorthArrow/index.js +1 -3
  45. package/components/NorthArrow/index.js.map +7 -1
  46. package/components/Overlay/Overlay.js +93 -123
  47. package/components/Overlay/Overlay.js.map +7 -1
  48. package/components/Overlay/index.js +1 -3
  49. package/components/Overlay/index.js.map +7 -1
  50. package/components/Permalink/Permalink.js +194 -229
  51. package/components/Permalink/Permalink.js.map +7 -1
  52. package/components/Permalink/index.js +1 -3
  53. package/components/Permalink/index.js.map +7 -1
  54. package/components/Popup/Popup.js +139 -215
  55. package/components/Popup/Popup.js.map +7 -1
  56. package/components/Popup/Popup.md.scss +1 -0
  57. package/components/Popup/Popup.scss +3 -1
  58. package/components/Popup/index.js +1 -3
  59. package/components/Popup/index.js.map +7 -1
  60. package/components/ResizeHandler/ResizeHandler.js +88 -137
  61. package/components/ResizeHandler/ResizeHandler.js.map +7 -1
  62. package/components/ResizeHandler/index.js +1 -3
  63. package/components/ResizeHandler/index.js.map +7 -1
  64. package/components/RouteSchedule/RouteSchedule.js +227 -277
  65. package/components/RouteSchedule/RouteSchedule.js.map +7 -1
  66. package/components/RouteSchedule/RouteSchedule.md.scss +4 -2
  67. package/components/RouteSchedule/RouteSchedule.scss +12 -23
  68. package/components/RouteSchedule/index.js +1 -3
  69. package/components/RouteSchedule/index.js.map +7 -1
  70. package/components/ScaleLine/ScaleLine.js +17 -39
  71. package/components/ScaleLine/ScaleLine.js.map +7 -1
  72. package/components/ScaleLine/ScaleLine.scss +6 -4
  73. package/components/ScaleLine/index.js +1 -3
  74. package/components/ScaleLine/index.js.map +7 -1
  75. package/components/StopsFinder/StopsFinder.js +134 -162
  76. package/components/StopsFinder/StopsFinder.js.map +7 -1
  77. package/components/StopsFinder/StopsFinderOption.js +30 -60
  78. package/components/StopsFinder/StopsFinderOption.js.map +7 -1
  79. package/components/StopsFinder/index.js +1 -3
  80. package/components/StopsFinder/index.js.map +7 -1
  81. package/components/Zoom/Zoom.js +102 -106
  82. package/components/Zoom/Zoom.js.map +7 -1
  83. package/components/Zoom/Zoom.md.scss +3 -1
  84. package/components/Zoom/Zoom.scss +7 -5
  85. package/components/Zoom/index.js +1 -3
  86. package/components/Zoom/index.js.map +7 -1
  87. package/images/geops_qr.png +0 -0
  88. package/package.json +88 -182
  89. package/propTypes.js +36 -24
  90. package/propTypes.js.map +7 -1
  91. package/setupTests.js +21 -4
  92. package/setupTests.js.map +7 -1
  93. package/themes/README.md +26 -0
  94. package/themes/default/components.scss +9 -14
  95. package/themes/default/examples.scss +20 -20
  96. package/themes/default/index.scss +3 -3
  97. package/themes/default/mixins.scss +7 -5
  98. package/themes/default/variables.scss +27 -25
  99. package/utils/GlobalsForOle.js +72 -73
  100. package/utils/GlobalsForOle.js.map +7 -1
  101. package/utils/KML.js +320 -381
  102. package/utils/KML.js.map +7 -1
  103. package/utils/Styles.js +25 -33
  104. package/utils/Styles.js.map +7 -1
  105. package/utils/getLayersAsFlatArray.js +14 -0
  106. package/utils/getLayersAsFlatArray.js.map +7 -0
  107. package/utils/getPolygonPattern.js +11 -44
  108. package/utils/getPolygonPattern.js.map +7 -1
  109. package/utils/timeUtils.js +20 -35
  110. package/utils/timeUtils.js.map +7 -1
  111. package/LayerService.js +0 -193
  112. package/LayerService.js.map +0 -1
  113. package/LayerService.test.js +0 -160
  114. package/LayerService.test.js.map +0 -1
  115. package/Projections.js +0 -16
  116. package/Projections.js.map +0 -1
  117. package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -88
  118. package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js.map +0 -1
  119. package/components/BaseLayerToggler/BaseLayerToggler.js +0 -490
  120. package/components/BaseLayerToggler/BaseLayerToggler.js.map +0 -1
  121. package/components/BaseLayerToggler/BaseLayerToggler.md.scss +0 -9
  122. package/components/BaseLayerToggler/BaseLayerToggler.scss +0 -49
  123. package/components/BaseLayerToggler/BaseLayerToggler.test.js +0 -127
  124. package/components/BaseLayerToggler/BaseLayerToggler.test.js.map +0 -1
  125. package/components/BaseLayerToggler/index.js +0 -3
  126. package/components/BaseLayerToggler/index.js.map +0 -1
  127. package/components/BasicMap/BasicMap.test.js +0 -288
  128. package/components/BasicMap/BasicMap.test.js.map +0 -1
  129. package/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -173
  130. package/components/CanvasSaveButton/CanvasSaveButton.test.js.map +0 -1
  131. package/components/Copyright/Copyright.test.js +0 -133
  132. package/components/Copyright/Copyright.test.js.map +0 -1
  133. package/components/FeatureExportButton/FeatureExportButton.test.js +0 -407
  134. package/components/FeatureExportButton/FeatureExportButton.test.js.map +0 -1
  135. package/components/FilterButton/FilterButton.js +0 -131
  136. package/components/FilterButton/FilterButton.js.map +0 -1
  137. package/components/FilterButton/FilterButton.scss +0 -36
  138. package/components/FilterButton/FilterButton.test.js +0 -48
  139. package/components/FilterButton/FilterButton.test.js.map +0 -1
  140. package/components/FilterButton/index.js +0 -3
  141. package/components/FilterButton/index.js.map +0 -1
  142. package/components/FitExtent/FitExtent.test.js +0 -44
  143. package/components/FitExtent/FitExtent.test.js.map +0 -1
  144. package/components/FollowButton/FollowButton.js +0 -143
  145. package/components/FollowButton/FollowButton.js.map +0 -1
  146. package/components/FollowButton/FollowButton.scss +0 -36
  147. package/components/FollowButton/FollowButton.test.js +0 -57
  148. package/components/FollowButton/FollowButton.test.js.map +0 -1
  149. package/components/FollowButton/index.js +0 -3
  150. package/components/FollowButton/index.js.map +0 -1
  151. package/components/Geolocation/Geolocation.test.js +0 -263
  152. package/components/Geolocation/Geolocation.test.js.map +0 -1
  153. package/components/LayerTree/LayerTree.test.js +0 -323
  154. package/components/LayerTree/LayerTree.test.js.map +0 -1
  155. package/components/MousePosition/MousePosition.test.js +0 -125
  156. package/components/MousePosition/MousePosition.test.js.map +0 -1
  157. package/components/NorthArrow/NorthArrow.test.js +0 -106
  158. package/components/NorthArrow/NorthArrow.test.js.map +0 -1
  159. package/components/Overlay/Overlay.test.js +0 -145
  160. package/components/Overlay/Overlay.test.js.map +0 -1
  161. package/components/Permalink/Permalink.test.js +0 -267
  162. package/components/Permalink/Permalink.test.js.map +0 -1
  163. package/components/Popup/Popup.test.js +0 -291
  164. package/components/Popup/Popup.test.js.map +0 -1
  165. package/components/ResizeHandler/ResizeHandler.test.js +0 -410
  166. package/components/ResizeHandler/ResizeHandler.test.js.map +0 -1
  167. package/components/RouteSchedule/RouteSchedule.test.js +0 -102
  168. package/components/RouteSchedule/RouteSchedule.test.js.map +0 -1
  169. package/components/ScaleLine/ScaleLine.test.js +0 -32
  170. package/components/ScaleLine/ScaleLine.test.js.map +0 -1
  171. package/components/Search/Search.js +0 -230
  172. package/components/Search/Search.js.map +0 -1
  173. package/components/Search/Search.md.scss +0 -4
  174. package/components/Search/Search.scss +0 -78
  175. package/components/Search/Search.test.js +0 -15
  176. package/components/Search/Search.test.js.map +0 -1
  177. package/components/Search/SearchService.js +0 -72
  178. package/components/Search/SearchService.js.map +0 -1
  179. package/components/Search/engines/Engine.js +0 -26
  180. package/components/Search/engines/Engine.js.map +0 -1
  181. package/components/Search/engines/StopFinder.js +0 -47
  182. package/components/Search/engines/StopFinder.js.map +0 -1
  183. package/components/Search/index.js +0 -6
  184. package/components/Search/index.js.map +0 -1
  185. package/components/StopsFinder/StopsFinder.test.js +0 -19
  186. package/components/StopsFinder/StopsFinder.test.js.map +0 -1
  187. package/components/TrackerControl/TrackerControl.js +0 -171
  188. package/components/TrackerControl/TrackerControl.js.map +0 -1
  189. package/components/TrackerControl/TrackerControl.scss +0 -30
  190. package/components/TrackerControl/TrackerControl.test.js +0 -17
  191. package/components/TrackerControl/TrackerControl.test.js.map +0 -1
  192. package/components/TrackerControl/index.js +0 -3
  193. package/components/TrackerControl/index.js.map +0 -1
  194. package/components/Zoom/Zoom.test.js +0 -150
  195. package/components/Zoom/Zoom.test.js.map +0 -1
  196. package/images/FilterButton/filter.svg +0 -1
  197. package/images/FollowButton/follow.svg +0 -1
  198. package/images/baselayer/osm.baselayer.hot.png +0 -0
  199. package/images/baselayer/osm.baselayer.png +0 -0
  200. package/styleguidist/ComponentsList.js +0 -52
  201. package/styleguidist/ComponentsList.js.map +0 -1
  202. package/styleguidist/StyleGuide.js +0 -253
  203. package/styleguidist/StyleGuide.js.map +0 -1
  204. package/utils/KML.test.js +0 -163
  205. package/utils/KML.test.js.map +0 -1
  206. package/utils/KMLFormat.js +0 -105
  207. package/utils/KMLFormat.js.map +0 -1
  208. package/utils/KMLFormat.test.js +0 -22
  209. package/utils/KMLFormat.test.js.map +0 -1
  210. package/utils/getPolygonPattern.test.js +0 -66
  211. package/utils/getPolygonPattern.test.js.map +0 -1
  212. package/utils/timeUtils.test.js +0 -32
  213. package/utils/timeUtils.test.js.map +0 -1
@@ -1,131 +0,0 @@
1
- import React, { PureComponent } from 'react';
2
- import qs from 'query-string';
3
- import PropTypes from 'prop-types';
4
- import { TrackerLayer } from 'mobility-toolbox-js/ol';
5
-
6
- var propTypes = {
7
- /**
8
- * CSS class of the filter button.
9
- */
10
- className: PropTypes.string,
11
-
12
- /**
13
- * Title.
14
- */
15
- title: PropTypes.string,
16
-
17
- /**
18
- * Line info route identifer.
19
- */
20
- routeIdentifier: PropTypes.string.isRequired,
21
-
22
- /**
23
- * Button is active.
24
- */
25
- active: PropTypes.bool.isRequired,
26
-
27
- /**
28
- * Function triggered on button click.
29
- */
30
- onClick: PropTypes.func.isRequired,
31
-
32
- /**
33
- * Trackerlayer.
34
- */
35
- trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,
36
-
37
- /**
38
- * Children content of the button.
39
- */
40
- children: PropTypes.element.isRequired,
41
- };
42
-
43
- var defaultProps = {
44
- className: 'rt-route-filter',
45
- title: 'Filter',
46
- };
47
-
48
- /**
49
- * Button enables the filtering of a selected train.
50
- */
51
- var FilterButton = /*@__PURE__*/(function (PureComponent) {
52
- function FilterButton () {
53
- PureComponent.apply(this, arguments);
54
- }
55
-
56
- if ( PureComponent ) FilterButton.__proto__ = PureComponent;
57
- FilterButton.prototype = Object.create( PureComponent && PureComponent.prototype );
58
- FilterButton.prototype.constructor = FilterButton;
59
-
60
- FilterButton.prototype.updatePermalink = function updatePermalink (isRemoving) {
61
- var ref = this.props;
62
- var routeIdentifier = ref.routeIdentifier;
63
-
64
- var parameters = qs.parse(window.location.search.toLowerCase());
65
- if (isRemoving) {
66
- delete parameters.tripnumber;
67
- } else {
68
- parameters.tripnumber = parseInt(routeIdentifier.split('.')[0], 10);
69
- }
70
-
71
- var qStr = qs.stringify(parameters, { encode: false });
72
- var search = "?" + qStr;
73
- var ref$1 = window.location;
74
- var hash = ref$1.hash;
75
- window.history.replaceState(undefined, undefined, ("" + search + (hash || '')));
76
- };
77
-
78
- FilterButton.prototype.toggleFilter = function toggleFilter (routeIdentifier) {
79
- var assign;
80
-
81
- var ref = this.props;
82
- var trackerLayer = ref.trackerLayer;
83
- var active = ref.active;
84
- var onClick = ref.onClick;
85
- var activated = !active;
86
-
87
- if (trackerLayer) {
88
- if (activated) {
89
- this.updatePermalink(false);
90
- (assign = routeIdentifier.split('.'), trackerLayer.tripNumber = assign[0]);
91
- } else {
92
- this.updatePermalink(true);
93
- trackerLayer.tripNumber = null;
94
- }
95
- }
96
-
97
- onClick(activated);
98
- };
99
-
100
- FilterButton.prototype.render = function render () {
101
- var this$1 = this;
102
-
103
- var ref = this.props;
104
- var className = ref.className;
105
- var title = ref.title;
106
- var routeIdentifier = ref.routeIdentifier;
107
- var active = ref.active;
108
- var children = ref.children;
109
- var toggle = function () {
110
- return this$1.toggleFilter(routeIdentifier);
111
- };
112
-
113
- return (
114
- React.createElement( 'div', {
115
- 'aria-label': title, className: ("" + className + (active ? ' rt-active' : '')), title: title, onClick: toggle, onKeyPress: function (e) {
116
- return e.which === 13 && toggle();
117
- }, role: "button", tabIndex: 0 },
118
- children
119
- )
120
- );
121
- };
122
-
123
- return FilterButton;
124
- }(PureComponent));
125
-
126
- FilterButton.propTypes = propTypes;
127
- FilterButton.defaultProps = defaultProps;
128
-
129
- export default FilterButton;
130
-
131
- //# sourceMappingURL=FilterButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterButton.js","sources":["../../../src/components/FilterButton/FilterButton.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport qs from 'query-string';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\n\nconst propTypes = {\n /**\n * CSS class of the filter button.\n */\n className: PropTypes.string,\n\n /**\n * Title.\n */\n title: PropTypes.string,\n\n /**\n * Line info route identifer.\n */\n routeIdentifier: PropTypes.string.isRequired,\n\n /**\n * Button is active.\n */\n active: PropTypes.bool.isRequired,\n\n /**\n * Function triggered on button click.\n */\n onClick: PropTypes.func.isRequired,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.element.isRequired,\n};\n\nconst defaultProps = {\n className: 'rt-route-filter',\n title: 'Filter',\n};\n\n/**\n * Button enables the filtering of a selected train.\n */\nclass FilterButton extends PureComponent {\n updatePermalink(isRemoving) {\n const { routeIdentifier } = this.props;\n\n const parameters = qs.parse(window.location.search.toLowerCase());\n if (isRemoving) {\n delete parameters.tripnumber;\n } else {\n parameters.tripnumber = parseInt(routeIdentifier.split('.')[0], 10);\n }\n\n const qStr = qs.stringify(parameters, { encode: false });\n const search = `?${qStr}`;\n const { hash } = window.location;\n window.history.replaceState(undefined, undefined, `${search}${hash || ''}`);\n }\n\n toggleFilter(routeIdentifier) {\n const { trackerLayer, active, onClick } = this.props;\n const activated = !active;\n\n if (trackerLayer) {\n if (activated) {\n this.updatePermalink(false);\n [trackerLayer.tripNumber] = routeIdentifier.split('.');\n } else {\n this.updatePermalink(true);\n trackerLayer.tripNumber = null;\n }\n }\n\n onClick(activated);\n }\n\n render() {\n const { className, title, routeIdentifier, active, children } = this.props;\n const toggle = () => {\n return this.toggleFilter(routeIdentifier);\n };\n\n return (\n <div\n aria-label={title}\n className={`${className}${active ? ' rt-active' : ''}`}\n title={title}\n onClick={toggle}\n onKeyPress={(e) => {\n return e.which === 13 && toggle();\n }}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </div>\n );\n }\n}\n\nFilterButton.propTypes = propTypes;\nFilterButton.defaultProps = defaultProps;\n\nexport default FilterButton;\n"],"names":["const","this"],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- .rt-route-filter {
2
- display: flex;
3
- justify-content: center;
4
- align-items: center;
5
- height: 35px;
6
- width: 35px;
7
- border-radius: 7px;
8
- margin: 15px;
9
- margin-top: 10px;
10
- border: 2px solid #eee;
11
- background-color: white;
12
-
13
- svg {
14
- height: 30px;
15
- width: 30px;
16
- }
17
-
18
- &:hover {
19
- background-color: #eee;
20
- }
21
-
22
- &.rt-active {
23
- border-color: red;
24
- background-color: red;
25
-
26
- svg {
27
- path {
28
- fill: white;
29
- }
30
- }
31
-
32
- &:hover {
33
- background-color: red;
34
- }
35
- }
36
- }
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import renderer from 'react-test-renderer';
3
- import { configure, shallow } from 'enzyme';
4
- import Adapter from 'enzyme-adapter-react-16';
5
- import { MdFilterList } from 'react-icons/md';
6
- import { TrajservLayer } from 'mobility-toolbox-js/ol';
7
- import FilterButton from '.';
8
-
9
- configure({ adapter: new Adapter() });
10
- var trackerLayer = new TrajservLayer();
11
-
12
- test('FollowButton should match snapshot.', function () {
13
- var component = renderer.create(
14
- React.createElement( FilterButton, {
15
- className: "rt-filter-button", title: "Filter up", active: false, onClick: function () {}, routeIdentifier: "test", trackerLayer: trackerLayer },
16
- React.createElement( MdFilterList, null )
17
- )
18
- );
19
- var tree = component.toJSON();
20
- expect(tree).toMatchSnapshot();
21
- });
22
-
23
- test('FollowButton should toggle.', function () {
24
- var filterActive = false;
25
- var setFilterActive = function () {
26
- filterActive = !filterActive;
27
- };
28
- var bt = shallow(
29
- React.createElement( FilterButton, {
30
- className: "rt-filter-button", routeIdentifier: "test", active: filterActive, onClick: function (active) {
31
- return setFilterActive(active);
32
- }, trackerLayer: trackerLayer },
33
- React.createElement( MdFilterList, null )
34
- )
35
- );
36
-
37
- expect(filterActive).toBe(false);
38
-
39
- bt.find('.rt-filter-button').first().simulate('click');
40
-
41
- expect(filterActive).toBe(true);
42
-
43
- bt.find('.rt-filter-button').first().simulate('click');
44
-
45
- expect(filterActive).toBe(false);
46
- });
47
-
48
- //# sourceMappingURL=FilterButton.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterButton.test.js","sources":["../../../src/components/FilterButton/FilterButton.test.js"],"sourcesContent":["import React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport { MdFilterList } from 'react-icons/md';\nimport { TrajservLayer } from 'mobility-toolbox-js/ol';\nimport FilterButton from '.';\n\nconfigure({ adapter: new Adapter() });\nconst trackerLayer = new TrajservLayer();\n\ntest('FollowButton should match snapshot.', () => {\n const component = renderer.create(\n <FilterButton\n className=\"rt-filter-button\"\n title=\"Filter up\"\n active={false}\n onClick={() => {}}\n routeIdentifier=\"test\"\n trackerLayer={trackerLayer}\n >\n <MdFilterList />\n </FilterButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n});\n\ntest('FollowButton should toggle.', () => {\n let filterActive = false;\n const setFilterActive = () => {\n filterActive = !filterActive;\n };\n const bt = shallow(\n <FilterButton\n className=\"rt-filter-button\"\n routeIdentifier=\"test\"\n active={filterActive}\n onClick={(active) => {\n return setFilterActive(active);\n }}\n trackerLayer={trackerLayer}\n >\n <MdFilterList />\n </FilterButton>,\n );\n\n expect(filterActive).toBe(false);\n\n bt.find('.rt-filter-button').first().simulate('click');\n\n expect(filterActive).toBe(true);\n\n bt.find('.rt-filter-button').first().simulate('click');\n\n expect(filterActive).toBe(false);\n});\n"],"names":["const","let"],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,SAAS,SAAS,EAAE,OAAO,QAAQ,QAAQ,CAAC;AAC5C,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,SAAS,YAAY,QAAQ,gBAAgB,CAAC;AAC9C,SAAS,aAAa,QAAQ,wBAAwB,CAAC;AACvD,OAAO,YAAY,MAAM,GAAG,CAAC;AAC7B;AACA,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACtCA,GAAK,CAAC,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;AACzC;AACA,IAAI,CAAC,qCAAqC,WAAE,GAAM;AAClD,EAAEA,GAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM;AACnC,IAAI,qBAAC,eAAY;AACjB,MAAM,WAAU,kBAAkB,EAC5B,OAAM,WAAW,EACjB,QAAQ,KAAM,EACd,kBAAS,GAAM,EAAG,EAClB,iBAAgB,MAAM,EACtB,cAAc,eACf;AACL,MAAM,qBAAC,kBAAY,EAAG;AACtB,IAAI,CAAgB;AACpB,GAAG,CAAC;AACJ,EAAEA,GAAK,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;AAClC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;AACjC,CAAC,CAAC,CAAC;AACH;AACA,IAAI,CAAC,6BAA6B,WAAE,GAAM;AAC1C,EAAEC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,EAAED,GAAK,CAAC,eAAe,YAAG,GAAM;AAChC,IAAI,YAAY,GAAG,CAAC,YAAY,CAAC;AACjC,GAAG,CAAC;AACJ,EAAEA,GAAK,CAAC,EAAE,GAAG,OAAO;AACpB,IAAI,qBAAC,eAAY;AACjB,MAAM,WAAU,kBAAkB,EAC5B,iBAAgB,MAAM,EACtB,QAAQ,YAAa,EACrB,kBAAS,CAAC,MAAM,EAAK;AAC3B,QAAQ,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACvC,OAAQ,EACF,cAAc,eACf;AACL,MAAM,qBAAC,kBAAY,EAAG;AACtB,IAAI,CAAgB;AACpB,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzD;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzD;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;"}
@@ -1,3 +0,0 @@
1
- export { default } from './FilterButton';
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/FilterButton/index.js"],"sourcesContent":["export { default } from './FilterButton';\n"],"names":[],"mappings":"AAAA,SAAS,OAAO,QAAQ,gBAAgB,CAAC;"}
@@ -1,44 +0,0 @@
1
- import React from 'react';
2
- import renderer from 'react-test-renderer';
3
- import { configure, shallow } from 'enzyme';
4
- import Adapter from 'enzyme-adapter-react-16';
5
- import OLView from 'ol/View';
6
- import OLMap from 'ol/Map';
7
- import FitExtent from './FitExtent';
8
-
9
- configure({ adapter: new Adapter() });
10
-
11
- var extent = [1, 2, 3, 4];
12
-
13
- test('Button should match snapshot.', function () {
14
- var map = new OLMap({});
15
- var component = renderer.create(
16
- React.createElement( FitExtent, { map: map, extent: extent }, "FitExtent")
17
- );
18
- var tree = component.toJSON();
19
- expect(tree).toMatchSnapshot();
20
- });
21
-
22
- test('Should fit the extent.', function () {
23
- var map = new OLMap({ view: new OLView({ zoom: 7, center: [0, 0] }) });
24
- var wrapper = shallow(
25
- React.createElement( FitExtent, { map: map, extent: extent, className: "fit-ext" }, "FitExtent")
26
- );
27
- wrapper.find('.fit-ext').first().simulate('click', {});
28
- var calculatedExtent = map.getView().calculateExtent(map.getSize());
29
-
30
- expect(calculatedExtent).toStrictEqual([1, 2, 3, 4]);
31
- });
32
-
33
- test('Should fit the extent on return.', function () {
34
- var map = new OLMap({ view: new OLView({ zoom: 7, center: [0, 0] }) });
35
- var wrapper = shallow(
36
- React.createElement( FitExtent, { map: map, extent: extent, className: "fit-ext" }, "FitExtent")
37
- );
38
- wrapper.find('.fit-ext').first().simulate('click', { which: 13 });
39
- var calculatedExtent = map.getView().calculateExtent(map.getSize());
40
-
41
- expect(calculatedExtent).toStrictEqual([1, 2, 3, 4]);
42
- });
43
-
44
- //# sourceMappingURL=FitExtent.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FitExtent.test.js","sources":["../../../src/components/FitExtent/FitExtent.test.js"],"sourcesContent":["import React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport OLView from 'ol/View';\nimport OLMap from 'ol/Map';\nimport FitExtent from './FitExtent';\n\nconfigure({ adapter: new Adapter() });\n\nconst extent = [1, 2, 3, 4];\n\ntest('Button should match snapshot.', () => {\n const map = new OLMap({});\n const component = renderer.create(\n <FitExtent map={map} extent={extent}>\n FitExtent\n </FitExtent>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n});\n\ntest('Should fit the extent.', () => {\n const map = new OLMap({ view: new OLView({ zoom: 7, center: [0, 0] }) });\n const wrapper = shallow(\n <FitExtent map={map} extent={extent} className=\"fit-ext\">\n FitExtent\n </FitExtent>,\n );\n wrapper.find('.fit-ext').first().simulate('click', {});\n const calculatedExtent = map.getView().calculateExtent(map.getSize());\n\n expect(calculatedExtent).toStrictEqual([1, 2, 3, 4]);\n});\n\ntest('Should fit the extent on return.', () => {\n const map = new OLMap({ view: new OLView({ zoom: 7, center: [0, 0] }) });\n const wrapper = shallow(\n <FitExtent map={map} extent={extent} className=\"fit-ext\">\n FitExtent\n </FitExtent>,\n );\n wrapper.find('.fit-ext').first().simulate('click', { which: 13 });\n const calculatedExtent = map.getView().calculateExtent(map.getSize());\n\n expect(calculatedExtent).toStrictEqual([1, 2, 3, 4]);\n});\n"],"names":["const"],"mappings":"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"}
@@ -1,143 +0,0 @@
1
- import React, { PureComponent } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { TrackerLayer } from 'mobility-toolbox-js/ol';
4
-
5
- var propTypes = {
6
- /**
7
- * CSS class of the follow button.
8
- */
9
- className: PropTypes.string,
10
-
11
- /**
12
- * Title.
13
- */
14
- title: PropTypes.string,
15
-
16
- /**
17
- * Line info route identifer.
18
- */
19
- routeIdentifier: PropTypes.string.isRequired,
20
-
21
- /**
22
- * Button is active.
23
- */
24
- active: PropTypes.bool.isRequired,
25
-
26
- /**
27
- * Function triggered on button click.
28
- */
29
- onClick: PropTypes.func.isRequired,
30
-
31
- /**
32
- * Trackerlayer.
33
- */
34
- trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,
35
-
36
- /**
37
- * Function to set the map center, Used to follow a train.
38
- */
39
- setCenter: PropTypes.func.isRequired,
40
-
41
- /**
42
- * Children content of the button.
43
- */
44
- children: PropTypes.element.isRequired,
45
- };
46
-
47
- var defaultProps = {
48
- className: 'rt-route-follow',
49
- title: 'Follow',
50
- };
51
-
52
- /**
53
- * Button enables the follow of a selected train.
54
- */
55
- var FollowButton = /*@__PURE__*/(function (PureComponent) {
56
- function FollowButton() {
57
- PureComponent.call(this);
58
- this.onClick = this.onClick.bind(this);
59
- }
60
-
61
- if ( PureComponent ) FollowButton.__proto__ = PureComponent;
62
- FollowButton.prototype = Object.create( PureComponent && PureComponent.prototype );
63
- FollowButton.prototype.constructor = FollowButton;
64
-
65
- FollowButton.prototype.componentDidUpdate = function componentDidUpdate (prevProps) {
66
- var this$1 = this;
67
-
68
- var ref = this.props;
69
- var routeIdentifier = ref.routeIdentifier;
70
- var active = ref.active;
71
- var trackerLayer = ref.trackerLayer;
72
- var onClick = ref.onClick;
73
-
74
- if (routeIdentifier !== prevProps.routeIdentifier) {
75
- onClick(false);
76
- }
77
-
78
- if (active !== prevProps.active) {
79
- if (active && trackerLayer) {
80
- this.centerOnTrajectory(routeIdentifier);
81
- this.updateInterval = window.setInterval(function () {
82
- this$1.centerOnTrajectory(routeIdentifier);
83
- }, 50);
84
- } else {
85
- clearInterval(this.updateInterval);
86
- }
87
- }
88
- };
89
-
90
- FollowButton.prototype.componentWillUnmount = function componentWillUnmount () {
91
- clearInterval(this.updateInterval);
92
- };
93
-
94
- FollowButton.prototype.onClick = function onClick () {
95
- var ref = this.props;
96
- var active = ref.active;
97
- var onClick = ref.onClick;
98
- onClick(!active);
99
- };
100
-
101
- FollowButton.prototype.centerOnTrajectory = function centerOnTrajectory (routeIdentifier) {
102
- var ref = this.props;
103
- var trackerLayer = ref.trackerLayer;
104
- var setCenter = ref.setCenter;
105
-
106
- var ref$1 = trackerLayer.getVehicle(function (r) {
107
- return r.routeIdentifier === routeIdentifier;
108
- });
109
- var trajectory = ref$1[0];
110
- var firstCoord = trajectory && trajectory.coordinate;
111
- if (firstCoord) {
112
- setCenter(firstCoord);
113
- }
114
- };
115
-
116
- FollowButton.prototype.render = function render () {
117
- var this$1 = this;
118
-
119
- var ref = this.props;
120
- var className = ref.className;
121
- var title = ref.title;
122
- var active = ref.active;
123
- var children = ref.children;
124
-
125
- return (
126
- React.createElement( 'div', {
127
- 'aria-label': title, className: ("" + className + (active ? ' rt-active' : '')), title: title, onClick: this.onClick, onKeyPress: function (e) {
128
- return e.which === 13 && this$1.onClick;
129
- }, role: "button", tabIndex: 0 },
130
- children
131
- )
132
- );
133
- };
134
-
135
- return FollowButton;
136
- }(PureComponent));
137
-
138
- FollowButton.propTypes = propTypes;
139
- FollowButton.defaultProps = defaultProps;
140
-
141
- export default FollowButton;
142
-
143
- //# sourceMappingURL=FollowButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FollowButton.js","sources":["../../../src/components/FollowButton/FollowButton.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\n\nconst propTypes = {\n /**\n * CSS class of the follow button.\n */\n className: PropTypes.string,\n\n /**\n * Title.\n */\n title: PropTypes.string,\n\n /**\n * Line info route identifer.\n */\n routeIdentifier: PropTypes.string.isRequired,\n\n /**\n * Button is active.\n */\n active: PropTypes.bool.isRequired,\n\n /**\n * Function triggered on button click.\n */\n onClick: PropTypes.func.isRequired,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Function to set the map center, Used to follow a train.\n */\n setCenter: PropTypes.func.isRequired,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.element.isRequired,\n};\n\nconst defaultProps = {\n className: 'rt-route-follow',\n title: 'Follow',\n};\n\n/**\n * Button enables the follow of a selected train.\n */\nclass FollowButton extends PureComponent {\n constructor() {\n super();\n this.onClick = this.onClick.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n const { routeIdentifier, active, trackerLayer, onClick } = this.props;\n\n if (routeIdentifier !== prevProps.routeIdentifier) {\n onClick(false);\n }\n\n if (active !== prevProps.active) {\n if (active && trackerLayer) {\n this.centerOnTrajectory(routeIdentifier);\n this.updateInterval = window.setInterval(() => {\n this.centerOnTrajectory(routeIdentifier);\n }, 50);\n } else {\n clearInterval(this.updateInterval);\n }\n }\n }\n\n componentWillUnmount() {\n clearInterval(this.updateInterval);\n }\n\n onClick() {\n const { active, onClick } = this.props;\n onClick(!active);\n }\n\n centerOnTrajectory(routeIdentifier) {\n const { trackerLayer, setCenter } = this.props;\n\n const [trajectory] = trackerLayer.getVehicle((r) => {\n return r.routeIdentifier === routeIdentifier;\n });\n const firstCoord = trajectory && trajectory.coordinate;\n if (firstCoord) {\n setCenter(firstCoord);\n }\n }\n\n render() {\n const { className, title, active, children } = this.props;\n\n return (\n <div\n aria-label={title}\n className={`${className}${active ? ' rt-active' : ''}`}\n title={title}\n onClick={this.onClick}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick;\n }}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </div>\n );\n }\n}\n\nFollowButton.propTypes = propTypes;\nFollowButton.defaultProps = defaultProps;\n\nexport default FollowButton;\n"],"names":["const","super","this"],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- .rt-route-follow {
2
- display: flex;
3
- justify-content: center;
4
- align-items: center;
5
- height: 35px;
6
- width: 35px;
7
- border-radius: 7px;
8
- margin: 15px;
9
- margin-top: 10px;
10
- border: 2px solid #eee;
11
- background-color: white;
12
-
13
- svg {
14
- height: 30px;
15
- width: 30px;
16
- }
17
-
18
- &:hover {
19
- background-color: #eee;
20
- }
21
-
22
- &.rt-active {
23
- border-color: red;
24
- background-color: red;
25
-
26
- svg {
27
- path {
28
- fill: white;
29
- }
30
- }
31
-
32
- &:hover {
33
- background-color: red;
34
- }
35
- }
36
- }
@@ -1,57 +0,0 @@
1
- import React from 'react';
2
- import renderer from 'react-test-renderer';
3
- import { configure, shallow } from 'enzyme';
4
- import Adapter from 'enzyme-adapter-react-16';
5
- import { MdNavigation } from 'react-icons/md';
6
- import { TrajservLayer } from 'mobility-toolbox-js/ol';
7
- import FollowButton from '.';
8
-
9
- configure({ adapter: new Adapter() });
10
-
11
- var funcs = {
12
- onClick: function () {},
13
- };
14
-
15
- var trackerLayer = new TrajservLayer();
16
-
17
- test('FollowButton should match snapshot.', function () {
18
- var component = renderer.create(
19
- React.createElement( FollowButton, {
20
- className: "rt-follow-button", title: "Follow up", active: false, onClick: function () {}, routeIdentifier: "test", trackerLayer: trackerLayer, setCenter: function () {
21
- return funcs.onClick();
22
- } },
23
- React.createElement( MdNavigation, null )
24
- )
25
- );
26
- var tree = component.toJSON();
27
- expect(tree).toMatchSnapshot();
28
- });
29
-
30
- test('FollowButton should toggle.', function () {
31
- var followActive = false;
32
- var setFollowActive = function () {
33
- followActive = !followActive;
34
- };
35
- var bt = shallow(
36
- React.createElement( FollowButton, {
37
- className: "rt-follow-button", title: "Follow up", active: followActive, onClick: function (active) {
38
- return setFollowActive(active);
39
- }, routeIdentifier: "test", trackerLayer: trackerLayer, setCenter: function () {
40
- return funcs.onClick();
41
- } },
42
- React.createElement( MdNavigation, null )
43
- )
44
- );
45
-
46
- expect(followActive).toBe(false);
47
-
48
- bt.find('.rt-follow-button').first().simulate('click');
49
-
50
- expect(followActive).toBe(true);
51
-
52
- bt.find('.rt-follow-button').first().simulate('click');
53
-
54
- expect(followActive).toBe(false);
55
- });
56
-
57
- //# sourceMappingURL=FollowButton.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FollowButton.test.js","sources":["../../../src/components/FollowButton/FollowButton.test.js"],"sourcesContent":["import React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport { MdNavigation } from 'react-icons/md';\nimport { TrajservLayer } from 'mobility-toolbox-js/ol';\nimport FollowButton from '.';\n\nconfigure({ adapter: new Adapter() });\n\nconst funcs = {\n onClick: () => {},\n};\n\nconst trackerLayer = new TrajservLayer();\n\ntest('FollowButton should match snapshot.', () => {\n const component = renderer.create(\n <FollowButton\n className=\"rt-follow-button\"\n title=\"Follow up\"\n active={false}\n onClick={() => {}}\n routeIdentifier=\"test\"\n trackerLayer={trackerLayer}\n setCenter={() => {\n return funcs.onClick();\n }}\n >\n <MdNavigation />\n </FollowButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n});\n\ntest('FollowButton should toggle.', () => {\n let followActive = false;\n const setFollowActive = () => {\n followActive = !followActive;\n };\n const bt = shallow(\n <FollowButton\n className=\"rt-follow-button\"\n title=\"Follow up\"\n active={followActive}\n onClick={(active) => {\n return setFollowActive(active);\n }}\n routeIdentifier=\"test\"\n trackerLayer={trackerLayer}\n setCenter={() => {\n return funcs.onClick();\n }}\n >\n <MdNavigation />\n </FollowButton>,\n );\n\n expect(followActive).toBe(false);\n\n bt.find('.rt-follow-button').first().simulate('click');\n\n expect(followActive).toBe(true);\n\n bt.find('.rt-follow-button').first().simulate('click');\n\n expect(followActive).toBe(false);\n});\n"],"names":["const","let"],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,SAAS,SAAS,EAAE,OAAO,QAAQ,QAAQ,CAAC;AAC5C,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,SAAS,YAAY,QAAQ,gBAAgB,CAAC;AAC9C,SAAS,aAAa,QAAQ,wBAAwB,CAAC;AACvD,OAAO,YAAY,MAAM,GAAG,CAAC;AAC7B;AACA,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACtC;AACAA,GAAK,CAAC,KAAK,GAAG;AACd,EAAE,OAAO,WAAE,GAAM,EAAE;AACnB,CAAC,CAAC;AACF;AACAA,GAAK,CAAC,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;AACzC;AACA,IAAI,CAAC,qCAAqC,WAAE,GAAM;AAClD,EAAEA,GAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM;AACnC,IAAI,qBAAC,eAAY;AACjB,MAAM,WAAU,kBAAkB,EAC5B,OAAM,WAAW,EACjB,QAAQ,KAAM,EACd,kBAAS,GAAM,EAAG,EAClB,iBAAgB,MAAM,EACtB,cAAc,YAAa,EAC3B,oBAAW,GAAM;AACvB,QAAQ,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,UACK;AACL,MAAM,qBAAC,kBAAY,EAAG;AACtB,IAAI,CAAgB;AACpB,GAAG,CAAC;AACJ,EAAEA,GAAK,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;AAClC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;AACjC,CAAC,CAAC,CAAC;AACH;AACA,IAAI,CAAC,6BAA6B,WAAE,GAAM;AAC1C,EAAEC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,EAAED,GAAK,CAAC,eAAe,YAAG,GAAM;AAChC,IAAI,YAAY,GAAG,CAAC,YAAY,CAAC;AACjC,GAAG,CAAC;AACJ,EAAEA,GAAK,CAAC,EAAE,GAAG,OAAO;AACpB,IAAI,qBAAC,eAAY;AACjB,MAAM,WAAU,kBAAkB,EAC5B,OAAM,WAAW,EACjB,QAAQ,YAAa,EACrB,kBAAS,CAAC,MAAM,EAAK;AAC3B,QAAQ,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACvC,OAAQ,EACF,iBAAgB,MAAM,EACtB,cAAc,YAAa,EAC3B,oBAAW,GAAM;AACvB,QAAQ,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,UACK;AACL,MAAM,qBAAC,kBAAY,EAAG;AACtB,IAAI,CAAgB;AACpB,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzD;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzD;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;"}
@@ -1,3 +0,0 @@
1
- export { default } from './FollowButton';
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/FollowButton/index.js"],"sourcesContent":["export { default } from './FollowButton';\n"],"names":[],"mappings":"AAAA,SAAS,OAAO,QAAQ,gBAAgB,CAAC;"}