{"_id":"@automuxer/svelte-globe","_rev":"7-9b5747fc6e1ff4dabffe19e39f6fbf91","name":"@automuxer/svelte-globe","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@automuxer/svelte-globe","version":"0.1.0","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.0","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"e6471ef75068ead046d2d29aa7c1a6cbb4b5b44f","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.0.tgz","fileCount":19,"integrity":"sha512-SfXyxKXoqAYeoFgvO5qZPok+JXMFuSAnwpY/2CK/ryqR76Z68FPLz5I/RVZx80bt3Es22mSwsvc9JQ+Ao0kkjg==","signatures":[{"sig":"MEUCICC0hIdeFZjU2dUJF+QfbEfKEhTJ7B2jP0U985Bym8F8AiEAlmQKjL9p8NVwSDj/RdwBxy/5VIMR3I8Py20Sngne8Sk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64670},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@react-vertex/color-hooks":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.0_1783069988467_0.6232584871296141","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@automuxer/svelte-globe","version":"0.1.1","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.1","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"1987bc3ac8b793a5c611fb3249e64b12fca61412","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.1.tgz","fileCount":19,"integrity":"sha512-kTP35sJcQb5EDK0Izzz49VWQOtugvlHGDVYhXIjpIpR+YUZCuDoAtVG7YYRzLuBPzb62Uetp77GbScWKUgIi0g==","signatures":[{"sig":"MEQCIGAlEmT4YXpdqpq8i83xRhmgVAs4jULyCJS3oKmYed3jAiBpHivuld9lJbpFiJBeVmA24JC8WPOs6fnBVzvQ7DhCBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64986},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@react-vertex/color-hooks":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.1_1783111879736_0.25756680374897867","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@automuxer/svelte-globe","version":"0.1.2","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.2","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"df7290aece2af4647bc8b1fde0e2268fa00cf3d0","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.2.tgz","fileCount":19,"integrity":"sha512-Zk/ueNhBTMZSAPrBn3ezFTS42KrCnooTf1pazCeJNQYbTuWZM4iMPXSEwKxMmlvCth5tDcolYDwrNPZbdJFfsQ==","signatures":[{"sig":"MEUCIQDfEa94+ooN9yvt4k/RY9LWHw6vM7xr70chyLt5vC3geQIgUPDykQhmZeHEy5ezyOttYTFPB3UwczeRmfMNY/r62cc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64983},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@react-vertex/color-hooks":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.2_1783112110993_0.6688719033600137","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@automuxer/svelte-globe","version":"0.1.3","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.3","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"8f73503c1d8fed07d6ddd02c3cb6620cf078a381","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.3.tgz","fileCount":19,"integrity":"sha512-39zSfhjXQC50QUr4H3qlBypFcypc64SqmRwFb8ZPzjwwZ7hj64Ps/M6EVBGeDRhI2I2fRktQ9y+4OUJb+VGJfQ==","signatures":[{"sig":"MEUCIQDUUxVJRCeoh2E344xNPYX2dFpZ8u6+MSkQp7fNkgoYCwIgYLq0X1W1OvUBgbFSlhqXA6OHYxWfTghaYdyqXhc+q8A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64971},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@react-vertex/color-hooks":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.3_1783112510714_0.9758152911310973","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@automuxer/svelte-globe","version":"0.1.4","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.4","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"189a2bd4671c69ce3dba636d3adc5a6dd44bbcc1","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.4.tgz","fileCount":19,"integrity":"sha512-PlCJ8cJBOZsX44UMHE4BYI09VrLIXxv+voJtyL2afg1pngP8UIlNkj9pnbrvvkEiQ0oLIN4kQdes9QgT+6AqoA==","signatures":[{"sig":"MEQCICq/WneYf7ucigvheMzFmVMbYZi92AbZL7CCPuLcDiykAiAZXuDOKjJichl/JaF4rhhlO0aaI+RLmv4gd4fogh52lQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64974},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@automuxer/webgl-color-utils":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.4_1783113774360_0.9287923500374848","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@automuxer/svelte-globe","version":"0.1.5","keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.5","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"dist":{"shasum":"bae29c6fc98f14ac1dadaa3266c4787a2869e975","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.5.tgz","fileCount":19,"integrity":"sha512-MHkOPSojPaF8eXgO7+sUJ7SbfeWSEGrsOHo0Jn5L6awFN+wq7UTqrQyRuvTmdU7mEVuI2wBzHAHJvZ/gRMtd5Q==","signatures":[{"sig":"MEUCIEB+rYx7YZNjoMgpJzTY/rjB8hL//lkUJWnsmpd40TS0AiEAt6P7cmbNIaWBRvUjaOqSLI+K7VUGLDvSeFIxzqaYs8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64977},"type":"module","types":"./dist/index.d.ts","svelte":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"private":false,"scripts":{"dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","preview":"node ../node_modules/.bin/vite preview","cobe:build":"npm --prefix ../cobe run build","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"_npmVersion":"11.11.0","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.1","dependencies":{"esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0","@automuxer/cobe":"^0.1.0","@automuxer/webgl-color-utils":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","svelte":"^5.56.4","publint":"^0.3.21","typescript":"^6.0.3","svelte-check":"^4.7.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/adapter-auto":"^7.0.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/svelte-globe_0.1.5_1783115000058_0.4632688391084263","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@automuxer/svelte-globe","version":"0.1.6","private":false,"scripts":{"cobe:build":"npm --prefix ../cobe run build","dev":"npm run cobe:build && node ../node_modules/.bin/vite dev --force","build":"npm run cobe:build && node ../node_modules/.bin/vite build && npm run prepack","preview":"node ../node_modules/.bin/vite preview","prepare":"node ../node_modules/.bin/svelte-kit sync || echo ''","prepack":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-package","check":"npm run cobe:build && node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json","check:watch":"node ../node_modules/.bin/svelte-kit sync && node ../node_modules/.bin/svelte-check --tsconfig ./tsconfig.json --watch"},"sideEffects":["**/*.css"],"svelte":"./dist/index.js","types":"./dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","svelte":"./dist/index.js"}},"peerDependencies":{"svelte":"^5.0.0"},"dependencies":{"@automuxer/cobe":"^0.1.0","@automuxer/webgl-color-utils":"^0.1.1","esm-env":"^1.2.2","hex-rgb":"^5.0.0","type-fest":"^5.7.0"},"devDependencies":{"@sveltejs/adapter-auto":"^7.0.1","@sveltejs/kit":"^2.68.0","@sveltejs/package":"^2.5.8","@sveltejs/vite-plugin-svelte":"^7.1.2","publint":"^0.3.21","svelte":"^5.56.4","svelte-check":"^4.7.1","typescript":"^6.0.3","vite":"^8.1.0"},"keywords":["svelte"],"_id":"@automuxer/svelte-globe@0.1.6","description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-eBwM4mUUqgGIVxb3IwebYSjW30S/CBejwduh6k58mCCNXifA4uQiMREe2vI9xVxQLVAOw95M2RC6cqdXMEgcvw==","shasum":"06387791a0cb319e080a46a0225b9838c306c3b4","tarball":"https://registry.npmjs.org/@automuxer/svelte-globe/-/svelte-globe-0.1.6.tgz","fileCount":19,"unpackedSize":64977,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDK8NnOWgFgKPDi4B1VeQnqbq1ncDxhXm0tYBjHSQ8j7AiB5WBpJ3UE/c4GbI5ajrYk/gXM1zMQJljvvcoOd2raJAA=="}]},"_npmUser":{"name":"reesericci","email":"me@reeseric.ci"},"directories":{},"maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/svelte-globe_0.1.6_1783116635093_0.11306018468072154"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T09:13:08.273Z","modified":"2026-07-03T22:10:35.503Z","0.1.0":"2026-07-03T09:13:08.619Z","0.1.1":"2026-07-03T20:51:19.879Z","0.1.2":"2026-07-03T20:55:11.130Z","0.1.3":"2026-07-03T21:01:50.837Z","0.1.4":"2026-07-03T21:22:54.507Z","0.1.5":"2026-07-03T21:43:20.190Z","0.1.6":"2026-07-03T22:10:35.222Z"},"keywords":["svelte"],"description":"The friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).","maintainers":[{"name":"reesericci","email":"me@reeseric.ci"}],"readme":"# svelte-globe\n\nThe friendly, markup-first WebGL globe for Svelte, built on [COBE](https://cobe.vercel.app).\n\nDrop markers and arcs onto the globe as regular Svelte components, attach any\nDOM content to them as labels using CSS Anchor Positioning, and let Svelte\ntransitions handle fade in/out as they rotate into and out of view.\n\n## Installation\n\n```bash\nnpm install @automuxer/svelte-globe\n```\n\n## Quick start\n\n```svelte\n<script>\n  import { fade } from \"svelte/transition\";\n  import {\n    Globe,\n    GlobeMarker,\n    GlobeMarkerLabel,\n    GlobeArc,\n    GlobeArcLabel,\n    buildTransition,\n  } from \"@automuxer/svelte-globe\";\n</script>\n\n<Globe size={400} sampleScale={1} brightness={7} spin={true}>\n  <GlobeMarker\n    lat={37.78}\n    long={-122.44}\n    size={0.04}\n    color=\"#3366ff\"\n    transition={buildTransition(fade, { duration: 300 })}\n  >\n    <GlobeMarkerLabel>San Francisco</GlobeMarkerLabel>\n  </GlobeMarker>\n\n  <GlobeMarker\n    lat={51.51}\n    long={-0.13}\n    size={0.04}\n    color=\"#3366ff\"\n    transition={buildTransition(fade, { duration: 300 })}\n  >\n    <GlobeMarkerLabel>London</GlobeMarkerLabel>\n  </GlobeMarker>\n\n  <GlobeArc\n    from={{ lat: 37.78, long: -122.44 }}\n    to={{ lat: 51.51, long: -0.13 }}\n    color=\"#4d80ff\"\n    transition={buildTransition(fade, { duration: 300 })}\n  >\n    <GlobeArcLabel>SF &rarr; London</GlobeArcLabel>\n  </GlobeArc>\n</Globe>\n```\n\n## Components\n\n### `<Globe>`\n\nThe root component COBE renders to.\n\n- `size`: `number` Width/height in pixels (square canvas). (required)\n- `sampleScale`: `number` factor for sample density from 0—1 (required)\n- `brightness`: `number` Land brightness. (default: `6`)\n- `phi`: `number` Initial horizontal rotation (radians). (default: `0`)\n- `theta`: `number` Initial vertical rotation (radians). (default: `0.2`)\n- `dark`: `number` Dark mode amount (`0`—`1`). (default: `0`)\n- `diffuse`: `number` Diffuse lighting amount. (default: `1.2`)\n- `baseColor`: `string` (CSS color) Globe base color. (default: `\"#fff\"`)\n- `glowColor`: `string` (CSS color) Atmosphere glow color. (default: `\"#fff\"`)\n- `oceanBrightness`: `number` Brightness of the ocean/base map. (default: `0`)\n- `spin`: `boolean | number` Auto-spin. Pass a number for a custom speed, defaults to -0.0002 when true. Use positive/negative numbers to set direction.  (default: `false`)\n- `spinFollowsPan`: `boolean` Continue spinning in the direction of the last pan/drag. (default: `true`)\n- `pan`: `boolean` | number | { `x`: `boolean` | `number`, `y`: `boolean` | `number`} Whether to allow for user-panning. Set a number to control sensitivity, use an object to control per-axis. (default: { x: 600, y: 1500 })\n- `minTheta`/`maxTheta`: `number` Clamp vertical rotation. (default: `±Infinity`)\n- `children`: `Snippet` `<GlobeMarker>`/`<GlobeArc>` elements. (optional)\n\n### `<GlobeMarker>`\n\nDeclares a marker and (optionally) renders DOM content anchored to it.\n\n- `lat`: `number` Latitude. (required)\n- `long`: `number` Longitude. (required)\n- `size`: `number` Marker dot size. (default: `0.035`)\n- `color`: `string` (CSS color) Marker dot color. (default: `\"#3366ff\"`)\n- `id`: `string` Stable key used for the `--cobe-{id}` CSS anchor. Pass your own if you need a deterministic id (e.g. to key off external data). (default: random UUID)\n- `visible`: `boolean` (bindable) `true` when the marker is facing the camera. See [Binding position and visibility](#binding-position-and-visibility). (optional)\n- `position`: `{ x: number; y: number }` (bindable) Normalized `[0, 1]` screen position of the marker. See [Binding position and visibility](#binding-position-and-visibility). (optional)\n- `transition`: `BuiltTransition` Wrap a Svelte transition with [`buildTransition`](#Transitions) and pass it here to animate the label in/out. (optional)\n- `children`: `Snippet` Content rendered anchored above the marker (use `<GlobeMarkerLabel>` or your own markup). Omit to render just the dot, no label. (optional)\n\nAny other props (`class`, `style`, `onclick`, etc.) are spread onto the\nanchored wrapper `<div>`.\n\n### `<GlobeArc>`\n\nSame idea as `<GlobeMarker>`, anchored to the arc's midpoint instead.\n\n- `from`: `{ lat: number; long: number }` Start `{ lat: latitude, long: longitude }`. (required)\n- `to`: `{ lat: number; long: number }` End `{ lat: latitude, long: longitude }`. (required)\n- `color`: `string` (CSS color) Arc color. (default: `\"#3366ff\"`)\n- `id`: `string` Stable key used for the `--cobe-arc-{id}` CSS anchor. (default: random UUID)\n- `visible`: `boolean` (bindable) `true` when the arc's midpoint is facing the camera. See [Binding position and visibility](#binding-position-and-visibility). (optional)\n- `position`: `{ x: number; y: number }` (bindable) Normalized `[0, 1]` screen position of the arc's midpoint. See [Binding position and visibility](#binding-position-and-visibility). (optional)\n- `transition`: `BuiltTransition` See [`buildTransition`](#Transitions). (optional)\n- `children`: `Snippet` Content rendered anchored above the arc's peak. (optional)\n\n### `<GlobeMarkerLabel>` / `<GlobeArcLabel>`\n\nMinimal pre-styled label chips are available using `GlobeMarkerLabel` or `GlobeArcLabel`.\n\nPass any other\nmarkup as `<GlobeMarker>`/`<GlobeArc>` children instead if you want full\ncontrol over the label's appearance:\n\n```svelte\n<GlobeMarker lat={37.78} long={-122.44}>\n  <div class=\"my-own-label\">San Francisco</div>\n</GlobeMarker>\n```\n\n## Binding position and visibility\n\n`<GlobeMarker>`/`<GlobeArc>` children are positioned via CSS Anchor\nPositioning, and are mounted/disposed each time the point comes into or out of view. \n\nIf you need the raw data instead (e.g. to render an overlay that isn't a\ndirect child), bind\n`visible` and `position` directly:\n\n```svelte\n<script>\n  let visible = $state(false);\n  let position = $state();\n</script>\n\n<GlobeMarker lat={37.78} long={-122.44} bind:visible bind:position />\n\n{#if visible && position}\n  <div\n    style:position=\"absolute\"\n    style:left=\"{position.x * 100}%\"\n    style:top=\"{position.y * 100}%\"\n  >\n    San Francisco\n  </div>\n{/if}\n```\n\n`position` is `{ x, y }`, normalized to `[0, 1]` relative to the `<Globe>`'s\nwrapper element. `visible` is `true` when the marker/arc is currently facing\nthe camera. Both update on every frame as the\nglobe rotates.\n\n## Transitions\n\nSvelte doesn't natively support the `transition:` directive being passed to components, so we use a custom `transition` prop. \n\nUse `buildTransition` to wrap a transition function (and its params) into something you can hand to the `transition`\nprop on `<GlobeMarker>`/`<GlobeArc>`:\n\n```svelte\n<script>\n  import { fade } from \"svelte/transition\";\n  import { buildTransition } from \"@automuxer/svelte-globe\";\n</script>\n\n<GlobeMarker\n  lat={37.78}\n  long={-122.44}\n  transition={buildTransition(fade, { duration: 300 })}\n>\n  ...\n</GlobeMarker>\n```\n\n## License\n\nsvelte-globe: The friendly, markup-first WebGL globe for Svelte.\n\nCopyright (C) 2026 Software Freedom Conservancy\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see <https://www.gnu.org/licenses/>.\n","readmeFilename":"README.md"}