Menu

Change language

GitHub repo

3D Globe Projection

mapui

Spherical planetary globe projection with atmospheric fog, star field, and transcontinental flight paths.

Installation

$npx shadcn@latest add https://uipkge.dev/r/lit/map.json
Manifest:https://uipkge.dev/r/lit/map.jsonInstalls to:src/uip/components/map/

Examples

Live demo coming soon — source below is exact.

Props

NameType / ValuesDefaultRequired
access-tokenstring—optional
variant
'default''muted''streets''outdoors''light''dark''satellite''satellite-streets''navigation-day''navigation-night''standard'
defaultoptional
size
'default''sm''lg''xl''full'
—optional
map-stylestring—optional
centerLngLat[0, 20]optional
zoomnumber1.4optional
pitchnumber0optional
bearingnumber0optional
buildings3dbooleanfalseoptional
terrain3dbooleanfalseoptional
projectionstringmercatoroptional
navigationstringtrueoptional
navigation-positionCornerbottom-rightoptional
show-compassboolean—optional
show-zoomstringtrueoptional
fullscreenbooleanfalseoptional
fullscreen-positionCornertop-rightoptional
mutedbooleanfalseoptional

Schema

Type aliases from this item's source — use them to shape the data you pass in.

HTMLElementTagNameMap
interface HTMLElementTagNameMap {
    'uip-map': UipMap
    'uip-map-marker': UipMapMarker
    'uip-map-popup': UipMapPopup
    'uip-map-source': UipMapSource
    'uip-map-layer': UipMapLayer
  }
}

Files installed (3)

  • src/uip/components/map/map.css1.9 kB
    /**
     * Map chrome — React's map.css (packages/registry-react/components/map/map.css)
     * adopted into <uip-map>'s shadow root, where Mapbox renders its controls and
     * popups. Vendor-override CSS: Mapbox's own DOM can't take utility classes.
     * Only change from React: `.dark …` can't see <html class="dark"> from inside
     * a shadow root, so it is `:host([data-theme='dark']) …` (set by ThemeController).
     */
    .mapboxgl-ctrl-group {
      background: var(--card);
      border: 1px solid var(--border);
      border-radius: var(--radius);
      box-shadow: var(--shadow-sm, 0 1px 2px rgb(0 0 0 / 0.08));
    }
    .mapboxgl-ctrl-group button {
      background: transparent;
    }
    .mapboxgl-ctrl-group button + button {
      border-top-color: var(--border);
    }
    .mapboxgl-ctrl-group button .mapboxgl-ctrl-icon {
      filter: invert(var(--map-ctrl-invert, 0)) opacity(0.7);
    }
    :host([data-theme='dark']) .mapboxgl-ctrl-group {
      background: var(--card, #18181b);
      border-color: var(--border, #27272a);
    }
    :host([data-theme='dark']) .mapboxgl-ctrl-group button {
      background: transparent;
    }
    :host([data-theme='dark']) .mapboxgl-ctrl-group button:hover {
      background: var(--muted, #27272a);
    }
    :host([data-theme='dark']) .mapboxgl-ctrl-group button + button {
      border-top-color: var(--border, #27272a);
    }
    :host([data-theme='dark']) .mapboxgl-ctrl-group button .mapboxgl-ctrl-icon {
      filter: invert(1) brightness(1.2);
    }
    .mapboxgl-ctrl-attrib {
      background: color-mix(in oklab, var(--card) 80%, transparent);
      color: var(--muted-foreground);
    }
    .mapboxgl-ctrl-attrib a {
      color: var(--muted-foreground);
    }
    .mapboxgl-popup-content {
      padding: 8px 12px;
      background: var(--popover);
      color: var(--popover-foreground);
      border: 1px solid var(--border);
      border-radius: var(--radius);
      box-shadow: var(--shadow-md, 0 4px 12px rgb(0 0 0 / 0.12));
    }
    .mapboxgl-popup-close-button {
      color: var(--muted-foreground);
    }
    .mapboxgl-popup-tip {
      border-top-color: var(--popover);
      border-bottom-color: var(--popover);
    }
    
  • src/uip/components/map/map.ts29 kB
  • src/uip/components/map/map.variants.ts1.5 kB

Raw manifest:https://uipkge.dev/r/lit/map-globe-3d.json