mapbox-pointer
delta-components/mapbox-pointerFreeComponent
delta-components publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by delta-components on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://deltacomponents.dev/r/mapbox-pointer.jsonSource
1"use client"23import { useEffect, useRef, useState } from "react"4import { useTheme } from "next-themes"56type MapboxStyle =7 | "streets-v12"8 | "outdoors-v12"9 | "light-v11"10 | "dark-v11"11 | "satellite-v9"12 | "satellite-streets-v12"13 | "navigation-day-v1"14 | "navigation-night-v1"1516interface MapboxPointerLabelProps {17 label: string18 href?: string19 className?: string20}2122export function MapboxPointerLabel({23 label,24 href,25 className = "",26}: MapboxPointerLabelProps) {27 const baseClasses =28 "bg-background border-border text-foreground absolute right-4 bottom-4 z-10 flex items-center gap-1 rounded border px-3 py-1 text-xs font-normal"2930 if (href) {31 return (32 <a33 href={href}34 target="_blank"35 rel="noopener noreferrer"36 className={`${baseClasses} cursor-pointer ${className}`}37 onClick={(e) => e.stopPropagation()}38 >39 {label}40 </a>41 )42 }4344 return <div className={`${baseClasses} ${className}`}>{label}</div>45}4647interface MapboxPointerProps {48 latitude: number49 longitude: number50 zoom?: number51 mapboxToken?: string52 googleMapsUrl?: string53 markerColor?: string54 className?: string55 interactive?: boolean56 style?: MapboxStyle57 themeAware?: boolean58 label?: string59 labelHref?: string60 clickForDirections?: boolean61 children?: React.ReactNode62}6364declare global {65 interface Window {66 mapboxgl: any67 }68}6970// Global promise to track Mapbox script loading71let mapboxLoadPromise: Promise<void> | null = null7273export function MapboxPointer({74 latitude,75 longitude,76 zoom = 13,77 mapboxToken,78 googleMapsUrl,79 markerColor = "#679BFF",80 className = "",81 interactive = true,82 style = "streets-v12",83 themeAware = false,84 label,85 labelHref,86 clickForDirections = false,87 children,88}: MapboxPointerProps) {89 const mapContainer = useRef<HTMLDivElement>(null)90 const map = useRef<any>(null)91 const [isLoading, setIsLoading] = useState(true)92 const { theme, resolvedTheme } = useTheme()9394 // Get token from props or environment95 const token = mapboxToken || process.env.NEXT_PUBLIC_MAPBOX_TOKEN || ""9697 // Determine the actual map style based on theme awareness98 const actualStyle: MapboxStyle = themeAware99 ? resolvedTheme === "dark"100 ? "dark-v11"101 : "streets-v12"102 : style103104 useEffect(() => {105 // Check if token is available106 if (!token) {107 console.warn(108// … truncated
Files it writes
More from delta-components
All 93 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| admonitionadmonition | delta-components | Components | Free | 1 dep | |
| cambio-imagecambio-image | delta-components | Components | Free | 2 deps | |
| card-deckcard-deck | delta-components | Components | Free | 3 deps | |
| chatchat | delta-components | Components | Free | 3 deps | |
| code-blockcode-block | delta-components | Components | Free | 3 deps | |
| code-block-iconscode-block-icons | delta-components | Components | Free | no deps | |
| copy-buttoncopy-button | delta-components | Components | Free | 1 dep | |
| input-otpinput-otp | delta-components | Components | Free | 1 dep |
