Add compact search view

This commit is contained in:
Arnaud Delcasse 2025-10-10 15:33:25 +02:00
parent 96bab36fde
commit 1739bdcb2e
4 changed files with 2109 additions and 43 deletions

View File

@ -216,6 +216,10 @@ views:
- web/layouts/journeys/_partials/journeys-organized-carpools.html
- web/layouts/journeys/_partials/saved-searches.html
- web/layouts/journeys/search.html
search_compact:
files:
- web/layouts/_partials/orb_address_autocomplete.html
- web/layouts/journeys/search-compact.html
list:
files:
- web/layouts/journeys/group_management.html

File diff suppressed because it is too large Load Diff

View File

@ -17,21 +17,6 @@
{{ json .driver_journey.DriverArrival }}
]
}
const driverGeojsonPoints = {
"type": "FeatureCollection",
"features": [
{{ json .driver_journey.DriverDeparture }},
{{ json .driver_journey.DriverArrival }}
]
}
const passengerGeojsonPoints = {
"type": "FeatureCollection",
"features": [
{{ json .driver_journey.PassengerPickup }},
{{ json .driver_journey.PassengerDrop }},
]
}
map.on('load', async () => {
{{if .driver_journey.JourneyPolyline}}
@ -49,37 +34,62 @@
'line-cap': 'round',
},
'paint': {
'line-color': '#243887',
'line-width': 3
'line-color': getComputedStyle(document.documentElement).getPropertyValue('--color-co-blue').trim(),
'line-width': 4
},
});
{{end}}
map.addSource('driver_points', {
type: "geojson",
data: driverGeojsonPoints
})
map.addLayer({
'id': 'driver_points',
'type': 'circle',
'source': 'driver_points',
'paint': {
'circle-color': '#000'
},
});
map.addSource('passenger_points', {
type: "geojson",
data: passengerGeojsonPoints
})
map.addLayer({
'id': 'passenger_points',
'type': 'circle',
'source': 'passenger_points',
'paint': {
'circle-color': '#243887',
'circle-radius': 8
},
});
// Driver departure marker
const driverDepartureEl = document.createElement('div');
driverDepartureEl.className = 'w-8 h-8 rounded-co bg-co-blue border border-white shadow-md flex items-center justify-center';
driverDepartureEl.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
<circle cx="12" cy="7" r="4"></circle>
</svg>
`;
new maplibregl.Marker({element: driverDepartureEl})
.setLngLat({{ json .driver_journey.DriverDeparture }}.geometry.coordinates)
.addTo(map);
// Driver arrival marker
const driverArrivalEl = document.createElement('div');
driverArrivalEl.className = 'w-8 h-8 rounded-co bg-co-blue border border-white shadow-md flex items-center justify-center';
driverArrivalEl.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
<circle cx="12" cy="7" r="4"></circle>
</svg>
`;
new maplibregl.Marker({element: driverArrivalEl})
.setLngLat({{ json .driver_journey.DriverArrival }}.geometry.coordinates)
.addTo(map);
// Passenger pickup marker
const passengerPickupEl = document.createElement('div');
passengerPickupEl.className = 'w-8 h-8 rounded-co bg-co-green border border-white shadow-md flex items-center justify-center';
passengerPickupEl.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="16" height="16">
<path fill-rule="evenodd" d="M11.54 22.351l.07.04.028.016a.76.76 0 00.723 0l.028-.015.071-.041a16.975 16.975 0 001.144-.742 19.58 19.58 0 002.683-2.282c1.944-1.99 3.963-4.98 3.963-8.827a8.25 8.25 0 00-16.5 0c0 3.846 2.02 6.837 3.963 8.827a19.58 19.58 0 002.682 2.282 16.975 16.975 0 001.145.742zM12 13.5a3 3 0 100-6 3 3 0 000 6z" clip-rule="evenodd" />
</svg>
`;
new maplibregl.Marker({element: passengerPickupEl})
.setLngLat({{ json .driver_journey.PassengerPickup }}.geometry.coordinates)
.addTo(map);
// Passenger drop marker
const passengerDropEl = document.createElement('div');
passengerDropEl.className = 'w-8 h-8 rounded-co bg-co-red border border-white shadow-md flex items-center justify-center';
passengerDropEl.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="16" height="16">
<path fill-rule="evenodd" d="M3 2.25a.75.75 0 01.75.75v.54l1.838-.46a9.75 9.75 0 016.725.738l.108.054a8.25 8.25 0 005.58.652l3.109-.732a.75.75 0 01.917.81 47.784 47.784 0 00.005 10.337.75.75 0 01-.574.812l-3.114.733a9.75 9.75 0 01-6.594-.77l-.108-.054a8.25 8.25 0 00-5.69-.625l-2.202.55V21a.75.75 0 01-1.5 0V3A.75.75 0 013 2.25z" clip-rule="evenodd" />
</svg>
`;
new maplibregl.Marker({element: passengerDropEl})
.setLngLat({{ json .driver_journey.PassengerDrop }}.geometry.coordinates)
.addTo(map);
var bbox=turf.bbox(geojsonPoints)
map.fitBounds(bbox, { padding: 50 })

View File

@ -11,16 +11,28 @@
--color-red-600: oklch(0.577 0.245 27.325);
--color-red-800: oklch(0.444 0.177 26.899);
--color-red-900: oklch(0.396 0.141 25.723);
--color-yellow-50: oklch(0.987 0.026 102.212);
--color-yellow-100: oklch(0.973 0.071 103.193);
--color-yellow-800: oklch(0.476 0.114 61.907);
--color-green-100: oklch(0.962 0.044 156.743);
--color-green-600: oklch(0.627 0.194 149.214);
--color-green-800: oklch(0.448 0.119 151.328);
--color-blue-50: oklch(0.97 0.014 254.604);
--color-blue-100: oklch(0.932 0.032 255.585);
--color-blue-200: oklch(0.882 0.059 254.128);
--color-blue-500: oklch(0.623 0.214 259.815);
--color-blue-600: oklch(0.546 0.245 262.881);
--color-blue-700: oklch(0.488 0.243 264.376);
--color-blue-800: oklch(0.424 0.199 265.638);
--color-indigo-50: oklch(0.962 0.018 272.314);
--color-indigo-500: oklch(0.585 0.233 277.117);
--color-indigo-600: oklch(0.511 0.262 276.966);
--color-purple-50: oklch(0.977 0.014 308.299);
--color-purple-100: oklch(0.946 0.033 307.174);
--color-purple-200: oklch(0.902 0.063 306.703);
--color-purple-600: oklch(0.558 0.288 302.321);
--color-purple-700: oklch(0.496 0.265 301.924);
--color-purple-800: oklch(0.438 0.218 303.724);
--color-gray-50: oklch(0.985 0.002 247.839);
--color-gray-100: oklch(0.967 0.003 264.542);
--color-gray-200: oklch(0.928 0.006 264.531);
@ -85,9 +97,11 @@
--font-mono--font-variation-settings
);
--color-co-blue: #243887;
--color-co-lightblue: #907eff;
--color-co-red: #ff1300;
--color-co-green: #6cc11f;
--color-co-yellow: #ffdd00;
--color-co-orange: #ff5300;
--radius-co: 40%;
}
}
@ -311,6 +325,9 @@
.right-0 {
right: calc(var(--spacing) * 0);
}
.right-4 {
right: calc(var(--spacing) * 4);
}
.left-0 {
left: calc(var(--spacing) * 0);
}
@ -350,6 +367,9 @@
.col-span-1 {
grid-column: span 1 / span 1;
}
.col-span-2 {
grid-column: span 2 / span 2;
}
.col-span-3 {
grid-column: span 3 / span 3;
}
@ -485,6 +505,9 @@
.-my-2 {
margin-block: calc(var(--spacing) * -2);
}
.my-1 {
margin-block: calc(var(--spacing) * 1);
}
.my-2 {
margin-block: calc(var(--spacing) * 2);
}
@ -503,6 +526,12 @@
.-mt-4 {
margin-top: calc(var(--spacing) * -4);
}
.mt-0 {
margin-top: calc(var(--spacing) * 0);
}
.mt-0\.5 {
margin-top: calc(var(--spacing) * 0.5);
}
.mt-1 {
margin-top: calc(var(--spacing) * 1);
}
@ -557,6 +586,15 @@
.-mb-px {
margin-bottom: -1px;
}
.mb-1 {
margin-bottom: calc(var(--spacing) * 1);
}
.mb-2 {
margin-bottom: calc(var(--spacing) * 2);
}
.mb-3 {
margin-bottom: calc(var(--spacing) * 3);
}
.mb-4 {
margin-bottom: calc(var(--spacing) * 4);
}
@ -690,6 +728,9 @@
.h-0 {
height: calc(var(--spacing) * 0);
}
.h-2 {
height: calc(var(--spacing) * 2);
}
.h-3 {
height: calc(var(--spacing) * 3);
}
@ -714,9 +755,15 @@
.h-16 {
height: calc(var(--spacing) * 16);
}
.h-48 {
height: calc(var(--spacing) * 48);
}
.h-50 {
height: calc(var(--spacing) * 50);
}
.h-\[600px\] {
height: 600px;
}
.h-full {
height: 100%;
}
@ -726,6 +773,9 @@
.max-h-60 {
max-height: calc(var(--spacing) * 60);
}
.max-h-\[600px\] {
max-height: 600px;
}
.max-h-none {
max-height: none;
}
@ -759,6 +809,9 @@
.w-1\/6 {
width: calc(1/6 * 100%);
}
.w-2 {
width: calc(var(--spacing) * 2);
}
.w-3 {
width: calc(var(--spacing) * 3);
}
@ -789,9 +842,21 @@
.w-16 {
width: calc(var(--spacing) * 16);
}
.w-32 {
width: calc(var(--spacing) * 32);
}
.w-40 {
width: calc(var(--spacing) * 40);
}
.w-48 {
width: calc(var(--spacing) * 48);
}
.w-80 {
width: calc(var(--spacing) * 80);
}
.w-96 {
width: calc(var(--spacing) * 96);
}
.w-auto {
width: auto;
}
@ -816,6 +881,9 @@
.max-w-lg {
max-width: var(--container-lg);
}
.max-w-md {
max-width: var(--container-md);
}
.max-w-none {
max-width: none;
}
@ -1109,6 +1177,9 @@
.grid-cols-7 {
grid-template-columns: repeat(7, minmax(0, 1fr));
}
.grid-cols-12 {
grid-template-columns: repeat(12, minmax(0, 1fr));
}
.grid-cols-none {
grid-template-columns: none;
}
@ -1265,9 +1336,15 @@
.justify-items-stretch {
justify-items: stretch;
}
.gap-1 {
gap: calc(var(--spacing) * 1);
}
.gap-2 {
gap: calc(var(--spacing) * 2);
}
.gap-3 {
gap: calc(var(--spacing) * 3);
}
.gap-4 {
gap: calc(var(--spacing) * 4);
}
@ -1518,6 +1595,9 @@
.rounded-md {
border-radius: var(--radius-md);
}
.rounded-none {
border-radius: 0;
}
.rounded-xl {
border-radius: var(--radius-xl);
}
@ -1557,6 +1637,10 @@
border-top-left-radius: var(--radius-3xl);
border-bottom-left-radius: var(--radius-3xl);
}
.rounded-l-lg {
border-top-left-radius: var(--radius-lg);
border-bottom-left-radius: var(--radius-lg);
}
.rounded-l-md {
border-top-left-radius: var(--radius-md);
border-bottom-left-radius: var(--radius-md);
@ -1576,6 +1660,10 @@
border-top-right-radius: var(--radius-3xl);
border-bottom-right-radius: var(--radius-3xl);
}
.rounded-r-lg {
border-top-right-radius: var(--radius-lg);
border-bottom-right-radius: var(--radius-lg);
}
.rounded-r-md {
border-top-right-radius: var(--radius-md);
border-bottom-right-radius: var(--radius-md);
@ -1661,6 +1749,10 @@
border-left-style: var(--tw-border-style);
border-left-width: 0px;
}
.border-l-4 {
border-left-style: var(--tw-border-style);
border-left-width: 4px;
}
.border-dashed {
--tw-border-style: dashed;
border-style: dashed;
@ -1685,12 +1777,24 @@
--tw-border-style: solid;
border-style: solid;
}
.border-blue-200 {
border-color: var(--color-blue-200);
}
.border-co-blue {
border-color: var(--color-co-blue);
}
.border-co-lightblue {
border-color: var(--color-co-lightblue);
}
.border-co-orange {
border-color: var(--color-co-orange);
}
.border-co-red {
border-color: var(--color-co-red);
}
.border-co-yellow {
border-color: var(--color-co-yellow);
}
.border-gray-200 {
border-color: var(--color-gray-200);
}
@ -1700,9 +1804,18 @@
.border-indigo-500 {
border-color: var(--color-indigo-500);
}
.border-purple-200 {
border-color: var(--color-purple-200);
}
.border-purple-600 {
border-color: var(--color-purple-600);
}
.border-transparent {
border-color: transparent;
}
.border-white {
border-color: var(--color-white);
}
.bg-\(--my_variable\) {
background-color: var(--my_variable);
}
@ -1721,12 +1834,24 @@
.bg-black {
background-color: var(--color-black);
}
.bg-blue-50 {
background-color: var(--color-blue-50);
}
.bg-blue-100 {
background-color: var(--color-blue-100);
}
.bg-blue-600 {
background-color: var(--color-blue-600);
}
.bg-co-blue {
background-color: var(--color-co-blue);
}
.bg-co-green {
background-color: var(--color-co-green);
}
.bg-co-lightblue {
background-color: var(--color-co-lightblue);
}
.bg-co-red {
background-color: var(--color-co-red);
}
@ -1757,12 +1882,24 @@
.bg-green-100 {
background-color: var(--color-green-100);
}
.bg-green-600 {
background-color: var(--color-green-600);
}
.bg-indigo-50 {
background-color: var(--color-indigo-50);
}
.bg-indigo-600 {
background-color: var(--color-indigo-600);
}
.bg-purple-50 {
background-color: var(--color-purple-50);
}
.bg-purple-100 {
background-color: var(--color-purple-100);
}
.bg-purple-600 {
background-color: var(--color-purple-600);
}
.bg-red-100 {
background-color: var(--color-red-100);
}
@ -1775,9 +1912,15 @@
.bg-red-500\/\[50\%\] {
background-color: color-mix(in oklab, var(--color-red-500) 50%, transparent);
}
.bg-red-600 {
background-color: var(--color-red-600);
}
.bg-white {
background-color: var(--color-white);
}
.bg-yellow-50 {
background-color: var(--color-yellow-50);
}
.bg-yellow-100 {
background-color: var(--color-yellow-100);
}
@ -1789,6 +1932,10 @@
--tw-gradient-position: in oklab;
background-image: conic-gradient(var(--tw-gradient-stops));
}
.bg-gradient-to-r {
--tw-gradient-position: to right in oklab;
background-image: linear-gradient(var(--tw-gradient-stops));
}
.bg-radial {
--tw-gradient-position: in oklab;
background-image: radial-gradient(var(--tw-gradient-stops));
@ -1799,6 +1946,14 @@
.via-none {
--tw-gradient-via-stops: initial;
}
.from-co-blue {
--tw-gradient-from: var(--color-co-blue);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.to-co-lightblue {
--tw-gradient-to: var(--color-co-lightblue);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.box-decoration-clone {
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
@ -1902,6 +2057,12 @@
.fill-none {
fill: none;
}
.stroke-gray-600 {
stroke: var(--color-gray-600);
}
.stroke-gray-700 {
stroke: var(--color-gray-700);
}
.stroke-gray-800 {
stroke: var(--color-gray-800);
}
@ -1965,9 +2126,15 @@
.p-2 {
padding: calc(var(--spacing) * 2);
}
.p-3 {
padding: calc(var(--spacing) * 3);
}
.p-4 {
padding: calc(var(--spacing) * 4);
}
.p-8 {
padding: calc(var(--spacing) * 8);
}
.p-10 {
padding: calc(var(--spacing) * 10);
}
@ -2031,6 +2198,12 @@
.py-12 {
padding-block: calc(var(--spacing) * 12);
}
.pt-0 {
padding-top: calc(var(--spacing) * 0);
}
.pt-0\.5 {
padding-top: calc(var(--spacing) * 0.5);
}
.pt-1 {
padding-top: calc(var(--spacing) * 1);
}
@ -2294,15 +2467,27 @@
.text-black {
color: var(--color-black);
}
.text-blue-800 {
color: var(--color-blue-800);
}
.text-co-blue {
color: var(--color-co-blue);
}
.text-co-green {
color: var(--color-co-green);
}
.text-co-lightblue {
color: var(--color-co-lightblue);
}
.text-co-orange {
color: var(--color-co-orange);
}
.text-co-red {
color: var(--color-co-red);
}
.text-co-yellow {
color: var(--color-co-yellow);
}
.text-gray-400 {
color: var(--color-gray-400);
}
@ -2330,6 +2515,12 @@
.text-indigo-600 {
color: var(--color-indigo-600);
}
.text-purple-600 {
color: var(--color-purple-600);
}
.text-purple-800 {
color: var(--color-purple-800);
}
.text-red-600 {
color: var(--color-red-600);
}
@ -2503,6 +2694,9 @@
.opacity-30 {
opacity: 30%;
}
.opacity-90 {
opacity: 90%;
}
.opacity-100 {
opacity: 100%;
}
@ -2524,6 +2718,10 @@
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.shadow-md {
--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.shadow-sm {
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@ -2964,6 +3162,13 @@
}
}
}
.hover\:bg-purple-700 {
&:hover {
@media (hover: hover) {
background-color: var(--color-purple-700);
}
}
}
.hover\:bg-white {
&:hover {
@media (hover: hover) {
@ -3027,6 +3232,21 @@
}
}
}
.hover\:underline {
&:hover {
@media (hover: hover) {
text-decoration-line: underline;
}
}
}
.hover\:shadow-md {
&:hover {
@media (hover: hover) {
--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
}
}
.focus\:z-20 {
&:focus {
z-index: 20;
@ -3568,6 +3788,16 @@
display: none;
}
}
.md\:h-auto {
@media (width >= 48rem) {
height: auto;
}
}
.md\:w-1\/3 {
@media (width >= 48rem) {
width: calc(1/3 * 100%);
}
}
.md\:w-64 {
@media (width >= 48rem) {
width: calc(var(--spacing) * 64);
@ -3706,6 +3936,16 @@
display: table-cell;
}
}
.lg\:w-1\/3 {
@media (width >= 64rem) {
width: calc(1/3 * 100%);
}
}
.lg\:w-2\/3 {
@media (width >= 64rem) {
width: calc(2/3 * 100%);
}
}
.lg\:max-w-7xl {
@media (width >= 64rem) {
max-width: var(--container-7xl);
@ -3736,6 +3976,11 @@
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
.lg\:flex-row {
@media (width >= 64rem) {
flex-direction: row;
}
}
.lg\:px-8 {
@media (width >= 64rem) {
padding-inline: calc(var(--spacing) * 8);
@ -3919,6 +4164,48 @@
inherits: false;
initial-value: 0;
}
@property --tw-gradient-position {
syntax: "*";
inherits: false;
}
@property --tw-gradient-from {
syntax: "<color>";
inherits: false;
initial-value: #0000;
}
@property --tw-gradient-via {
syntax: "<color>";
inherits: false;
initial-value: #0000;
}
@property --tw-gradient-to {
syntax: "<color>";
inherits: false;
initial-value: #0000;
}
@property --tw-gradient-stops {
syntax: "*";
inherits: false;
}
@property --tw-gradient-via-stops {
syntax: "*";
inherits: false;
}
@property --tw-gradient-from-position {
syntax: "<length-percentage>";
inherits: false;
initial-value: 0%;
}
@property --tw-gradient-via-position {
syntax: "<length-percentage>";
inherits: false;
initial-value: 50%;
}
@property --tw-gradient-to-position {
syntax: "<length-percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-leading {
syntax: "*";
inherits: false;