{"version":3,"file":"index.mjs","sources":["../src/lib/adapters/PlanetaryComputerLayerAdapter.ts"],"sourcesContent":["import type { CustomLayerAdapter, LayerState } from 'maplibre-gl-layer-control';\nimport type { PlanetaryComputerControl } from '../core/PlanetaryComputerControl';\n\n/**\n * Adapter for integrating Planetary Computer raster layers with maplibre-gl-layer-control.\n *\n * @example\n * ```typescript\n * import { PlanetaryComputerControl, PlanetaryComputerLayerAdapter } from 'maplibre-gl-planetary-computer';\n * import { LayerControl } from 'maplibre-gl-layer-control';\n *\n * const pcControl = new PlanetaryComputerControl({ ... });\n * map.addControl(pcControl, 'top-right');\n *\n * const pcAdapter = new PlanetaryComputerLayerAdapter(pcControl);\n * const layerControl = new LayerControl({\n *   customLayerAdapters: [pcAdapter],\n * });\n * map.addControl(layerControl, 'top-left');\n * ```\n */\nexport class PlanetaryComputerLayerAdapter implements CustomLayerAdapter {\n  readonly type = 'planetary-computer';\n\n  private _control: PlanetaryComputerControl;\n  private _changeCallbacks: Array<(event: 'add' | 'remove', layerId: string) => void> = [];\n  private _unsubscribe?: () => void;\n\n  constructor(control: PlanetaryComputerControl) {\n    this._control = control;\n    this._setupEventListeners();\n  }\n\n  private _setupEventListeners(): void {\n    const handleLayerAdd = () => {\n      const state = this._control.getState();\n      const layers = state.activeLayers;\n      if (layers.length > 0) {\n        const lastLayer = layers[layers.length - 1];\n        this._changeCallbacks.forEach((cb) => cb('add', lastLayer.id));\n      }\n    };\n\n    const handleLayerRemove = () => {\n      // We need to detect which layer was removed by comparing current state\n      // The event fires after removal, so we notify with a general refresh\n      // The layer control will reconcile by calling getLayerIds()\n      this._changeCallbacks.forEach((cb) => cb('remove', ''));\n    };\n\n    this._control.on('layer:add', handleLayerAdd);\n    this._control.on('layer:remove', handleLayerRemove);\n\n    this._unsubscribe = () => {\n      this._control.off('layer:add', handleLayerAdd);\n      this._control.off('layer:remove', handleLayerRemove);\n    };\n  }\n\n  getLayerIds(): string[] {\n    const state = this._control.getState();\n    return state.activeLayers.map((l) => l.id);\n  }\n\n  getLayerState(layerId: string): LayerState | null {\n    const state = this._control.getState();\n    const layer = state.activeLayers.find((l) => l.id === layerId);\n    if (!layer) return null;\n\n    return {\n      visible: layer.visible,\n      opacity: layer.opacity,\n      name: this.getName(layerId),\n      isCustomLayer: true,\n      customLayerType: 'planetary-computer',\n    };\n  }\n\n  setVisibility(layerId: string, visible: boolean): void {\n    this._control.updateLayer(layerId, { visible });\n  }\n\n  setOpacity(layerId: string, opacity: number): void {\n    this._control.updateLayer(layerId, { opacity });\n  }\n\n  getName(layerId: string): string {\n    const state = this._control.getState();\n    const layer = state.activeLayers.find((l) => l.id === layerId);\n    if (layer) {\n      if (layer.item) {\n        return layer.item.id;\n      }\n      if (layer.collection) {\n        return layer.collection.title || layer.collection.id;\n      }\n    }\n    return layerId;\n  }\n\n  getSymbolType(_layerId: string): string {\n    return 'raster';\n  }\n\n  removeLayer(layerId: string): void {\n    this._control.removeLayer(layerId);\n  }\n\n  onLayerChange(callback: (event: 'add' | 'remove', layerId: string) => void): () => void {\n    this._changeCallbacks.push(callback);\n    return () => {\n      const idx = this._changeCallbacks.indexOf(callback);\n      if (idx >= 0) this._changeCallbacks.splice(idx, 1);\n    };\n  }\n\n  destroy(): void {\n    this._unsubscribe?.();\n    this._changeCallbacks = [];\n  }\n}\n"],"names":["l"],"mappings":";;;;AAqBO,MAAM,8BAA4D;AAAA,EAOvE,YAAY,SAAmC;AANtC,gCAAO;AAER;AACA,4CAA8E,CAAA;AAC9E;AAGN,SAAK,WAAW;AAChB,SAAK,qBAAA;AAAA,EACP;AAAA,EAEQ,uBAA6B;AACnC,UAAM,iBAAiB,MAAM;AAC3B,YAAM,QAAQ,KAAK,SAAS,SAAA;AAC5B,YAAM,SAAS,MAAM;AACrB,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,aAAK,iBAAiB,QAAQ,CAAC,OAAO,GAAG,OAAO,UAAU,EAAE,CAAC;AAAA,MAC/D;AAAA,IACF;AAEA,UAAM,oBAAoB,MAAM;AAI9B,WAAK,iBAAiB,QAAQ,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC;AAAA,IACxD;AAEA,SAAK,SAAS,GAAG,aAAa,cAAc;AAC5C,SAAK,SAAS,GAAG,gBAAgB,iBAAiB;AAElD,SAAK,eAAe,MAAM;AACxB,WAAK,SAAS,IAAI,aAAa,cAAc;AAC7C,WAAK,SAAS,IAAI,gBAAgB,iBAAiB;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,cAAwB;AACtB,UAAM,QAAQ,KAAK,SAAS,SAAA;AAC5B,WAAO,MAAM,aAAa,IAAI,CAACA,OAAMA,GAAE,EAAE;AAAA,EAC3C;AAAA,EAEA,cAAc,SAAoC;AAChD,UAAM,QAAQ,KAAK,SAAS,SAAA;AAC5B,UAAM,QAAQ,MAAM,aAAa,KAAK,CAACA,OAAMA,GAAE,OAAO,OAAO;AAC7D,QAAI,CAAC,MAAO,QAAO;AAEnB,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,MAAM,KAAK,QAAQ,OAAO;AAAA,MAC1B,eAAe;AAAA,MACf,iBAAiB;AAAA,IAAA;AAAA,EAErB;AAAA,EAEA,cAAc,SAAiB,SAAwB;AACrD,SAAK,SAAS,YAAY,SAAS,EAAE,SAAS;AAAA,EAChD;AAAA,EAEA,WAAW,SAAiB,SAAuB;AACjD,SAAK,SAAS,YAAY,SAAS,EAAE,SAAS;AAAA,EAChD;AAAA,EAEA,QAAQ,SAAyB;AAC/B,UAAM,QAAQ,KAAK,SAAS,SAAA;AAC5B,UAAM,QAAQ,MAAM,aAAa,KAAK,CAACA,OAAMA,GAAE,OAAO,OAAO;AAC7D,QAAI,OAAO;AACT,UAAI,MAAM,MAAM;AACd,eAAO,MAAM,KAAK;AAAA,MACpB;AACA,UAAI,MAAM,YAAY;AACpB,eAAO,MAAM,WAAW,SAAS,MAAM,WAAW;AAAA,MACpD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,UAA0B;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,SAAuB;AACjC,SAAK,SAAS,YAAY,OAAO;AAAA,EACnC;AAAA,EAEA,cAAc,UAA0E;AACtF,SAAK,iBAAiB,KAAK,QAAQ;AACnC,WAAO,MAAM;AACX,YAAM,MAAM,KAAK,iBAAiB,QAAQ,QAAQ;AAClD,UAAI,OAAO,EAAG,MAAK,iBAAiB,OAAO,KAAK,CAAC;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,UAAgB;;AACd,eAAK,iBAAL;AACA,SAAK,mBAAmB,CAAA;AAAA,EAC1B;AACF;"}