11import { getUrl } from "../../lib/helpers" ;
2+ import type { IMeasure } from "../../types" ;
23import { InfoCard } from "./ui/InfoCard" ;
34
4- type Measure = {
5- title : string ;
6- description ?: string ;
7- imageUrl ?: string ;
8- href ?: string ;
9- className ?: string ;
10- } ;
11-
125type MobilityMeasuresProps = {
13- pushMeasures ?: Measure [ ] ;
14- pullMeasures ?: Measure [ ] ;
6+ pushMeasures ?: IMeasure [ ] ;
7+ pullMeasures ?: IMeasure [ ] ;
158 className ?: string ;
169 hideDescription ?: boolean ;
1710 cols ?: 2 | 4 ;
1811} ;
1912
20- const defaultPush : Measure [ ] = [
21- {
22- title : "Congestion Charges" ,
23- description :
24- "Fees imposed on vehicles entering designated city areas to reduce traffic congestion." ,
25- imageUrl : "/icons/ticket.svg" ,
26- } ,
27- {
28- title : "Parking Charges" ,
29- description :
30- "Increased parking fees to discourage long-term car use and promote modal shift." ,
31- imageUrl : "/icons/parking_sign.svg" ,
32- } ,
33- {
34- title : "Restricted Parking" ,
35- description :
36- "Reductions in available public parking to limit car access, especially in central zones." ,
37- imageUrl : "/icons/no_cars.svg" ,
38- } ,
39- {
40- title : "Limited Traffic Zone / Pedestrianisation" ,
41- description :
42- "Car-free or low-emission zones that prioritize pedestrians, cyclists, and shared mobility." ,
43- imageUrl : "/icons/pedestrian.svg" ,
44- } ,
45- {
46- title : "Parking Supply Management" ,
47- description :
48- "Policies that reduce or restructure parking supply to manage demand and encourage alternatives." ,
49- imageUrl : "/icons/parking_sign.svg" ,
50- } ,
51- {
52- title : "Speed Limits" ,
53- description :
54- "Lowering vehicle speed limits to improve safety and promote non-motorized travel." ,
55- imageUrl : "/icons/30sign.svg" ,
56- } ,
57- ] ;
58-
59- const defaultPull : Measure [ ] = [
60- {
61- title : "Mobility Hubs" ,
62- description :
63- "Centralized locations where multiple transport modes (e.g., bikes, buses, taxis) are integrated." ,
64- imageUrl : "/icons/cityz_zones.svg" ,
65- } ,
66- {
67- title : "Scheduling Integration in MaaS" ,
68- description :
69- "Coordinated schedules across transport services to streamline connections." ,
70- imageUrl : "/icons/time_table.svg" ,
71- } ,
72- {
73- title : "Ticketing Integration in MaaS" ,
74- description :
75- "Unified or digital ticketing across services to simplify travel." ,
76- imageUrl : "/icons/mobile.svg" ,
77- } ,
78- {
79- title : "Improved NSM Infrastructure" ,
80- description :
81- "New infrastructure like bike lanes, “park & ride” stations to support non-car travel." ,
82- imageUrl : "/icons/bike_lane.svg" ,
83- } ,
84- {
85- title : "On-Demand Vehicle Sharing" ,
86- description :
87- "Access to shared vehicles (cars, bikes, e-scooters) on demand via apps or stations." ,
88- imageUrl : "/icons/mobile.svg" ,
89- } ,
90- {
91- title : "Nudging / Gamification" ,
92- description :
93- "Use of rewards or games to encourage use of shared or sustainable transport." ,
94- imageUrl : "/icons/kid1.svg" ,
95- } ,
96- {
97- title : "Dynamic Pricing of NSM" ,
98- description :
99- "Flexible pricing (e.g., cheaper off-peak rides) to balance demand and promote use." ,
100- imageUrl : "/icons/ticket.svg" ,
101- } ,
102- {
103- title : "Improved Information Availability" ,
104- description :
105- "Real-time data on vehicle availability and travel options via digital platforms." ,
106- imageUrl : "/icons/mobile.svg" ,
107- } ,
108- {
109- title : "New NSM Services Introduced" ,
110- description :
111- "Launch of bike-sharing, scooter-sharing, or other new transport options." ,
112- imageUrl : "/icons/e-scooter.svg" ,
113- } ,
114- {
115- title : "New PT Infrastructure / Lines" ,
116- description :
117- "Deployment of new public transport lines like electric buses or tram extensions." ,
118- imageUrl : "/icons/metro_tunnel.svg" ,
119- } ,
120- {
121- title : "Streets Retrofitting / Priority Lanes" ,
122- description :
123- "Street redesign for better walking/cycling and priority lanes for buses or shared modes." ,
124- imageUrl : "/icons/cityz_zones.svg" ,
125- } ,
126- {
127- title : "Dedicated Parking for Carsharing / Micromobility" ,
128- description :
129- "Reserved spaces to support the use of shared cars or micromobility vehicles." ,
130- imageUrl : "/icons/bycicle_parking.svg" ,
131- } ,
132- {
133- title : "Widening PT Geographical Area" ,
134- description :
135- "Extending public transport coverage to reach underserved zones." ,
136- imageUrl : "/icons/metro_map.svg" ,
137- } ,
138- {
139- title : "Central PT Planning Program" ,
140- description :
141- "Comprehensive public transport network planning to enhance coordination and efficiency." ,
142- imageUrl : "/icons/cityz_zones.svg" ,
143- } ,
144- ] ;
145-
14613type MeasuresSectionProps = {
14714 heading : string ;
14815 smallText : string ;
14916 paragraph : string ;
150- measures : Measure [ ] ;
17+ measures : IMeasure [ ] ;
15118 hideDescription ?: boolean ;
15219 cols ?: 2 | 4 ;
15320} ;
@@ -175,12 +42,11 @@ function MeasuresSection({
17542 < div className = { GRID_CLASS [ cols ] } >
17643 { measures . map ( ( m ) => (
17744 < InfoCard
178- key = { m . title }
179- title = { m . title }
45+ key = { m . name }
46+ title = { m . name }
18047 description = { hideDescription ? "" : m . description }
181- imageUrl = { getUrl ( m . imageUrl ) }
182- href = { m . href }
183- className = { m . className }
48+ imageUrl = { getUrl ( m . image_url ) }
49+ href = "#"
18450 />
18551 ) ) }
18652 </ div >
@@ -189,8 +55,8 @@ function MeasuresSection({
18955}
19056
19157export function MobilityMeasures ( {
192- pushMeasures = defaultPush ,
193- pullMeasures = defaultPull ,
58+ pushMeasures = [ ] ,
59+ pullMeasures = [ ] ,
19460 className = "" ,
19561 hideDescription = false ,
19662 cols = 2 ,
0 commit comments