{"version":3,"file":"index.mjs","sources":["../src/CurrentMapContext.tsx","../src/MapContext.tsx","../src/Map.tsx","../src/Control.tsx"],"sourcesContent":["import React from 'react';\r\nimport olMap from 'ol/Map';\r\n\r\nexport interface CurrentMapContextProps {\r\n    map: olMap;\r\n}\r\nexport const CurrentMapContext = React.createContext<CurrentMapContextProps | null>(null);\r\n","import React from 'react';\r\nimport olMap from 'ol/Map';\r\n\r\nexport interface MapContextProps {\r\n    maps: Map<string, olMap>;\r\n    registerMap: (map: olMap, id: string) => void;\r\n}\r\n\r\nexport const MapContext = React.createContext<MapContextProps | null>(null);\r\n","import React from 'react';\r\nimport { MapOptions } from 'ol/PluggableMap';\r\nimport MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport MapEvent from 'ol/MapEvent';\r\nimport olMap from 'ol/Map';\r\nimport { ObjectEvent } from 'ol/Object';\r\nimport RenderEvent from 'ol/render/Event';\r\n\r\nimport { CurrentMapContext } from './CurrentMapContext';\r\nimport { MapContext } from './MapContext';\r\n\r\nexport interface MapEvents {\r\n    onchange?: (evt: Event) => void;\r\n    onchangeLayerGroup?: (evt: ObjectEvent) => void;\r\n    onchangeSize?: (evt: ObjectEvent) => void;\r\n    onchangeTarget?: (evt: ObjectEvent) => void;\r\n    onchangeView?: (evt: ObjectEvent) => void;\r\n    onclick?: (evt: MapBrowserEvent) => void;\r\n    ondblclick?: (evt: MapBrowserEvent) => void;\r\n    onmovestart?: (evt: MapEvent) => void;\r\n    onmoveend?: (evt: MapEvent) => void;\r\n    onpointerdrag?: (evt: MapBrowserEvent) => void;\r\n    onpointermove?: (evt: MapBrowserEvent) => void;\r\n    onpostcompose?: (evt: RenderEvent) => void;\r\n    onpostrender?: (evt: MapEvent) => void;\r\n    onprecompose?: (evt: RenderEvent) => void;\r\n    onpropertychange?: (evt: ObjectEvent) => void;\r\n    onrendercomplete?: (evt: RenderEvent) => void;\r\n    onsingleclick?: (evt: MapBrowserEvent) => void;\r\n}\r\n\r\nexport interface MapProps extends MapEvents, React.HTMLAttributes<HTMLDivElement> {\r\n    mapId?: string;\r\n    children?: React.ReactNode;\r\n    initialMapOptions: Omit<MapOptions, 'target'>;\r\n}\r\n\r\nexport const OlMap = (props: MapProps) => {\r\n    const {\r\n        mapId,\r\n        children,\r\n        initialMapOptions,\r\n\r\n        onchange,\r\n        onchangeLayerGroup,\r\n        onchangeTarget,\r\n        onchangeView,\r\n        onclick,\r\n        ondblclick,\r\n        onmovestart,\r\n        onmoveend,\r\n        onpointerdrag,\r\n        onpointermove,\r\n        onpostcompose,\r\n        onpostrender,\r\n        onprecompose,\r\n        onpropertychange,\r\n        onrendercomplete,\r\n        onsingleclick,\r\n\r\n        ...divProps\r\n    } = props;\r\n\r\n    const mapElementRef = React.useRef<HTMLDivElement>(null);\r\n    \r\n    const mapObj = new olMap({\r\n        controls: initialMapOptions.controls,\r\n        interactions: initialMapOptions.interactions,\r\n        layers: initialMapOptions.layers,\r\n        view: initialMapOptions.view,\r\n        overlays: initialMapOptions.overlays,\r\n    });\r\n\r\n    const mapContext = React.useContext(MapContext);\r\n    if (mapId && mapContext) {\r\n        mapContext.registerMap(mapObj, mapId);\r\n    }\r\n\r\n    React.useEffect(() => {\r\n        onchange && mapObj.on('change', onchange);\r\n        onchangeLayerGroup && mapObj.on('change:layerGroup', onchangeLayerGroup);\r\n        onchangeTarget && mapObj.on('change:target', onchangeTarget);\r\n        onchangeView && mapObj.on('change:view', onchangeView);\r\n        onclick && mapObj.on('click', onclick);\r\n        ondblclick && mapObj.on('dblclick', ondblclick);\r\n        onmovestart && mapObj.on('movestart', onmovestart);\r\n        onmoveend && mapObj.on('moveend', onmoveend);\r\n        onpointerdrag && mapObj.on('pointerdrag', onpointerdrag);\r\n        onpointermove && mapObj.on('pointermove', onpointermove);\r\n        onpostcompose && mapObj.on('postcompose', onpostcompose);\r\n        onpostrender && mapObj.on('postrender', onpostrender);\r\n        onprecompose && mapObj.on('precompose', onprecompose);\r\n        onpropertychange && mapObj.on('propertychange', onpropertychange);\r\n        onrendercomplete && mapObj.on('rendercomplete', onrendercomplete);\r\n        onsingleclick && mapObj.on('singleclick', onsingleclick);\r\n        \r\n        if (mapElementRef.current) {\r\n            mapObj.setTarget(mapElementRef.current);\r\n        }\r\n\r\n        return function cleanup() {\r\n            mapObj.setTarget(undefined);\r\n        };\r\n    }, [mapElementRef]);\r\n    \r\n    return (\r\n        <CurrentMapContext.Provider value={{ map: mapObj }}>\r\n            <div ref={mapElementRef} {...divProps}>\r\n                {children}\r\n            </div>\r\n        </CurrentMapContext.Provider>\r\n    );\r\n};\r\n","import React from 'react';\r\nimport olControl, { Options as olControlOptions } from 'ol/control/Control';\r\nimport olMap from 'ol/Map';\r\nimport { ObjectEvent } from 'ol/Object';\r\n\r\nimport { MapContext } from \"./MapContext\";\r\nimport { CurrentMapContext } from \"./CurrentMapContext\";\r\n\r\nexport interface ControlEvents {\r\n    onchange?: (evt: Event) => void;\r\n    onpropertychange?: (evt: ObjectEvent) => void;\r\n}\r\n\r\nexport interface ControlProps<T extends olControl, O extends Omit<olControlOptions, 'target'>> extends React.HTMLAttributes<HTMLDivElement> {\r\n    controlType: { new(opts: O): T ;};\r\n    controlProps: O;\r\n    mapId?: string;\r\n};\r\n\r\nexport function Control<T extends olControl, O>(props: ControlProps<T, O>) {\r\n    const {\r\n        controlType,\r\n        controlProps,\r\n        mapId,\r\n        ...divProps\r\n    } = props;\r\n\r\n    const mapCtx = React.useContext(MapContext);\r\n    const currentMapCtx = React.useContext(CurrentMapContext);\r\n    const ctrlRef = React.useRef<HTMLDivElement>(null);\r\n\r\n    let matchingMap: olMap | undefined;\r\n    if (mapCtx && mapId) {\r\n        matchingMap = mapCtx.maps.get(mapId);\r\n    } else if (currentMapCtx) {\r\n        matchingMap = currentMapCtx.map;\r\n    }\r\n\r\n    React.useEffect(() => {\r\n        const ctrlInstace = new controlType({\r\n            ...controlProps,\r\n            target: ctrlRef.current,\r\n        });\r\n\r\n        if (matchingMap) {\r\n            ctrlInstace.setMap(matchingMap);\r\n            matchingMap.addControl(ctrlInstace);\r\n        }\r\n\r\n        return () => {\r\n            matchingMap && matchingMap.removeControl(ctrlInstace);\r\n            ctrlInstace.dispose();\r\n        };\r\n    }, [matchingMap]);\r\n    return (<div ref={ctrlRef} {...divProps}></div>);\r\n}"],"names":["CurrentMapContext","React","createContext","MapContext","OlMap","props","mapId","children","initialMapOptions","onchange","onchangeLayerGroup","onchangeTarget","onchangeView","onclick","ondblclick","onmovestart","onmoveend","onpointerdrag","onpointermove","onpostcompose","onpostrender","onprecompose","onpropertychange","onrendercomplete","onsingleclick","divProps","mapElementRef","useRef","mapObj","olMap","controls","interactions","layers","view","overlays","mapContext","useContext","registerMap","useEffect","on","current","setTarget","undefined","Provider","value","map","ref","Control","matchingMap","controlType","controlProps","mapCtx","currentMapCtx","ctrlRef","maps","get","ctrlInstace","target","setMap","addControl","removeControl","dispose"],"mappings":"0XAMaA,EAAoBC,EAAMC,cAA6C,MCEvEC,EAAaF,EAAMC,cAAsC,MC6BzDE,EAAQ,SAACC,OAEdC,EAsBAD,EAtBAC,MACAC,EAqBAF,EArBAE,SACAC,EAoBAH,EApBAG,kBAEAC,EAkBAJ,EAlBAI,SACAC,EAiBAL,EAjBAK,mBACAC,EAgBAN,EAhBAM,eACAC,EAeAP,EAfAO,aACAC,EAcAR,EAdAQ,QACAC,EAaAT,EAbAS,WACAC,EAYAV,EAZAU,YACAC,EAWAX,EAXAW,UACAC,EAUAZ,EAVAY,cACAC,EASAb,EATAa,cACAC,EAQAd,EARAc,cACAC,EAOAf,EAPAe,aACAC,EAMAhB,EANAgB,aACAC,EAKAjB,EALAiB,iBACAC,EAIAlB,EAJAkB,iBACAC,EAGAnB,EAHAmB,cAEAC,qSAGEC,EAAgBzB,EAAM0B,OAAuB,MAE7CC,EAAS,IAAIC,EAAM,CACrBC,SAAUtB,EAAkBsB,SAC5BC,aAAcvB,EAAkBuB,aAChCC,OAAQxB,EAAkBwB,OAC1BC,KAAMzB,EAAkByB,KACxBC,SAAU1B,EAAkB0B,WAG1BC,EAAalC,EAAMmC,WAAWjC,UAChCG,GAAS6B,GACTA,EAAWE,YAAYT,EAAQtB,GAGnCL,EAAMqC,UAAU,kBACZ7B,GAAYmB,EAAOW,GAAG,SAAU9B,GAChCC,GAAsBkB,EAAOW,GAAG,oBAAqB7B,GACrDC,GAAkBiB,EAAOW,GAAG,gBAAiB5B,GAC7CC,GAAgBgB,EAAOW,GAAG,cAAe3B,GACzCC,GAAWe,EAAOW,GAAG,QAAS1B,GAC9BC,GAAcc,EAAOW,GAAG,WAAYzB,GACpCC,GAAea,EAAOW,GAAG,YAAaxB,GACtCC,GAAaY,EAAOW,GAAG,UAAWvB,GAClCC,GAAiBW,EAAOW,GAAG,cAAetB,GAC1CC,GAAiBU,EAAOW,GAAG,cAAerB,GAC1CC,GAAiBS,EAAOW,GAAG,cAAepB,GAC1CC,GAAgBQ,EAAOW,GAAG,aAAcnB,GACxCC,GAAgBO,EAAOW,GAAG,aAAclB,GACxCC,GAAoBM,EAAOW,GAAG,iBAAkBjB,GAChDC,GAAoBK,EAAOW,GAAG,iBAAkBhB,GAChDC,GAAiBI,EAAOW,GAAG,cAAef,GAEtCE,EAAcc,SACdZ,EAAOa,UAAUf,EAAcc,SAG5B,WACHZ,EAAOa,eAAUC,KAEtB,CAAChB,IAGAzB,gBAACD,EAAkB2C,UAASC,MAAO,CAAEC,IAAKjB,IACtC3B,qCAAK6C,IAAKpB,GAAmBD,GACxBlB,cCzFDwC,EAAgC1C,OAYxC2C,EAVAC,EAIA5C,EAJA4C,YACAC,EAGA7C,EAHA6C,aACA5C,EAEAD,EAFAC,MACAmB,8CAGE0B,EAASlD,EAAMmC,WAAWjC,GAC1BiD,EAAgBnD,EAAMmC,WAAWpC,GACjCqD,EAAUpD,EAAM0B,OAAuB,aAGzCwB,GAAU7C,EACV0C,EAAcG,EAAOG,KAAKC,IAAIjD,GACvB8C,IACPJ,EAAcI,EAAcP,KAGhC5C,EAAMqC,UAAU,eACNkB,EAAc,IAAIP,mBACjBC,GACHO,OAAQJ,EAAQb,kBAGhBQ,IACAQ,EAAYE,OAAOV,GACnBA,EAAYW,WAAWH,IAGpB,WACHR,GAAeA,EAAYY,cAAcJ,GACzCA,EAAYK,YAEjB,CAACb,IACI/C,qCAAK6C,IAAKO,GAAa5B"}