import React, { useState } from 'react'; import { Map } from '../ui/map'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'; import { Badge } from '../ui/badge'; import { Button } from '../ui/button'; import { Input } from '../ui/input'; import { Alert, AlertDescription } from '../ui/alert'; import { Info, Layers, MapPin, MousePointer2, Pencil } from 'lucide-react'; import { Checkbox } from '../ui/checkbox'; import { Label } from '../ui/label'; import { Switch } from '../ui/switch'; import { FilterableMapExample } from './FilterableMapExample'; import { SimpleFilterableMap } from './SimpleFilterableMap'; import { DrawingMapExample } from './DrawingMapExample'; import { PageHeader } from '../ui/page-header'; /** * MapShowcase - Componente de demonstração completo e organizado * * Organizado em 3 abas principais conforme diretrizes do Design System: * 1. Mapas Simples (Padrão, Layers, Compacto) * 2. Marcadores (Pins, Áreas, Personalização) * 3. Controles (Filtros, Controles Nativos) */ export function MapShowcase() { const [activeTab, setActiveTab] = useState('simple'); const [isTransitioning, setIsTransitioning] = useState(false); const [apiKey, setApiKey] = useState(''); const [inputApiKey, setInputApiKey] = useState(''); // Estados para Layers const [showTraffic, setShowTraffic] = useState(false); const [showTransit, setShowTransit] = useState(false); const [showBicycling, setShowBicycling] = useState(false); // Estados para Controles Nativos const [showZoomControl, setShowZoomControl] = useState(true); const [showMapTypeControl, setShowMapTypeControl] = useState(false); const [showStreetViewControl, setShowStreetViewControl] = useState(false); const [showFullscreenControl, setShowFullscreenControl] = useState(true); // Handler para troca de tabs com cleanup const handleTabChange = (value: string) => { if (value === activeTab) return; setIsTransitioning(true); setTimeout(() => { setActiveTab(value); setIsTransitioning(false); }, 50); }; return (
Verifique MAP_SETUP.md para configuração inicial e requisitos de API.
Utiliza carregamento assíncrono e AdvancedMarkerElement para melhor desempenho.
Componentes seguem estritamente as variáveis de tokens do globals.css.