{"version":3,"file":"swim-mapbox.mjs","sources":["../main/MapboxViewport.ts","../main/MapboxView.ts"],"sourcesContent":["// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Equals} from \"@swim/util\";\nimport type {R2PointLike} from \"@swim/math\";\nimport {R2Point} from \"@swim/math\";\nimport type {GeoPointLike} from \"@swim/geo\";\nimport {GeoPoint} from \"@swim/geo\";\nimport {GeoBox} from \"@swim/geo\";\nimport type {GeoViewport} from \"@swim/map\";\n\n/** @public */\nexport class MapboxViewport implements GeoViewport, Equals {\n  constructor(map: mapboxgl.Map, geoFrame: GeoBox, geoCenter: GeoPoint,\n              zoom: number, heading: number, tilt: number) {\n    this.map = map;\n    this.geoFrame = geoFrame;\n    this.geoCenter = geoCenter;\n    this.zoom = zoom;\n    this.heading = heading;\n    this.tilt = tilt;\n  }\n\n  readonly map: mapboxgl.Map;\n\n  readonly geoFrame: GeoBox;\n\n  readonly geoCenter: GeoPoint;\n\n  readonly zoom: number;\n\n  readonly heading: number;\n\n  readonly tilt: number;\n\n  project(geoPoint: GeoPointLike): R2Point;\n  project(lng: number, lat: number): R2Point;\n  project(lng: GeoPointLike | number, lat?: number): R2Point {\n    let geoPoint: mapboxgl.LngLatLike;\n    if (typeof lng === \"number\") {\n      geoPoint = new mapboxgl.LngLat(lng, lat!);\n    } else {\n      geoPoint = lng;\n    }\n    const point = this.map.project(geoPoint);\n    return new R2Point(point.x, point.y);\n  }\n\n  unproject(viewPoint: R2PointLike): GeoPoint;\n  unproject(x: number, y: number): GeoPoint;\n  unproject(x: R2PointLike | number, y?: number): GeoPoint {\n    let viewPoint: mapboxgl.PointLike;\n    if (typeof x === \"number\") {\n      viewPoint = new mapboxgl.Point(x, y!);\n    } else if (Array.isArray(x)) {\n      viewPoint = x;\n    } else {\n      viewPoint = new mapboxgl.Point(x.x, x.y);\n    }\n    const point = this.map.unproject(viewPoint);\n    return new GeoPoint(point.lng, point.lat);\n  }\n\n  equals(that: unknown): boolean {\n    if (this === that) {\n      return true;\n    } else if (that instanceof MapboxViewport) {\n      return this.map === that.map\n          && this.geoFrame.equals(that.geoFrame)\n          && this.geoCenter.equals(that.geoCenter)\n          && this.zoom === that.zoom\n          && this.heading === that.heading\n          && this.tilt === that.tilt;\n    }\n    return false;\n  }\n\n  static create(map: mapboxgl.Map): MapboxViewport {\n    const mapFrame = map.getBounds();\n    const geoFrame = new GeoBox(mapFrame.getWest(), mapFrame.getSouth(),\n                                mapFrame.getEast(), mapFrame.getNorth());\n    const mapCenter = map.getCenter();\n    const geoCenter = new GeoPoint(mapCenter.lng, mapCenter.lat);\n    const zoom = map.getZoom();\n    const heading = map.getBearing();\n    const tilt = map.getPitch();\n    return new MapboxViewport(map, geoFrame, geoCenter, zoom, heading, tilt);\n  }\n}\n","// Copyright 2015-2024 Nstream, inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type {Mutable} from \"@swim/util\";\nimport type {Class} from \"@swim/util\";\nimport {Equivalent} from \"@swim/util\";\nimport type {TimingLike} from \"@swim/util\";\nimport {Timing} from \"@swim/util\";\nimport type {Observes} from \"@swim/util\";\nimport {Affinity} from \"@swim/component\";\nimport {Property} from \"@swim/component\";\nimport {Provider} from \"@swim/component\";\nimport {Look} from \"@swim/theme\";\nimport {Mood} from \"@swim/theme\";\nimport type {ViewInsets} from \"@swim/view\";\nimport {View} from \"@swim/view\";\nimport {ViewRef} from \"@swim/view\";\nimport type {ViewportColorScheme} from \"@swim/view\";\nimport type {ViewportService} from \"@swim/view\";\nimport {HtmlView} from \"@swim/dom\";\nimport type {CanvasView} from \"@swim/graphics\";\nimport type {GeoPerspectiveLike} from \"@swim/map\";\nimport {GeoPerspective} from \"@swim/map\";\nimport type {GeoViewport} from \"@swim/map\";\nimport type {MapViewObserver} from \"@swim/map\";\nimport {MapView} from \"@swim/map\";\nimport {MapboxViewport} from \"./MapboxViewport\";\n\n/** @public */\nexport interface MapboxViewObserver<V extends MapboxView = MapboxView> extends MapViewObserver<V> {\n  viewWillSetGeoViewport?(newGeoViewport: MapboxViewport | null, oldGeoViewport: MapboxViewport | null, view: V): void;\n\n  viewDidSetGeoViewport?(newGeoViewport: MapboxViewport | null, oldGeoViewport: MapboxViewport | null, view: V): void;\n\n  viewWillMoveMap?(view: V): void;\n\n  viewDidMoveMap?(view: V): void;\n}\n\n/** @public */\nexport class MapboxView extends MapView {\n  constructor(map: mapboxgl.Map) {\n    super();\n    this.map = map;\n    (this.geoViewport as Mutable<typeof this.geoViewport>).value = MapboxViewport.create(map);\n\n    this.onMapRender = this.onMapRender.bind(this);\n    this.onMoveStart = this.onMoveStart.bind(this);\n    this.onMoveEnd = this.onMoveEnd.bind(this);\n    this.initMap(map);\n  }\n\n  declare readonly observerType?: Class<MapboxViewObserver>;\n\n  readonly map: mapboxgl.Map;\n\n  protected initMap(map: mapboxgl.Map): void {\n    map.on(\"render\", this.onMapRender);\n    map.on(\"movestart\", this.onMoveStart);\n    map.on(\"moveend\", this.onMoveEnd);\n    if ((map as any).style === void 0) {\n      this.mapStyle.update();\n    } else {\n      this.mapStyle.setAffinity(Affinity.Extrinsic);\n    }\n  }\n\n  @Property({\n    extends: true,\n    didSetValue(newGeoViewport: GeoViewport | null, oldGeoViewport: GeoViewport | null): void {\n      super.didSetValue(newGeoViewport, oldGeoViewport);\n      const immediate = !this.owner.hidden && !this.owner.culled;\n      this.owner.requireUpdate(View.NeedsProject, immediate);\n    },\n    update(): void {\n      if (this.hasAffinity(Affinity.Intrinsic)) {\n        this.setIntrinsic(MapboxViewport.create(this.owner.map));\n      }\n    },\n  })\n  override readonly geoViewport!: Property<this, GeoViewport | null> & MapView[\"geoViewport\"] & {\n    /** @internal */\n    update(): void;\n  };\n\n  protected onMapRender(): void {\n    this.geoViewport.update();\n  }\n\n  protected onMoveStart(): void {\n    this.willMoveMap();\n  }\n\n  protected onMoveEnd(): void {\n    this.didMoveMap();\n  }\n\n  override moveTo(geoPerspective: GeoPerspectiveLike, timing?: TimingLike | boolean): void {\n    const geoViewport = this.geoViewport.value;\n    if (geoViewport === null) {\n      return;\n    }\n\n    geoPerspective = GeoPerspective.fromLike(geoPerspective);\n    let bounds: mapboxgl.LngLatBoundsLike | undefined;\n    const options: mapboxgl.FitBoundsOptions = {};\n\n    const geoFrame = geoPerspective.geoFrame;\n    if (geoFrame !== null) {\n      bounds = [geoFrame.west, geoFrame.south, geoFrame.east, geoFrame.north];\n    }\n\n    const geoCenter = geoPerspective.geoCenter;\n    if (geoCenter !== null && !geoViewport.geoCenter.equivalentTo(geoCenter, 1e-5)) {\n      options.center = geoCenter;\n    }\n\n    const zoom = geoPerspective.zoom;\n    if (zoom !== void 0 && !Equivalent(geoViewport.zoom, zoom, 1e-5)) {\n      options.zoom = zoom;\n    }\n\n    const heading = geoPerspective.heading;\n    if (heading !== void 0 && !Equivalent(geoViewport.heading, heading, 1e-5)) {\n      options.bearing = heading;\n    }\n\n    const tilt = geoPerspective.tilt;\n    if (tilt !== void 0 && !Equivalent(geoViewport.tilt, tilt, 1e-5)) {\n      options.pitch = tilt;\n    }\n\n    if (timing === void 0 || timing === true) {\n      timing = this.getLookOr(Look.timing, Mood.ambient, false);\n    } else {\n      timing = Timing.fromLike(timing);\n    }\n    if (timing instanceof Timing) {\n      options.duration = timing.duration;\n    } else {\n      options.duration = 0;\n    }\n\n    options.padding = this.edgeInsets.padding;\n\n    if (bounds !== void 0) {\n      this.map.fitBounds(bounds, options);\n    } else {\n      this.map.flyTo(options);\n    }\n\n    if (options.duration === 0) {\n      setTimeout(this.requireUpdate.bind(this, View.NeedsProject));\n    }\n  }\n\n  protected willMoveMap(): void {\n    this.callObservers(\"viewWillMoveMap\", this);\n  }\n\n  protected didMoveMap(): void {\n    this.callObservers(\"viewDidMoveMap\", this);\n  }\n\n  @ViewRef({\n    extends: true,\n    didAttachView(canvasView: CanvasView, targetView: View | null): void {\n      if (this.owner.parent === null) {\n        canvasView.appendChild(this.owner);\n        canvasView.setEventTarget(this.owner.map.getCanvasContainer());\n      }\n      super.didAttachView(canvasView, targetView);\n    },\n    willDetachView(canvasView: CanvasView): void {\n      super.willDetachView(canvasView);\n      if (this.owner.parent === canvasView) {\n        canvasView.removeChild(this.owner);\n      }\n    },\n  })\n  override readonly canvas!: ViewRef<this, CanvasView> & MapView[\"canvas\"];\n\n  @ViewRef({\n    extends: true,\n    didAttachView(containerView: HtmlView, targetView: View | null): void {\n      HtmlView.fromNode(this.owner.map.getContainer());\n      const canvasContainerView =  HtmlView.fromNode(this.owner.map.getCanvasContainer());\n      this.owner.canvas.insertView(canvasContainerView);\n      const controlContainerNode = containerView.node.querySelector(\".mapboxgl-control-container\") as HTMLElement | null;\n      if (controlContainerNode !== null) {\n        this.owner.controlContainer.setView(HtmlView.fromNode(controlContainerNode));\n        const topLeftControlsNode = controlContainerNode.querySelector(\".mapboxgl-ctrl-top-left\") as HTMLElement | null;\n        if (topLeftControlsNode !== null) {\n          this.owner.topLeftControls.setView(HtmlView.fromNode(topLeftControlsNode));\n        }\n        const topRightControlsNode = controlContainerNode.querySelector(\".mapboxgl-ctrl-top-right\") as HTMLElement | null;\n        if (topRightControlsNode !== null) {\n          this.owner.topRightControls.setView(HtmlView.fromNode(topRightControlsNode));\n        }\n        const bottomLeftControlsNode = controlContainerNode.querySelector(\".mapboxgl-ctrl-bottom-left\") as HTMLElement | null;\n        if (bottomLeftControlsNode !== null) {\n          this.owner.bottomLeftControls.setView(HtmlView.fromNode(bottomLeftControlsNode));\n        }\n        const bottomRightControlsNode = controlContainerNode.querySelector(\".mapboxgl-ctrl-bottom-right\") as HTMLElement | null;\n        if (bottomRightControlsNode !== null) {\n          this.owner.bottomRightControls.setView(HtmlView.fromNode(bottomRightControlsNode));\n        }\n      }\n      super.didAttachView(containerView, targetView);\n    },\n    willDetachView(containerView: HtmlView): void {\n      super.willDetachView(containerView);\n      const canvasView = this.owner.canvas.view;\n      const canvasContainerView = HtmlView.fromNode(this.owner.map.getCanvasContainer());\n      if (canvasView !== null && canvasView.parent === canvasContainerView) {\n        canvasContainerView.removeChild(containerView);\n      }\n      this.owner.controlContainer.setView(null);\n      this.owner.topLeftControls.setView(null);\n      this.owner.topRightControls.setView(null);\n      this.owner.bottomLeftControls.setView(null);\n      this.owner.bottomRightControls.setView(null);\n    },\n  })\n  override readonly container!: ViewRef<this, HtmlView> & MapView[\"container\"];\n\n  @ViewRef({viewType: HtmlView})\n  readonly controlContainer!: ViewRef<this, HtmlView>;\n\n  @ViewRef({viewType: HtmlView})\n  readonly topLeftControls!: ViewRef<this, HtmlView>;\n\n  @ViewRef({viewType: HtmlView})\n  readonly topRightControls!: ViewRef<this, HtmlView>;\n\n  @ViewRef({viewType: HtmlView})\n  readonly bottomLeftControls!: ViewRef<this, HtmlView>;\n\n  @ViewRef({viewType: HtmlView})\n  readonly bottomRightControls!: ViewRef<this, HtmlView>;\n\n  @Property({\n    extends: true,\n    get padding(): mapboxgl.PaddingOptions {\n      const edgeInsets = this.value;\n      let top = edgeInsets.insetTop;\n      let right = edgeInsets.insetRight;\n      let bottom = edgeInsets.insetBottom;\n      let left = edgeInsets.insetLeft;\n      const containerView = this.owner.container.view;\n      if (containerView !== null) {\n        top = Math.max(containerView.style.paddingTop.pxState(), top);\n        right = Math.max(containerView.style.paddingRight.pxState(), right);\n        bottom = Math.max(containerView.style.paddingBottom.pxState(), bottom);\n        left = Math.max(containerView.style.paddingLeft.pxState(), left);\n      }\n      return {top, right, bottom, left};\n    },\n  })\n  override get edgeInsets(): Property<this, ViewInsets> & {\n    get padding(): mapboxgl.PaddingOptions;\n  } {\n    return Property.getter();\n  }\n\n  protected override onResize(): void {\n    super.onResize();\n    this.map.resize();\n  }\n\n  protected override onLayout(): void {\n    super.onLayout();\n    this.layoutControls();\n  }\n\n  protected layoutControls(): void {\n    const containerView = this.container.view;\n    if (containerView === null) {\n      return;\n    }\n    const edgeInsets = containerView.edgeInsets.value;\n    const top = Math.max(containerView.style.paddingTop.pxState(), edgeInsets.insetTop);\n    const right = Math.max(containerView.style.paddingRight.pxState(), edgeInsets.insetRight);\n    const bottom = Math.max(containerView.style.paddingBottom.pxState(), edgeInsets.insetBottom);\n    const left = Math.max(containerView.style.paddingLeft.pxState(), edgeInsets.insetLeft);\n    const topLeftControlsView = this.topLeftControls.view;\n    if (topLeftControlsView !== null) {\n      topLeftControlsView.style.top.setIntrinsic(top);\n      topLeftControlsView.style.left.setIntrinsic(left);\n    }\n    const topRightControlsView = this.topRightControls.view;\n    if (topRightControlsView !== null) {\n      topRightControlsView.style.top.setIntrinsic(top);\n      topRightControlsView.style.right.setIntrinsic(right);\n    }\n    const bottomLeftControlsView = this.bottomLeftControls.view;\n    if (bottomLeftControlsView !== null) {\n      bottomLeftControlsView.style.bottom.setIntrinsic(bottom);\n      bottomLeftControlsView.style.left.setIntrinsic(left);\n    }\n    const bottomRightControlsView = this.bottomRightControls.view;\n    if (bottomRightControlsView !== null) {\n      bottomRightControlsView.style.bottom.setIntrinsic(bottom);\n      bottomRightControlsView.style.right.setIntrinsic(right);\n    }\n  }\n\n  @Provider({\n    extends: true,\n    observes: true,\n    serviceDidSetViewportColorScheme(colorScheme: ViewportColorScheme): void {\n      this.owner.mapStyle.update();\n    },\n  })\n  override get viewport(): Provider<this, ViewportService> & MapView[\"viewport\"] & Observes<ViewportService> {\n    return Provider.getter();\n  }\n\n  @Property({\n    value: null,\n    init(): void {\n      this.dark = \"mapbox://styles/mapbox/dark-v10\";\n      this.light = \"mapbox://styles/mapbox/light-v10\";\n    },\n    didSetValue(mapStyle: mapboxgl.Style | string | null) {\n      if (mapStyle !== null) {\n        this.owner.map.setStyle(mapStyle);\n      }\n    },\n    update(): void {\n      if (!this.hasAffinity(Affinity.Intrinsic)) {\n        return;\n      }\n      const viewportService = this.owner.viewport.service;\n      if (viewportService === null) {\n        return;\n      }\n      const colorScheme = viewportService.colorScheme.value;\n      if (colorScheme === \"dark\") {\n        this.setIntrinsic(this.dark);\n      } else {\n        this.setIntrinsic(this.light);\n      }\n    },\n  })\n  readonly mapStyle!: Property<this, mapboxgl.Style | string | null> & {\n    dark: mapboxgl.Style | string | null,\n    light: mapboxgl.Style | string | null,\n    update(): void,\n  };\n\n  protected override onMount(): void {\n    super.onMount();\n    this.mapStyle.update();\n  }\n}\n"],"names":["MapboxViewport","constructor","map","geoFrame","geoCenter","zoom","heading","tilt","this","project","lng","lat","geoPoint","mapboxgl","LngLat","point","R2Point","x","y","unproject","viewPoint","Point","Array","isArray","GeoPoint","equals","that","create","mapFrame","getBounds","GeoBox","getWest","getSouth","getEast","getNorth","mapCenter","getCenter","getZoom","getBearing","getPitch","MapboxView","MapView","_a","_classSuper","super","__runInitializers","_instanceExtraInitializers","geoViewport","_geoViewport_initializers","canvas","_canvas_initializers","container","_container_initializers","controlContainer","_controlContainer_initializers","topLeftControls","_topLeftControls_initializers","topRightControls","_topRightControls_initializers","bottomLeftControls","_bottomLeftControls_initializers","bottomRightControls","_bottomRightControls_initializers","mapStyle","_mapStyle_initializers","value","onMapRender","bind","onMoveStart","onMoveEnd","initMap","on","style","update","setAffinity","Affinity","Extrinsic","willMoveMap","didMoveMap","moveTo","geoPerspective","timing","GeoPerspective","fromLike","bounds","options","west","south","east","north","equivalentTo","center","Equivalent","bearing","pitch","getLookOr","Look","Mood","ambient","Timing","duration","padding","edgeInsets","fitBounds","flyTo","setTimeout","requireUpdate","View","NeedsProject","callObservers","Property","getter","onResize","resize","onLayout","layoutControls","containerView","view","top","Math","max","paddingTop","pxState","insetTop","right","paddingRight","insetRight","bottom","paddingBottom","insetBottom","left","paddingLeft","insetLeft","topLeftControlsView","setIntrinsic","topRightControlsView","bottomLeftControlsView","bottomRightControlsView","viewport","Provider","onMount","_geoViewport_decorators","extends","didSetValue","newGeoViewport","oldGeoViewport","immediate","owner","hidden","culled","hasAffinity","Intrinsic","_canvas_decorators","ViewRef","didAttachView","canvasView","targetView","parent","appendChild","setEventTarget","getCanvasContainer","willDetachView","removeChild","_container_decorators","HtmlView","fromNode","getContainer","canvasContainerView","insertView","controlContainerNode","node","querySelector","setView","topLeftControlsNode","topRightControlsNode","bottomLeftControlsNode","bottomRightControlsNode","_controlContainer_decorators","viewType","_topLeftControls_decorators","_topRightControls_decorators","_bottomLeftControls_decorators","_bottomRightControls_decorators","_get_edgeInsets_decorators","_get_viewport_decorators","observes","serviceDidSetViewportColorScheme","colorScheme","_mapStyle_decorators","init","dark","light","setStyle","viewportService","service","__esDecorate","kind","name","static","private","access","has","obj","get","metadata","_metadata","set"],"mappings":"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"}