hunk.code_window: iOS worker VMs run on Mac Mini 8.1 hosts in an isolated environment. Every build gets its own fresh macOS VM:
   - Hardware:
     - Intel: Intel(R) Core(TM) i7-8700B CPU (6 cores/12 threads), 64 GB RAM
     - M1: 3.2GHz 8-Core M1 (4 performance and 4 efficiency cores), 16 GB RAM [2020]
   - Build resources:
     - [`intel-medium`](eas-json/#resourceclass-2): 3 cores, 12 GB RAM, 2 builder VMs per host
  
hunk.labels: keep keep keep keep replace keep keep
hunk.after_edit:   - M1: 3.2GHz 8-Core M1 (4 performance and 4 efficiency cores), 16 GB RAM
     - M2: 3.4GHz 12-Core M2 (8 performance and 4 efficiency cores), 24 GB RAM
  
hunk.file_path: docs/pages/build-reference/infrastructure.mdx
hunk.type: replace
file: package versioned.host.exp.exponent.modules.api.components.maps;
  
  import androidx.annotation.Nullable;
  
  import com.facebook.react.common.MapBuilder;
  import com.facebook.react.uimanager.LayoutShadowNode;
  import com.facebook.react.uimanager.ThemedReactContext;
  import com.facebook.react.uimanager.ViewGroupManager;
  import com.facebook.react.uimanager.annotations.ReactProp;
  
  import java.util.Map;
  
  public class AirMapCalloutManager extends ViewGroupManager<AirMapCallout> {
  
    @Override
    public String getName() {
      return "AIRMapCallout";
    }
  
    @Override
    public AirMapCallout createViewInstance(ThemedReactContext context) {
      return new AirMapCallout(context);
    }
  
    @ReactProp(name = "tooltip", defaultBoolean = false)
    public void setTooltip(AirMapCallout view, boolean tooltip) {
      view.setTooltip(tooltip);
    }
  
    @Override
    @Nullable
    public Map getExportedCustomDirectEventTypeConstants() {
      return MapBuilder.of("onPress", MapBuilder.of("registrationName", "onPress"));
    }
  
    @Override
    public LayoutShadowNode createShadowNodeInstance() {
      // we use a custom shadow node that emits the width/height of the view
      // after layout with the updateExtraData method. Without this, we can't generate
      // a bitmap of the appropriate width/height of the rendered view.
      return new SizeReportingShadowNode();
    }
  
    @Override
    public void updateExtraData(AirMapCallout view, Object extraData) {
      // This method is called from the shadow node with the width/height of the rendered
      // marker view.
      //noinspection unchecked
      Map<String, Float> data = (Map<String, Float>) extraData;
      float width = data.get("width");
      float height = data.get("height");
      view.width = (int) width;
      view.height = (int) height;
    }
  
  }
  