Enhance park search with autocomplete and improved filtering options

Introduce autocomplete for park searches, optimize park data fetching with select_related and prefetch_related, add new API endpoints for autocomplete and quick filters, and refactor the park list view to use new Django Cotton components for a more dynamic and user-friendly experience.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: c446bc9e-66df-438c-a86c-f53e6da13649
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
This commit is contained in:
pac7
2025-09-23 21:44:12 +00:00
parent 7feb7c462d
commit 4c954fff6f
13 changed files with 1588 additions and 245 deletions

View File

@@ -581,6 +581,9 @@
.mt-auto {
margin-top: auto;
}
.-mr-1 {
margin-right: calc(var(--spacing) * -1);
}
.mr-1 {
margin-right: calc(var(--spacing) * 1);
}
@@ -788,6 +791,9 @@
.min-h-\[120px\] {
min-height: 120px;
}
.min-h-\[400px\] {
min-height: 400px;
}
.min-h-screen {
min-height: 100vh;
}
@@ -929,6 +935,9 @@
.grow {
flex-grow: 1;
}
.origin-top-right {
transform-origin: top right;
}
.-translate-x-1\/2 {
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1322,9 +1331,6 @@
.border-gray-300 {
border-color: var(--color-gray-300);
}
.border-gray-600 {
border-color: var(--color-gray-600);
}
.border-gray-700 {
border-color: var(--color-gray-700);
}
@@ -1472,9 +1478,6 @@
.bg-gray-600 {
background-color: var(--color-gray-600);
}
.bg-gray-700 {
background-color: var(--color-gray-700);
}
.bg-gray-800 {
background-color: var(--color-gray-800);
}
@@ -1758,6 +1761,9 @@
.object-cover {
object-fit: cover;
}
.p-0\.5 {
padding: calc(var(--spacing) * 0.5);
}
.p-1 {
padding: calc(var(--spacing) * 1);
}
@@ -1857,6 +1863,9 @@
.pr-10 {
padding-right: calc(var(--spacing) * 10);
}
.pr-12 {
padding-right: calc(var(--spacing) * 12);
}
.pr-16 {
padding-right: calc(var(--spacing) * 16);
}
@@ -2133,6 +2142,9 @@
.text-yellow-800 {
color: var(--color-yellow-800);
}
.capitalize {
text-transform: capitalize;
}
.uppercase {
text-transform: uppercase;
}
@@ -2142,11 +2154,6 @@
.underline-offset-4 {
text-underline-offset: 4px;
}
.placeholder-gray-400 {
&::placeholder {
color: var(--color-gray-400);
}
}
.placeholder-gray-500 {
&::placeholder {
color: var(--color-gray-500);
@@ -2890,13 +2897,6 @@
}
}
}
.hover\:text-white {
&:hover {
@media (hover: hover) {
color: var(--color-white);
}
}
}
.hover\:underline {
&:hover {
@media (hover: hover) {
@@ -3256,11 +3256,6 @@
grid-column: span 3 / span 3;
}
}
.md\:mt-0 {
@media (width >= 48rem) {
margin-top: calc(var(--spacing) * 0);
}
}
.md\:mb-8 {
@media (width >= 48rem) {
margin-bottom: calc(var(--spacing) * 8);
@@ -3296,11 +3291,6 @@
height: 140px;
}
}
.md\:h-full {
@media (width >= 48rem) {
height: 100%;
}
}
.md\:w-7 {
@media (width >= 48rem) {
width: calc(var(--spacing) * 7);
@@ -3311,11 +3301,6 @@
width: calc(var(--spacing) * 48);
}
}
.md\:flex-shrink-0 {
@media (width >= 48rem) {
flex-shrink: 0;
}
}
.md\:grid-cols-2 {
@media (width >= 48rem) {
grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -3341,21 +3326,6 @@
align-items: center;
}
}
.md\:items-end {
@media (width >= 48rem) {
align-items: flex-end;
}
}
.md\:items-start {
@media (width >= 48rem) {
align-items: flex-start;
}
}
.md\:justify-between {
@media (width >= 48rem) {
justify-content: space-between;
}
}
.md\:gap-4 {
@media (width >= 48rem) {
gap: calc(var(--spacing) * 4);
@@ -4390,6 +4360,18 @@
}
}
}
.dark\:hover\:bg-blue-800\/50 {
@media (prefers-color-scheme: dark) {
&:hover {
@media (hover: hover) {
background-color: color-mix(in srgb, oklch(42.4% 0.199 265.638) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-blue-800) 50%, transparent);
}
}
}
}
}
.dark\:hover\:bg-blue-900 {
@media (prefers-color-scheme: dark) {
&:hover {
@@ -4662,6 +4644,13 @@
}
}
}
.dark\:focus\:border-blue-500 {
@media (prefers-color-scheme: dark) {
&:focus {
border-color: var(--color-blue-500);
}
}
}
.dark\:focus\:bg-gray-700 {
@media (prefers-color-scheme: dark) {
&:focus {
@@ -4676,6 +4665,13 @@
}
}
}
.dark\:focus\:ring-blue-500 {
@media (prefers-color-scheme: dark) {
&:focus {
--tw-ring-color: var(--color-blue-500);
}
}
}
.dark\:focus\:ring-blue-600 {
@media (prefers-color-scheme: dark) {
&:focus {