{"version":3,"sources":["Globe.tsx"],"sourcesContent":["import { addPropertyControls, ControlType, Color, RenderTarget } from \"framer\"\nimport { useState, useEffect, useRef } from \"react\"\nimport createGlobe from \"cobe\"\nimport { useSpring } from \"framer-motion\"\nimport { useIsStaticRenderer } from \"framer\"\n\n/**\n * GLOBE FOR FRAMER\n * @framerIntrinsicWidth 300\n * @framerIntrinsicHeight 300\n * @framerDisableUnlink\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */\nexport default function Globe(props) {\n    const {\n        background,\n        baseColor,\n        glowColor,\n        isDraggable,\n        dragOptions,\n        speed,\n        theta,\n        phi,\n        dark,\n        diffuse,\n        maxSamples,\n        mapBrightness,\n        markerSize,\n        markerArray,\n        markerColor,\n        scale,\n        alignment,\n        maxWidth,\n        offset,\n    } = props\n    const { offsetX, offsetY } = offset\n    const { stiffness, damping, mass } = dragOptions\n    const canvasRef = useRef()\n    const pointerInteracting = useRef(null)\n    const pointerInteractionMovement = useRef(0)\n    const isCanvas = useIsStaticRenderer()\n\n    const r = useSpring(0, {\n        stiffness: stiffness,\n        damping: damping,\n        mass: mass,\n        restDelta: 0.0001,\n        restSpeed: 0.0001,\n    })\n\n    const fadeMask =\n        \"radial-gradient(circle at 50% 50%, rgba(0,0,0,1) 60%, rgba(0,0,0,0) 70%)\"\n\n    useEffect(() => {\n        let phiValue = phi\n        let width = 0\n\n        const onResize = () => {\n            if (canvasRef.current && (width = canvasRef.current.offsetWidth)) {\n                window.addEventListener(\"resize\", onResize)\n            }\n        }\n\n        onResize()\n\n        const baseConvert = convertRGB(baseColor)\n        const glowConvert = convertRGB(glowColor)\n        const markerConvert = convertRGB(markerColor)\n\n        const globe = createGlobe(canvasRef.current, {\n            devicePixelRatio: 2,\n            width: width * 2,\n            height: width * 2,\n            phi: phi,\n            theta: theta,\n            dark: dark,\n            diffuse: diffuse,\n            mapSamples: maxSamples,\n            mapBrightness: mapBrightness,\n            baseColor: [baseConvert.r, baseConvert.g, baseConvert.b],\n            glowColor: [glowConvert.r, glowConvert.g, glowConvert.b],\n            markerColor: [markerConvert.r, markerConvert.g, markerConvert.b],\n            markers: markerArray.map((marker) => {\n                return {\n                    location: [marker.latitude, marker.longitude],\n                    size: markerSize,\n                }\n            }),\n            scale: scale,\n            offset: [offsetX, offsetY],\n            onRender: (state) => {\n                if (!isCanvas) {\n                    state.phi = phiValue + r.get()\n                }\n                state.width = width * 2\n                state.height = width * 2\n\n                if (!isCanvas) {\n                    state.phi = phiValue + r.get()\n                    phiValue += speed / 200\n                }\n            },\n        })\n\n        return () => {\n            globe.destroy()\n        }\n    }, [props])\n\n    return (\n        <div\n            style={{\n                ...flexStyles,\n                placeItems: alignment,\n                background: background,\n            }}\n        >\n            <div\n                style={{\n                    width: \"100%\",\n                    aspectRatio: \"1/1\",\n                    maxWidth: maxWidth,\n                    WebkitMaskImage: fadeMask,\n                    MozMaskImage: fadeMask,\n                    maskImage: fadeMask,\n                }}\n            >\n                <canvas\n                    ref={canvasRef}\n                    style={{\n                        width: \"100%\",\n                        height: \"100%\",\n                        contain: \"layout paint size\",\n                        cursor: \"auto\",\n                        userSelect: \"none\",\n                    }}\n                    onPointerDown={(e) => {\n                        if (isDraggable) {\n                            pointerInteracting.current =\n                                e.clientX - pointerInteractionMovement.current\n                            canvasRef.current.style.cursor = \"grabbing\"\n                        }\n                    }}\n                    onPointerUp={() => {\n                        if (isDraggable) {\n                            pointerInteracting.current = null\n                            canvasRef.current.style.cursor = \"grab\"\n                        }\n                    }}\n                    onPointerOver={() => {\n                        if (isDraggable) {\n                            canvasRef.current.style.cursor = \"grab\"\n                        }\n                    }}\n                    onPointerOut={() => {\n                        if (isDraggable) {\n                            pointerInteracting.current = null\n                            canvasRef.current.style.cursor = \"auto\"\n                        }\n                    }}\n                    onMouseMove={(e) => {\n                        if (isDraggable) {\n                            if (pointerInteracting.current !== null) {\n                                const delta =\n                                    e.clientX - pointerInteracting.current\n                                pointerInteractionMovement.current = delta\n                                r.set(delta / 100)\n                            }\n                        }\n                    }}\n                    onTouchMove={(e) => {\n                        if (\n                            pointerInteracting.current !== null &&\n                            e.touches[0]\n                        ) {\n                            const delta =\n                                e.touches[0].clientX -\n                                pointerInteracting.current\n                            pointerInteractionMovement.current = delta\n                            r.set(delta / 100)\n                        }\n                    }}\n                />\n            </div>\n        </div>\n    )\n}\n\n/* Default properties */\nGlobe.defaultProps = {\n    background: \"#000000\",\n    baseColor: \"#333333\",\n    glowColor: \"#ffffff\",\n    markerColor: \"#ffffff\",\n    isDraggable: true,\n    dragOptions: {\n        stiffness: 200,\n        damping: 40,\n        mass: 1,\n    },\n    speed: 1,\n    phi: 0,\n    theta: 0.3,\n    dark: 1,\n    diffuse: 2,\n    mapBrightness: 20,\n    maxSamples: 20000,\n    markerSize: 0.1,\n    markerArray: {\n        latitude: 52.3676,\n        longitude: 4.9041,\n    },\n    scale: 1,\n    alignment: \"center\",\n    maxWidth: 800,\n    offset: {\n        offsetX: 0,\n        offsetY: 0,\n    },\n}\n\nGlobe.displayName = \"Globe\"\nconst dp = Globe.defaultProps\nconst dpOffset = Globe.defaultProps.offset\nconst dpDrag = Globe.defaultProps.dragOptions\n\naddPropertyControls(Globe, {\n    background: {\n        type: ControlType.Color,\n        title: \"Backdrop\",\n        defaultValue: dp.background,\n    },\n    baseColor: {\n        type: ControlType.Color,\n        title: \"Base\",\n        defaultValue: dp.baseColor,\n    },\n    glowColor: {\n        type: ControlType.Color,\n        title: \"Glow\",\n        defaultValue: dp.glowColor,\n    },\n    markerColor: {\n        type: ControlType.Color,\n        title: \"Marker\",\n        defaultValue: dp.markerColor,\n    },\n    isDraggable: {\n        type: ControlType.Boolean,\n        title: \"Draggable\",\n        defaultValue: dp.isDraggable,\n    },\n    dragOptions: {\n        type: ControlType.Object,\n        title: \"Transition\",\n        controls: {\n            stiffness: {\n                type: ControlType.Number,\n                min: 0,\n                max: 1000,\n                title: \"Stiffness\",\n                defaultValue: dpDrag.stiffness,\n            },\n            damping: {\n                type: ControlType.Number,\n                min: 0,\n                max: 100,\n                title: \"Damping\",\n                defaultValue: dpDrag.damping,\n            },\n            mass: {\n                type: ControlType.Number,\n                min: 0,\n                title: \"Mass\",\n                displayStepper: true,\n                defaultValue: dpDrag.mass,\n            },\n        },\n        hidden(props) {\n            return !props.isDraggable\n        },\n    },\n    speed: {\n        type: ControlType.Number,\n        min: 0,\n        step: 0.1,\n        displayStepper: true,\n        title: \"Speed\",\n        defaultValue: dp.speed,\n    },\n    phi: {\n        type: ControlType.Number,\n        min: 0,\n        max: 6.28,\n        step: 0.01,\n        displayStepper: true,\n        title: \"Phi\",\n        defaultValue: dp.phi,\n    },\n    theta: {\n        type: ControlType.Number,\n        min: -1.57,\n        max: 1.57,\n        step: 0.01,\n        title: \"Theta\",\n        defaultValue: dp.theta,\n    },\n    dark: {\n        type: ControlType.Number,\n        min: 0,\n        max: 1,\n        step: 0.1,\n        displayStepper: true,\n        title: \"Dark\",\n        defaultValue: dp.dark,\n    },\n    diffuse: {\n        type: ControlType.Number,\n        min: 0,\n        max: 5,\n        step: 0.01,\n        title: \"Diffuse\",\n        defaultValue: dp.diffuse,\n    },\n    mapBrightness: {\n        type: ControlType.Number,\n        min: 0,\n        max: 12,\n        step: 0.01,\n        title: \"Brightness\",\n        defaultValue: dp.mapBrightness,\n    },\n    maxSamples: {\n        type: ControlType.Number,\n        min: 0,\n        max: 100000,\n        title: \"Samples\",\n        defaultValue: dp.maxSamples,\n    },\n    scale: {\n        type: ControlType.Number,\n        min: 0,\n        max: 5,\n        step: 0.025,\n        displayStepper: true,\n        title: \"Scale\",\n        defaultValue: dp.scale,\n    },\n    alignment: {\n        type: ControlType.Enum,\n        title: \"Align\",\n        options: [\"flex-start\", \"center\", \"flex-end\"],\n        optionIcons: [\"align-top\", \"align-middle\", \"align-bottom\"],\n        defaultValue: dp.alignment,\n        displaySegmentedControl: true,\n    },\n    maxWidth: {\n        type: ControlType.Number,\n        title: \"Max Width\",\n        min: 100,\n        max: 5000,\n        defaultValue: dp.maxWidth,\n    },\n    offset: {\n        type: ControlType.Object,\n        title: \"Offset\",\n        controls: {\n            offsetX: {\n                type: ControlType.Number,\n                min: -5000,\n                max: 5000,\n                title: \"X\",\n                defaultValue: dpOffset.offsetX,\n            },\n            offsetY: {\n                type: ControlType.Number,\n                min: -5000,\n                max: 5000,\n                title: \"Y\",\n                defaultValue: dpOffset.offsetY,\n            },\n        },\n    },\n    markerSize: {\n        type: ControlType.Number,\n        min: 0,\n        max: 1,\n        step: 0.01,\n        title: \"Markers\",\n        defaultValue: dp.markerSize,\n    },\n    markerArray: {\n        type: ControlType.Array,\n        title: \"Location\",\n        // defaultValue: [{ latitude: 52.3676, longitude: 4.9041 }],\n        control: {\n            type: ControlType.Object,\n            title: \"Location\",\n            controls: {\n                latitude: {\n                    type: ControlType.Number,\n                    min: -90,\n                    max: 90,\n                    title: \"Lat\",\n                    step: 0.0001,\n                    defaultValue: dp.markerArray.latitude,\n                },\n                longitude: {\n                    type: ControlType.Number,\n                    min: -180,\n                    max: 180,\n                    title: \"Long\",\n                    step: 0.0001,\n                    defaultValue: dp.markerArray.longitude,\n                },\n            },\n        },\n    },\n})\n\n/* Styles */\nconst flexStyles = {\n    width: \"100%\",\n    height: \"100%\",\n    display: \"flex\",\n    placeItems: \"center\",\n    placeContent: \"center\",\n    overflow: \"visible\",\n}\n\n/* Functions */\nconst convertRGB = (color) => {\n    return {\n        r: Color(color).r / 255,\n        g: Color(color).g / 255,\n        b: Color(color).b / 255,\n    }\n}\n"],"names":[],"mappings":"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"}