{"version":3,"sources":["../src/index.mjs"],"names":["React","memo","forwardRef","useState","useRef","useEffect","props","ref","s2map","s2mapContainer","height","setHeight","fullscreen","resize","window","innerHeight","current","prepCanvas","addEventListener","delete","removeEventListener","id","className","node","children","container","parentRef","style","opts","options","apiKey","ready","pos","click","info","mouseenter","mouseleave","screenshot","S2Map","console","error","data","feature","lon","lat","detail"],"mappings":"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","sourcesContent":["// @flow\n/* eslint-env browser */\nimport React, { memo, forwardRef, useState, useRef, useEffect } from 'react'\n\ntype S2MapProps = {\n  ref?: React.ref,\n  style: Object,\n  opts?: Object,\n  apiKey: string,\n  ready?: Function,\n  click?: Function,\n  info?: Function,\n  mouseenter?: Function,\n  mouseleave?: Function,\n  id?: string | Object,\n  className?: string | Object,\n  children?: React.Element\n}\n\nexport default memo(forwardRef((props: S2MapProps, ref: React.ref) => {\n  const s2map = useRef()\n  const s2mapContainer = useRef()\n  const [height, setHeight] = useState(0)\n  const { fullscreen } = props\n\n  function resize () { setHeight(window.innerHeight) }\n\n  useEffect(() => {\n    // if already built, return\n    if (s2map.current) return\n    // prep the canvas\n    prepCanvas(s2mapContainer.current, s2map, props, ref)\n    // if fullscreen mode, adjust for phones\n    if (fullscreen) {\n      window.addEventListener('resize', resize, false, 0, true)\n      window.addEventListener('orientationchange', resize, false, 0, true)\n      setHeight(window.innerHeight)\n    }\n    // componentWillUnmount equivalent:\n    return () => {\n      if (s2map.current) { s2map.current.delete(); s2map.current = null }\n      if (fullscreen) {\n        window.removeEventListener('resize', resize, false, 0, true)\n        window.removeEventListener('orientationchange', resize, false, 0, true)\n      }\n    } // eslint-disable-next-line\n  }, [s2map, fullscreen])\n\n  return (\n    <div id={props.id} className={props.className} style={props.fullscreen ? { height } : {}} ref={node => { s2mapContainer.current = node }}>\n      {props.children}\n    </div>\n  )\n}))\n\nfunction prepCanvas (container: HTMLElement, ref: React.ref, props: S2MapProps, parentRef: React.ref) {\n  // pull in properties\n  let { style, opts, options, apiKey, ready, pos, click, info, mouseenter, mouseleave, screenshot } = props\n  if (!opts) opts = {}\n  opts = { ...options, ...opts }\n  // don't bother reloading without a style or container\n  if (!style || !container) return\n\n  // build new map\n  if (!window.S2Map) return console.error('S2Map.js not loaded')\n  const s2map = ref.current = new window.S2Map({\n    ...opts,\n    style,\n    apiKey,\n    container,\n    ready\n  })\n  // if ref set ref current\n  if (parentRef) parentRef.current = s2map\n  // create the appropriate even listeners\n  if (click) {\n    s2map.addEventListener('click', (data) => {\n      const { feature, lon, lat } = data.detail\n      click(feature, lon, lat, s2map)\n    })\n  }\n  if (info) {\n    s2map.addEventListener('info', (data) => {\n      info(data.detail, s2map)\n    })\n  }\n  if (mouseenter) {\n    s2map.addEventListener('mouseenter', (data) => {\n      mouseenter(data.detail, s2map)\n    })\n  }\n  if (mouseleave) {\n    s2map.addEventListener('mouseleave', (data) => {\n      mouseleave(data.detail, s2map)\n    })\n  }\n  if (pos) {\n    s2map.addEventListener('pos', (data) => {\n      pos(data.detail, s2map)\n    })\n  }\n  if (screenshot) {\n    s2map.addEventListener('screenshot', (data) => {\n      pos(data.detail, s2map)\n    })\n  }\n}\n"],"file":"index.mjs"}