MCPcopy
hub / github.com/shuding/cobe

github.com/shuding/cobe @2.0.1 sqlite

repository ↗ · DeepWiki ↗ · release 2.0.1 ↗
51 symbols 108 edges 19 files 9 documented · 18%
README

COBE

Use any DOM element as bindable markers.

CSS transitions, animations, filters, interactivity, all just work.

High perf, zero deps, ~5KB.


Quick Start

<canvas
  id="cobe"
  style="width: 500px; height: 500px;"
  width="1000"
  height="1000"
></canvas>
import createGlobe from 'cobe'

let phi = 0
let canvas = document.getElementById("cobe")

const globe = createGlobe(canvas, {
  devicePixelRatio: 2,
  width: 1000,
  height: 1000,
  phi: 0,
  theta: 0,
  dark: 0,
  diffuse: 1.2,
  scale: 1,
  mapSamples: 16000,
  mapBrightness: 6,
  baseColor: [0.3, 0.3, 0.3],
  markerColor: [1, 0.5, 1],
  glowColor: [1, 1, 1],
  offset: [0, 0],
  markers: [
    { location: [37.7595, -122.4367], size: 0.03 },
    { location: [40.7128, -74.006], size: 0.1, color: [1, 0, 0] }, // custom color
  ],
  arcs: [
    {
      from: [37.7595, -122.4367],
      to: [40.7128, -74.006],
      color: [1, 0.5, 0.5], // custom color (optional)
    },
  ],
  arcColor: [1, 0.5, 1],
  arcWidth: 0.5,
  arcHeight: 0.3,
  markerElevation: 0.02,
  onRender: (state) => {
    // Called on every animation frame.
    // `state` will be an empty object, return updated params.
    state.phi = phi
    phi += 0.01
  },
})

// To destroy the instance and bindings:
// `globe.destroy()`

Arcs

Arcs connect two locations on the globe:

arcs: [
  {
    from: [37.7595, -122.4367],
    to: [35.6762, 139.6503],
    color: [1, 0.5, 0.5], // optional, uses arcColor if not set
  },
]

Bindable Markers & Arcs

Markers and arcs can have an id property for CSS Anchor Positioning:

markers: [
  { location: [37.7595, -122.4367], size: 0.03, id: 'sf' },
],
arcs: [
  { from: [37.7595, -122.4367], to: [35.6762, 139.6503], id: 'sf-tokyo' },
]
.marker-label {
  position: absolute;
  position-anchor: --cobe-sf;
  bottom: anchor(top);
  left: anchor(center);
  opacity: var(--cobe-visible-sf, 0);
  filter: blur(calc((1 - var(--cobe-visible-sf, 0)) * 8px));
  transition: opacity 0.3s, filter 0.3s;
}

.arc-label {
  position: absolute;
  position-anchor: --cobe-arc-sf-tokyo;
  bottom: anchor(top);
  left: anchor(center);
  opacity: var(--cobe-visible-arc-sf-tokyo, 0);
}

The globe exposes: - --cobe-{id} / --cobe-arc-{id} — CSS anchor names for positioning - --cobe-visible-{id} / --cobe-visible-arc-{id} — visibility variable (0 when behind globe, 1 when visible)

Use the visibility variable to drive opacity, blur, scale, or any CSS property for smooth transitions.

Acknowledgment

This project is inspired & based on the great work of:

  • Spherical Fibonacci Mapping, Benjamin Keinert et al.
  • https://www.shadertoy.com/view/lllXz4, Inigo Quilez
  • https://github.blog/2020-12-21-how-we-built-the-github-globe
  • https://github.com/vaneenige/phenomenon
  • https://github.com/evanw/glslx

World map asset from:

  • https://de.wikipedia.org/wiki/Datei:World_map_blank_without_borders.svg

License

The MIT License.

Extension points exported contracts — how you extend this code

Marker (Interface)
(no doc)
src/index.d.ts
IpGlobeProps (Interface)
(no doc)
website/app/ip/IpGlobe.tsx
Arc (Interface)
(no doc)
src/index.d.ts
COBEOptions (Interface)
(no doc)
src/index.d.ts
Globe (Interface)
(no doc)
src/index.d.ts

Core symbols most depended-on inside this repo

setupInstancedAttribute
called by 10
src/index.js
latLonTo3D
called by 6
src/index.js
rename
called by 4
scripts/build.js
createProgram
called by 3
src/webgl.js
getUniformLocations
called by 3
src/webgl.js
applyRotation
called by 2
src/index.js
project
called by 2
src/index.js
updateAnchor
called by 2
src/anchor.js

Shape

Function 46
Interface 5

Languages

TypeScript100%

Modules by API surface

src/index.js9 symbols
website/app/page.tsx7 symbols
src/anchor.js6 symbols
src/webgl.js4 symbols
src/index.d.ts4 symbols
scripts/build.js4 symbols
website/app/showcases/page.tsx3 symbols
website/app/ip/page.tsx3 symbols
website/app/ip/IpGlobe.tsx3 symbols
website/app/showcases-data.ts2 symbols
website/app/components/ui.tsx2 symbols
website/app/layout.tsx1 symbols

Dependencies from manifests, versioned

@types/react18.0.0 · 1×
@types/react-dom18.0.0 · 1×
cobeworkspace:* · 1×
esbuild0.13.14 · 1×
geist1.4.1 · 1×
glslx0.3.0 · 1×
leva0.9.34 · 1×
next12.2.4 · 1×
react18.2.0 · 1×
react-dom18.2.0 · 1×
react-spring9.4.4 · 1×
sugar-high0.9.5 · 1×

For agents

$ claude mcp add cobe \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact