@geops/rvf-mobility-web-component 0.1.12 → 0.1.14

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 (100) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/index.html +1 -1
  3. package/index.js +340 -219
  4. package/input.css +2 -8
  5. package/package.json +18 -16
  6. package/scripts/build.mjs +0 -1
  7. package/scripts/dev.mjs +2 -1
  8. package/src/RouteSchedule/RouteSchedule.tsx +3 -1
  9. package/src/RouteStop/RouteStop.tsx +1 -1
  10. package/src/RvfButton/RvfButton.tsx +6 -3
  11. package/src/RvfCheckbox/RvfCheckbox.tsx +10 -3
  12. package/src/RvfExportMenu/RvfExportMenu.tsx +62 -68
  13. package/src/RvfFloatingMenu/RvfFloatingMenu.tsx +3 -3
  14. package/src/RvfIconButton/RvfIconButton.tsx +5 -2
  15. package/src/RvfInputCopy/RvfInputCopy.tsx +57 -0
  16. package/src/RvfInputCopy/index.tsx +1 -0
  17. package/src/RvfLayerTree/RvfLayerTree.tsx +5 -9
  18. package/src/RvfLayerTree/TreeItem/TreeItem.tsx +39 -9
  19. package/src/RvfLayerTree/layersTreeReducer.ts +1 -0
  20. package/src/RvfLayerTreeButton/RvfLayerTreeButton.tsx +27 -0
  21. package/src/RvfLayerTreeButton/index.tsx +1 -0
  22. package/src/RvfLineNetworkPlanLayer/RvfLineNetworkPlanLayer.tsx +9 -5
  23. package/src/RvfMobilityMap/RvfMobilityMap.tsx +253 -35
  24. package/src/RvfOverlayHeader/RvfOverlayHeader.tsx +40 -0
  25. package/src/RvfOverlayHeader/index.tsx +1 -0
  26. package/src/RvfPermalink/RvfPermalink.tsx +18 -0
  27. package/src/RvfPermalink/index.tsx +1 -0
  28. package/src/RvfPoisLayer/RvfPoisLayer.tsx +6 -0
  29. package/src/RvfRadioButton/RvfRadioButton.tsx +1 -1
  30. package/src/RvfSelect/RvfSelect.tsx +2 -2
  31. package/src/RvfSellingPointsLayer/RvfSellingPointsLayer.tsx +25 -6
  32. package/src/RvfShare/RvfPermalinkButton/RvfPermalinkButton.tsx +61 -0
  33. package/src/RvfShare/RvfPermalinkButton/index.tsx +1 -0
  34. package/src/RvfShare/RvfShare.tsx +40 -0
  35. package/src/RvfShare/index.tsx +1 -0
  36. package/src/RvfShareMenuButton/RvfShareMenuButton.tsx +27 -0
  37. package/src/RvfShareMenuButton/index.tsx +1 -0
  38. package/src/RvfSharedMobilityLayerGroup/RvfSharedMobilityLayerGroup.tsx +137 -51
  39. package/src/RvfSingleClickListener/RvfSingleClickListener.tsx +10 -2
  40. package/src/RvfTarifZonenLayer/RvfTarifZonenLayer.tsx +9 -5
  41. package/src/RvfTopics/RvfTopics.tsx +21 -24
  42. package/src/icons/Automat/Automat.tsx +8 -0
  43. package/src/icons/Automat/index.tsx +1 -0
  44. package/src/icons/Automat/rvf_automat.svg +15 -0
  45. package/src/icons/Bike/Bike.tsx +8 -0
  46. package/src/icons/Bike/index.tsx +1 -0
  47. package/src/icons/Bike/rvf_shared_bike.svg +15 -0
  48. package/src/icons/Car/Car.tsx +8 -0
  49. package/src/icons/Car/index.tsx +1 -0
  50. package/src/icons/Car/rvf_shared_car.svg +16 -0
  51. package/src/icons/CargoBike/CargoBike.tsx +8 -0
  52. package/src/icons/CargoBike/index.tsx +1 -0
  53. package/src/icons/CargoBike/rvf_shared_cargo_bike.svg +16 -0
  54. package/src/icons/Copy/Copy.tsx +25 -0
  55. package/src/icons/Copy/index.tsx +1 -0
  56. package/src/icons/Doc/Doc.tsx +19 -0
  57. package/src/icons/Doc/doc.svg +7 -0
  58. package/src/icons/Doc/index.tsx +1 -0
  59. package/src/icons/Ebike/Ebike.tsx +8 -0
  60. package/src/icons/Ebike/index.tsx +1 -0
  61. package/src/icons/Ebike/rvf_shared_e-bike.svg +15 -0
  62. package/src/icons/Email/Email.tsx +19 -0
  63. package/src/icons/Email/email.svg +7 -0
  64. package/src/icons/Email/index.tsx +1 -0
  65. package/src/icons/FilePdf/FilePdf.tsx +19 -0
  66. package/src/icons/FilePdf/file-pdf.svg +7 -0
  67. package/src/icons/FilePdf/index.tsx +1 -0
  68. package/src/icons/Image/Image.tsx +24 -0
  69. package/src/icons/Image/index.tsx +1 -0
  70. package/src/icons/InPerson/InPerson.tsx +8 -0
  71. package/src/icons/InPerson/index.tsx +1 -0
  72. package/src/icons/InPerson/rvf_persoenlich.svg +17 -0
  73. package/src/icons/Minus/minus-grey.svg +7 -0
  74. package/src/icons/Ride/Ride.tsx +8 -0
  75. package/src/icons/Ride/index.tsx +1 -0
  76. package/src/icons/Ride/rvf_shared_ride.svg +15 -0
  77. package/src/icons/Scooter/Scooter.tsx +8 -0
  78. package/src/icons/Scooter/index.tsx +1 -0
  79. package/src/icons/Scooter/rvf_shared_scooter.svg +15 -0
  80. package/src/icons/Share/Share.tsx +24 -0
  81. package/src/icons/Share/index.tsx +1 -0
  82. package/src/icons/Stack/Stack.tsx +24 -0
  83. package/src/icons/Stack/index.tsx +1 -0
  84. package/src/icons/Video/Video.tsx +8 -0
  85. package/src/icons/Video/index.tsx +1 -0
  86. package/src/icons/Video/rvf_video.svg +19 -0
  87. package/src/icons/rvf_shared_ride_2.svg +12 -0
  88. package/src/utils/constants.ts +2 -0
  89. package/src/utils/createMobiDataBwWfsLayer.ts +28 -20
  90. package/src/utils/createSharedMobilityLayer.ts +44 -33
  91. package/src/utils/exportPdf.ts +11 -0
  92. package/src/utils/getAllLayers.ts +25 -0
  93. package/src/utils/hooks/useRvfContext.tsx +45 -0
  94. package/tailwind.config.mjs +32 -29
  95. package/src/FloatingMenu/FloatingMenu.tsx +0 -42
  96. package/src/FloatingMenu/index.tsx +0 -1
  97. package/src/icons/Bicycle/verkehrstraeger-rad-2px-white.svg +0 -19
  98. package/src/icons/Car/verkehrstraeger-auto-2px-white.svg +0 -14
  99. package/src/icons/CargoBicycle/verkehrstraeger-lastenrad-2px-white.svg +0 -27
  100. package/src/icons/Scooter/scooter.svg +0 -10
@@ -0,0 +1,27 @@
1
+ import type { JSX, PreactDOMAttributes } from "preact";
2
+
3
+ import { memo } from "preact/compat";
4
+ import { useCallback } from "preact/hooks";
5
+
6
+ import Share from "../icons/Share";
7
+ import RvfIconButton from "../RvfIconButton";
8
+ import useRvfContext from "../utils/hooks/useRvfContext";
9
+
10
+ export type RvfShareMenuButtonProps = JSX.HTMLAttributes<HTMLButtonElement> &
11
+ PreactDOMAttributes;
12
+
13
+ function RvfShareMenuButton({ ...props }: RvfShareMenuButtonProps) {
14
+ const { isShareMenuOpen, setIsShareMenuOpen } = useRvfContext();
15
+
16
+ const onClick = useCallback(() => {
17
+ setIsShareMenuOpen(!isShareMenuOpen);
18
+ }, [isShareMenuOpen, setIsShareMenuOpen]);
19
+
20
+ return (
21
+ <RvfIconButton {...props} onClick={onClick} selected={isShareMenuOpen}>
22
+ <Share />
23
+ </RvfIconButton>
24
+ );
25
+ }
26
+
27
+ export default memo(RvfShareMenuButton);
@@ -0,0 +1 @@
1
+ export { default } from "./RvfShareMenuButton";
@@ -1,78 +1,158 @@
1
1
  import type { Options } from "ol/layer/Group";
2
2
 
3
+ import { MaplibreStyleLayer } from "mobility-toolbox-js/ol";
3
4
  import { Feature } from "ol";
4
5
  import { Point } from "ol/geom";
5
6
  import { Group, Vector } from "ol/layer";
7
+ import { unByKey } from "ol/Observable";
6
8
  import { Cluster } from "ol/source";
7
9
  import VectorSource from "ol/source/Vector";
8
10
  import { memo } from "preact/compat";
9
11
  import { useEffect, useMemo } from "preact/hooks";
10
12
 
13
+ import Bicycle from "../icons/Bike";
14
+ import Car from "../icons/Car";
15
+ import CargoBike from "../icons/CargoBike";
16
+ import Ride from "../icons/Ride";
17
+ import Scooter from "../icons/Scooter";
11
18
  import createMobiDataBwWfsLayer from "../utils/createMobiDataBwWfsLayer";
12
- import createSharedMobilityLayer from "../utils/createSharedMobilityLayer";
19
+ import createFreeFloatMobilityLayer from "../utils/createSharedMobilityLayer";
13
20
  import useMapContext from "../utils/hooks/useMapContext";
21
+ import useRvfContext from "../utils/hooks/useRvfContext";
14
22
 
15
- function RvfSharedMobilityLayerGroup(props: Options & Record<string, unknown>) {
16
- const { map } = useMapContext();
23
+ export type GroupOptions = Options & Record<string, unknown>;
17
24
 
25
+ function RvfSharedMobilityLayerGroup(props: GroupOptions) {
26
+ const { baseLayer, map } = useMapContext();
27
+ const { setSharedMobilityLayerGroup } = useRvfContext();
18
28
  const group = useMemo(() => {
19
- const sharingStationsBicycle = createMobiDataBwWfsLayer(
20
- "sharing_stations_bicycle",
21
- "green",
22
- );
23
- sharingStationsBicycle.set("title", "Stations Bicycle");
24
-
25
- const sharingStationsCar = createMobiDataBwWfsLayer(
26
- "sharing_stations_car",
27
- "green",
28
- );
29
- sharingStationsCar.set("title", "Stations Car");
30
-
31
- const sharingStationsCargoBicycle = createMobiDataBwWfsLayer(
32
- "sharing_stations_cargo_bicycle",
33
- "green",
34
- );
35
- sharingStationsCargoBicycle.set("title", "Stations Cargo Bicycle");
36
-
37
- const sharingStationsScooterStanding = createMobiDataBwWfsLayer(
38
- "sharing_stations_scooters_standing",
39
- "purple",
40
- );
41
- sharingStationsScooterStanding.set("title", "Stations Scooter");
42
-
43
- const sharingVehicles = createSharedMobilityLayer(
44
- "sharing_vehicles",
45
- "green",
46
- );
47
- sharingVehicles.set("title", "Free Floating");
29
+ if (!baseLayer) {
30
+ return null;
31
+ }
32
+
33
+ const sharingBicycle = new Group({
34
+ layers: [
35
+ new MaplibreStyleLayer({
36
+ isQueryable: true,
37
+ layersFilter: ({ metadata }) => {
38
+ return metadata?.["rvf.filter"] === "bike";
39
+ },
40
+ maplibreLayer: baseLayer,
41
+ maxZoom: 18,
42
+ }),
43
+ createMobiDataBwWfsLayer("sharing_stations_bicycle", "green"),
44
+ createFreeFloatMobilityLayer("sharing_vehicles", "green", "bike"),
45
+ ],
46
+ title: (
47
+ <div className="flex items-center justify-between gap-2">
48
+ Fahrrad
49
+ <Bicycle />
50
+ </div>
51
+ ),
52
+ } as GroupOptions);
53
+
54
+ const sharingCar = new Group({
55
+ layers: [
56
+ new MaplibreStyleLayer({
57
+ isQueryable: true,
58
+ layersFilter: ({ metadata }) => {
59
+ return metadata?.["rvf.filter"] === "car";
60
+ },
61
+ maplibreLayer: baseLayer,
62
+ }),
63
+ createMobiDataBwWfsLayer("sharing_stations_car", "green"),
64
+ createFreeFloatMobilityLayer("sharing_vehicles", "green", "car"),
65
+ ],
66
+ title: (
67
+ <div className="flex items-center justify-between gap-2">
68
+ Auto
69
+ <Car />
70
+ </div>
71
+ ),
72
+ } as GroupOptions);
73
+
74
+ const sharingCargoBicycle = new Group({
75
+ layers: [
76
+ new MaplibreStyleLayer({
77
+ isQueryable: true,
78
+ layersFilter: ({ metadata }) => {
79
+ return metadata?.["rvf.filter"] === "cargo_bike";
80
+ },
81
+ maplibreLayer: baseLayer,
82
+ }),
83
+ createMobiDataBwWfsLayer("sharing_stations_cargo_bicycle", "green"),
84
+ createFreeFloatMobilityLayer("sharing_vehicles", "green", "cargo_bike"),
85
+ ],
86
+ title: (
87
+ <div className="flex items-center justify-between gap-2">
88
+ Cargobike
89
+ <CargoBike />
90
+ </div>
91
+ ),
92
+ } as GroupOptions);
93
+
94
+ const sharingScooter = new Group({
95
+ layers: [
96
+ // No scooter station data available
97
+ // new MaplibreStyleLayer({
98
+ // isQueryable: true,
99
+ // layersFilter: ({ metadata }) => {
100
+ // return metadata?.["rvf.filter"] === "scooter";
101
+ // },
102
+ // maplibreLayer: baseLayer,
103
+ // }),
104
+ createMobiDataBwWfsLayer("sharing_stations_scooters_standing", "green"),
105
+ createFreeFloatMobilityLayer("sharing_vehicles", "green", "scooter"),
106
+ ],
107
+ title: (
108
+ <div className="flex items-center justify-between gap-2">
109
+ E-Roller
110
+ <Scooter />
111
+ </div>
112
+ ),
113
+ } as GroupOptions);
114
+
115
+ const sharingHitchHiking = new MaplibreStyleLayer({
116
+ isQueryable: true,
117
+ layersFilter: ({ metadata }) => {
118
+ return metadata?.["rvf.filter"] === "hitchhiking";
119
+ },
120
+ maplibreLayer: baseLayer,
121
+ title: (
122
+ <div className="flex items-center justify-between gap-2">
123
+ Mitfahrpunkte
124
+ <Ride />
125
+ </div>
126
+ ),
127
+ });
48
128
 
49
129
  return new Group({
50
130
  layers: [
51
- sharingStationsBicycle,
52
- sharingStationsCar,
53
- sharingStationsCargoBicycle,
54
- sharingStationsScooterStanding,
55
- sharingVehicles,
131
+ sharingBicycle,
132
+ sharingCar,
133
+ sharingCargoBicycle,
134
+ sharingScooter,
135
+ sharingHitchHiking,
56
136
  ],
57
137
  ...props,
58
138
  });
59
- }, [props]);
139
+ }, [baseLayer, props]);
60
140
 
61
141
  // Reload features every minute
62
142
  useEffect(() => {
63
143
  const interval = window.setInterval(() => {
64
- group.getLayers().forEach((layer: Vector) => {
65
- // @ts-expect-error - private property
66
- layer.getSource().loadedExtentsRtree_.clear();
67
- layer.getSource().clear(true);
68
- layer.getSource().changed();
69
-
70
- // For cluster source
71
- (
144
+ group.getLayers().forEach((layer: Group) => {
145
+ layer.getLayers().forEach((layer: MaplibreStyleLayer | Vector) => {
146
+ const source = layer.getSource();
147
+ source?.refresh();
148
+
149
+ // For cluster source
72
150
  (
73
- layer.getSource() as Cluster<Feature<Point>>
74
- )?.getSource?.() as VectorSource<Feature<Point>>
75
- )?.refresh();
151
+ (source as Cluster<Feature<Point>>)?.getSource?.() as VectorSource<
152
+ Feature<Point>
153
+ >
154
+ )?.refresh();
155
+ });
76
156
  });
77
157
  }, 60000);
78
158
  return () => {
@@ -80,20 +160,26 @@ function RvfSharedMobilityLayerGroup(props: Options & Record<string, unknown>) {
80
160
  };
81
161
  }, [group]);
82
162
 
163
+ useEffect(() => {
164
+ setSharedMobilityLayerGroup(group);
165
+ }, [group, setSharedMobilityLayerGroup]);
166
+
83
167
  useEffect(() => {
84
168
  if (!map || !group) {
85
169
  return;
86
170
  }
87
- map.on("moveend", () => {
171
+
172
+ const key = map.on("moveend", () => {
88
173
  console.log("ZOOM", map.getView().getZoom());
89
174
  });
90
175
 
91
176
  map.addLayer(group);
92
177
 
93
178
  return () => {
179
+ unByKey(key);
94
180
  map.removeLayer(group);
95
181
  };
96
- });
182
+ }, [map, group]);
97
183
 
98
184
  return null;
99
185
  }
@@ -110,8 +110,16 @@ function SingleClickListener() {
110
110
  setSelectedFeature(null);
111
111
  setSelectedFeatures([]);
112
112
  } else {
113
- setSelectedFeatures(features);
114
- setSelectedFeature(features[0]);
113
+ const feats = [];
114
+ features.forEach((feature) => {
115
+ if (feature.get("features")) {
116
+ feats.push(...feature.get("features"));
117
+ } else {
118
+ feats.push(feature);
119
+ }
120
+ });
121
+ setSelectedFeatures(feats);
122
+ setSelectedFeature(feats[0]);
115
123
  }
116
124
  },
117
125
  [
@@ -4,26 +4,30 @@ import { memo } from "preact/compat";
4
4
  import { useEffect, useMemo } from "preact/hooks";
5
5
 
6
6
  import useMapContext from "../utils/hooks/useMapContext";
7
+ import useRvfContext from "../utils/hooks/useRvfContext";
7
8
 
8
9
  function RvfTarifZonenLayer(props: MaplibreStyleLayerOptions) {
9
10
  const { baseLayer, map } = useMapContext();
11
+ const { setTarifZonenLayer } = useRvfContext();
10
12
 
11
13
  const layer = useMemo(() => {
12
14
  if (!baseLayer) {
13
15
  return null;
14
16
  }
15
17
  return new MaplibreStyleLayer({
16
- layersFilter: ({ metadata, source, "source-layer": sourceLayer }) => {
17
- return (
18
- metadata?.["rvf.filter"] === "tarifzonen" ||
19
- (source === "rvf" && sourceLayer === "tarifzonen")
20
- );
18
+ isQueryable: false,
19
+ layersFilter: ({ metadata }) => {
20
+ return metadata?.["rvf.filter"] === "zones";
21
21
  },
22
22
  maplibreLayer: baseLayer,
23
23
  ...(props || {}),
24
24
  });
25
25
  }, [baseLayer, props]);
26
26
 
27
+ useEffect(() => {
28
+ setTarifZonenLayer(layer);
29
+ }, [layer, setTarifZonenLayer]);
30
+
27
31
  useEffect(() => {
28
32
  if (!map || !layer) {
29
33
  return;
@@ -1,4 +1,6 @@
1
+ import { getUid } from "ol";
1
2
  import { Group } from "ol/layer";
3
+ import BaseLayer from "ol/layer/Base";
2
4
  import { JSX, PreactDOMAttributes } from "preact";
3
5
  import { memo } from "preact/compat";
4
6
 
@@ -9,36 +11,31 @@ import useMapContext from "../utils/hooks/useMapContext";
9
11
  export type RvfTopicsProps = {} & JSX.HTMLAttributes<HTMLDivElement> &
10
12
  PreactDOMAttributes;
11
13
 
14
+ const getConfigForLayer = (layer: BaseLayer) => {
15
+ return {
16
+ childItems:
17
+ (layer as Group)
18
+ ?.getLayers?.()
19
+ .getArray()
20
+ .map((subLayer) => {
21
+ return getConfigForLayer(subLayer);
22
+ }) || [],
23
+ id: getUid(layer),
24
+ isControlChecked: layer.getVisible(),
25
+ layer,
26
+ selectionType: SelectionType.CHECKBOX,
27
+ title: layer.get("title"),
28
+ };
29
+ };
30
+
12
31
  function RvfTopics(props: RvfTopicsProps) {
13
32
  const { map } = useMapContext();
33
+
14
34
  const layers = map
15
35
  .getLayers()
16
36
  .getArray()
17
- .filter((layer) => {
18
- return !layer.get("isNotInLayerTree");
19
- })
20
37
  .map((layer) => {
21
- return {
22
- childItems:
23
- (layer as Group)
24
- ?.getLayers?.()
25
- .getArray()
26
- .map((subLayer) => {
27
- return {
28
- childItems: [],
29
- id: (Math.random() + 1).toString(36).substring(7),
30
- isControlChecked: subLayer.getVisible(),
31
- layer: subLayer,
32
- selectionType: SelectionType.CHECKBOX,
33
- title: subLayer.get("title"),
34
- };
35
- }) || [],
36
- id: (Math.random() + 1).toString(36).substring(7),
37
- isControlChecked: layer.getVisible(),
38
- layer,
39
- selectionType: SelectionType.CHECKBOX,
40
- title: layer.get("title"),
41
- };
38
+ return getConfigForLayer(layer);
42
39
  });
43
40
 
44
41
  return <RvfLayerTree layers={layers} {...props} />;
@@ -0,0 +1,8 @@
1
+ // @ts-expect-error - svg loaded as dataurl
2
+ import src from "./rvf_automat.svg";
3
+
4
+ function Automat({ ...props }) {
5
+ return <img alt="Automat" src={src} title="Automat" {...props} />;
6
+ }
7
+
8
+ export default Automat;
@@ -0,0 +1 @@
1
+ export { default } from "./Automat";
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" width="25.64767838" height="25.64767456" viewBox="0 0 25.64767838 25.64767456">
3
+ <g id="rvf_base">
4
+ <g id="rvf_automat">
5
+ <g>
6
+ <path d="M12.82391739,25.14781189C6.02850723,25.14781189.50018692,19.6190033.50018692,12.82359314S6.02850723.49986267,12.82391739.49986267s12.32373047,5.52832031,12.32373047,12.32373047-5.52832031,12.32421875-12.32373047,12.32421875Z" style="fill: #f3c200;"/>
7
+ <path d="M12.82384109,1c6.53012085,0,11.82383728,5.29370117,11.82383728,11.82383728,0,6.53012085-5.29371643,11.82383728-11.82383728,11.82383728-6.53012848,0-11.82384109-5.29371643-11.82384109-11.82383728C1,6.29370117,6.29371262,1,12.82384109,1M12.82384109,0C5.7527504,0,0,5.75274658,0,12.82383728s5.7527504,12.82383728,12.82384109,12.82383728,12.82383728-5.75274658,12.82383728-12.82383728S19.89493179,0,12.82384109,0h0Z" style="fill: #f7f4f4;"/>
8
+ </g>
9
+ <g>
10
+ <path d="M13.78932179,15.52073714h2.22363281c.41259766,0,.74804688-.33544922.74804688-.74804688s-.33544922-.74804688-.74804688-.74804688h-2.22363281c-.41259766,0-.74804688.33544922-.74804688.74804688s.33544922.74804688.74804688.74804688Z" style="fill: #fff; fill-rule: evenodd;"/>
11
+ <path d="M17.35963429,4.94749496h-9.07177734c-1.12695312,0-2.04394531.91699219-2.04394531,2.04443359v11.6640625c0,1.12695312.91699219,2.04394531,2.04394531,2.04394531h9.07177734c1.12744141,0,2.04443359-.91699219,2.04443359-2.07568359V6.99192855c0-1.12744141-.91699219-2.04443359-2.04443359-2.04443359ZM7.74000539,18.07640121h10.16796875v.57958984c0,.30224609-.24609375.54785156-.54833984.54785156h-9.07177734c-.30224609,0-.54785156-.24560547-.54785156-.57958984v-.54785156ZM17.35963429,6.44407699c.30224609,0,.54833984.24560547.54833984.54785156v1.77832031H7.74000539v-1.77832031c0-.30224609.24560547-.54785156.54785156-.54785156h9.07177734ZM17.90797414,10.26634261v6.31347656H7.74000539v-6.31347656h10.16796875Z" style="fill: #fff; fill-rule: evenodd;"/>
12
+ </g>
13
+ </g>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,8 @@
1
+ // @ts-expect-error - svg loaded as dataurl
2
+ import bike from "./rvf_shared_bike.svg";
3
+
4
+ function Bike({ ...props }) {
5
+ return <img alt="Bicycle" src={bike} {...props} />;
6
+ }
7
+
8
+ export default Bike;
@@ -0,0 +1 @@
1
+ export { default } from "./Bike";
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" width="25.64767456" height="25.64768219" viewBox="0 0 25.64767456 25.64768219">
3
+ <g id="rvf_base">
4
+ <g id="rvf_shared_bike">
5
+ <g>
6
+ <path d="M12.82368469,25.14785767C6.02827454,25.14785767.49995422,19.61904907.49995422,12.82363892S6.02827454.49990845,12.82368469.49990845s12.32421875,5.52832031,12.32421875,12.32373047-5.52880859,12.32421875-12.32421875,12.32421875Z" style="fill: #00973b;"/>
7
+ <path d="M12.82383728,1c6.53012848,0,11.82383728,5.29371262,11.82383728,11.82384109,0,6.53011703-5.2937088,11.82384109-11.82383728,11.82384109-6.53012085,0-11.82383728-5.29372406-11.82383728-11.82384109C1,6.29371262,6.29371643,1,12.82383728,1M12.82383728,0C5.75274658,0,0,5.7527504,0,12.82384109c0,7.07108688,5.75274658,12.82384109,12.82383728,12.82384109s12.82383728-5.75275421,12.82383728-12.82384109C25.64767456,5.7527504,19.89492798,0,12.82383728,0h0Z" style="fill: #f7f4f4;"/>
8
+ </g>
9
+ <g id="verkehrstraeger_verkehrstraeger-rad-2px" data-name="verkehrstraeger/verkehrstraeger-rad-2px">
10
+ <path id="Fill-1" d="M8.86352249,11.52875744h1.58400038c.43718404,0,.792-.35481596.792-.792s-.35481596-.79200019-.792-.79200019h-1.58400038c-.01504804,0-.02771988.00792018-.04197598.00871212-.41659202.02296803-.75002402.36115207-.75002402.78328806,0,.43718404.35481596.792.792.792" style="fill: #fff; fill-rule: evenodd;"/>
11
+ <path d="M18.36764488,18.99228122c-.53417969,0-1.06298828-.13037109-1.57275391-.38818359-.41992188-.21289062-.78759766-.50439453-1.09277344-.86621094-.54833984-.64892578-.83837891-1.42675781-.83837891-2.24951172,0-.98876953.40966797-1.90576172,1.15429688-2.58251953l-.61669922-1.16113281-4.18896484,2.34960938-.56396484.32519531c.08349609.43896484.13525391.75634766.13525391,1.06884766,0,1.93212891-1.57177734,3.50390625-3.50390625,3.50390625-.1328125,0-.26025391-.01806641-.38720703-.03613281-1.80908203-.24169922-3.11669922-1.72802734-3.11669922-3.46777344,0-.46289062.09033203-.91552734.26855469-1.34423828.54638672-1.31201172,1.81640625-2.15966797,3.23535156-2.15966797.53369141,0,1.06347656.13085938,1.57324219.38964844.38525391.19580078.72265625.45117188,1.00292969.75830078l.62402344-.30664062,4.10742188-2.37109375-.91503906-1.70458984c-.04492188-.07910156-.06494141-.16699219-.07763672-.23486328l-.01757812-.10742188c-.04443359-.36376953.18408203-.70703125.53125-.79931641l1.52441406-.40869141c.06738281-.01855469.13134766-.02734375.19482422-.02734375.33007812,0,.62109375.22314453.70654297.54296875.06640625.24755859-.00830078.50927734-.19970703.69970703-.10449219.10449219-.20556641.16699219-.31787109.19677734l-.55908203.14990234.72558594,1.40722656,1.125,1.94824219c.43652344-.08203125.75146484-.1328125,1.05957031-.1328125,1.93701172.0078125,3.50390625,1.57861328,3.50390625,3.50390625,0,.03613281-.00488281.07080078-.01025391.10498047-.11425781,1.94628906-1.64404297,3.39892578-3.49365234,3.39892578ZM16.75485191,14.25253513c-.27929688.36279297-.42724609.79003906-.42724609,1.23583984,0,.57714844.25244141,1.13183594.69238281,1.52197266.37744141.33398438.85595703.51806641,1.34765625.51806641.22851562,0,.46484375-.04394531.70166016-.13134766l.578125-.33300781c.48632812-.39746094.76025391-.97021484.76025391-1.57568359,0-.66162109-.32617188-1.28564453-.87255859-1.66992188-.34716797-.2421875-.75097656-.37011719-1.16748047-.37011719-.04101562,0-.08056641.00537109-.12060547.01074219l-.08837891.01220703-.02001953.08496094.85205078,1.4765625c.14013672.2421875.12646484.54003906-.03515625.77685547-.06787109.09960938-.14404297.17236328-.23242188.22265625-.08984375.05273438-.19140625.08203125-.31005859.08984375h-.0078125c-.31933594,0-.55322266-.13378906-.68261719-.35742188l-.91308594-1.58300781-.0546875.07080078ZM7.27975425,13.44833591c-1.125,0-2.04003906.91503906-2.04003906,2.04003906s.91503906,2.04003906,2.04003906,2.04003906,2.04003906-.91503906,2.04003906-2.04003906c0-.04345703-.00585938-.0859375-.01171875-.12841797l-.01171875-.08837891-.08544922-.02197266-1.67089844.96533203c-.11181641.06396484-.23828125.09814453-.36572266.09814453-.26123047,0-.50390625-.14013672-.63476562-.36621094-.20166016-.34912109-.08154297-.79833984.26855469-1.00097656l1.69287109-.97705078c-.35498047-.375-.77929688-.52050781-1.22119141-.52050781Z" style="fill: #fff; fill-rule: evenodd;"/>
12
+ </g>
13
+ </g>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,8 @@
1
+ // @ts-expect-error - svg loaded as dataurl
2
+ import car from "./rvf_shared_car.svg";
3
+
4
+ function Car({ ...props }) {
5
+ return <img alt="Car" src={car} {...props} />;
6
+ }
7
+
8
+ export default Car;
@@ -0,0 +1 @@
1
+ export { default } from "./Car";
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" width="25.64767838" height="25.64768982" viewBox="0 0 25.64767838 25.64768982">
3
+ <g id="rvf_base">
4
+ <g id="rvf_shared_car">
5
+ <g>
6
+ <path d="M12.82391739,25.14767456C6.02850723,25.14767456.50018692,19.61935425.50018692,12.82394409S6.02850723.50021362,12.82391739.50021362s12.32373047,5.52832031,12.32373047,12.32373047-5.52832031,12.32373047-12.32373047,12.32373047Z" style="fill: #00973b;"/>
7
+ <path d="M12.82384109,1c6.53012085,0,11.82383728,5.29371643,11.82383728,11.82383728,0,6.53013611-5.29371643,11.82385254-11.82383728,11.82385254-6.53012848,0-11.82384109-5.29371643-11.82384109-11.82385254C1,6.29371643,6.29371262,1,12.82384109,1M12.82384109,0C5.7527504,0,0,5.75274658,0,12.82383728s5.7527504,12.82385254,12.82384109,12.82385254,12.82383728-5.75276184,12.82383728-12.82385254S19.89493179,0,12.82384109,0h0Z" style="fill: #f7f4f4;"/>
8
+ </g>
9
+ <g id="verkehrstraeger_verkehrstraeger-auto-2px" data-name="verkehrstraeger/verkehrstraeger-auto-2px">
10
+ <path id="Fill-1" d="M17.14383851,14.36036615c.39744003,0,.72.32255997.72.72s-.32255997.72-.72.72-.72-.32255997-.72-.72.32255997-.72.72-.72" style="fill: #fff; fill-rule: evenodd;"/>
11
+ <path id="Fill-7" d="M8.50383851,14.36036615c-.39744003,0-.72.32255997-.72.72s.32255997.72.72.72.72-.32255997.72-.72-.32255997-.72-.72-.72" style="fill: #fff; fill-rule: evenodd;"/>
12
+ <path id="Fill-11" d="M18.58383851,13.64036615v3.6c0,.39744003-.32255997.72-.72.72h-1.41047974v-.72287979c0-.39240005-.31536049-.70920044-.70560036-.71712021h-.04391991v-.00287979h-5.7254401c-.39744003,0-.72.32255997-.72.72v.72287979h-1.4745599c-.39744003,0-.72-.32255997-.72-.72v-3.6l.31319996-.72.30024004-.68831989.82656.41327991.24624001.12312.12168011.05399986c.16631996.06480011.34343983.09792011.52199993.09792011h6.86015991l.13391991-.00647987c.17711952-.01656017.34992073-.06552006.50976082-.1454401l.24623932-.12312.84168045-.42048008.29375931.69552006.30456024.72ZM8.50383851,10.33268625l.56591984-1.29960005c.11448029-.26280001.37368004-.43272005.66024021-.43272005h6.24600014c.28943962,0,.55007996.17280001.66311966.43992004l.50472015,1.19375999.27936035.66168011-.27936035.13967983-.88992004.44496002h-6.86015991l-.88992004-.44496002-.25127998-.12527985.25127998-.57744003ZM20.02383851,10.76036615h-1.09440033l-.30383926-.72-.66023987-1.56095999c-.3376799-.79992-1.12176041-1.31904001-1.98936035-1.31904001h-6.24600014c-.85968018,0-1.63728012.50976-1.98,1.29744003l-.68904001,1.58255997-.31392008.72h-1.12319996c-.39743999,0-.72.32255997-.72.72s.32256001.72.72.72h.49608001l-.31320004.72-.06335996.14543976c-.07847998.18072029-.11952001.37656052-.11952001.57456024v3.6c0,1.1930397.96695995,2.16,2.16,2.16h1.4745599l.10728012-.0035994c.74519989-.05544113,1.33272022-.67751999,1.33199993-1.44000069h4.31496002c.00072029.79919975.64511993,1.44360008,1.44072029,1.44360008h1.41047974c1.1930397,0,2.16-.9669603,2.16-2.16v-3.6c0-.19295975-.03888062-.3830397-.11376068-.5608802l-.06695892-.1591198-.30456024-.72h.48527985c.39744003,0,.72-.32255997.72-.72s-.32255997-.72-.72-.72h0Z" style="fill: #fff; fill-rule: evenodd;"/>
13
+ </g>
14
+ </g>
15
+ </g>
16
+ </svg>
@@ -0,0 +1,8 @@
1
+ // @ts-expect-error - svg loaded as dataurl
2
+ import cargoBike from "./rvf_shared_cargo_bike.svg";
3
+
4
+ function CargoBike({ ...props }) {
5
+ return <img alt="Cargo bike" src={cargoBike} {...props} />;
6
+ }
7
+
8
+ export default CargoBike;
@@ -0,0 +1 @@
1
+ export { default } from "./CargoBike";
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" width="28.01245499" height="28.01245499" viewBox="0 0 28.01245499 28.01245499">
3
+ <g id="rvf_base">
4
+ <g id="rvf_shared_cargo_bike">
5
+ <g>
6
+ <path d="M14.0060463,27.51237106C6.55878067,27.51237106.50018692,21.45328903.50018692,14.00602341S6.55878067.50016403,14.0060463.50016403s13.50634766,6.05859375,13.50634766,13.50585938-6.05908203,13.50634766-13.50634766,13.50634766Z" style="fill: #00973b;"/>
7
+ <path d="M14.00622177,1c7.18314362,0,13.00623322,5.82308197,13.00623322,13.00622177,0,7.18314362-5.8230896,13.00623322-13.00623322,13.00623322-7.1831398,0-13.00622177-5.8230896-13.00622177-13.00623322C1,6.82308197,6.82308197,1,14.00622177,1M14.00622177,0C6.28316116,0,0,6.28316116,0,14.00622177s6.28316116,14.00623322,14.00622177,14.00623322,14.00623322-6.28317261,14.00623322-14.00623322S21.72928238,0,14.00622177,0h0Z" style="fill: #f7f4f4;"/>
8
+ </g>
9
+ <g id="Group-9">
10
+ <path id="Fill-1" d="M6.06579909,13.74402308h1.584c.39283185,0,.70487989-.29145602.76665595-.66686401.00712786-.04197598.02534405-.08078381.02534405-.12513599,0-.25423208-.1275122-.46965595-.31363193-.61459183-.12592831-.09820806-.27640798-.16394401-.44748005-.17107206-.01029601-.00079194-.01980008-.00633592-.03088803-.00633592h-1.584c-.43718413,0-.79200009.35481577-.79200009.79199981,0,.0506881.01979998.09424797.02851201.14256024.06969595.36669586.37699196.64943976.76348808.64943976" style="fill: #fff; fill-rule: evenodd;"/>
11
+ <path d="M19.52975367,21.20815252c-.71337891,0-1.38720703-.27636719-1.89746094-.77832031-.2890625-.28369141-.50830078-.63378906-.65136719-1.04003906-.10986328-.31298828-.16308594-.60546875-.16308594-.89355469,0-.27490234.05029297-.55712891.15332031-.86328125.33007812-.9765625,1.16845703-1.67089844,2.18847656-1.81152344.15820312-.02246094.26171875-.03710938.37011719-.03710938.59814453,0,1.171875.20068359,1.65869141.58105469.66943359.52099609,1.05322266,1.29785156,1.05322266,2.13085938,0,.22412109-.03515625.45605469-.11132812.72900391-.32763672,1.16748047-1.39697266,1.98291016-2.60058594,1.98291016ZM19.52975367,17.24819159c-.68798828,0-1.24804688.56005859-1.24804688,1.24804688s.56005859,1.24804688,1.24804688,1.24804688,1.24804688-.56005859,1.24804688-1.24804688-.56005859-1.24804688-1.24804688-1.24804688Z" style="fill: #fff; fill-rule: evenodd;"/>
12
+ <path d="M7.76803492,21.27748846c-.23779297,0-.48535156-.02685547-.73583984-.08056641-1.60400391-.34326172-2.76806641-1.78320312-2.76806641-3.42382812,0-.98925781.41113281-1.90771484,1.15820312-2.58642578.2734375-.24853516.57519531-.44921875.89746094-.59619141.40771484-.18603516.84912109-.2890625,1.31201172-.30664062l.13623047-.01464844c.49121094,0,.97607422.10693359,1.44091797.31738281.69189453.31298828,1.27392578.86376953,1.64013672,1.55126953l.62939453-.12011719-.76318359-3.08154297-.5-1.86474609-.20507812-.00683594-.64453125.17285156c-.06201172.01660156-.12597656.02539062-.18994141.02539062-.33056641,0-.62109375-.22314453-.70654297-.54296875-.10449219-.38964844.12744141-.79199219.51757812-.89648438l1.52978516-.41015625c.06152344-.01660156.125-.02490234.18896484-.02490234.03515625,0,.06933594.00244141.10351562.00732422.23632812.02978516.44384766.18457031.55517578.41455078l.06103516.12060547.17626953.66064453,1.16015625.04443359h8.74804688l.12060547.02587891c.35449219.06103516.61132812.35791016.61132812.70605469l-.02490234.12841797c.00537109.07128906.0078125.15527344-.01416016.23974609l-.72802734,2.71533203c-.04638672.17236328-.15917969.32275391-.31738281.42382812-.14257812.08251953-.20068359.11767578-.26855469.13623047l-7.50097656,2.01025391.29248047,1.32470703c.10449219.38964844-.12744141.79150391-.51757812.89599609-.0625.01708984-.12646484.02539062-.19042969.02539062-.33007812,0-.62060547-.22314453-.70605469-.54296875l-.33496094-1.25048828-.62841797.10546875-.05126953.01367188.01416016.11425781c.00634766,1.35693359-.71337891,2.53955078-1.87158203,3.15185547-.52539062.27734375-1.07226562.41796875-1.62597656.41796875ZM7.76803492,15.73305487c-.85644531,0-1.62548828.54589844-1.91455078,1.35888672-.08300781.23144531-.12548828.46044922-.12548828.68115234,0,.58984375.26318359,1.15283203.72167969,1.54492188.37939453.32421875.83496094.49560547,1.31835938.49560547.45654297,0,.89355469-.15527344,1.26318359-.44970703.40527344-.32226562.67041016-.77978516.74707031-1.28857422l.01318359-.09033203-1.59960938.42871094c-.06201172.01660156-.12597656.02539062-.18994141.02539062-.33056641,0-.62109375-.22363281-.70654297-.54345703-.05078125-.18847656-.02490234-.38574219.07324219-.55517578.09765625-.16943359.25537109-.29052734.44433594-.34082031l1.59667969-.42773438-.05810547-.07177734c-.32421875-.40039062-.78027344-.66210938-1.28466797-.73730469-.11230469-.01660156-.20361328-.02978516-.29882812-.02978516ZM12.93453883,15.56508612l3.21630859-.79931641,3.97900391-1.06640625.22705078-.73193359.21240234-.79199219-1.89941406-.07568359h-6.66357422l.92822266,3.46533203Z" style="fill: #fff; fill-rule: evenodd;"/>
13
+ </g>
14
+ </g>
15
+ </g>
16
+ </svg>
@@ -0,0 +1,25 @@
1
+ import { JSX } from "preact";
2
+
3
+ function Copy({ ...props }: JSX.SVGAttributes<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ className="size-6"
7
+ fill="none"
8
+ height={24}
9
+ stroke="currentColor"
10
+ strokeWidth={1.5}
11
+ viewBox="0 0 24 24"
12
+ width={24}
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ {...props}
15
+ >
16
+ <path
17
+ d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"
18
+ strokeLinecap="round"
19
+ strokeLinejoin="round"
20
+ />
21
+ </svg>
22
+ );
23
+ }
24
+
25
+ export default Copy;
@@ -0,0 +1 @@
1
+ export { default } from "./Copy";
@@ -0,0 +1,19 @@
1
+ import { SVGProps } from "preact/compat";
2
+
3
+ function Doc(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ fill="currentColor"
7
+ height="24px"
8
+ version="1.1"
9
+ viewBox="0 0 24 24"
10
+ width="24px"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ {...props}
13
+ >
14
+ <path d="M13,1 C13.0425909,1 13.0845598,1.00266262 13.1257495,1.00783047 L13,1 C13.0528361,1 13.1052411,1.00418141 13.1567725,1.01236099 C13.1883933,1.0172036 13.2193064,1.02361582 13.249662,1.03141743 C13.2598053,1.0342797 13.2698902,1.03704988 13.2799252,1.0399762 C13.3109399,1.04873224 13.3413507,1.05922617 13.3710585,1.07110396 C13.3800191,1.07496957 13.3890567,1.0787342 13.3980377,1.08263089 C13.4262995,1.09463815 13.4536613,1.10806791 13.4802859,1.12267436 C13.4906553,1.12855823 13.5012587,1.13461331 13.5117542,1.14086468 C13.5399066,1.15749759 13.5670269,1.17554946 13.5931738,1.19484452 C13.5995817,1.19963491 13.6064603,1.20483437 13.6132762,1.21012666 C13.6177282,1.21353888 13.6216003,1.21659988 13.625449,1.21968877 L13.7071068,1.29289322 L20.7071068,8.29289322 C20.7364445,8.32223095 20.7639678,8.3533831 20.7894939,8.38616693 L20.7071068,8.29289322 C20.7429509,8.32873733 20.7757929,8.36702236 20.8054709,8.40735764 C20.8244505,8.43297305 20.8425024,8.46009338 20.8592238,8.48809993 C20.8653867,8.49874131 20.8714418,8.50934473 20.8772982,8.52005033 C20.8919321,8.54633874 20.9053618,8.57370048 20.9175449,8.60172936 C20.9212658,8.61094326 20.9250304,8.61998091 20.9286618,8.62907226 C20.9407738,8.65864932 20.9512678,8.68906007 20.9602981,8.72009403 C20.9629501,8.73010978 20.9657203,8.7401947 20.9683328,8.75032594 C20.9763842,8.78069364 20.9827964,8.81160666 20.9877474,8.84300527 C20.9892866,8.85360724 20.990772,8.86402246 20.9920936,8.8744695 C20.9973374,8.91544017 21,8.95740914 21,9 L21,20 C21,21.6568542 19.6568542,23 18,23 L6,23 C4.34314575,23 3,21.6568542 3,20 L3,4 C3,2.34314575 4.34314575,1 6,1 Z M12,3 L6,3 C5.44771525,3 5,3.44771525 5,4 L5,20 C5,20.5522847 5.44771525,21 6,21 L18,21 C18.5522847,21 19,20.5522847 19,20 L19,10 L13,10 C12.4871642,10 12.0644928,9.61395981 12.0067277,9.11662113 L12,9 L12,3 Z M17.586,8 L14,4.415 L14,8 L17.586,8 Z"></path>
15
+ </svg>
16
+ );
17
+ }
18
+
19
+ export default Doc;
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>iconfont/doc</title>
4
+ <g id="iconfont/doc" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <path d="M13,1 C13.0425909,1 13.0845598,1.00266262 13.1257495,1.00783047 L13,1 C13.0528361,1 13.1052411,1.00418141 13.1567725,1.01236099 C13.1883933,1.0172036 13.2193064,1.02361582 13.249662,1.03141743 C13.2598053,1.0342797 13.2698902,1.03704988 13.2799252,1.0399762 C13.3109399,1.04873224 13.3413507,1.05922617 13.3710585,1.07110396 C13.3800191,1.07496957 13.3890567,1.0787342 13.3980377,1.08263089 C13.4262995,1.09463815 13.4536613,1.10806791 13.4802859,1.12267436 C13.4906553,1.12855823 13.5012587,1.13461331 13.5117542,1.14086468 C13.5399066,1.15749759 13.5670269,1.17554946 13.5931738,1.19484452 C13.5995817,1.19963491 13.6064603,1.20483437 13.6132762,1.21012666 C13.6177282,1.21353888 13.6216003,1.21659988 13.625449,1.21968877 L13.7071068,1.29289322 L20.7071068,8.29289322 C20.7364445,8.32223095 20.7639678,8.3533831 20.7894939,8.38616693 L20.7071068,8.29289322 C20.7429509,8.32873733 20.7757929,8.36702236 20.8054709,8.40735764 C20.8244505,8.43297305 20.8425024,8.46009338 20.8592238,8.48809993 C20.8653867,8.49874131 20.8714418,8.50934473 20.8772982,8.52005033 C20.8919321,8.54633874 20.9053618,8.57370048 20.9175449,8.60172936 C20.9212658,8.61094326 20.9250304,8.61998091 20.9286618,8.62907226 C20.9407738,8.65864932 20.9512678,8.68906007 20.9602981,8.72009403 C20.9629501,8.73010978 20.9657203,8.7401947 20.9683328,8.75032594 C20.9763842,8.78069364 20.9827964,8.81160666 20.9877474,8.84300527 C20.9892866,8.85360724 20.990772,8.86402246 20.9920936,8.8744695 C20.9973374,8.91544017 21,8.95740914 21,9 L21,20 C21,21.6568542 19.6568542,23 18,23 L6,23 C4.34314575,23 3,21.6568542 3,20 L3,4 C3,2.34314575 4.34314575,1 6,1 Z M12,3 L6,3 C5.44771525,3 5,3.44771525 5,4 L5,20 C5,20.5522847 5.44771525,21 6,21 L18,21 C18.5522847,21 19,20.5522847 19,20 L19,10 L13,10 C12.4871642,10 12.0644928,9.61395981 12.0067277,9.11662113 L12,9 L12,3 Z M17.586,8 L14,4.415 L14,8 L17.586,8 Z" id="Combined-Shape" fill="#000000" fill-rule="nonzero"></path>
6
+ </g>
7
+ </svg>
@@ -0,0 +1 @@
1
+ export { default } from "./Doc";
@@ -0,0 +1,8 @@
1
+ // @ts-expect-error - svg loaded as dataurl
2
+ import eBike from "./rvf_shared_e-bike.svg";
3
+
4
+ function Ebike({ ...props }) {
5
+ return <img alt="eBike" src={eBike} {...props} />;
6
+ }
7
+
8
+ export default Ebike;
@@ -0,0 +1 @@
1
+ export { default } from "./Ebike";
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" width="25.64767456" height="25.64767456" viewBox="0 0 25.64767456 25.64767456">
3
+ <g id="rvf_base">
4
+ <g id="rvf_shared_e-bike">
5
+ <g>
6
+ <path d="M12.82368469,25.14752197C6.02827454,25.14752197.49995422,19.61920166.49995422,12.8237915S6.02827454.50006104,12.82368469.50006104s12.32421875,5.52832031,12.32421875,12.32373047-5.52880859,12.32373047-12.32421875,12.32373047Z" style="fill: #00973b;"/>
7
+ <path d="M12.82383728,1c6.53012848,0,11.82383728,5.29371643,11.82383728,11.82384491,0,6.53012085-5.2937088,11.82382965-11.82383728,11.82382965-6.53012085,0-11.82383728-5.2937088-11.82383728-11.82382965C1,6.29371643,6.29371643,1,12.82383728,1M12.82383728,0C5.75274658,0,0,5.75275421,0,12.82384491c0,7.07108307,5.75274658,12.82382965,12.82383728,12.82382965s12.82383728-5.75274658,12.82383728-12.82382965C25.64767456,5.75275421,19.89492798,0,12.82383728,0h0Z" style="fill: #f7f4f4;"/>
8
+ </g>
9
+ <g id="verkehrstraeger_verkehrstraeger-ebike-2px" data-name="verkehrstraeger/verkehrstraeger-ebike-2px">
10
+ <path d="M18.38137425,19.60538227c-.53320312,0-1.06201172-.13037109-1.57275391-.38818359-.41992188-.21289062-.78759766-.50439453-1.09326172-.86621094-.54833984-.64892578-.83789062-1.42675781-.83789062-2.24951172,0-.98876953.40966797-1.90625,1.15429688-2.58300781l-.61669922-1.16064453-4.18896484,2.34912109-.56396484.32568359c.08349609.43896484.13525391.75634766.13525391,1.06884766,0,1.93212891-1.57177734,3.50390625-3.50390625,3.50390625-.12988281,0-.25439453-.01757812-.37890625-.03466797-1.81738281-.24316406-3.125-1.72949219-3.125-3.46923828,0-.46289062.09033203-.91552734.26855469-1.34423828.54638672-1.31201172,1.81591797-2.15966797,3.23535156-2.15966797.53466797,0,1.06445312.13085938,1.57324219.38964844.38525391.19580078.72265625.45068359,1.00292969.7578125l.62402344-.30615234,4.10742188-2.37109375-.91503906-1.70458984c-.04492188-.07910156-.06494141-.16699219-.07763672-.23486328l-.01757812-.10742188c-.04394531-.36376953.18408203-.70751953.53125-.79980469l1.52441406-.40869141c.06738281-.01806641.13134766-.02685547.1953125-.02685547.33007812,0,.62060547.22314453.70605469.54296875.06591797.24755859-.00878906.50927734-.19970703.69970703-.10351562.10400391-.20458984.16650391-.31787109.19677734l-.55908203.14941406.72558594,1.40722656,1.12451172,1.94873047c.43554688-.08203125.75048828-.1328125,1.06005859-.1328125,1.93701172.0078125,3.50390625,1.57910156,3.50390625,3.50390625,0,.03613281-.00488281.0703125-.00976562.10498047-.11523438,1.94580078-1.64501953,3.39892578-3.49414062,3.39892578ZM16.76858128,14.86563618c-.27929688.36279297-.42724609.79003906-.42724609,1.23583984,0,.57714844.25244141,1.13183594.69238281,1.52197266.37744141.33398438.85595703.51806641,1.34765625.51806641.22900391,0,.46533203-.04443359.70214844-.13183594l.57763672-.33300781c.48632812-.39746094.76025391-.96972656.76025391-1.57519531,0-.66162109-.32617188-1.28564453-.87255859-1.66992188-.34667969-.2421875-.75-.37011719-1.16748047-.37011719-.04296875,0-.08349609.00537109-.12451172.01123047l-.08837891.01220703-.01611328.08447266.85205078,1.47607422c.14013672.24267578.12695312.54003906-.03466797.77685547-.06835938.09960938-.14453125.17285156-.23291016.22314453-.09033203.05224609-.19140625.08154297-.31005859.08935547h-.00830078c-.31933594,0-.55273438-.13378906-.68212891-.35742188l-.91308594-1.58251953-.0546875.07080078ZM7.29348363,14.06143696c-1.125,0-2.04003906.91503906-2.04003906,2.04003906s.91503906,2.04003906,2.04003906,2.04003906,2.04003906-.91503906,2.04003906-2.04003906c0-.04248047-.00537109-.08349609-.01123047-.12451172l-.01220703-.08886719-.08544922-.02539062-1.67089844.96533203c-.11181641.06396484-.23779297.09814453-.36572266.09814453-.26074219,0-.50390625-.140625-.63476562-.36621094-.20166016-.34960938-.08154297-.79882812.26806641-1.00097656l1.69335938-.97753906c-.35546875-.37451172-.77978516-.52001953-1.22119141-.52001953Z" style="fill: #fff; fill-rule: evenodd;"/>
11
+ <path id="Fill-4" d="M7.58151838,9.30565168c.065736.03801589.13384798.06494382.20354398.08236807.01188004.00316777.02376002.00633592.036432.00871175.01029601.00158426.02059202.00396009.03009604.0063363.044352.00712786.08949598.01108795.135432.01108795h1.00663193l-.71200794,1.23314375c-.21859202.37936807-.08870399.86328012.28987195,1.08187214.37857613.21938434.86328012.08949593,1.08187195-.28987214l1.39708795-2.41876792c.10137621-.1758241.1275122-.3738241.08870399-.55835994-.00237583-.01108795-.00475203-.02217609-.00712786-.03326404-.00316815-.01267203-.00712786-.02534386-.01108795-.03801589-.00475203-.01583998-.01029601-.03168016-.01583998-.04672801-.00633592-.01583998-.01267221-.03167997-.01900813-.04672801-.00475203-.00950407-.00871175-.018216-.01346378-.02772007-.00871212-.01742406-.01821619-.03405599-.02772026-.05068791-.00554398-.00950407-.01187989-.01900813-.01742387-.02851201-.00871212-.01346397-.01821619-.02692813-.02771988-.03959996-.00871212-.01108814-.01742425-.02217609-.02613599-.0324721-.00712824-.00871194-.0142561-.01742406-.02138396-.02613599-.01267221-.01346397-.02613599-.02692794-.03960015-.03959996-.00554398-.00554398-.01108795-.01029601-.01583998-.01583998-.14097598-.12830395-.32788803-.20671212-.53380821-.20671212h-1.01534386l.71280008-1.23393588c.21859202-.37857604.08870399-.86328005-.28987214-1.08187204-.37936788-.21859199-.86327993-.088704-1.08187195.289872l-1.39708796,2.4195601c-.21859199.37857594-.088704.86327993.28987201,1.08187195" style="fill: #fff; fill-rule: evenodd;"/>
12
+ </g>
13
+ </g>
14
+ </g>
15
+ </svg>