// To report an issue with these types, please open a support ticket at:
// https://issuetracker.google.com/savedsearches/558438

// Google Maps JS API Version: 3.65
// tslint:disable:enforce-name-casing
// tslint:disable:no-any
// tslint:disable:interface-over-type-literal
// tslint:disable:array-type
// tslint:disable:no-empty-interface
// tslint:disable:no-unnecessary-class
// tslint:disable:strict-export-declare-modifiers
// g3-prettier-ignore-file
/* eslint-disable @typescript-eslint/no-empty-interface */

////////////////////////////////////////////////////////////////////////////////
// Generated by an automated process. DO NOT EDIT!
////////////////////////////////////////////////////////////////////////////////


declare namespace google.maps.event {
  /**
   * Adds the given listener function to the given event name for the given object instance. Returns an identifier for this listener that can be used with removeListener().
   */
  export function addListener(instance: object, eventName: string, handler: Function): google.maps.MapsEventListener;
  /**
   * Like addListener, but the handler removes itself after handling the first event.
   */
  export function addListenerOnce(instance: object, eventName: string, handler: Function): google.maps.MapsEventListener;
  /**
   * Removes all listeners for all events for the given instance.
   */
  export function clearInstanceListeners(instance: object): void;
  /**
   * Removes all listeners for the given event for the given instance.
   */
  export function clearListeners(instance: object, eventName: string): void;
  /**
   * Returns if there are listeners for the given event on the given instance. Can be used to save the computation of expensive event details.
   */
  export function hasListeners(instance: object, eventName: string): boolean;
  /**
   * Removes the given listener, which should have been returned by addListener above. Equivalent to calling <code>listener.remove()</code>.
   */
  export function removeListener(listener: google.maps.MapsEventListener): void;
  /**
   * Triggers the given event. All arguments after eventName are passed as arguments to the listeners.
   */
  export function trigger(instance: object, eventName: string, ...eventArgs: unknown[]): void;
  /**
   * Cross browser event handler registration. This listener is removed by calling removeListener(handle) for the handle that is returned by this function.
   * @deprecated <code>google.maps.event.addDomListener()</code> is deprecated, use the standard <a href="https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener">addEventListener()</a> method instead. The feature will continue to work and there is no plan to decommission it.
   */
  export function addDomListener(instance: object, eventName: string, handler: Function, capture?: boolean): google.maps.MapsEventListener;
  /**
   * Wrapper around addDomListener that removes the listener after the first event.
   * @deprecated <code>google.maps.event.addDomListenerOnce()</code> is deprecated, use the standard <a href="https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener">addEventListener()</a> method instead. The feature will continue to work and there is no plan to decommission it.
   */
  export function addDomListenerOnce(instance: object, eventName: string, handler: Function, capture?: boolean): google.maps.MapsEventListener;
}

declare namespace google.maps {
  /**
   * Identifiers for map color schemes. Specify these by value, or by using the constant&#39;s name. For example, <code>'FOLLOW_SYSTEM'</code> or <code>google.maps.ColorScheme.FOLLOW_SYSTEM</code>.
   *
   * Access by calling `const {ColorScheme} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ColorScheme {
    /**
     * The dark color scheme for a map.
     */
    DARK = 'DARK',
    /**
     * The color scheme is selected based on system preferences, which are checked once at method execution time.
     */
    FOLLOW_SYSTEM = 'FOLLOW_SYSTEM',
    /**
     * The light color scheme for a map. Default value for legacy Maps JS.
     */
    LIGHT = 'LIGHT',
  }
  export type ColorSchemeString = `${google.maps.ColorScheme}`;
  /**
   * Identifiers for common MapTypes. Specify these by value, or by using the constant&#39;s name. For example, <code>'satellite'</code> or <code>google.maps.MapTypeId.SATELLITE</code>.
   *
   * Access by calling `const {MapTypeId} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MapTypeId {
    /**
     * This map type displays a transparent layer of major streets on satellite images.
     */
    HYBRID = 'hybrid',
    /**
     * This map type displays a normal street map.
     */
    ROADMAP = 'roadmap',
    /**
     * This map type displays satellite images.
     */
    SATELLITE = 'satellite',
    /**
     * This map type displays maps with physical features such as terrain and vegetation.
     */
    TERRAIN = 'terrain',
  }
  export type MapTypeIdString = `${google.maps.MapTypeId}`;
  /**
   * Base class for managing network errors in Maps.
   * Access by calling `const {MapsNetworkError} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MapsNetworkError extends Error {
    /**
     * Identifies the type of error produced by the API.
     */
    code: google.maps.DirectionsStatusString | google.maps.DistanceMatrixStatusString | google.maps.ElevationStatusString | google.maps.GeocoderStatusString | google.maps.MaxZoomStatusString | google.maps.places.PlacesServiceStatusString | google.maps.RPCStatusString | google.maps.StreetViewStatusString;
    /**
     * Represents the network service that responded with the error.
     */
    endpoint: google.maps.MapsNetworkErrorEndpointString;
  }
  /**
   * Represents a server-side error from a web service (i.e. the equivalent of a 5xx code in HTTP).
   * Access by calling `const {MapsServerError} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MapsServerError extends google.maps.MapsNetworkError {
  }
  /**
   * Represents a request error from a web service (i.e. the equivalent of a 4xx code in HTTP).
   * Access by calling `const {MapsRequestError} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MapsRequestError extends google.maps.MapsNetworkError {
  }
  /**
   * Identifiers for API endpoints used by {@link google.maps.MapsNetworkError} instances.
   *
   * Access by calling `const {MapsNetworkErrorEndpoint} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MapsNetworkErrorEndpoint {
    /**
     * Identifies the Routes API within the Directions API.
     */
    DIRECTIONS_ROUTE = 'DIRECTIONS_ROUTE',
    /**
     * Identifies the DistanceMatrix API.
     */
    DISTANCE_MATRIX = 'DISTANCE_MATRIX',
    /**
     * Identifies the getElevationsAlongPath API within the Elevation API.
     */
    ELEVATION_ALONG_PATH = 'ELEVATION_ALONG_PATH',
    /**
     * Identifies the getElevationForLocations API within the Elevation API.
     */
    ELEVATION_LOCATIONS = 'ELEVATION_LOCATIONS',
    /**
     * Identifies the Get DeliveryVehicle API within Fleet Engine.
     */
    FLEET_ENGINE_GET_DELIVERY_VEHICLE = 'FLEET_ENGINE_GET_DELIVERY_VEHICLE',
    /**
     * Identifies the Get Trip API within Fleet Engine.
     */
    FLEET_ENGINE_GET_TRIP = 'FLEET_ENGINE_GET_TRIP',
    /**
     * Identifies the Get Vehicle API within Fleet Engine.
     */
    FLEET_ENGINE_GET_VEHICLE = 'FLEET_ENGINE_GET_VEHICLE',
    /**
     * Identifies the List DeliveryVehicles API within Fleet Engine.
     */
    FLEET_ENGINE_LIST_DELIVERY_VEHICLES = 'FLEET_ENGINE_LIST_DELIVERY_VEHICLES',
    /**
     * Identifies the List Tasks API within Fleet Engine.
     */
    FLEET_ENGINE_LIST_TASKS = 'FLEET_ENGINE_LIST_TASKS',
    /**
     * Identifies the List Vehicles API within Fleet Engine.
     */
    FLEET_ENGINE_LIST_VEHICLES = 'FLEET_ENGINE_LIST_VEHICLES',
    /**
     * Identifies the Search Tasks API within Fleet Engine.
     */
    FLEET_ENGINE_SEARCH_TASKS = 'FLEET_ENGINE_SEARCH_TASKS',
    /**
     * Identifies the geocode API within the Geocoder.
     */
    GEOCODER_GEOCODE = 'GEOCODER_GEOCODE',
    /**
     * Identifies the MaximumZoomImageryService API within the Maps API.
     */
    MAPS_MAX_ZOOM = 'MAPS_MAX_ZOOM',
    /**
     * Identifies the Autocomplete API within the Places API.
     */
    PLACES_AUTOCOMPLETE = 'PLACES_AUTOCOMPLETE',
    /**
     * Identifies the Details API within the Places API.
     */
    PLACES_DETAILS = 'PLACES_DETAILS',
    /**
     * Identifies the findPlaceFromPhoneNumber API within the Places API.
     */
    PLACES_FIND_PLACE_FROM_PHONE_NUMBER = 'PLACES_FIND_PLACE_FROM_PHONE_NUMBER',
    /**
     * Identifies the findPlaceFromQuery API within the Places API.
     */
    PLACES_FIND_PLACE_FROM_QUERY = 'PLACES_FIND_PLACE_FROM_QUERY',
    /**
     * Identifies the Gateway API within the Places API.
     */
    PLACES_GATEWAY = 'PLACES_GATEWAY',
    /**
     * Identifies the Get Place API within the Places API.
     */
    PLACES_GET_PLACE = 'PLACES_GET_PLACE',
    /**
     * Identifies the LocalContextSearch API within the Places API.
     */
    PLACES_LOCAL_CONTEXT_SEARCH = 'PLACES_LOCAL_CONTEXT_SEARCH',
    /**
     * Identifies the NearbySearch API within the Places API.
     */
    PLACES_NEARBY_SEARCH = 'PLACES_NEARBY_SEARCH',
    /**
     * Identifies the Search Text API within the Places API.
     */
    PLACES_SEARCH_TEXT = 'PLACES_SEARCH_TEXT',
    /**
     * Identifies the getPanorama method within the Streetview service.
     */
    STREETVIEW_GET_PANORAMA = 'STREETVIEW_GET_PANORAMA',
  }
  export type MapsNetworkErrorEndpointString = `${google.maps.MapsNetworkErrorEndpoint}`;
  /**
   * An event with an associated Error.
   */
  export interface ErrorEvent {
    /**
     * The Error related to the event.
     */
    error: Error;
  }
  /**
   * Describes a Firebase App Check token result.
   */
  export interface MapsAppCheckTokenResult {
    /**
     * The Firebase App Check token.
     */
    token: string;
  }
  /**
   * Settings which control the behavior of the Maps JavaScript API as a whole.
   * Access by calling `const {Settings} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Settings {
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * A collection of unique experience IDs to which to attribute Maps JS API calls. The returned value is a copy of the internal value that is stored in the <code>Settings</code> class singleton instance. Operations on <code>google.maps.Settings.getInstance().experienceIds</code> will therefore only modify the copy and not the internal value.<br/><br/>To update the internal value, set the property equal to the new value on the singleton instance (ex: <code>google.maps.Settings.getInstance().experienceIds = [experienceId];</code>).
     */
    get experienceIds(): Iterable<string>;
    /**
     * Set this property to a function that returns a promise which resolves to a Firebase App Check token result.
     */
    fetchAppCheckToken: () => Promise<google.maps.MapsAppCheckTokenResult>;
    /**
     * Returns the singleton instance of <code>google.maps.Settings</code>.
     */
    static getInstance(): google.maps.Settings;
  }
  /**
   * Identifiers used to specify the placement of controls on the map. Controls are positioned relative to other controls in the same layout position. Controls that are added first are positioned closer to the edge of the map. Usage of &quot;logical values&quot; (see <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values">https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values</a>) is recommended in order to be able to automatically support both left-to-right (LTR) and right-to-left (RTL) layout contexts.<br> <br>Logical values in LTR: <br> <pre>+----------------+ <br>|&nbsp;BSIS&nbsp;BSIC&nbsp;BSIE | <br>|&nbsp;ISBS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEBS | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;ISBC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEBC | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;ISBE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEBE | <br>|&nbsp;BEIS&nbsp;BEIC&nbsp;BEIE | <br>+----------------+</pre><br> Logical values in RTL:<br> <pre>+----------------+ <br>|&nbsp;BSIE&nbsp;BSIC&nbsp;BSIS | <br>|&nbsp;IEBS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISBS | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;IEBC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISBC | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;IEBE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISBE | <br>|&nbsp;BEIE&nbsp;BEIC&nbsp;BEIS | <br>+----------------+</pre><br> Legacy values:<br> <pre>+----------------+ <br>|&nbsp;TL&nbsp;&nbsp;&nbsp;&nbsp;TC&nbsp;&nbsp;&nbsp;&nbsp;TR | <br>|&nbsp;LT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RT | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;LC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC | <br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <br>|&nbsp;LB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RB | <br>|&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;BC&nbsp;&nbsp;&nbsp;&nbsp;BR | <br>+----------------+</pre><br> Elements in the top or bottom row flow towards the middle of the row. Elements in the left or right column flow towards the middle of the column.
   *
   * Access by calling `const {ControlPosition} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ControlPosition {
    /**
     * Equivalent to BOTTOM_CENTER in both LTR and RTL.
     */
    BLOCK_END_INLINE_CENTER = 24,
    /**
     * Equivalent to BOTTOM_RIGHT in LTR, or BOTTOM_LEFT in RTL.
     */
    BLOCK_END_INLINE_END = 25,
    /**
     * Equivalent to BOTTOM_LEFT in LTR, or BOTTOM_RIGHT in RTL.
     */
    BLOCK_END_INLINE_START = 23,
    /**
     * Equivalent to TOP_CENTER in both LTR and RTL.
     */
    BLOCK_START_INLINE_CENTER = 15,
    /**
     * Equivalent to TOP_RIGHT in LTR, or TOP_LEFT in RTL.
     */
    BLOCK_START_INLINE_END = 16,
    /**
     * Equivalent to TOP_LEFT in LTR, or TOP_RIGHT in RTL.
     */
    BLOCK_START_INLINE_START = 14,
    /**
     * Elements are positioned in the center of the bottom row. Consider using BLOCK_END_INLINE_CENTER instead.
     */
    BOTTOM_CENTER = 11,
    /**
     * Elements are positioned in the bottom left and flow towards the middle. Elements are positioned to the right of the Google logo. Consider using BLOCK_END_INLINE_START instead.
     */
    BOTTOM_LEFT = 10,
    /**
     * Elements are positioned in the bottom right and flow towards the middle. Elements are positioned to the left of the copyrights. Consider using BLOCK_END_INLINE_END instead.
     */
    BOTTOM_RIGHT = 12,
    /**
     * Equivalent to RIGHT_CENTER in LTR, or LEFT_CENTER in RTL.
     */
    INLINE_END_BLOCK_CENTER = 21,
    /**
     * Equivalent to RIGHT_BOTTOM in LTR, or LEFT_BOTTOM in RTL.
     */
    INLINE_END_BLOCK_END = 22,
    /**
     * Equivalent to RIGHT_TOP in LTR, or LEFT_TOP in RTL.
     */
    INLINE_END_BLOCK_START = 20,
    /**
     * Equivalent to LEFT_CENTER in LTR, or RIGHT_CENTER in RTL.
     */
    INLINE_START_BLOCK_CENTER = 17,
    /**
     * Equivalent to LEFT_BOTTOM in LTR, or RIGHT_BOTTOM in RTL.
     */
    INLINE_START_BLOCK_END = 19,
    /**
     * Equivalent to LEFT_TOP in LTR, or RIGHT_TOP in RTL.
     */
    INLINE_START_BLOCK_START = 18,
    /**
     * Elements are positioned on the left, above bottom-left elements, and flow upwards. Consider using INLINE_START_BLOCK_END instead.
     */
    LEFT_BOTTOM = 6,
    /**
     * Elements are positioned in the center of the left side. Consider using INLINE_START_BLOCK_CENTER instead.
     */
    LEFT_CENTER = 4,
    /**
     * Elements are positioned on the left, below top-left elements, and flow downwards. Consider using INLINE_START_BLOCK_START instead.
     */
    LEFT_TOP = 5,
    /**
     * Elements are positioned on the right, above bottom-right elements, and flow upwards. Consider using INLINE_END_BLOCK_END instead.
     */
    RIGHT_BOTTOM = 9,
    /**
     * Elements are positioned in the center of the right side. Consider using INLINE_END_BLOCK_CENTER instead.
     */
    RIGHT_CENTER = 8,
    /**
     * Elements are positioned on the right, below top-right elements, and flow downwards. Consider using INLINE_END_BLOCK_START instead.
     */
    RIGHT_TOP = 7,
    /**
     * Elements are positioned in the center of the top row. Consider using BLOCK_START_INLINE_CENTER instead.
     */
    TOP_CENTER = 2,
    /**
     * Elements are positioned in the top left and flow towards the middle. Consider using BLOCK_START_INLINE_START instead.
     */
    TOP_LEFT = 1,
    /**
     * Elements are positioned in the top right and flow towards the middle. Consider using BLOCK_START_INLINE_END instead.
     */
    TOP_RIGHT = 3,
  }
  /**
   * Identifiers for common MapTypesControls.
   *
   * Access by calling `const {MapTypeControlStyle} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MapTypeControlStyle {
    /**
     * Uses the default map type control. When the <code>DEFAULT</code> control is shown, it will vary according to window size and other factors. The <code>DEFAULT</code> control may change in future versions of the API.
     */
    DEFAULT = 0,
    /**
     * A dropdown menu for the screen realestate conscious.
     */
    DROPDOWN_MENU = 0,
    /**
     * The standard horizontal radio buttons bar.
     */
    HORIZONTAL_BAR = 0,
  }
  /**
   * Identifiers for scale control ids.
   */
  export enum ScaleControlStyle {
    /**
     * The standard scale control.
     */
    DEFAULT = 0,
  }
  /**
   * Object literals are accepted in place of <code>LatLng</code> objects, as a convenience, in many places. These are converted to <code>LatLng</code> objects when the Maps API encounters them. <p> Examples: <pre> map.setCenter({lat: -34, lng: 151});<br> new google.maps.Marker({position: {lat: -34, lng: 151}, map: map}); </pre> <p class="note">LatLng object literals are not supported in the Geometry library.</p>
   */
  export interface LatLngLiteral {
    /**
     * Latitude in degrees. Values will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.
     */
    lat: number;
    /**
     * Longitude in degrees. Values outside the range [-180, 180] will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.
     */
    lng: number;
  }
  /**
   * A <code>LatLng</code> is a point in geographical coordinates: latitude and longitude.<br> <ul> <li>Latitude ranges between -90 and 90 degrees, inclusive. Values above or below this range will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.</li> <li>Longitude ranges between -180 and 180 degrees, inclusive. Values above or below this range will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.</li> </ul> Although the default map projection associates longitude with the x-coordinate of the map, and latitude with the y-coordinate, the latitude coordinate is always written <em>first</em>, followed by the longitude.<br> Notice that you cannot modify the coordinates of a <code>LatLng</code>. If you want to compute another point, you have to create a new one.<br> <p> Most methods that accept <code>LatLng</code> objects also accept a {@link google.maps.LatLngLiteral} object, so that the following are equivalent: <pre> map.setCenter(new google.maps.LatLng(-34, 151));<br> map.setCenter({lat: -34, lng: 151}); </pre> <p> The constructor also accepts {@link google.maps.LatLngLiteral} and <code>LatLng</code> objects. If a <code>LatLng</code> instance is passed to the constructor, a copy is created. <p> The possible calls to the constructor are below: <pre> new google.maps.LatLng(-34, 151);<br> new google.maps.LatLng(-34, 151, true);<br> new google.maps.LatLng({lat: -34, lng: 151});<br> new google.maps.LatLng({lat: -34, lng: 151}, true);<br> new google.maps.LatLng(new google.maps.LatLng(-34, 151));<br> new google.maps.LatLng(new google.maps.LatLng(-34, 151), true);<br> </pre>
   * Access by calling `const {LatLng} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LatLng {
    /**
     * Creates a <code>LatLng</code> object representing a geographic point. Latitude is specified in degrees within the range [-90, 90]. Longitude is specified in degrees within the range [-180, 180). Set <code>noClampNoWrap</code> to <code>true</code> to enable values outside of this range. Note the ordering of latitude and longitude.
     * @param latOrLatLngOrLatLngLiteral
     * @param lngOrNoClampNoWrap
     * @param noClampNoWrap
     */
    constructor(latOrLatLngOrLatLngLiteral: number | google.maps.LatLngLiteral | google.maps.LatLng, lngOrNoClampNoWrap?: number | boolean | null, noClampNoWrap?: boolean);
    /**
     * Comparison function for two LatLngs. Returns true if the coordinates are within 1e-9 of each other and false otherwise.
     */
    equals(other: google.maps.LatLng | google.maps.LatLngLiteral | null | undefined): boolean;
    /**
     * Returns the latitude in degrees.
     */
    lat(): number;
    /**
     * Returns the longitude in degrees.
     */
    lng(): number;
    /**
     * Converts to JSON representation. This function is intended to be used via <code>JSON.stringify</code>.
     */
    toJSON(): google.maps.LatLngLiteral;
    /**
     * Converts to string representation.
     */
    toString(): string;
    /**
     * Returns a string of the form &quot;lat,lng&quot; for this LatLng. We round the lat/lng values to 6 decimal places by default.
     */
    toUrlValue(precision?: number): string;
  }
  /**
   * Describes a symbol, which consists of a vector path with styling. A symbol can be used as the icon of a marker, or placed on a polyline.
   */
  export interface Symbol {
    /**
     * The position of the symbol relative to the marker or polyline. The coordinates of the symbol&#39;s path are translated left and up by the anchor&#39;s x and y coordinates respectively. The position is expressed in the same coordinate system as the symbol&#39;s path.
     * @defaultValue <code>google.maps.Point(0,0)</code>
     */
    anchor?: google.maps.Point | null;
    /**
     * The symbol&#39;s fill color. All CSS3 colors are supported except for extended named colors. For symbol markers, this defaults to &#39;black&#39;. For symbols on polylines, this defaults to the stroke color of the corresponding polyline.
     */
    fillColor?: string | null;
    /**
     * The symbol&#39;s fill opacity.
     * @defaultValue <code>0</code>
     */
    fillOpacity?: number | null;
    /**
     * The origin of the label relative to the origin of the path, if label is supplied by the marker. The origin is expressed in the same coordinate system as the symbol&#39;s path. This property is unused for symbols on polylines.
     * @defaultValue <code>google.maps.Point(0,0)</code>
     */
    labelOrigin?: google.maps.Point | null;
    /**
     * The symbol&#39;s path, which is a built-in symbol path, or a custom path expressed using <a href="http://www.w3.org/TR/SVG/paths.html#PathData">SVG path notation</a>. Required.
     */
    path: google.maps.SymbolPath | string;
    /**
     * The angle by which to rotate the symbol, expressed clockwise in degrees. A symbol in an <code>IconSequence</code> where <code>fixedRotation</code> is <code>false</code> is rotated relative to the angle of the edge on which it lies.
     * @defaultValue <code>0</code>
     */
    rotation?: number | null;
    /**
     * The amount by which the symbol is scaled in size. For symbol markers, this defaults to 1; after scaling, the symbol may be of any size. For symbols on a polyline, this defaults to the stroke weight of the polyline; after scaling, the symbol must lie inside a square 22 pixels in size centered at the symbol&#39;s anchor.
     */
    scale?: number | null;
    /**
     * The symbol&#39;s stroke color. All CSS3 colors are supported except for extended named colors. For symbol markers, this defaults to &#39;black&#39;. For symbols on a polyline, this defaults to the stroke color of the polyline.
     */
    strokeColor?: string | null;
    /**
     * The symbol&#39;s stroke opacity. For symbol markers, this defaults to 1. For symbols on a polyline, this defaults to the stroke opacity of the polyline.
     */
    strokeOpacity?: number | null;
    /**
     * The symbol&#39;s stroke weight.
     * @defaultValue The {@link google.maps.Symbol.scale} of the symbol.
     */
    strokeWeight?: number | null;
  }
  /**
   * Base class implementing KVO. <br><br>The <code>MVCObject</code> constructor is guaranteed to be an empty function, and so you may inherit from <code>MVCObject</code> by writing <code>MySubclass.prototype = new google.maps.MVCObject();</code>. Unless otherwise noted, this is not true of other classes in the API, and inheriting from other classes in the API is not supported.
   * Access by calling `const {MVCObject} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MVCObject {
    /**
     * Creates an <code>MVCObject</code>.
     */
    constructor();
    /**
     * Adds the given listener function to the given event name. Returns an identifier for this listener that can be used with <code>google.maps.event.removeListener</code>.
     */
    addListener(eventName: string, handler: Function): google.maps.MapsEventListener;
    /**
     * Binds a View to a Model.
     */
    bindTo(key: string, target: google.maps.MVCObject, targetKey?: string | null, noNotify?: boolean): void;
    /**
     * Gets a value.
     */
    get(key: string): any;
    /**
     * Notify all observers of a change on this property. This notifies both objects that are bound to the object&#39;s property as well as the object that it is bound to.
     */
    notify(key: string): void;
    /**
     * Sets a value.
     */
    set(key: string, value: unknown): void;
    /**
     * Sets a collection of key-value pairs.
     */
    setValues(values?: object | null): void;
    /**
     * Removes a binding. Unbinding will set the unbound property to the current value. The object will not be notified, as the value has not changed.
     */
    unbind(key: string): void;
    /**
     * Removes all bindings.
     */
    unbindAll(): void;
  }
  /**
   * Projection interface.
   */
  export interface Projection {
    /**
     * Translates from the LatLng cylinder to the Point plane. This interface specifies a function which implements translation from given <code>LatLng</code> values to world coordinates on the map projection. The Maps API calls this method when it needs to plot locations on screen. <code>Projection</code> objects must implement this method, but may return <code>null</code> if the projection cannot calculate the <code>Point</code>.
     */
    fromLatLngToPoint(latLng: google.maps.LatLng | google.maps.LatLngLiteral, point?: google.maps.Point): google.maps.Point | null;
    /**
     * This interface specifies a function which implements translation from world coordinates on a map projection to <code>LatLng</code> values. The Maps API calls this method when it needs to translate actions on screen to positions on the map. <code>Projection</code> objects must implement this method, but may return <code>null</code> if the projection cannot calculate the <code>LatLng</code>.
     */
    fromPointToLatLng(pixel: google.maps.Point, noClampNoWrap?: boolean): google.maps.LatLng | null;
  }
  /**
   * This interface defines the map type, and is typically used for custom map types. Immutable.
   */
  export interface MapType {
    /**
     * Alt text to display when this MapType&#39;s button is hovered over in the MapTypeControl. Optional.
     */
    alt: string | null;
    /**
     * The maximum zoom level for the map when displaying this MapType. Required for base MapTypes, ignored for overlay MapTypes.
     */
    maxZoom: number;
    /**
     * The minimum zoom level for the map when displaying this MapType. Optional; defaults to 0.
     */
    minZoom: number;
    /**
     * Name to display in the MapTypeControl. Optional.
     */
    name: string | null;
    /**
     * The Projection used to render this MapType. Optional; defaults to Mercator.
     */
    projection: google.maps.Projection | null;
    /**
     * Radius of the planet for the map, in meters. Optional; defaults to Earth&#39;s equatorial radius of 6378137 meters.
     */
    radius: number;
    /**
     * The dimensions of each tile. Required.
     */
    tileSize: google.maps.Size | null;
    /**
     * Returns a tile for the given tile coordinate (x, y) and zoom level. This tile will be appended to the given ownerDocument. Not available for base map types.
     */
    getTile(tileCoord: google.maps.Point, zoom: number, ownerDocument: Document): Element | null;
    /**
     * Releases the given tile, performing any necessary cleanup. The provided tile will have already been removed from the document. Optional.
     */
    releaseTile(tile: Element | null): void;
  }
  /**
   * A <code><a href="#LatLngBounds">LatLngBounds</a></code> instance represents a rectangle in geographical coordinates, including one that crosses the 180 degrees longitudinal meridian.
   * Access by calling `const {LatLngBounds} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LatLngBounds {
    /**
     * Constructs a rectangle from the points at its south-west and north-east corners.
     * @param swOrLatLngBounds
     * @param ne
     */
    constructor(swOrLatLngBounds?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null, ne?: google.maps.LatLng | google.maps.LatLngLiteral | null);
    /**
     * Returns <code>true</code> if the given lat/lng is in this bounds.
     */
    contains(latLng: google.maps.LatLng | google.maps.LatLngLiteral): boolean;
    /**
     * Returns <code>true</code> if this bounds approximately equals the given bounds.
     */
    equals(other: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null): boolean;
    /**
     * Extends this bounds to contain the given point.
     */
    extend(point: google.maps.LatLng | google.maps.LatLngLiteral): google.maps.LatLngBounds;
    /**
     * Computes the center of this LatLngBounds
     */
    getCenter(): google.maps.LatLng;
    /**
     * Returns the north-east corner of this bounds.
     */
    getNorthEast(): google.maps.LatLng;
    /**
     * Returns the south-west corner of this bounds.
     */
    getSouthWest(): google.maps.LatLng;
    /**
     * Returns <code>true</code> if this bounds shares any points with the other bounds.
     */
    intersects(other: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): boolean;
    /**
     * Returns if the bounds are empty.
     */
    isEmpty(): boolean;
    /**
     * Converts to JSON representation. This function is intended to be used via <code>JSON.stringify</code>.
     */
    toJSON(): google.maps.LatLngBoundsLiteral;
    /**
     * Converts the given map bounds to a lat/lng span.
     */
    toSpan(): google.maps.LatLng;
    /**
     * Converts to string.
     */
    toString(): string;
    /**
     * Returns a string of the form &quot;lat_lo,lng_lo,lat_hi,lng_hi&quot; for this bounds, where &quot;lo&quot; corresponds to the southwest corner of the bounding box, while &quot;hi&quot; corresponds to the northeast corner of that box.
     */
    toUrlValue(precision?: number): string;
    /**
     * Extends this bounds to contain the union of this and the given bounds.
     */
    union(other: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): google.maps.LatLngBounds;
    /**
     * LatLngBounds for the max bounds of the Earth. These bounds will encompass the entire globe.
     */
    static readonly MAX_BOUNDS: google.maps.LatLngBounds;
  }
  /**
   * A layer for displaying geospatial data. Points, line-strings and polygons can be displayed. <p> Every <code>Map</code> has a <code>Data</code> object by default, so most of the time there is no need to construct one. For example: <pre> var myMap = new google.maps.Map(...);<br> myMap.data.addGeoJson(...);<br> myMap.data.setStyle(...); </pre> The <code>Data</code> object is a collection of <a href="#Data.Feature"><code>Features</code></a>.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Data extends google.maps.MVCObject {
    /**
     * Creates an empty collection, with the given <code>DataOptions</code>.
     * @param options
     */
    constructor(options?: google.maps.Data.DataOptions | null);
    /**
     * Adds a feature to the collection, and returns the added feature. <p> If the feature has an ID, it will replace any existing feature in the collection with the same ID. If no feature is given, a new feature will be created with null geometry and no properties. If <code>FeatureOptions</code> are given, a new feature will be created with the specified properties. <p> Note that the IDs <code>1234</code> and <code>'1234'</code> are equivalent. Adding a feature with ID <code>1234</code> will replace a feature with ID <code>'1234'</code>, and vice versa.
     */
    add(feature?: google.maps.Data.Feature | google.maps.Data.FeatureOptions | null): google.maps.Data.Feature;
    /**
     * Adds GeoJSON features to the collection. Give this method a parsed JSON. The imported features are returned. Throws an exception if the GeoJSON could not be imported.
     */
    addGeoJson(geoJson: object, options?: google.maps.Data.GeoJsonOptions | null): google.maps.Data.Feature[];
    /**
     * Checks whether the given feature is in the collection.
     */
    contains(feature: google.maps.Data.Feature): boolean;
    /**
     * Repeatedly invokes the given function, passing a feature in the collection to the function on each invocation. The order of iteration through the features is undefined.
     */
    forEach(callback: (arg0: google.maps.Data.Feature) => void): void;
    /**
     * Returns the position of the drawing controls on the map.
     */
    getControlPosition(): google.maps.ControlPosition | null;
    /**
     * Returns which drawing modes are available for the user to select, in the order they are displayed. This does not include the <code>null</code> drawing mode, which is added by default. Possible drawing modes are <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     */
    getControls(): string[] | null;
    /**
     * Returns the current drawing mode of the given Data layer. A drawing mode of <code>null</code> means that the user can interact with the map as normal, and clicks do not draw anything. Possible drawing modes are <code>null</code>, <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     */
    getDrawingMode(): string | null;
    /**
     * Returns the feature with the given ID, if it exists in the collection. Otherwise returns <code>undefined</code>. <p> Note that the IDs <code>1234</code> and <code>'1234'</code> are equivalent. Either can be used to look up the same feature.
     */
    getFeatureById(id: number | string): google.maps.Data.Feature | undefined;
    /**
     * Returns the map on which the features are displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Gets the style for all features in the collection.
     */
    getStyle(): google.maps.Data.StylingFunction | google.maps.Data.StyleOptions | null;
    /**
     * Loads GeoJSON from a URL, and adds the features to the collection. <p> NOTE: The GeoJSON is fetched using XHR, and may not work cross-domain. If you have issues, we recommend you fetch the GeoJSON using your choice of AJAX library, and then call <code>addGeoJson()</code>.
     */
    loadGeoJson(url: string, options?: google.maps.Data.GeoJsonOptions | null, callback?: ((arg0: google.maps.Data.Feature[]) => void)): void;
    /**
     * Changes the style of a feature. These changes are applied on top of the style specified by <code>setStyle()</code>. Style properties set to <code>null</code> revert to the value specified via <code>setStyle()</code>.
     */
    overrideStyle(feature: google.maps.Data.Feature, style: google.maps.Data.StyleOptions): void;
    /**
     * Removes a feature from the collection.
     */
    remove(feature: google.maps.Data.Feature): void;
    /**
     * Removes the effect of previous <code>overrideStyle()</code> calls. The style of the given feature reverts to the style specified by <code>setStyle()</code>. <p>If no feature is given, all features have their style reverted.</p>
     */
    revertStyle(feature?: google.maps.Data.Feature | null): void;
    /**
     * Sets the position of the drawing controls on the map.
     */
    setControlPosition(controlPosition: google.maps.ControlPosition | null): void;
    /**
     * Sets which drawing modes are available for the user to select, in the order they are displayed. This should not include the <code>null</code> drawing mode, which is added by default. If <code>null</code>, drawing controls are disabled and not displayed. Possible drawing modes are <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     */
    setControls(controls: string[] | null): void;
    /**
     * Sets the current drawing mode of the given Data layer. A drawing mode of <code>null</code> means that the user can interact with the map as normal, and clicks do not draw anything. Possible drawing modes are <code>null</code>, <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     */
    setDrawingMode(drawingMode: string | null): void;
    /**
     * Renders the features on the specified map. If map is set to <code>null</code>, the features will be removed from the map.
     */
    setMap(map: google.maps.Map | null): void;
    /**
     * Sets the style for all features in the collection. Styles specified on a per-feature basis via <code>overrideStyle()</code> continue to apply. <p>Pass either an object with the desired style options, or a function that computes the style for each feature. The function will be called every time a feature&#39;s properties are updated.
     */
    setStyle(style: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions | null): void;
    /**
     * Exports the features in the collection to a GeoJSON object.
     */
    toGeoJson(callback: (arg0: object) => void): void;
  }
  /**
   * The valid unit systems that can be specified in a <i><code><a href="#DirectionsRequest">DirectionsRequest</a></code></i>.
   *
   * Access by calling `const {UnitSystem} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum UnitSystem {
    /**
     * Specifies that distances in the <code>DirectionsResult</code> should be expressed in imperial units.
     */
    IMPERIAL = 1,
    /**
     * Specifies that distances in the <code>DirectionsResult</code> should be expressed in metric units.
     */
    METRIC = 0,
  }
  /**
   * The valid travel modes that can be specified in a <code>DirectionsRequest</code> as well as the travel modes returned in a <code>DirectionsStep</code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'BICYCLING'</code> or <code>google.maps.TravelMode.BICYCLING</code>.
   *
   * Access by calling `const {TravelMode} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TravelMode {
    /**
     * Specifies a bicycling directions request.
     */
    BICYCLING = 'BICYCLING',
    /**
     * Specifies a driving directions request.
     */
    DRIVING = 'DRIVING',
    /**
     * Specifies a transit directions request.
     */
    TRANSIT = 'TRANSIT',
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Specifies a two-wheeler directions request.
     */
    TWO_WHEELER = 'TWO_WHEELER',
    /**
     * Specifies a walking directions request.
     */
    WALKING = 'WALKING',
  }
  export type TravelModeString = `${google.maps.TravelMode}`;
  /**
   * A directions query to be sent to the <code><a href="#DirectionsService">DirectionsService</a></code>.
   */
  export interface DirectionsRequest {
    /**
     * If <code>true</code>, instructs the Directions service to avoid ferries where possible. Optional.
     */
    avoidFerries?: boolean;
    /**
     * If <code>true</code>, instructs the Directions service to avoid highways where possible. Optional.
     */
    avoidHighways?: boolean;
    /**
     * If <code>true</code>, instructs the Directions service to avoid toll roads where possible. Optional.
     */
    avoidTolls?: boolean;
    /**
     * Location of destination. This can be specified as either a string to be geocoded, or a <code>LatLng</code>, or a <code>Place</code>. Required.
     */
    destination: string | google.maps.LatLng | google.maps.Place | google.maps.LatLngLiteral;
    /**
     * Settings that apply only to requests where <code>travelMode</code> is <code>DRIVING</code>. This object will have no effect for other travel modes.
     */
    drivingOptions?: google.maps.DrivingOptions;
    /**
     * A language identifier for the language in which results should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * If set to <code>true</code>, the <code>DirectionsService</code> will attempt to re-order the supplied intermediate waypoints to minimize overall cost of the route. If waypoints are optimized, inspect <code>DirectionsRoute.waypoint_order</code> in the response to determine the new ordering.
     */
    optimizeWaypoints?: boolean;
    /**
     * Location of origin. This can be specified as either a string to be geocoded, or a <code>LatLng</code>, or a <code>Place</code>. Required.
     */
    origin: string | google.maps.LatLng | google.maps.Place | google.maps.LatLngLiteral;
    /**
     * Whether or not route alternatives should be provided. Optional.
     */
    provideRouteAlternatives?: boolean;
    /**
     * Region code used as a bias for geocoding requests. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    region?: string | null;
    /**
     * Settings that apply only to requests where <code>travelMode</code> is TRANSIT. This object will have no effect for other travel modes.
     */
    transitOptions?: google.maps.TransitOptions;
    /**
     * Type of routing requested. Required.
     */
    travelMode: google.maps.TravelModeString;
    /**
     * Preferred unit system to use when displaying distance.
     * @defaultValue The unit system used in the country of origin.
     */
    unitSystem?: google.maps.UnitSystem;
    /**
     * Array of intermediate waypoints. Directions are calculated from the origin to the destination by way of each waypoint in this array. See the <a href="https://developers.google.com/maps/documentation/javascript/directions#UsageLimits"> developer&#39;s guide</a> for the maximum number of waypoints allowed. Waypoints are not supported for transit directions. Optional.
     */
    waypoints?: google.maps.DirectionsWaypoint[];
  }
  /**
   * Access by calling `const {DirectionsService} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated google.maps.DirectionsService is deprecated as of February 25th, 2026. At this time, google.maps.DirectionsService is not scheduled to be discontinued and will continue to receive bug fixes for any major regressions. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details.
   */
  export class DirectionsService {
    /**
     * Creates a new instance of a <code>DirectionsService</code> that sends directions queries to Google servers.
     */
    constructor();
    /**
     * Issue a directions search request.
     */
    route(request: google.maps.DirectionsRequest, callback?: ((arg0: google.maps.DirectionsResult | null, arg1: google.maps.DirectionsStatusString) => void)): Promise<google.maps.DirectionsResult>;
  }
  /**
   * The status returned by the <code>DirectionsService</code> on the completion of a call to <code>route()</code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.DirectionsStatus.OK</code>.
   *
   * Access by calling `const {DirectionsStatus} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum DirectionsStatus {
    /**
     * The <code>DirectionsRequest</code> provided was invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * Too many <code>DirectionsWaypoint</code>s were provided in the <code>DirectionsRequest</code>. See the <a href="https://developers.google.com/maps/documentation/javascript/directions#UsageLimits"> developer&#39;s guide</a> for the maximum number of waypoints allowed.
     */
    MAX_WAYPOINTS_EXCEEDED = 'MAX_WAYPOINTS_EXCEEDED',
    /**
     * At least one of the origin, destination, or waypoints could not be geocoded.
     */
    NOT_FOUND = 'NOT_FOUND',
    /**
     * The response contains a valid <code>DirectionsResult</code>.
     */
    OK = 'OK',
    /**
     * The webpage has gone over the requests limit in too short a period of time.
     */
    OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT',
    /**
     * The webpage is not allowed to use the directions service.
     */
    REQUEST_DENIED = 'REQUEST_DENIED',
    /**
     * A directions request could not be processed due to a server error. The request may succeed if you try again.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
    /**
     * No route could be found between the origin and destination.
     */
    ZERO_RESULTS = 'ZERO_RESULTS',
  }
  export type DirectionsStatusString = `${google.maps.DirectionsStatus}`;
  /**
   * The assumptions to use when predicting duration in traffic. Specified as part of a <code><a href="#DirectionsRequest">DirectionsRequest</a></code> or <code><a href="#DistanceMatrixRequest">DistanceMatrixRequest</a></code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'bestguess'</code> or <code>google.maps.TrafficModel.BEST_GUESS</code>.
   *
   * Access by calling `const {TrafficModel} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TrafficModel {
    /**
     * Use historical traffic data to best estimate the time spent in traffic.
     */
    BEST_GUESS = 'bestguess',
    /**
     * Use historical traffic data to make an optimistic estimate of what the duration in traffic will be.
     */
    OPTIMISTIC = 'optimistic',
    /**
     * Use historical traffic data to make a pessimistic estimate of what the duration in traffic will be.
     */
    PESSIMISTIC = 'pessimistic',
  }
  export type TrafficModelString = `${google.maps.TrafficModel}`;
  /**
   * The valid transit mode e.g. bus that can be specified in a <i><code><a href="#TransitOptions">TransitOptions</a></code></i>. Specify these by value, or by using the constant&#39;s name. For example, <code>'BUS'</code> or <code>google.maps.TransitMode.BUS</code>.
   *
   * Access by calling `const {TransitMode} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TransitMode {
    /**
     * Specifies bus as a preferred mode of transit.
     */
    BUS = 'BUS',
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Specifies light rail as a preferred mode of transit.
     */
    LIGHT_RAIL = 'LIGHT_RAIL',
    /**
     * Specifies rail as a preferred mode of transit.
     */
    RAIL = 'RAIL',
    /**
     * Specifies subway as a preferred mode of transit.
     */
    SUBWAY = 'SUBWAY',
    /**
     * Specifies train as a preferred mode of transit.
     */
    TRAIN = 'TRAIN',
    /**
     * Specifies tram as a preferred mode of transit.
     */
    TRAM = 'TRAM',
  }
  export type TransitModeString = `${google.maps.TransitMode}`;
  /**
   * The valid transit route type that can be specified in a <i><code><a href="#TransitOptions">TransitOptions</a></code></i>. Specify these by value, or by using the constant&#39;s name. For example, <code>'LESS_WALKING'</code> or <code>google.maps.TransitRoutePreference.LESS_WALKING</code>.
   *
   * Access by calling `const {TransitRoutePreference} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TransitRoutePreference {
    /**
     * Specifies that the calculated route should prefer a limited number of transfers.
     */
    FEWER_TRANSFERS = 'FEWER_TRANSFERS',
    /**
     * Specifies that the calculated route should prefer limited amounts of walking.
     */
    LESS_WALKING = 'LESS_WALKING',
  }
  export type TransitRoutePreferenceString = `${google.maps.TransitRoutePreference}`;
  /**
   * Possible values for vehicle types.
   *
   * Access by calling `const {VehicleType} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum VehicleType {
    /**
     * Bus.
     */
    BUS = 'BUS',
    /**
     * A vehicle that operates on a cable, usually on the ground. Aerial cable cars may be of the type <code>GONDOLA_LIFT</code>.
     */
    CABLE_CAR = 'CABLE_CAR',
    /**
     * Commuter rail.
     */
    COMMUTER_TRAIN = 'COMMUTER_TRAIN',
    /**
     * Ferry.
     */
    FERRY = 'FERRY',
    /**
     * A vehicle that is pulled up a steep incline by a cable.
     */
    FUNICULAR = 'FUNICULAR',
    /**
     * An aerial cable car.
     */
    GONDOLA_LIFT = 'GONDOLA_LIFT',
    /**
     * Heavy rail.
     */
    HEAVY_RAIL = 'HEAVY_RAIL',
    /**
     * High speed train.
     */
    HIGH_SPEED_TRAIN = 'HIGH_SPEED_TRAIN',
    /**
     * Intercity bus.
     */
    INTERCITY_BUS = 'INTERCITY_BUS',
    /**
     * Light rail.
     */
    METRO_RAIL = 'METRO_RAIL',
    /**
     * Monorail.
     */
    MONORAIL = 'MONORAIL',
    /**
     * Other vehicles.
     */
    OTHER = 'OTHER',
    /**
     * Rail.
     */
    RAIL = 'RAIL',
    /**
     * Share taxi is a sort of bus transport with ability to drop off and pick up passengers anywhere on its route. Generally share taxi uses minibus vehicles.
     */
    SHARE_TAXI = 'SHARE_TAXI',
    /**
     * Underground light rail.
     */
    SUBWAY = 'SUBWAY',
    /**
     * Above ground light rail.
     */
    TRAM = 'TRAM',
    /**
     * Trolleybus.
     */
    TROLLEYBUS = 'TROLLEYBUS',
  }
  export type VehicleTypeString = `${google.maps.VehicleType}`;
  /**
   * The directions response retrieved from the directions server. You can render these using a {@link google.maps.DirectionsRenderer} or parse this object and render it yourself. You must display the warnings and copyrights as noted in the <a href="https://cloud.google.com/maps-platform/terms">Google Maps Platform Terms of Service</a>. Note that though this result is &quot;JSON-like,&quot; it is not strictly JSON, as it indirectly includes <code>LatLng</code> objects.
   */
  export interface DirectionsResult {
    /**
     * Contains an array of available travel modes. This field is returned when a request specifies a travel mode and gets no results. The array contains the available travel modes in the countries of the given set of waypoints. This field is not returned if one or more of the waypoints are &#39;via waypoints&#39;.
     */
    available_travel_modes?: google.maps.TravelModeString[];
    /**
     * An array of <code>DirectionsGeocodedWaypoint</code>s, each of which contains information about the geocoding of origin, destination and waypoints.
     */
    geocoded_waypoints?: google.maps.DirectionsGeocodedWaypoint[];
    /**
     * The DirectionsRequest that yielded this result.
     */
    request: google.maps.DirectionsRequest;
    /**
     * An array of <code>DirectionsRoute</code>s, each of which contains information about the legs and steps of which it is composed. There will only be one route unless the <code>DirectionsRequest</code> was made with <code>provideRouteAlternatives</code> set to <code>true</code>.
     */
    routes: google.maps.DirectionsRoute[];
  }
  /**
   * A single geocoded waypoint.
   */
  export interface DirectionsGeocodedWaypoint {
    /**
     * Whether the geocoder did not return an exact match for the original waypoint, though it was able to match part of the requested address.
     */
    partial_match?: boolean;
    /**
     * The place ID associated with the waypoint. Place IDs uniquely identify a place in the Google Places database and on Google Maps. Learn more about <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">Place IDs</a> in the Places API developer guide.
     */
    place_id?: string;
    /**
     * An array of strings denoting the type of the returned geocoded element. For a list of possible strings, refer to the <a href= "https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingAddressTypes"> Address Component Types</a> section of the Developer&#39;s Guide.
     */
    types?: string[];
  }
  /**
   * A single route containing a set of legs in a <code><a href="#DirectionsResult">DirectionsResult</a></code>. Note that though this object is &quot;JSON-like,&quot; it is not strictly JSON, as it directly and indirectly includes <code>LatLng</code> objects.
   */
  export interface DirectionsRoute {
    /**
     * The bounds for this route.
     */
    bounds: google.maps.LatLngBounds;
    /**
     * Copyrights text to be displayed for this route.
     */
    copyrights: string;
    /**
     * The total fare for the whole transit trip. Only applicable to transit requests.
     */
    fare?: google.maps.TransitFare;
    /**
     * An array of <code>DirectionsLeg</code>s, each of which contains information about the steps of which it is composed. There will be one leg for each stopover waypoint or destination specified. So a route with no stopover waypoints will contain one <code>DirectionsLeg</code> and a route with one stopover waypoint will contain two.
     */
    legs: google.maps.DirectionsLeg[];
    /**
     * An array of <code>LatLng</code>s representing the entire course of this route. The path is simplified in order to make it suitable in contexts where a small number of vertices is required (such as Static Maps API URLs).
     */
    overview_path: google.maps.LatLng[];
    /**
     * An <a href="https://developers.google.com/maps/documentation/utilities/polylinealgorithm">encoded polyline representation</a> of the route in overview_path. This polyline is an approximate (smoothed) path of the resulting directions.
     */
    overview_polyline: string;
    /**
     * Contains a short textual description for the route, suitable for naming and disambiguating the route from alternatives.
     */
    summary: string;
    /**
     * Warnings to be displayed when showing these directions.
     */
    warnings: string[];
    /**
     * If <code>optimizeWaypoints</code> was set to <code>true</code>, this field will contain the re-ordered permutation of the input waypoints. For example, if the input was:<br> &nbsp;&nbsp;Origin: Los Angeles<br> &nbsp;&nbsp;Waypoints: Dallas, Bangor, Phoenix<br> &nbsp;&nbsp;Destination: New York<br> and the optimized output was ordered as follows:<br> &nbsp;&nbsp;Origin: Los Angeles<br> &nbsp;&nbsp;Waypoints: Phoenix, Dallas, Bangor<br> &nbsp;&nbsp;Destination: New York<br> then this field will be an <code>Array</code> containing the values [2, 0, 1]. Note that the numbering of waypoints is zero-based.<br> If any of the input waypoints has <code>stopover</code> set to <code>false</code>, this field will be empty, since route optimization is not available for such queries.
     */
    waypoint_order: number[];
  }
  /**
   * A single leg consisting of a set of steps in a <code><a href="#DirectionsResult">DirectionsResult</a></code>. Some fields in the leg may not be returned for all requests. Note that though this result is &quot;JSON-like,&quot; it is not strictly JSON, as it directly and indirectly includes <code>LatLng</code> objects.
   */
  export interface DirectionsLeg {
    /**
     * An estimated arrival time for this leg. Only applicable for TRANSIT requests.
     */
    arrival_time?: google.maps.Time;
    /**
     * An estimated departure time for this leg. Only applicable for TRANSIT requests.
     */
    departure_time?: google.maps.Time;
    /**
     * The total distance covered by this leg. This property may be undefined as the distance may be unknown.
     */
    distance?: google.maps.Distance;
    /**
     * The total duration of this leg. This property may be <code>undefined</code> as the duration may be unknown.
     */
    duration?: google.maps.Duration;
    /**
     * The total duration of this leg, taking into account the traffic conditions indicated by the <code>trafficModel</code> property. This property may be <code>undefined</code> as the duration may be unknown.
     */
    duration_in_traffic?: google.maps.Duration;
    /**
     * The address of the destination of this leg. This content is meant to be read as-is. Do not programmatically parse the formatted address.
     */
    end_address: string;
    /**
     * The <code>DirectionsService</code> calculates directions between locations by using the nearest transportation option (usually a road) at the start and end locations. <code>end_location</code> indicates the actual geocoded destination, which may be different than the <code>end_location</code> of the last step if, for example, the road is not near the destination of this leg.
     */
    end_location: google.maps.LatLng;
    /**
     * The address of the origin of this leg. This content is meant to be read as-is. Do not programmatically parse the formatted address.
     */
    start_address: string;
    /**
     * The <code>DirectionsService</code> calculates directions between locations by using the nearest transportation option (usually a road) at the start and end locations. <code>start_location</code> indicates the actual geocoded origin, which may be different than the <code>start_location</code> of the first step if, for example, the road is not near the origin of this leg.
     */
    start_location: google.maps.LatLng;
    /**
     * An array of <code>DirectionsStep</code>s, each of which contains information about the individual steps in this leg.
     */
    steps: google.maps.DirectionsStep[];
    /**
     * An array of non-stopover waypoints along this leg, which were specified in the original request. <p> <strong>Deprecated in alternative routes</strong>. Version 3.27 will be the last version of the API that adds extra <code>via_waypoints</code> in alternative routes. <p> When using the Directions Service to implement draggable directions, it is recommended to disable dragging of alternative routes. Only the main route should be draggable. Users can drag the main route until it matches an alternative route.
     */
    via_waypoints: google.maps.LatLng[];
    /**
     * Information about traffic speed along the leg.
     * @deprecated This array will always be empty.
     */
    traffic_speed_entry: unknown[];
  }
  /**
   * A representation of distance as a numeric value and a display string.
   */
  export interface Distance {
    /**
     * A string representation of the distance value, using the <code>UnitSystem</code> specified in the request.
     */
    text: string;
    /**
     * The distance in meters.
     */
    value: number;
  }
  /**
   * A representation of duration as a numeric value and a display string.
   */
  export interface Duration {
    /**
     * A string representation of the duration value.
     */
    text: string;
    /**
     * The duration in seconds.
     */
    value: number;
  }
  /**
   * A single <code>DirectionsStep</code> in a <code>DirectionsResult</code>. Some fields may be <code>undefined</code>. Note that though this object is &quot;JSON-like,&quot; it is not strictly JSON, as it directly includes <code>LatLng</code> objects.
   */
  export interface DirectionsStep {
    /**
     * The distance covered by this step. This property may be <code>undefined</code> as the distance may be unknown.
     */
    distance?: google.maps.Distance;
    /**
     * The typical time required to perform this step in seconds and in text form. This property may be <code>undefined</code> as the duration may be unknown.
     */
    duration?: google.maps.Duration;
    /**
     * An <a href="https://developers.google.com/maps/documentation/utilities/polylinealgorithm">encoded polyline representation</a> of the step. This is an approximate (smoothed) path of the step.
     */
    encoded_lat_lngs: string;
    /**
     * The ending location of this step.
     */
    end_location: google.maps.LatLng;
    /**
     * Instructions for this step.
     */
    instructions: string;
    /**
     * Contains the action to take for the current step (<code>turn-left</code>, <code>merge</code>, <code>straight</code>, etc.). Values are subject to change, and new values may be introduced without prior notice.
     */
    maneuver: string;
    /**
     * A sequence of <code>LatLng</code>s describing the course of this step. This is an approximate (smoothed) path of the step.
     */
    path: google.maps.LatLng[];
    /**
     * The starting location of this step.
     */
    start_location: google.maps.LatLng;
    /**
     * Sub-steps of this step. Specified for non-transit sections of transit routes.
     */
    steps?: google.maps.DirectionsStep[];
    /**
     * Transit-specific details about this step. This property will be undefined unless the travel mode of this step is <code>TRANSIT</code>.
     */
    transit?: google.maps.TransitDetails;
    /**
     * Details pertaining to this step if the travel mode is <code>TRANSIT</code>.
     */
    transit_details?: google.maps.TransitDetails;
    /**
     * The mode of travel used in this step.
     */
    travel_mode: google.maps.TravelModeString;
    /**
     * The starting location of this step.
     * @deprecated Please use {@link google.maps.DirectionsStep.start_location}.
     */
    start_point: google.maps.LatLng;
    /**
     * The ending location of this step.
     * @deprecated Please use {@link google.maps.DirectionsStep.end_location}.
     */
    end_point: google.maps.LatLng;
    /**
     * A sequence of <code>LatLng</code>s describing the course of this step. This is an approximate (smoothed) path of the step.
     * @deprecated Please use {@link google.maps.DirectionsStep.path}.
     */
    lat_lngs: google.maps.LatLng[];
    /**
     * Contains an object with a single property, &#39;points&#39;, that holds an <a href="https://developers.google.com/maps/documentation/utilities/polylinealgorithm">encoded polyline</a> representation of the step. This polyline is an approximate (smoothed) path of the step.
     * @deprecated Please use {@link google.maps.DirectionsStep.encoded_lat_lngs}.
     */
    polyline?: google.maps.DirectionsPolyline;
  }
  /**
   * An object containing a <code>points</code> property to describe the polyline of a {@link google.maps.DirectionsStep}.
   */
  export interface DirectionsPolyline {
    /**
     * An <a href="https://developers.google.com/maps/documentation/utilities/polylinealgorithm">encoded polyline</a>.
     */
    points: string;
  }
  /**
   * Access by calling `const {DirectionsRenderer} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated google.maps.DirectionsRenderer is deprecated as of February 25th, 2026. At this time, google.maps.DirectionsRenderer is not scheduled to be discontinued and will continue to receive bug fixes for any major regressions. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details.
   */
  export class DirectionsRenderer extends google.maps.MVCObject {
    /**
     * Creates the renderer with the given options. Directions can be rendered on a map (as visual overlays) or additionally on a <code>&lt;div&gt;</code> panel (as textual instructions).
     * @param opts
     */
    constructor(opts?: google.maps.DirectionsRendererOptions | null);
    /**
     * Returns the renderer&#39;s current set of directions.
     */
    getDirections(): google.maps.DirectionsResult | null;
    /**
     * Returns the map on which the <code>DirectionsResult</code> is rendered.
     */
    getMap(): google.maps.Map | null;
    /**
     * Returns the panel <code>&lt;div&gt;</code> in which the <code>DirectionsResult</code> is rendered.
     */
    getPanel(): HTMLElement | null;
    /**
     * Returns the current (zero-based) route index in use by this <code>DirectionsRenderer</code> object.
     */
    getRouteIndex(): number;
    /**
     * Set the renderer to use the result from the <code>DirectionsService</code>. Setting a valid set of directions in this manner will display the directions on the renderer&#39;s designated map and panel.
     */
    setDirections(directions: google.maps.DirectionsResult | null): void;
    /**
     * This method specifies the map on which directions will be rendered. Pass <code>null</code> to remove the directions from the map.
     */
    setMap(map: google.maps.Map | null): void;
    /**
     * Change the options settings of this <code>DirectionsRenderer</code> after initialization.
     */
    setOptions(options: google.maps.DirectionsRendererOptions | null): void;
    /**
     * This method renders the directions in a <code>&lt;div&gt;</code>. Pass <code>null</code> to remove the content from the panel.
     */
    setPanel(panel: HTMLElement | null): void;
    /**
     * Set the (zero-based) index of the route in the <code>DirectionsResult</code> object to render. By default, the first route in the array will be rendered.
     */
    setRouteIndex(routeIndex: number): void;
  }
  /**
   * The element-level status about a particular origin-destination pairing returned by the <code>DistanceMatrixService</code> upon completion of a distance matrix request. These values are specified as strings, for example, <code>'OK'</code>.
   *
   * Access by calling `const {DistanceMatrixElementStatus} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum DistanceMatrixElementStatus {
    /**
     * The origin and/or destination of this pairing could not be geocoded.
     */
    NOT_FOUND = 'NOT_FOUND',
    /**
     * The response contains a valid result.
     */
    OK = 'OK',
    /**
     * No route could be found between the origin and destination.
     */
    ZERO_RESULTS = 'ZERO_RESULTS',
  }
  export type DistanceMatrixElementStatusString = `${google.maps.DistanceMatrixElementStatus}`;
  /**
   * A distance matrix query sent by the <code>DistanceMatrixService</code> containing arrays of origin and destination locations, and various options for computing metrics.
   */
  export interface DistanceMatrixRequest {
    /**
     * If <code>true</code>, instructs the Distance Matrix service to avoid ferries where possible. Optional.
     */
    avoidFerries?: boolean;
    /**
     * If <code>true</code>, instructs the Distance Matrix service to avoid highways where possible. Optional.
     */
    avoidHighways?: boolean;
    /**
     * If <code>true</code>, instructs the Distance Matrix service to avoid toll roads where possible. Optional.
     */
    avoidTolls?: boolean;
    /**
     * An array containing destination address strings, or <code>LatLng</code>, or <code>Place</code> objects, to which to calculate distance and time. Required.
     */
    destinations: (string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.Place)[];
    /**
     * Settings that apply only to requests where <code>travelMode</code> is <code>DRIVING</code>. This object will have no effect for other travel modes.
     */
    drivingOptions?: google.maps.DrivingOptions;
    /**
     * A language identifier for the language in which results should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * An array containing origin address strings, or <code>LatLng</code>, or <code>Place</code> objects, from which to calculate distance and time. Required.
     */
    origins: (string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.Place)[];
    /**
     * Region code used as a bias for geocoding requests. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    region?: string | null;
    /**
     * Settings that apply only to requests where <code>travelMode</code> is TRANSIT. This object will have no effect for other travel modes.
     */
    transitOptions?: google.maps.TransitOptions;
    /**
     * Type of routing requested. Required.
     */
    travelMode: google.maps.TravelModeString;
    /**
     * Preferred unit system to use when displaying distance. Optional; defaults to metric.
     */
    unitSystem?: google.maps.UnitSystem;
  }
  /**
   * The response to a <code>DistanceMatrixService</code> request, consisting of the formatted origin and destination addresses, and a sequence of <code>DistanceMatrixResponseRow</code>s, one for each corresponding origin address.
   */
  export interface DistanceMatrixResponse {
    /**
     * The formatted destination addresses.
     */
    destinationAddresses: string[];
    /**
     * The formatted origin addresses.
     */
    originAddresses: string[];
    /**
     * The rows of the matrix, corresponding to the origin addresses.
     */
    rows: google.maps.DistanceMatrixResponseRow[];
  }
  /**
   * A row of the response to a <code>DistanceMatrixService</code> request, consisting of a sequence of <code>DistanceMatrixResponseElement</code>s, one for each corresponding destination address.
   */
  export interface DistanceMatrixResponseRow {
    /**
     * The row&#39;s elements, corresponding to the destination addresses.
     */
    elements: google.maps.DistanceMatrixResponseElement[];
  }
  /**
   * A single element of a response to a <code>DistanceMatrixService</code> request, which contains the duration and distance from one origin to one destination.
   */
  export interface DistanceMatrixResponseElement {
    /**
     * The distance for this origin-destination pairing. This property may be undefined as the distance may be unknown.
     */
    distance: google.maps.Distance;
    /**
     * The duration for this origin-destination pairing. This property may be undefined as the duration may be unknown.
     */
    duration: google.maps.Duration;
    /**
     * The duration for this origin-destination pairing, taking into account the traffic conditions indicated by the <code>trafficModel</code> property. This property may be <code>undefined</code> as the duration may be unknown. Only available to Premium Plan customers when <code>drivingOptions</code> is defined when making the request.
     */
    duration_in_traffic: google.maps.Duration;
    /**
     * The total fare for this origin-destination pairing. Only applicable to transit requests.
     */
    fare: google.maps.TransitFare;
    /**
     * The status of this particular origin-destination pairing.
     */
    status: google.maps.DistanceMatrixElementStatusString;
  }
  /**
   * Access by calling `const {DistanceMatrixService} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated google.maps.DistanceMatrixService is deprecated as of February 25th, 2026. At this time, google.maps.DistanceMatrixService is not scheduled to be discontinued and will continue to receive bug fixes for any major regressions. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details.
   */
  export class DistanceMatrixService {
    /**
     * Creates a new instance of a <code>DistanceMatrixService</code> that sends distance matrix queries to Google servers.
     */
    constructor();
    /**
     * Issues a distance matrix request.
     */
    getDistanceMatrix(request: google.maps.DistanceMatrixRequest, callback?: ((arg0: google.maps.DistanceMatrixResponse | null, arg1: google.maps.DistanceMatrixStatusString) => void)): Promise<google.maps.DistanceMatrixResponse>;
  }
  /**
   * The top-level status about the request in general returned by the <code>DistanceMatrixService</code> upon completion of a distance matrix request. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.DistanceMatrixStatus.OK</code>.
   *
   * Access by calling `const {DistanceMatrixStatus} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum DistanceMatrixStatus {
    /**
     * The provided request was invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * The request contains more than 25 origins, or more than 25 destinations.
     */
    MAX_DIMENSIONS_EXCEEDED = 'MAX_DIMENSIONS_EXCEEDED',
    /**
     * The product of origins and destinations exceeds the per-query limit.
     */
    MAX_ELEMENTS_EXCEEDED = 'MAX_ELEMENTS_EXCEEDED',
    /**
     * The response contains a valid result.
     */
    OK = 'OK',
    /**
     * Too many elements have been requested within the allowed time period. The request should succeed if you try again after some time.
     */
    OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT',
    /**
     * The service denied use of the Distance Matrix service by your web page.
     */
    REQUEST_DENIED = 'REQUEST_DENIED',
    /**
     * A Distance Matrix request could not be processed due to a server error. The request may succeed if you try again.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
  }
  export type DistanceMatrixStatusString = `${google.maps.DistanceMatrixStatus}`;
  /**
   * Defines a service class that talks directly to Google servers for requesting elevation data.
   * Access by calling `const {ElevationService} = await google.maps.importLibrary("elevation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ElevationService {
    /**
     * Creates a new instance of a <code>ElevationService</code> that sends elevation queries to Google servers.
     */
    constructor();
    /**
     * Makes an elevation request along a path, where the elevation data are returned as distance-based samples along that path.
     */
    getElevationAlongPath(request: google.maps.PathElevationRequest, callback?: ((arg0: google.maps.ElevationResult[] | null, arg1: google.maps.ElevationStatusString) => void)): Promise<google.maps.PathElevationResponse>;
    /**
     * Makes an elevation request for a list of discrete locations.
     */
    getElevationForLocations(request: google.maps.LocationElevationRequest, callback?: ((arg0: google.maps.ElevationResult[] | null, arg1: google.maps.ElevationStatusString) => void)): Promise<google.maps.LocationElevationResponse>;
  }
  /**
   * The status returned by the <code>ElevationService</code> upon completion of an elevation request. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.ElevationStatus.OK</code>.
   *
   * Access by calling `const {ElevationStatus} = await google.maps.importLibrary("elevation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ElevationStatus {
    /**
     * The request was invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * The request did not encounter any errors.
     */
    OK = 'OK',
    /**
     * The webpage has gone over the requests limit in too short a period of time.
     */
    OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT',
    /**
     * The webpage is not allowed to use the elevation service.
     */
    REQUEST_DENIED = 'REQUEST_DENIED',
    /**
     * The elevation request could not be successfully processed, yet the exact reason for the failure is not known.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
  }
  export type ElevationStatusString = `${google.maps.ElevationStatus}`;
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * A relational description of a location. Includes a ranked set of nearby landmarks and the areas containing the target location.
   */
  export interface AddressDescriptor {
    /**
     * A ranked list of containing or adjacent areas. The most useful (recognizable and precise) areas are ranked first.
     */
    areas: google.maps.Area[];
    /**
     * A ranked list of nearby landmarks. The most useful (recognizable and nearby) landmarks are ranked first.
     */
    landmarks: google.maps.Landmark[];
  }
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * A place that represents a point of reference for the address.
   */
  export interface Landmark {
    /**
     * The name for the landmark.
     */
    display_name: string;
    /**
     * The language of the name for the landmark.
     */
    display_name_language_code: string;
    /**
     * The Place ID of the underlying establishment serving as the landmark. Can be used to resolve more information about the landmark through Place Details or Place Id Lookup.
     */
    place_id: string;
    /**
     * Defines the spatial relationship between the target location and the landmark.
     */
    spatial_relationship: google.maps.SpatialRelationshipString;
    /**
     * The straight line distance between the target location and the landmark.
     */
    straight_line_distance_meters: number;
    /**
     * The travel distance along the road network between the target location and the landmark. This can be unpopulated if the landmark is disconnected from the part of the road network the target is closest to OR if the target location was not actually considered to be on the road network.
     */
    travel_distance_meters?: number;
    /**
     * One or more values indicating the type of the returned result. Please see <a href="https://developers.google.com/maps/documentation/places/web-service/supported_types">Types </a> for more detail.
     */
    types: string[];
  }
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * An enum representing the relationship in space between the landmark and the target.
   *
   * Access by calling `const {SpatialRelationship} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum SpatialRelationship {
    /**
     * The target is directly opposite the landmark on the other side of the road.
     */
    ACROSS_THE_ROAD = 'ACROSS_THE_ROAD',
    /**
     * Not on the same route as the landmark but a single turn away.
     */
    AROUND_THE_CORNER = 'AROUND_THE_CORNER',
    /**
     * Close to the landmark&#39;s structure but further away from its access point.
     */
    BEHIND = 'BEHIND',
    /**
     * The target is directly adjacent to the landmark.
     */
    BESIDE = 'BESIDE',
    /**
     * On the same route as the landmark but not besides or across.
     */
    DOWN_THE_ROAD = 'DOWN_THE_ROAD',
    /**
     * This is the default relationship when nothing more specific below applies.
     */
    NEAR = 'NEAR',
    /**
     * The landmark has a spatial geometry and the target is within its bounds.
     */
    WITHIN = 'WITHIN',
  }
  export type SpatialRelationshipString = `${google.maps.SpatialRelationship}`;
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * A place that is a small region, such as a neighborhood, sublocality, or large complex that contains the target location.
   */
  export interface Area {
    /**
     * Defines the spatial relationship between the target location and the area.
     */
    containment: google.maps.ContainmentString;
    /**
     * The name for the area.
     */
    display_name: string;
    /**
     * The language of the name for the area.
     */
    display_name_language_code: string;
    /**
     * The Place ID of the underlying area. Can be used to resolve more information about the area through Place Details or Place ID Lookup.
     */
    place_id: string;
  }
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * An enum representing the spatial relationship between the area and the target location.
   *
   * Access by calling `const {Containment} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Containment {
    /**
     * The target location is outside the area region, but close by.
     */
    NEAR = 'NEAR',
    /**
     * The target location is within the area region, close to the edge.
     */
    OUTSKIRTS = 'OUTSKIRTS',
    /**
     * The target location is within the area region, close to the center.
     */
    WITHIN = 'WITHIN',
  }
  export type ContainmentString = `${google.maps.Containment}`;
  /**
   * A service for converting between an address and a <code>LatLng</code>.
   * Access by calling `const {Geocoder} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Geocoder {
    /**
     * Creates a new instance of a <code>Geocoder</code> that sends geocode requests to Google servers.
     */
    constructor();
    /**
     * Geocode a request.
     */
    geocode(request: google.maps.GeocoderRequest, callback?: ((arg0: google.maps.GeocoderResult[] | null, arg1: google.maps.GeocoderStatusString) => void) | null): Promise<google.maps.GeocoderResponse>;
  }
  /**
   * Describes the type of location returned from a geocode. Specify these by value, or by using the constant&#39;s name. For example, <code>'ROOFTOP'</code> or <code>google.maps.GeocoderLocationType.ROOFTOP</code>.
   *
   * Access by calling `const {GeocoderLocationType} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum GeocoderLocationType {
    /**
     * The returned result is approximate.
     */
    APPROXIMATE = 'APPROXIMATE',
    /**
     * The returned result is the geometric center of a result such a line (e.g. street) or polygon (region).
     */
    GEOMETRIC_CENTER = 'GEOMETRIC_CENTER',
    /**
     * The returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.
     */
    RANGE_INTERPOLATED = 'RANGE_INTERPOLATED',
    /**
     * The returned result reflects a precise geocode.
     */
    ROOFTOP = 'ROOFTOP',
  }
  export type GeocoderLocationTypeString = `${google.maps.GeocoderLocationType}`;
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * Extra computations to perform while completing a geocoding request.
   *
   * Access by calling `const {ExtraGeocodeComputation} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ExtraGeocodeComputation {
    /**
     * Generate an address descriptor.
     */
    ADDRESS_DESCRIPTORS = 'ADDRESS_DESCRIPTORS',
  }
  export type ExtraGeocodeComputationString = `${google.maps.ExtraGeocodeComputation}`;
  /**
   * The specification for a geocoding request to be sent to the <code>Geocoder</code>.
   */
  export interface GeocoderRequest {
    /**
     * Address to geocode. One, and only one, of <code>address</code>, <code>location</code> and <code>placeId</code> must be supplied.
     */
    address?: string | null;
    /**
     * <code>LatLngBounds</code> within which to search. Optional.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * Components are used to restrict results to a specific area. A filter consists of one or more of: <code>route</code>, <code>locality</code>, <code>administrativeArea</code>, <code>postalCode</code>, <code>country</code>. Only the results that match all the filters will be returned. Filter values support the same methods of spelling correction and partial matching as other geocoding requests. Optional.
     */
    componentRestrictions?: google.maps.GeocoderComponentRestrictions | null;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * A list of extra computations which may be used to complete the request. Note: These extra computations may return extra fields on the response.
     */
    extraComputations?: google.maps.ExtraGeocodeComputationString[];
    /**
     * Fulfill the promise on a ZERO_RESULT status in the response. This may be desired because even with zero geocoding results there may still be additional response level fields returned.
     */
    fulfillOnZeroResults?: boolean | null;
    /**
     * A language identifier for the language in which results should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * <code>LatLng</code> (or <code>LatLngLiteral</code>) for which to search. The geocoder performs a reverse geocode. See <a href="https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding"> Reverse Geocoding</a> for more information. One, and only one, of <code>address</code>, <code>location</code> and <code>placeId</code> must be supplied.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * The place ID associated with the location. Place IDs uniquely identify a place in the Google Places database and on Google Maps. Learn more about <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">place IDs</a> in the Places API developer guide. The geocoder performs a reverse geocode. See <a href="https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding">Reverse Geocoding</a> for more information. One, and only one, of <code>address</code>, <code>location</code> and <code>placeId</code> must be supplied.
     */
    placeId?: string | null;
    /**
     * Country code used to bias the search, specified as a two-character (non-numeric) Unicode region subtag / CLDR identifier. Optional. See <a href="http://developers.google.com/maps/coverage">Google Maps Platform Coverage Details</a> for supported regions.
     */
    region?: string | null;
  }
  /**
   * The status returned by the <code>Geocoder</code> on the completion of a call to <code>geocode()</code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.GeocoderStatus.OK</code>.
   *
   * Access by calling `const {GeocoderStatus} = await google.maps.importLibrary("geocoding");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum GeocoderStatus {
    /**
     * There was a problem contacting the Google servers.
     */
    ERROR = 'ERROR',
    /**
     * This <code>GeocoderRequest</code> was invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * The response contains a valid <code>GeocoderResponse</code>.
     */
    OK = 'OK',
    /**
     * The webpage has gone over the requests limit in too short a period of time.
     */
    OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT',
    /**
     * The webpage is not allowed to use the geocoder.
     */
    REQUEST_DENIED = 'REQUEST_DENIED',
    /**
     * A geocoding request could not be processed due to a server error. The request may succeed if you try again.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
    /**
     * No result was found for this <code>GeocoderRequest</code>.
     */
    ZERO_RESULTS = 'ZERO_RESULTS',
  }
  export type GeocoderStatusString = `${google.maps.GeocoderStatus}`;
  /**
   * A <code>LatLngAltitude</code> is a 3D point in geographical coordinates: latitude, longitude, and altitude.<br> <ul> <li>Latitude ranges between -90 and 90 degrees, inclusive. Values above or below this range will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.</li> <li>Longitude ranges between -180 and 180 degrees, inclusive. Values above or below this range will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.</li> <li>Altitude is measured in meters. Positive values denote heights above ground level, and negative values denote heights underneath the ground surface.</li> </ul>
   * Access by calling `const {LatLngAltitude} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LatLngAltitude implements google.maps.LatLngAltitudeLiteral, google.maps.LatLngLiteral {
    /**
     * 
     * @param value The initializing value.
     * @param noClampNoWrap Whether to preserve the initialization values, even if they may not necessarily be valid latitude values in the range of [-90, 90] or valid longitude values in the range of [-180, 180]. The default is <code>false</code> which enables latitude clamping and longitude wrapping.
     */
    constructor(value: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLng | google.maps.LatLngLiteral, noClampNoWrap?: boolean);
    /**
     * Returns the altitude.
     */
    get altitude(): number;
    /**
     * Returns the latitude.
     */
    get lat(): number;
    /**
     * Returns the longitude.
     */
    get lng(): number;
    /**
     * Comparison function for two LatLngAltitudes. Returns true if the coordinates are within 1e-9 of each other and false otherwise.
     */
    equals(other: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null): boolean;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): google.maps.LatLngAltitudeLiteral;
  }
  /**
   * Object literals are accepted in place of <code>Orientation3D</code> objects, as a convenience, in many places. These are converted to <code>Orientation3D</code> objects when the Maps API encounters them.
   */
  export interface Orientation3DLiteral {
    /**
     * Rotation about the z-axis (normal to the Earth&#39;s surface). A value of 0 (the default) equals North. A positive rotation is clockwise around the z-axis and specified in degrees from 0 to 360.
     */
    heading?: number | null;
    /**
     * Rotation about the y-axis. A positive rotation is clockwise around the y-axis and specified in degrees from 0 to 360.
     */
    roll?: number | null;
    /**
     * Rotation about the x-axis. A positive rotation is clockwise around the x-axis and specified in degrees from 0 to 360.
     */
    tilt?: number | null;
  }
  /**
   * A <code>Orientation3D</code> is a three-dimensional vector used for standard mathematical rotation transformations along heading, tilt, and roll.<br> <ul> <li>heading is an angle in the range [0, 360) degrees.</li> <li>tilt is an angle in the range [0, 360) degrees.</li> <li>roll is an angle in the range [0, 360) degrees.</li> </ul>
   * Access by calling `const {Orientation3D} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Orientation3D implements google.maps.Orientation3DLiteral {
    /**
     * 
     * @param value The initializing value.
     */
    constructor(value: google.maps.Orientation3D | google.maps.Orientation3DLiteral);
    /**
     * Rotation about the z-axis (normal to the Earth&#39;s surface). A value of 0 (the default) equals North. A positive rotation is clockwise around the z-axis and specified in degrees from 0 to 360. Values above or below this range will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 530 will be converted to 170 as well.
     * @defaultValue <code>0</code>
     */
    get heading(): number;
    /**
     * Rotation about the y-axis. A positive rotation is clockwise around the y-axis and specified in degrees from 0 to 360. Values above or below this range will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 530 will be converted to 170 as well.
     * @defaultValue <code>0</code>
     */
    get roll(): number;
    /**
     * Rotation about the x-axis. A positive rotation is clockwise around the x-axis and specified in degrees from 0 to 360. Values above or below this range will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 530 will be converted to 170 as well.
     * @defaultValue <code>0</code>
     */
    get tilt(): number;
    /**
     * Comparison function.
     */
    equals(other: google.maps.Orientation3D | google.maps.Orientation3DLiteral | null): boolean;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): google.maps.Orientation3DLiteral;
  }
  /**
   * Access by calling `const {Point} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Point {
    /**
     * A point on a two-dimensional plane.
     * @param x
     * @param y
     */
    constructor(x: number, y: number);
    /**
     * The X coordinate
     */
    x: number;
    /**
     * The Y coordinate
     */
    y: number;
    /**
     * Compares two Points
     */
    equals(other: google.maps.Point | null): boolean;
    /**
     * Returns a string representation of this Point.
     */
    toString(): string;
  }
  /**
   * Access by calling `const {Size} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Size {
    /**
     * Two-dimensional size, where width is the distance on the x-axis, and height is the distance on the y-axis.
     * @param width
     * @param height
     * @param widthUnit
     * @param heightUnit
     */
    constructor(width: number, height: number, widthUnit?: string, heightUnit?: string);
    /**
     * The height along the y-axis, in pixels.
     */
    height: number;
    /**
     * The width along the x-axis, in pixels.
     */
    width: number;
    /**
     * Compares two Sizes.
     */
    equals(other: google.maps.Size | null): boolean;
    /**
     * Returns a string representation of this Size.
     */
    toString(): string;
  }
  /**
   * Object literals are accepted in place of <code>Vector3D</code> objects, as a convenience, in many places. These are converted to <code>Vector3D</code> objects when the Maps API encounters them.
   */
  export interface Vector3DLiteral {
    /**
     * X-component of the three-dimensional vector.
     */
    x: number;
    /**
     * Y-component of the three-dimensional vector.
     */
    y: number;
    /**
     * Z-component of the three-dimensional vector.
     */
    z: number;
  }
  /**
   * A <code>Vector3D</code> is a three-dimensional vector used for standard mathematical operations such as scaling the bounds of three-dimensional object along local x-, y-, and z-axes.<br> <ul> <li>x is a real number.</li> <li>y is a real number.</li> <li>z is a real number.</li> </ul>
   * Access by calling `const {Vector3D} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Vector3D implements google.maps.Vector3DLiteral {
    /**
     * 
     * @param value The initializing value.
     */
    constructor(value: google.maps.Vector3D | google.maps.Vector3DLiteral);
    /**
     * X-component of the three-dimensional vector.
     */
    get x(): number;
    /**
     * Y-component of the three-dimensional vector.
     */
    get y(): number;
    /**
     * Z-component of the three-dimensional vector.
     */
    get z(): number;
    /**
     * Comparison function.
     */
    equals(other: google.maps.Vector3D | google.maps.Vector3DLiteral | null): boolean;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): google.maps.Vector3DLiteral;
  }
  /**
   *
   * Access by calling `const {CollisionBehavior} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum CollisionBehavior {
    /**
     * Display the marker only if it does not overlap with other markers. If two markers of this type would overlap, the one with the higher zIndex is shown. If they have the same zIndex, the one with the lower vertical screen position is shown.
     */
    OPTIONAL_AND_HIDES_LOWER_PRIORITY = 'OPTIONAL_AND_HIDES_LOWER_PRIORITY',
    /**
     * Always display the marker regardless of collision. This is the default behavior.
     */
    REQUIRED = 'REQUIRED',
    /**
     * Always display the marker regardless of collision, and hide any OPTIONAL_AND_HIDES_LOWER_PRIORITY markers or labels that would overlap with the marker.
     */
    REQUIRED_AND_HIDES_OPTIONAL = 'REQUIRED_AND_HIDES_OPTIONAL',
  }
  export type CollisionBehaviorString = `${google.maps.CollisionBehavior}`;
  /**
   * Built-in symbol paths.
   *
   * Access by calling `const {SymbolPath} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum SymbolPath {
    /**
     * A backward-pointing closed arrow.
     */
    BACKWARD_CLOSED_ARROW = 3,
    /**
     * A backward-pointing open arrow.
     */
    BACKWARD_OPEN_ARROW = 4,
    /**
     * A circle.
     */
    CIRCLE = 0,
    /**
     * A forward-pointing closed arrow.
     */
    FORWARD_CLOSED_ARROW = 1,
    /**
     * A forward-pointing open arrow.
     */
    FORWARD_OPEN_ARROW = 2,
  }
  /**
   * Access by calling `const {Marker} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of February 21st, 2024, google.maps.Marker is deprecated. Please use {@link google.maps.marker.AdvancedMarkerElement} instead. At this time, google.maps.Marker is not scheduled to be discontinued, but {@link google.maps.marker.AdvancedMarkerElement} is recommended over google.maps.Marker. While google.maps.Marker will continue to receive bug fixes for any major regressions, existing bugs in google.maps.Marker will not be addressed. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/deprecations">https://developers.google.com/maps/deprecations</a> for additional details and <a href="https://developers.google.com/maps/documentation/javascript/advanced-markers/migration">https://developers.google.com/maps/documentation/javascript/advanced-markers/migration</a> for the migration guide.
   */
  export class Marker extends google.maps.MVCObject {
    /**
     * Creates a marker with the options specified. If a map is specified, the marker is added to the map upon construction. Note that the position must be set for the marker to display.
     * @param opts
     */
    constructor(opts?: google.maps.MarkerOptions);
    /**
     * Get the currently running animation.
     */
    getAnimation(): google.maps.Animation | null | undefined;
    /**
     * Get the clickable status of the {@link google.maps.Marker}.
     */
    getClickable(): boolean;
    /**
     * Get the mouse cursor type shown on hover.
     */
    getCursor(): string | null | undefined;
    /**
     * Get the draggable status of the {@link google.maps.Marker}.
     */
    getDraggable(): boolean;
    /**
     * Get the icon of the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.icon}.
     */
    getIcon(): string | google.maps.Icon | google.maps.Symbol | null | undefined;
    /**
     * Get the label of the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.label}.
     */
    getLabel(): google.maps.MarkerLabel | string | null | undefined;
    /**
     * Get the map or panaroama the {@link google.maps.Marker} is rendered on.
     */
    getMap(): google.maps.Map | google.maps.StreetViewPanorama | null;
    /**
     * Get the opacity of the {@link google.maps.Marker}.
     */
    getOpacity(): number | null | undefined;
    /**
     * Get the position of the {@link google.maps.Marker}.
     */
    getPosition(): google.maps.LatLng | null | undefined;
    /**
     * Get the shape of the {@link google.maps.Marker} used for interaction. See {@link google.maps.MarkerOptions.shape} and {@link google.maps.MarkerShape}.
     */
    getShape(): google.maps.MarkerShape | null | undefined;
    /**
     * Get the title of the {@link google.maps.Marker} tooltip. See {@link google.maps.MarkerOptions.title}.
     */
    getTitle(): string | null | undefined;
    /**
     * Get the visibility of the {@link google.maps.Marker}.
     */
    getVisible(): boolean;
    /**
     * Get the zIndex of the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.zIndex}.
     */
    getZIndex(): number | null | undefined;
    /**
     * Start an animation. Any ongoing animation will be cancelled. Currently supported animations are: {@link google.maps.Animation.BOUNCE}, {@link google.maps.Animation.DROP}. Passing in <code>null</code> will cause any animation to stop.
     */
    setAnimation(animation?: google.maps.Animation | null): void;
    /**
     * Set if the {@link google.maps.Marker} is clickable.
     */
    setClickable(flag: boolean): void;
    /**
     * Set the mouse cursor type shown on hover.
     */
    setCursor(cursor?: string | null): void;
    /**
     * Set if the {@link google.maps.Marker} is draggable.
     */
    setDraggable(flag: boolean | null): void;
    /**
     * Set the icon for the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.icon}.
     */
    setIcon(icon?: string | google.maps.Icon | google.maps.Symbol | null): void;
    /**
     * Set the label for the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.label}.
     */
    setLabel(label?: string | google.maps.MarkerLabel | null): void;
    /**
     * Renders the {@link google.maps.Marker} on the specified map or panorama. If map is set to <code>null</code>, the marker will be removed.
     */
    setMap(map: google.maps.Map | google.maps.StreetViewPanorama | null): void;
    /**
     * Set the opacity of the {@link google.maps.Marker}.
     */
    setOpacity(opacity?: number | null): void;
    /**
     * Set the options for the {@link google.maps.Marker}.
     */
    setOptions(options: google.maps.MarkerOptions | null): void;
    /**
     * Set the postition for the {@link google.maps.Marker}.
     */
    setPosition(latlng?: google.maps.LatLng | google.maps.LatLngLiteral | null): void;
    /**
     * Set the shape of the {@link google.maps.Marker} used for interaction. See {@link google.maps.MarkerOptions.shape} and {@link google.maps.MarkerShape}.
     */
    setShape(shape?: google.maps.MarkerShape | null): void;
    /**
     * Set the title of the {@link google.maps.Marker} tooltip. See {@link google.maps.MarkerOptions.title}.
     */
    setTitle(title?: string | null): void;
    /**
     * Set if the {@link google.maps.Marker} is visible.
     */
    setVisible(visible: boolean): void;
    /**
     * Set the zIndex of the {@link google.maps.Marker}. See {@link google.maps.MarkerOptions.zIndex}.
     */
    setZIndex(zIndex?: number | null): void;
    /**
     * The maximum default z-index that the API will assign to a marker. You may set a higher z-index to bring a marker to the front.
     */
    static readonly MAX_ZINDEX: number;
  }
  /**
   * An overlay that looks like a bubble and is often connected to a marker.
   * Access by calling `const {InfoWindow} = await google.maps.importLibrary("maps");` or `const {InfoWindow} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class InfoWindow extends google.maps.MVCObject {
    /**
     * Creates an info window with the given options. An InfoWindow can be placed on a map at a particular position or above a marker, depending on what is specified in the options. Unless auto-pan is disabled, an InfoWindow will pan the map to make itself visible when it is opened. After constructing an InfoWindow, you must call open to display it on the map. The user can click the close button on the InfoWindow to remove it from the map, or the developer can call close() for the same effect.
     * @param opts
     */
    constructor(opts?: google.maps.InfoWindowOptions | null);
    /**
     * Checks if the InfoWindow is open.
     */
    get isOpen(): boolean;
    /**
     * Closes this InfoWindow by removing it from the DOM structure.
     */
    close(): void;
    /**
     * Sets focus on this <code>InfoWindow</code>. You may wish to consider using this method along with a <code>visible</code> event to make sure that <code>InfoWindow</code> is visible before setting focus on it. An <code>InfoWindow</code> that is not visible cannot be focused.
     */
    focus(): void;

    getContent(): string | Element | Text | null | undefined;

    getHeaderContent(): string | Element | Text | null | undefined;

    getHeaderDisabled(): boolean | undefined;

    getPosition(): google.maps.LatLng | null | undefined;

    getZIndex(): number;
    /**
     * Opens this InfoWindow on the given map. Optionally, an InfoWindow can be associated with an anchor. In the core API, the only anchor is the Marker class. However, an anchor can be any MVCObject that exposes a LatLng <code>position</code> property and optionally a Point <code>anchorPoint</code> property for calculating the <code>pixelOffset</code> (see InfoWindowOptions). The <code>anchorPoint</code> is the offset from the anchor&#39;s position to the tip of the InfoWindow. It is recommended to use the {@link google.maps.InfoWindowOpenOptions} interface as the single argument for this method. To prevent changing browser focus on open, set {@link google.maps.InfoWindowOpenOptions.shouldFocus} to <code>false</code>.
     */
    open(options?: google.maps.InfoWindowOpenOptions | google.maps.Map | google.maps.StreetViewPanorama | null, anchor?: google.maps.MVCObject | google.maps.marker.AdvancedMarkerElement | null): void;

    setContent(content?: string | Element | Text | null): void;

    setHeaderContent(headerContent?: string | Element | Text | null): void;

    setHeaderDisabled(headerDisabled?: boolean | null): void;

    setOptions(options?: google.maps.InfoWindowOptions | null): void;

    setPosition(position?: google.maps.LatLng | google.maps.LatLngLiteral | null): void;

    setZIndex(zIndex: number): void;
  }
  /**
   * Options for opening an InfoWindow
   */
  export interface InfoWindowOpenOptions {
    /**
     * The anchor to which this InfoWindow will be positioned. If the anchor is non-null, the InfoWindow will be positioned at the top-center of the anchor. The InfoWindow will be rendered on the same map or panorama as the anchor <strong>(when available)</strong>.
     */
    anchor?: google.maps.MVCObject | google.maps.marker.AdvancedMarkerElement | null;
    /**
     * The map or panorama on which to render this InfoWindow.
     */
    map?: google.maps.Map | google.maps.StreetViewPanorama | null;
    /**
     * Whether or not focus should be moved inside the InfoWindow when it is opened. When this property is unset or when it is set to <code>null</code> or <code>undefined</code>, a heuristic is used to decide whether or not focus should be moved. It is recommended to explicitly set this property to fit your needs as the heuristic is subject to change and may not work well for all use cases.
     */
    shouldFocus?: boolean | null;
  }
  /**
   * A rectangular image overlay on the map.
   * Access by calling `const {GroundOverlay} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GroundOverlay extends google.maps.MVCObject {
    /**
     * Creates a ground overlay from the provided image URL and its <code>LatLngBounds</code>. The image is scaled to fit the current bounds, and projected using the current map projection.
     * @param url
     * @param bounds
     * @param opts
     */
    constructor(url: string, bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null, opts?: google.maps.GroundOverlayOptions | null);
    /**
     * Gets the <code>LatLngBounds</code> of this overlay.
     */
    getBounds(): google.maps.LatLngBounds | null;
    /**
     * Returns the map on which this ground overlay is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Returns the opacity of this ground overlay.
     */
    getOpacity(): number;
    /**
     * Gets the url of the projected image.
     */
    getUrl(): string;
    /**
     * Renders the ground overlay on the specified map. If map is set to <code>null</code>, the overlay is removed.
     */
    setMap(map: google.maps.Map | null): void;
    /**
     * Sets the opacity of this ground overlay.
     */
    setOpacity(opacity: number): void;
  }
  /**
   * Access by calling `const {KmlLayer} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of version 3.65, google.maps.KmlLayer is deprecated. For alternative methods of displaying KML data on the map, see <a href="https://developers.devsite.corp.google.com/maps/deprecations#kml_layer_deprecated_as_of_april_30_2026">https://developers.devsite.corp.google.com/maps/deprecations#kml_layer_deprecated_as_of_april_30_2026</a>
   */
  export class KmlLayer extends google.maps.MVCObject {
    /**
     * Creates a <code>KmlLayer</code> which renders the contents of the specified KML/KMZ file (<a href="https://developers.google.com/kml/documentation/kmlreference">https://developers.google.com/kml/documentation/kmlreference</a>) or GeoRSS file (<a href="http://www.georss.org">http://www.georss.org</a>).
     * @param opts Options for this layer.
     */
    constructor(opts?: google.maps.KmlLayerOptions | null);
    /**
     * Get the default viewport for the layer being displayed.
     */
    getDefaultViewport(): google.maps.LatLngBounds | null;
    /**
     * Get the map on which the KML Layer is being rendered.
     */
    getMap(): google.maps.Map | null;
    /**
     * Get the metadata associated with this layer, as specified in the layer markup.
     */
    getMetadata(): google.maps.KmlLayerMetadata | null;
    /**
     * Get the status of the layer, set once the requested document has loaded.
     */
    getStatus(): google.maps.KmlLayerStatusString | null;
    /**
     * Gets the URL of the KML file being displayed.
     */
    getUrl(): string;
    /**
     * Gets the z-index of the KML Layer.
     */
    getZIndex(): number;
    /**
     * Renders the KML Layer on the specified map. If map is set to <code>null</code>, the layer is removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.KmlLayerOptions | null): void;
    /**
     * Sets the URL of the KML file to display.
     */
    setUrl(url: string): void;
    /**
     * Sets the z-index of the KML Layer.
     */
    setZIndex(zIndex: number): void;
  }
  /**
   * The status returned by <code>KmlLayer</code> on the completion of loading a document. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.KmlLayerStatus.OK</code>.
   *
   * Access by calling `const {KmlLayerStatus} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum KmlLayerStatus {
    /**
     * The document could not be found. Most likely it is an invalid URL, or the document is not publicly available.
     */
    DOCUMENT_NOT_FOUND = 'DOCUMENT_NOT_FOUND',
    /**
     * The document exceeds the file size limits of KmlLayer.
     */
    DOCUMENT_TOO_LARGE = 'DOCUMENT_TOO_LARGE',
    /**
     * The document could not be fetched.
     */
    FETCH_ERROR = 'FETCH_ERROR',
    /**
     * The document is not a valid KML, KMZ or GeoRSS document.
     */
    INVALID_DOCUMENT = 'INVALID_DOCUMENT',
    /**
     * The <code>KmlLayer</code> is invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * The document exceeds the feature limits of KmlLayer.
     */
    LIMITS_EXCEEDED = 'LIMITS_EXCEEDED',
    /**
     * The layer loaded successfully.
     */
    OK = 'OK',
    /**
     * The document could not be loaded within a reasonable amount of time.
     */
    TIMED_OUT = 'TIMED_OUT',
    /**
     * The document failed to load for an unknown reason.
     */
    UNKNOWN = 'UNKNOWN',
  }
  export type KmlLayerStatusString = `${google.maps.KmlLayerStatus}`;
  /**
   * A layer showing bike lanes and paths.
   * Access by calling `const {BicyclingLayer} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class BicyclingLayer extends google.maps.MVCObject {
    /**
     * A layer that displays bike lanes and paths and demotes large roads.
     */
    constructor();
    /**
     * Returns the map on which this layer is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Renders the layer on the specified map. If map is set to <code>null</code>, the layer will be removed.
     */
    setMap(map: google.maps.Map | null): void;
  }
  /**
   * A traffic layer.
   * Access by calling `const {TrafficLayer} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TrafficLayer extends google.maps.MVCObject {
    /**
     * A layer that displays current road traffic.
     * @param opts
     */
    constructor(opts?: google.maps.TrafficLayerOptions);
    /**
     * Returns the map on which this layer is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Renders the layer on the specified map. If map is set to <code>null</code>, the layer will be removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.TrafficLayerOptions | null): void;
  }
  /**
   * A transit layer.
   * Access by calling `const {TransitLayer} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitLayer extends google.maps.MVCObject {
    /**
     * A layer that displays transit lines.
     */
    constructor();
    /**
     * Returns the map on which this layer is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Renders the layer on the specified map. If map is set to <code>null</code>, the layer will be removed.
     */
    setMap(map: google.maps.Map | null): void;
  }
  /**
   * Access by calling `const {MVCArray} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MVCArray< T = any > extends google.maps.MVCObject {
    /**
     * A mutable MVC Array.
     * @param array
     */
    constructor(array?: T[] | null);
    /**
     * Removes all elements from the array.
     */
    clear(): void;
    /**
     * Iterate over each element, calling the provided callback. The callback is called for each element like: callback(element, index).
     */
    forEach(callback: (arg0: T, arg1: number) => void): void;
    /**
     * Returns a reference to the underlying Array. Warning: if the Array is mutated, no events will be fired by this object.
     */
    getArray(): T[];
    /**
     * Returns the element at the specified index.
     */
    getAt(i: number): T;
    /**
     * Returns the number of elements in this array.
     */
    getLength(): number;
    /**
     * Inserts an element at the specified index.
     */
    insertAt(i: number, elem: T): void;
    /**
     * Removes the last element of the array and returns that element.
     */
    pop(): T;
    /**
     * Adds one element to the end of the array and returns the new length of the array.
     */
    push(elem: T): number;
    /**
     * Removes an element from the specified index.
     */
    removeAt(i: number): T;
    /**
     * Sets an element at the specified index.
     */
    setAt(i: number, elem: T): void;
  }
  /**
   * A circle on the Earth&#39;s surface; also known as a &quot;spherical cap&quot;.
   * Access by calling `const {Circle} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Circle extends google.maps.MVCObject {
    /**
     * Create a circle using the passed {@link google.maps.CircleOptions}, which specify the center, radius, and style.
     * @param circleOrCircleOptions
     */
    constructor(circleOrCircleOptions?: google.maps.Circle | google.maps.CircleLiteral | google.maps.CircleOptions | null);
    /**
     * Gets the <code>LatLngBounds</code> of this Circle.
     */
    getBounds(): google.maps.LatLngBounds | null;
    /**
     * Returns the center of this circle.
     */
    getCenter(): google.maps.LatLng | null;
    /**
     * Returns whether this circle can be dragged by the user.
     */
    getDraggable(): boolean;
    /**
     * Returns whether this circle can be edited by the user.
     */
    getEditable(): boolean;
    /**
     * Returns the map on which this circle is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Returns the radius of this circle (in meters).
     */
    getRadius(): number;
    /**
     * Returns whether this circle is visible on the map.
     */
    getVisible(): boolean;
    /**
     * Sets the center of this circle.
     */
    setCenter(center: google.maps.LatLng | google.maps.LatLngLiteral | null): void;
    /**
     * If set to <code>true</code>, the user can drag this circle over the map.
     */
    setDraggable(draggable: boolean): void;
    /**
     * If set to <code>true</code>, the user can edit this circle by dragging the control points shown at the center and around the circumference of the circle.
     */
    setEditable(editable: boolean): void;
    /**
     * Renders the circle on the specified map. If map is set to <code>null</code>, the circle will be removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.CircleOptions | null): void;
    /**
     * Sets the radius of this circle (in meters).
     */
    setRadius(radius: number): void;
    /**
     * Hides this circle if set to <code>false</code>.
     */
    setVisible(visible: boolean): void;
  }
  /**
   * MapElementOptions object used to define the properties that can be set on a MapElement.
   */
  export interface MapElementOptions {
    /**
     * See {@link google.maps.MapElement.center}.
     */
    center?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.MapElement.headingInteractionDisabled}.
     */
    headingInteractionDisabled?: boolean | null;
    /**
     * See {@link google.maps.MapElement.internalUsageAttributionIds}.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * See {@link google.maps.MapElement.mapId}.
     */
    mapId?: string | null;
    /**
     * See {@link google.maps.MapElement.renderingType}.
     */
    renderingType?: google.maps.RenderingTypeString | null;
    /**
     * See {@link google.maps.MapElement.tiltInteractionDisabled}.
     */
    tiltInteractionDisabled?: boolean | null;
    /**
     * See {@link google.maps.MapElement.zoom}.
     */
    zoom?: number | null;
  }
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * Used for setting the map&#39;s camera options.
   */
  export interface CameraOptions {

    center?: google.maps.LatLngLiteral | google.maps.LatLng;

    heading?: number;

    tilt?: number;

    zoom?: number;
  }
  /**
   * Object containing a snapshot of what capabilities are currently available for the Map. Note that this does not necessarily mean that relevant modules are loaded or initialized, but rather that the current map has permission to use these APIs. See the properties for a list of possible capabilities.
   */
  export interface MapCapabilities {
    /**
     * If true, this map is configured properly to allow for the use of advanced markers. Note that you must still import the <code>marker</code> library in order to use advanced markers. See <a href="https://goo.gle/gmp-isAdvancedMarkersAvailable">https://goo.gle/gmp-isAdvancedMarkersAvailable</a> for more information.
     */
    isAdvancedMarkersAvailable?: boolean;
    /**
     * If true, this map is configured properly to allow for the use of data-driven styling for at least one FeatureLayer. See <a href="https://goo.gle/gmp-data-driven-styling">https://goo.gle/gmp-data-driven-styling</a> and <a href="https://goo.gle/gmp-FeatureLayerIsAvailable">https://goo.gle/gmp-FeatureLayerIsAvailable</a> for more information.
     */
    isDataDrivenStylingAvailable?: boolean;
    /**
     * If true, this map is configured properly to allow for the use of {@link google.maps.WebGLOverlayView}.
     */
    isWebGLOverlayViewAvailable?: boolean;
  }
  /**
   * Identifiers for feature types.
   *
   * Access by calling `const {FeatureType} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum FeatureType {
    /**
     * Indicates a first-order civil entity below the country level.
     */
    ADMINISTRATIVE_AREA_LEVEL_1 = 'ADMINISTRATIVE_AREA_LEVEL_1',
    /**
     * Indicates a second-order civil entity below the country level.
     */
    ADMINISTRATIVE_AREA_LEVEL_2 = 'ADMINISTRATIVE_AREA_LEVEL_2',
    /**
     * Indicates the national political entity.
     */
    COUNTRY = 'COUNTRY',
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Indicates a third-party dataset.
     */
    DATASET = 'DATASET',
    /**
     * Indicates an incorporated city or town political entity.
     */
    LOCALITY = 'LOCALITY',
    /**
     * Indicates a postal code as used to address postal mail within the country. Includes zip codes.
     */
    POSTAL_CODE = 'POSTAL_CODE',
    /**
     * Indicates a school district.
     */
    SCHOOL_DISTRICT = 'SCHOOL_DISTRICT',
  }
  export type FeatureTypeString = `${google.maps.FeatureType}`;
  /**
   * An interface representing a vector map tile feature. These are inputs to the <code>FeatureStyleFunction</code>. Do not save a reference to a particular <code>Feature</code> object because the reference will not be stable.
   */
  export interface Feature {
    /**
     * <code>FeatureType</code> of this <code>Feature</code>.
     */
    featureType: google.maps.FeatureTypeString;
  }
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * An interface representing a feature from a Dataset. The <code>featureType</code> of a <code>DatasetFeature</code> will always be <code>FeatureType.DATASET</code>.
   */
  export interface DatasetFeature extends google.maps.Feature {
    /**
     * Key-value mapping of the feature&#39;s attributes.
     */
    datasetAttributes: { [key: string]: string };
    /**
     * Dataset id of the dataset that this feature belongs to.
     */
    datasetId: string;
  }
  /**
   * An interface representing a map layer containing features of a specific {@link google.maps.FeatureType} whose style can be overridden client-side, or have events attached.
   */
  export interface FeatureLayer {
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * The Dataset ID for this <code>FeatureLayer</code>. Only present if the <code>featureType</code> is <code>FeatureType.DATASET</code>.
     */
    datasetId?: string;
    /**
     * The <code>FeatureType</code> associated with this <code>FeatureLayer</code>.
     */
    featureType: google.maps.FeatureTypeString;
    /**
     * Whether this <code>FeatureLayer</code> is available, meaning whether Data-driven styling is available for this map (there is a map ID using vector tiles with this <code>FeatureLayer</code> enabled in the Google Cloud Console map style.) If this is false (or becomes false), styling on this <code>FeatureLayer</code> returns to default and events are not triggered.
     */
    isAvailable: boolean;
    /**
     * The style of <code>Feature</code>s in the <code>FeatureLayer</code>. The style is applied when style is set. If your style function updates, you must set the style property again. A <code>FeatureStyleFunction</code> must return consistent results when it is applied over the map tiles, and should be optimized for performance. Asynchronous functions are not supported. If you use a <code>FeatureStyleOptions</code>, all features of that layer will be styled with the same <code>FeatureStyleOptions</code>. Set the style to <code>null</code> to remove the previously set style. If this <code>FeatureLayer</code> is not available, setting style does nothing and logs an error.
     */
    style?: google.maps.FeatureStyleOptions | google.maps.FeatureStyleFunction | null;
    /**
     * Adds the given listener function to the given event name. Returns an identifier for this listener that can be used with {@link google.maps.event.removeListener}.
     */
    addListener(eventName: string, handler: Function): google.maps.MapsEventListener;
  }
  /**
   * Options passed to a <code>FeatureStyleFunction</code>.
   */
  export interface FeatureStyleFunctionOptions {
    /**
     * <code>Feature</code> passed into the <code>FeatureStyleFunction</code> for styling.
     */
    feature: google.maps.Feature;
  }

  export type FeatureStyleFunction = (arg0: google.maps.FeatureStyleFunctionOptions) => (google.maps.FeatureStyleOptions | null | undefined);
  /**
   * The WebGL Overlay View provides direct access to the same WebGL rendering context Google Maps Platform uses to render the vector basemap. This use of a shared rendering context provides benefits such as depth occlusion with 3D building geometry, and the ability to sync 2D/3D content with basemap rendering. <br><br>With WebGL Overlay View you can add content to your maps using WebGL directly, or popular Graphics libraries like Three.js or deck.gl. To use the overlay, you can extend <code>google.maps.WebGLOverlayView</code> and provide an implementation for each of the following lifecycle hooks: {@link google.maps.WebGLOverlayView.onAdd}, {@link google.maps.WebGLOverlayView.onContextRestored}, {@link google.maps.WebGLOverlayView.onDraw}, {@link google.maps.WebGLOverlayView.onContextLost} and {@link google.maps.WebGLOverlayView.onRemove}. <br><br>You must call {@link google.maps.WebGLOverlayView.setMap} with a valid {@link google.maps.Map} object to trigger the call to the <code>onAdd()</code> method and <code>setMap(null)</code> in order to trigger the <code>onRemove()</code> method. The <code>setMap()</code> method can be called at the time of construction or at any point afterward when the overlay should be re-shown after removing. The <code>onDraw()</code> method will then be called whenever a map property changes that could change the position of the element, such as zoom, center, or map type. WebGLOverlayView may only be added to a vector map having a {@link google.maps.MapOptions.mapId} (including maps set to the {@link google.maps.RenderingType.VECTOR} {@link google.maps.MapOptions.renderingType} and using {@link google.maps.Map.DEMO_MAP_ID} as the {@link google.maps.MapOptions.mapId}).
   * Access by calling `const {WebGLOverlayView} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class WebGLOverlayView extends google.maps.MVCObject {
    /**
     * Creates a <code>WebGLOverlayView</code>.
     */
    constructor();

    getMap(): google.maps.Map | null | undefined;
    /**
     * Implement this method to fetch or create intermediate data structures before the overlay is drawn that don’t require immediate access to the WebGL rendering context. This method must be implemented to render.
     */
    onAdd(): void;
    /**
     * This method is called when the rendering context is lost for any reason, and is where you should clean up any pre-existing GL state, since it is no longer needed.
     */
    onContextLost(): void;
    /**
     * This method is called once the rendering context is available. Use it to initialize or bind any WebGL state such as shaders or buffer objects.
     */
    onContextRestored(options: google.maps.WebGLStateOptions): void;
    /**
     * Implement this method to draw WebGL content directly on the map. Note that if the overlay needs a new frame drawn then call {@link google.maps.WebGLOverlayView.requestRedraw}.
     */
    onDraw(options: google.maps.WebGLDrawOptions): void;
    /**
     * This method is called when the overlay is removed from the map with <code>WebGLOverlayView.setMap(null)</code>, and is where you should remove all intermediate objects. This method must be implemented to render.
     */
    onRemove(): void;
    /**
     * Implement this method to handle any GL state updates outside of the render animation frame.
     */
    onStateUpdate(options: google.maps.WebGLStateOptions): void;
    /**
     * Triggers the map to redraw a frame.
     */
    requestRedraw(): void;
    /**
     * Triggers the map to update GL state.
     */
    requestStateUpdate(): void;
    /**
     * Adds the overlay to the map.
     */
    setMap(map?: google.maps.Map | null): void;
  }
  /**
   * GL state options.
   */
  export interface WebGLStateOptions {
    /**
     * The WebGLRenderingContext on which to render this WebGLOverlayView.
     */
    gl: WebGLRenderingContext;
  }
  /**
   * Drawing options.
   */
  export interface WebGLDrawOptions {
    /**
     * The WebGLRenderingContext on which to render this WebGLOverlayView.
     */
    gl: WebGLRenderingContext;
    /**
     * The matrix transformation from camera space to latitude/longitude coordinates.
     */
    transformer: google.maps.CoordinateTransformer;
  }
  /**
   * A point of view object which specifies the camera&#39;s orientation at the Street View panorama&#39;s position. The point of view is defined as heading and pitch.
   */
  export interface StreetViewPov {
    /**
     * The camera heading in degrees relative to <code>true</code> north. True north is 0&deg;, east is 90&deg;, south is 180&deg;, west is 270&deg;.
     */
    heading: number;
    /**
     * The camera pitch in degrees, relative to the street view vehicle. Ranges from 90&deg; (directly upwards) to -90&deg; (directly downwards).
     */
    pitch: number;
  }
  /**
   * Displays the panorama for a given <code>LatLng</code> or panorama ID. A <code>StreetViewPanorama</code> object provides a Street View &quot;viewer&quot; which can be stand-alone within a separate <code>&lt;div&gt;</code> or bound to a <code>Map</code>.
   * Access by calling `const {StreetViewPanorama} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StreetViewPanorama extends google.maps.MVCObject {
    /**
     * Creates a panorama with the passed <code>StreetViewPanoramaOptions</code>.
     * @param container
     * @param opts
     */
    constructor(container: HTMLElement, opts?: google.maps.StreetViewPanoramaOptions | null);
    /**
     * Additional controls to attach to the panorama. To add a control to the panorama, add the control&#39;s <code>&lt;div&gt;</code> to the <code>MVCArray</code> corresponding to the {@link google.maps.ControlPosition} where it should be rendered.
     */
    controls: google.maps.MVCArray<HTMLElement>[];
    /**
     * Sets focus on this <code>StreetViewPanorama</code>. You may wish to consider using this method along with a <code>visible_changed</code> event to make sure that <code>StreetViewPanorama</code> is visible before setting focus on it. A <code>StreetViewPanorama</code> that is not visible cannot be focused.
     */
    focus(): void;
    /**
     * Returns the set of navigation links for the Street View panorama.
     */
    getLinks(): (google.maps.StreetViewLink | null)[] | null;
    /**
     * Returns the StreetViewLocation of the current panorama.
     */
    getLocation(): google.maps.StreetViewLocation;
    /**
     * Returns the state of motion tracker. If <code>true</code> when the user physically moves the device and the browser supports it, the Street View Panorama tracks the physical movements.
     */
    getMotionTracking(): boolean;
    /**
     * Returns the current panorama ID for the Street View panorama. This id is stable within the browser&#39;s current session only.
     */
    getPano(): string;
    /**
     * Returns the heading and pitch of the photographer when this panorama was taken. For Street View panoramas on the road, this also reveals in which direction the car was travelling. This data is available after the <code>pano_changed</code> event.
     */
    getPhotographerPov(): google.maps.StreetViewPov;
    /**
     * Returns the current <code>LatLng</code> position for the Street View panorama.
     */
    getPosition(): google.maps.LatLng | null;
    /**
     * Returns the current point of view for the Street View panorama.
     */
    getPov(): google.maps.StreetViewPov;
    /**
     * Returns the status of the panorama on completion of the <code>setPosition()</code> or <code>setPano()</code> request.
     */
    getStatus(): google.maps.StreetViewStatusString;
    /**
     * Returns <code>true</code> if the panorama is visible. It does not specify whether Street View imagery is available at the specified position.
     */
    getVisible(): boolean;
    /**
     * Returns the zoom level of the panorama. Fully zoomed-out is level 0, where the field of view is 180 degrees. Zooming in increases the zoom level.
     */
    getZoom(): number;
    /**
     * Set the custom panorama provider called on pano change to load custom panoramas.
     */
    registerPanoProvider(provider: (arg0: string) => (google.maps.StreetViewPanoramaData | null), opt_options?: google.maps.PanoProviderOptions): void;
    /**
     * Sets the set of navigation links for the Street View panorama.
     */
    setLinks(links: google.maps.StreetViewLink[]): void;
    /**
     * Sets the state of motion tracker. If <code>true</code> when the user physically moves the device and the browser supports it, the Street View Panorama tracks the physical movements.
     */
    setMotionTracking(motionTracking: boolean): void;
    /**
     * Sets a collection of key-value pairs.
     */
    setOptions(options: google.maps.StreetViewPanoramaOptions | null): void;
    /**
     * Sets the current panorama ID for the Street View panorama.
     */
    setPano(pano: string): void;
    /**
     * Sets the current <code>LatLng</code> position for the Street View panorama.
     */
    setPosition(latLng: google.maps.LatLng | google.maps.LatLngLiteral | null): void;
    /**
     * Sets the point of view for the Street View panorama.
     */
    setPov(pov: google.maps.StreetViewPov): void;
    /**
     * Sets to <code>true</code> to make the panorama visible. If set to <code>false</code>, the panorama will be hidden whether it is embedded in the map or in its own <code>&lt;div&gt;</code>.
     */
    setVisible(flag: boolean): void;
    /**
     * Sets the zoom level of the panorama. Fully zoomed-out is level 0, where the field of view is 180 degrees. Zooming in increases the zoom level.
     */
    setZoom(zoom: number): void;
  }
  /**
   * The display options for the Camera control.
   */
  export interface CameraControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_START_BLOCK_END}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options for the rendering of the fullscreen control.
   */
  export interface FullscreenControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_END_BLOCK_START}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options for the rendering of the rotate control.
   */
  export interface RotateControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_END_BLOCK_END}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * A restriction that can be applied to the Map. The map&#39;s viewport will not exceed these restrictions.
   */
  export interface MapRestriction {
    /**
     * When set, a user can only pan and zoom inside the given bounds. Bounds can restrict both longitude and latitude, or can restrict latitude only. For latitude-only bounds use west and east longitudes of -180 and 180, respectively, for example, <code>latLngBounds: {north: northLat, south: southLat, west: -180, east: 180}</code>.
     */
    latLngBounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * Bounds can be made more restrictive by setting the <code>strictBounds</code> flag to <code>true</code>. This reduces how far a user can zoom out, ensuring that everything outside of the restricted bounds stays hidden. The default is <code>false</code>, meaning that a user can zoom out until the entire bounded area is in view, possibly including areas outside the bounded area.
     */
    strictBounds?: boolean;
  }
  /**
   * Options for the rendering of the map type control.
   */
  export interface MapTypeControlOptions {
    /**
     * IDs of map types to show in the control.
     */
    mapTypeIds?: (google.maps.MapTypeIdString | string)[] | null;
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.BLOCK_START_INLINE_START}
     */
    position?: google.maps.ControlPosition | null;
    /**
     * Style id. Used to select what style of map type control to display.
     */
    style?: google.maps.MapTypeControlStyle | null;
  }
  /**
   *
   * Access by calling `const {RenderingType} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RenderingType {
    /**
     * Indicates that the map is a raster map.
     */
    RASTER = 'RASTER',
    /**
     * Indicates that it is unknown yet whether the map is vector or raster, because the map has not finished initializing yet.
     */
    UNINITIALIZED = 'UNINITIALIZED',
    /**
     * Indicates that the map is a vector map.
     */
    VECTOR = 'VECTOR',
  }
  export type RenderingTypeString = `${google.maps.RenderingType}`;
  /**
   * Options for the rendering of the scale control.
   */
  export interface ScaleControlOptions {
    /**
     * Style id. Used to select what style of scale control to display.
     */
    style?: google.maps.ScaleControlStyle | null;
  }
  /**
   * Options for the rendering of the Street View pegman control on the map.
   */
  export interface StreetViewControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map. The default position is embedded within the navigation (zoom and pan) controls. If this position is empty or the same as that specified in the <code>zoomControlOptions</code> or <code>panControlOptions</code>, the Street View control will be displayed as part of the navigation controls. Otherwise, it will be displayed separately.
     */
    position?: google.maps.ControlPosition | null;
    /**
     * Specifies the sources of panoramas to search. This allows a restriction to search for just official Google panoramas for example. Setting multiple sources will be evaluated as the intersection of those sources. Note: the {@link google.maps.StreetViewSource.OUTDOOR} source is not supported at this time.
     * @defaultValue [{@link google.maps.StreetViewSource.DEFAULT}]
     */
    sources?: Iterable<google.maps.StreetViewSourceString> | null;
  }
  /**
   * MapOptions object used to define the properties that can be set on a Map.
   */
  export interface MapOptions {
    /**
     * Color used for the background of the Map div. This color will be visible when tiles have not yet loaded as the user pans. This option can only be set when the map is initialized.
     */
    backgroundColor?: string | null;
    /**
     * The enabled/disabled state of the Camera control.
     */
    cameraControl?: boolean | null;
    /**
     * The display options for the Camera control.
     */
    cameraControlOptions?: google.maps.CameraControlOptions | null;
    /**
     * The initial Map center.
     */
    center?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * When <code>false</code>, map icons are not clickable. A map icon represents a point of interest, also known as a POI.
     * @defaultValue <code>true</code>
     */
    clickableIcons?: boolean | null;
    /**
     * The initial Map color scheme. This option can only be set when the map is initialized.
     * @defaultValue {@link google.maps.ColorScheme.LIGHT}
     */
    colorScheme?: google.maps.ColorSchemeString | string | null;
    /**
     * Size in pixels of the controls appearing on the map. This value must be supplied directly when creating the Map, updating this value later may bring the controls into an <code>undefined</code> state. Only governs the controls made by the Maps API itself. Does not scale developer created custom controls.
     */
    controlSize?: number | null;
    /**
     * Enables/disables all default UI buttons. May be overridden individually. Does not disable the keyboard controls, which are separately controlled by the {@link google.maps.MapOptions.keyboardShortcuts} option. Does not disable gesture controls, which are separately controlled by the {@link google.maps.MapOptions.gestureHandling} option.
     */
    disableDefaultUI?: boolean | null;
    /**
     * Enables/disables zoom and center on double click. Enabled by default. <p><strong>Note</strong>: This property is <strong>not recommended</strong>. To disable zooming on double click, you can use the <code>gestureHandling</code> property, and set it to <code>"none"</code>.
     */
    disableDoubleClickZoom?: boolean | null;
    /**
     * The name or url of the cursor to display when mousing over a draggable map. This property uses the css <code>cursor</code> attribute to change the icon. As with the css property, you must specify at least one fallback cursor that is not a URL. For example: <code>draggableCursor: 'url(<a href="http://www.example.com/icon.png">http://www.example.com/icon.png</a>), auto;'</code>.
     */
    draggableCursor?: string | null;
    /**
     * The name or url of the cursor to display when the map is being dragged. This property uses the css <code>cursor</code> attribute to change the icon. As with the css property, you must specify at least one fallback cursor that is not a URL. For example: <code>draggingCursor: 'url(<a href="http://www.example.com/icon.png">http://www.example.com/icon.png</a>), auto;'</code>.
     */
    draggingCursor?: string | null;
    /**
     * The enabled/disabled state of the Fullscreen control.
     */
    fullscreenControl?: boolean | null;
    /**
     * The display options for the Fullscreen control.
     */
    fullscreenControlOptions?: google.maps.FullscreenControlOptions | null;
    /**
     * This setting controls how the API handles gestures on the map. Allowed values: <ul> <li> <code>"cooperative"</code>: Scroll events and one-finger touch gestures scroll the page, and do not zoom or pan the map. Two-finger touch gestures pan and zoom the map. Scroll events with a ctrl key or ⌘ key pressed zoom the map.<br> In this mode the map <em>cooperates</em> with the page. <li> <code>"greedy"</code>: All touch gestures and scroll events pan or zoom the map. <li> <code>"none"</code>: The map cannot be panned or zoomed by user gestures. <li> <code>"auto"</code>: (default) Gesture handling is either cooperative or greedy, depending on whether the page is scrollable or in an iframe. </ul>
     */
    gestureHandling?: string | null;
    /**
     * The heading for aerial imagery in degrees measured clockwise from cardinal direction North. Headings are snapped to the nearest available angle for which imagery is available.
     */
    heading?: number | null;
    /**
     * Whether the map should allow user control of the camera heading (rotation). This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     * @defaultValue <code>false</code>
     */
    headingInteractionEnabled?: boolean | null;
    /**
     * Adds a usage attribution ID to the initializer, which helps Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library. To opt out of sending the usage attribution ID, it is safe to delete this property or replace the value with an empty string. Only unique values will be sent. Changes to this value after instantiation may be ignored.
     * @defaultValue <code>null</code>
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * Whether the map should allow fractional zoom levels. Listen to <code>isfractionalzoomenabled_changed</code> to know when the default has been set.
     * @defaultValue <code>true</code> for vector maps and <code>false</code> for raster maps
     */
    isFractionalZoomEnabled?: boolean | null;
    /**
     * If <code>false</code>, prevents the map from being controlled by the keyboard. Keyboard shortcuts are enabled by default.
     */
    keyboardShortcuts?: boolean | null;
    /**
     * The <a href="https://developers.google.com/maps/documentation/get-map-id">map ID</a> of the map. This parameter cannot be set or changed after a map is instantiated. {@link google.maps.Map.DEMO_MAP_ID} can be used to try out features that require a map ID but which do not require cloud enablement.
     */
    mapId?: string | null;
    /**
     * The initial enabled/disabled state of the Map type control.
     */
    mapTypeControl?: boolean | null;
    /**
     * The initial display options for the Map type control.
     */
    mapTypeControlOptions?: google.maps.MapTypeControlOptions | null;
    /**
     * The initial Map mapTypeId. Defaults to <code>ROADMAP</code>.
     */
    mapTypeId?: google.maps.MapTypeIdString | string | null;
    /**
     * The maximum zoom level which will be displayed on the map. If omitted, or set to <code>null</code>, the maximum zoom from the current map type is used instead. Valid zoom values are numbers from zero up to the supported <a href="https://developers.google.com/maps/documentation/javascript/maxzoom">maximum zoom level</a>.
     */
    maxZoom?: number | null;
    /**
     * The minimum zoom level which will be displayed on the map. If omitted, or set to <code>null</code>, the minimum zoom from the current map type is used instead. Valid zoom values are numbers from zero up to the supported <a href="https://developers.google.com/maps/documentation/javascript/maxzoom">maximum zoom level</a>.
     */
    minZoom?: number | null;
    /**
     * If <code>true</code>, do not clear the contents of the Map div.
     */
    noClear?: boolean | null;
    /**
     * Whether the map should be a raster or vector map. This parameter cannot be set or changed after a map is instantiated. If not set, then the cloud configuration for the map ID will determine the rendering type (if available). Please note that vector maps may not be available for all devices and browsers and the map will fall back to a raster map as needed.
     * @defaultValue {@link google.maps.RenderingType.RASTER}
     */
    renderingType?: google.maps.RenderingTypeString | null;
    /**
     * Defines a boundary that restricts the area of the map accessible to users. When set, a user can only pan and zoom while the camera view stays inside the limits of the boundary.
     */
    restriction?: google.maps.MapRestriction | null;
    /**
     * The enabled/disabled state of the Rotate control.
     */
    rotateControl?: boolean | null;
    /**
     * The display options for the Rotate control.
     */
    rotateControlOptions?: google.maps.RotateControlOptions | null;
    /**
     * The initial enabled/disabled state of the Scale control.
     */
    scaleControl?: boolean | null;
    /**
     * The initial display options for the Scale control.
     */
    scaleControlOptions?: google.maps.ScaleControlOptions | null;
    /**
     * If <code>false</code>, disables zooming on the map using a mouse scroll wheel. The scrollwheel is enabled by default. <p><strong>Note</strong>: This property is <strong>not recommended</strong>. To disable zooming using scrollwheel, you can use the <code>gestureHandling</code> property, and set it to either <code>"cooperative"</code> or <code>"none"</code>.
     */
    scrollwheel?: boolean | null;
    /**
     * A <code>StreetViewPanorama</code> to display when the Street View pegman is dropped on the map. If no panorama is specified, a default <code>StreetViewPanorama</code> will be displayed in the map&#39;s <code>div</code> when the pegman is dropped.
     */
    streetView?: google.maps.StreetViewPanorama | null;
    /**
     * The initial enabled/disabled state of the Street View Pegman control. This control is part of the default UI, and should be set to <code>false</code> when displaying a map type on which the Street View road overlay should not appear (e.g. a non-Earth map type).
     */
    streetViewControl?: boolean | null;
    /**
     * The initial display options for the Street View Pegman control.
     */
    streetViewControlOptions?: google.maps.StreetViewControlOptions | null;
    /**
     * Styles to apply to each of the default map types. Note that for <code>satellite</code>/<code>hybrid</code> and <code>terrain</code> modes, these styles will only apply to labels and geometry. This feature is not available when using a map ID, or when using vector maps (use <a href="https://developers.google.com/maps/documentation/cloud-customization">cloud-based maps styling</a> instead).
     */
    styles?: google.maps.MapTypeStyle[] | null;
    /**
     * For vector maps, sets the angle of incidence of the map. The allowed values are restricted depending on the zoom level of the map. For raster maps, controls the automatic switching behavior for the angle of incidence of the map. The only allowed values are <code>0</code> and <code>45</code>. The value <code>0</code> causes the map to always use a 0&deg; overhead view regardless of the zoom level and viewport. The value <code>45</code> causes the tilt angle to automatically switch to 45 whenever 45&deg; imagery is available for the current zoom level and viewport, and switch back to 0 whenever 45&deg; imagery is not available (this is the default behavior). 45&deg; imagery is only available for <code>satellite</code> and <code>hybrid</code> map types, within some locations, and at some zoom levels. <b>Note:</b> <code>getTilt</code> returns the current tilt angle, not the value specified by this option. Because <code>getTilt</code> and this option refer to different things, do not <code>bind()</code> the <code>tilt</code> property; doing so may yield unpredictable effects.
     */
    tilt?: number | null;
    /**
     * Whether the map should allow user control of the camera tilt. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     * @defaultValue <code>false</code>
     */
    tiltInteractionEnabled?: boolean | null;
    /**
     * The initial Map zoom level. Valid zoom values are numbers from zero up to the supported <a href="https://developers.google.com/maps/documentation/javascript/maxzoom">maximum zoom level</a>. Larger zoom values correspond to a higher resolution.
     */
    zoom?: number | null;
    /**
     * The enabled/disabled state of the Zoom control.
     */
    zoomControl?: boolean | null;
    /**
     * The display options for the Zoom control.
     */
    zoomControlOptions?: google.maps.ZoomControlOptions | null;
    /**
     * If <code>false</code>, prevents the map from being dragged and zoomed by mouse and touch gestures. Dragging is enabled by default.
     * @deprecated Deprecated in 2017. To disable dragging on the map, you can use the <code>gestureHandling</code> property, and set it to <code>"none"</code>.
     */
    draggable?: boolean | null;
    /**
     * The enabled/disabled state of the Pan control. <p>
     * @deprecated The Pan control is deprecated as of September 2015.
     */
    panControl?: boolean | null;
    /**
     * The display options for the Pan control. <p>
     * @deprecated The Pan control is deprecated as of September 2015.
     */
    panControlOptions?: google.maps.PanControlOptions | null;
  }
  /**
   * A registry for MapType instances, keyed by MapType id.
   * Access by calling `const {MapTypeRegistry} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MapTypeRegistry extends google.maps.MVCObject {
    /**
     * The <code>MapTypeRegistry</code> holds the collection of custom map types available to the map for its use. The API consults this registry when providing the list of available map types within controls, for example.
     */
    constructor();
    /**
     * Sets the registry to associate the passed string identifier with the passed MapType.
     */
    set(id: string, mapType: google.maps.MapType | unknown): void;
  }
  /**
   * This object is sent in an event when a user clicks on an icon on the map. The place ID of this place is stored in the placeId member. To prevent the default info window from showing up, call the stop() method on this event to prevent it being propagated. Learn more about <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">place IDs</a> in the Places API developer guide.
   */
  export interface IconMouseEvent extends google.maps.MapMouseEvent {
    /**
     * The place ID of the place that was clicked. This place ID can be used to query more information about the feature that was clicked. <p> Learn more about <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">place IDs</a> in the Places API developer guide.
     */
    placeId: string | null;
  }
  /**
   * These options specify the way the style of a <code>Feature</code> should be modified on a map.
   */
  export interface FeatureStyleOptions {
    /**
     * Hex RGB string (like &quot;#00FF00&quot; for green). Only applies to polygon geometries.
     */
    fillColor?: string;
    /**
     * The fill opacity between 0.0 and 1.0. Only applies to polygon geometries.
     */
    fillOpacity?: number;
    /**
     * Hex RGB string (like &quot;#00FF00&quot; for green).
     */
    strokeColor?: string;
    /**
     * The stroke opacity between 0.0 and 1.0. Only applies to line and polygon geometries.
     */
    strokeOpacity?: number;
    /**
     * The stroke width in pixels. Only applies to line and polygon geometries.
     */
    strokeWeight?: number;
  }
  /**
   * Access by calling `const {Map} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Map extends google.maps.MVCObject {
    /**
     * Creates a new map inside of the given HTML container, which is typically a <code>DIV</code> element.
     * @param mapDiv The map will render to fill this element.
     * @param opts Options
     */
    constructor(mapDiv: HTMLElement, opts?: google.maps.MapOptions);
    /**
     * Additional controls to attach to the map. To add a control to the map, add the control&#39;s <code>&lt;div&gt;</code> to the <code>MVCArray</code> corresponding to the <code>ControlPosition</code> where it should be rendered.
     */
    controls: google.maps.MVCArray<HTMLElement>[];
    /**
     * An instance of <code>Data</code>, bound to the map. Add features to this <code>Data</code> object to conveniently display them on this map.
     */
    data: google.maps.Data;
    /**
     * A registry of <code>MapType</code> instances by string ID.
     */
    mapTypes: google.maps.MapTypeRegistry;
    /**
     * Additional map types to overlay. Overlay map types will display on top of the base map they are attached to, in the order in which they appear in the <code>overlayMapTypes</code> array (overlays with higher index values are displayed in front of overlays with lower index values).
     */
    overlayMapTypes: google.maps.MVCArray<google.maps.MapType | null>;
    /**
     * Sets the viewport to contain the given bounds.</br> <strong>Note:</strong> When the map is set to <code>display: none</code>, the <code>fitBounds</code> function reads the map&#39;s size as 0x0, and therefore does not do anything. To change the viewport while the map is hidden, set the map to <code>visibility: hidden</code>, thereby ensuring the map div has an actual size. For vector maps, this method sets the map&#39;s tilt and heading to their default zero values. Calling this method may cause a smooth animation as the map pans and zooms to fit the bounds. Whether or not this method animates depends on an internal heuristic.
     */
    fitBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void;
    /**
     * Returns the lat/lng bounds of the current viewport. If more than one copy of the world is visible, the bounds range in longitude from -180 to 180 degrees inclusive. If the map is not yet initialized or center and zoom have not been set then the result is <code>undefined</code>. For vector maps with non-zero tilt or heading, the returned lat/lng bounds represents the smallest bounding box that includes the visible region of the map&#39;s viewport. See {@link google.maps.MapCanvasProjection.getVisibleRegion} for getting the exact visible region of the map&#39;s viewport.
     */
    getBounds(): google.maps.LatLngBounds | undefined;
    /**
     * Returns the position displayed at the center of the map. Note that this {@link google.maps.LatLng} object is <em>not</em> wrapped. See <code><a href="#LatLng">LatLng</a></code> for more information. If the center or bounds have not been set then the result is <code>undefined</code>.
     */
    getCenter(): google.maps.LatLng | undefined;
    /**
     * Returns the clickability of the map icons. A map icon represents a point of interest, also known as a POI. If the returned value is <code>true</code>, then the icons are clickable on the map.
     */
    getClickableIcons(): boolean | undefined;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Returns the <code>FeatureLayer</code> for the specified <code>datasetId</code>. Dataset IDs must be configured in the Google Cloud Console. If the dataset ID is not associated with the map&#39;s map style, or if Data-driven styling is not available (no map ID, no vector tiles, no Data-Driven Styling feature layers or Datasets configured in the Map Style), this logs an error, and the resulting <code>FeatureLayer.isAvailable</code> will be false.
     */
    getDatasetFeatureLayer(datasetId: string): google.maps.FeatureLayer;

    getDiv(): HTMLElement;
    /**
     * Returns the <code>FeatureLayer</code> of the specific <code>FeatureType</code>. A <code>FeatureLayer</code> must be enabled in the Google Cloud Console. If a <code>FeatureLayer</code> of the specified <code>FeatureType</code> does not exist on this map, or if Data-driven styling is not available (no map ID, no vector tiles, and no <code>FeatureLayer</code> enabled in the map style), this logs an error, and the resulting <code>FeatureLayer.isAvailable</code> will be false.
     */
    getFeatureLayer(featureType: google.maps.FeatureTypeString): google.maps.FeatureLayer;
    /**
     * Returns the compass heading of the map. The heading value is measured in degrees (clockwise) from cardinal direction North. If the map is not yet initialized then the result is <code>undefined</code>.
     */
    getHeading(): number | undefined;
    /**
     * Returns whether heading interactions are enabled. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     */
    getHeadingInteractionEnabled(): boolean | null;
    /**
     * Returns the list of usage attribution IDs, which help Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library.
     */
    getInternalUsageAttributionIds(): Iterable<string> | null;
    /**
     * Informs the caller of the current capabilities available to the map based on the map ID that was provided.
     */
    getMapCapabilities(): google.maps.MapCapabilities;

    getMapTypeId(): google.maps.MapTypeIdString | string | undefined;
    /**
     * Returns the current <code>Projection</code>. If the map is not yet initialized then the result is <code>undefined</code>. Listen to the <code>projection_changed</code> event and check its value to ensure it is not <code>undefined</code>.
     */
    getProjection(): google.maps.Projection | undefined;
    /**
     * Returns the current RenderingType of the map.
     */
    getRenderingType(): google.maps.RenderingTypeString;
    /**
     * Returns the default <code>StreetViewPanorama</code> bound to the map, which may be a default panorama embedded within the map, or the panorama set using <code>setStreetView()</code>. Changes to the map&#39;s <code>streetViewControl</code> will be reflected in the display of such a bound panorama.
     */
    getStreetView(): google.maps.StreetViewPanorama;
    /**
     * Returns the current angle of incidence of the map, in degrees from the viewport plane to the map plane. For raster maps, the result will be <code>0</code> for imagery taken directly overhead or <code>45</code> for 45&deg; imagery. This method does not return the value set by <code>setTilt</code>. See <code>setTilt</code> for details.
     */
    getTilt(): number | undefined;
    /**
     * Returns whether tilt interactions are enabled. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     */
    getTiltInteractionEnabled(): boolean | null;
    /**
     * Returns the zoom of the map. If the zoom has not been set then the result is <code>undefined</code>.
     */
    getZoom(): number | undefined;
    /**
     * Immediately sets the map&#39;s camera to the target camera options, without animation.
     */
    moveCamera(cameraOptions: google.maps.CameraOptions): void;
    /**
     * Changes the center of the map by the given distance in pixels. If the distance is less than both the width and height of the map, the transition will be smoothly animated. Note that the map coordinate system increases from west to east (for x values) and north to south (for y values).
     */
    panBy(x: number, y: number): void;
    /**
     * Changes the center of the map to the given <code>LatLng</code>. If the change is less than both the width and height of the map, the transition will be smoothly animated.
     */
    panTo(latLng: google.maps.LatLng | google.maps.LatLngLiteral): void;
    /**
     * Pans the map by the minimum amount necessary to contain the given <code>LatLngBounds</code>. It makes no guarantee where on the map the bounds will be, except that the map will be panned to show as much of the bounds as possible inside <code>{currentMapSizeInPx} - {padding}</code>. For both raster and vector maps, the map&#39;s zoom, tilt, and heading will not be changed.
     */
    panToBounds(latLngBounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void;

    setCenter(latlng: google.maps.LatLng | google.maps.LatLngLiteral): void;
    /**
     * Controls whether the map icons are clickable or not. A map icon represents a point of interest, also known as a POI. To disable the clickability of map icons, pass a value of <code>false</code> to this method.
     */
    setClickableIcons(value: boolean): void;
    /**
     * Sets the compass heading for map measured in degrees from cardinal direction North. For raster maps, this method only applies to aerial imagery.
     */
    setHeading(heading: number): void;
    /**
     * Sets whether heading interactions are enabled. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     */
    setHeadingInteractionEnabled(headingInteractionEnabled: boolean): void;

    setMapTypeId(mapTypeId: google.maps.MapTypeIdString | string): void;

    setOptions(options: google.maps.MapOptions | null): void;
    /**
     * Sets the current RenderingType of the map.
     */
    setRenderingType(renderingType: google.maps.RenderingTypeString): void;
    /**
     * Binds a <code>StreetViewPanorama</code> to the map. This panorama overrides the default <code>StreetViewPanorama</code>, allowing the map to bind to an external panorama outside of the map. Setting the panorama to <code>null</code> binds the default embedded panorama back to the map.
     */
    setStreetView(panorama: google.maps.StreetViewPanorama | null): void;
    /**
     * For vector maps, sets the angle of incidence of the map. The allowed values are restricted depending on the zoom level of the map. <br><br> For raster maps, controls the automatic switching behavior for the angle of incidence of the map. The only allowed values are <code>0</code> and <code>45</code>. <code>setTilt(0)</code> causes the map to always use a 0&deg; overhead view regardless of the zoom level and viewport. <code>setTilt(45)</code> causes the tilt angle to automatically switch to 45 whenever 45&deg; imagery is available for the current zoom level and viewport, and switch back to 0 whenever 45&deg; imagery is not available (this is the default behavior). 45&deg; imagery is only available for <code>satellite</code> and <code>hybrid</code> map types, within some locations, and at some zoom levels. <b>Note:</b> <code>getTilt</code> returns the current tilt angle, not the value set by <code>setTilt</code>. Because <code>getTilt</code> and <code>setTilt</code> refer to different things, do not <code>bind()</code> the <code>tilt</code> property; doing so may yield unpredictable effects.
     */
    setTilt(tilt: number): void;
    /**
     * Sets whether tilt interactions are enabled. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     */
    setTiltInteractionEnabled(tiltInteractionEnabled: boolean): void;
    /**
     * Sets the zoom of the map.
     */
    setZoom(zoom: number): void;
    /**
     * Map ID which can be used for code samples which require a map ID. This map ID is not intended for use in production applications and cannot be used for features which require cloud configuration (such as Cloud Styling).
     */
    static readonly DEMO_MAP_ID: string;
  }
  /**
   * This event is created from monitoring zoom change.
   * Access by calling `const {ZoomChangeEvent} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ZoomChangeEvent extends Event {
  }
  /**
   * MapElement is an <code>HTMLElement</code> subclass for rendering maps. After loading the <code>maps</code> library, a map can be created in HTML. For example: <pre><code>&lt;gmp-map center=&quot;37.4220656,-122.0840897&quot; zoom=&quot;10&quot; map-id=&quot;DEMO_MAP_ID&quot;&gt;<br>&nbsp;&nbsp;&lt;button slot=&quot;control-block-start-inline-end&quot;&gt;Custom Control&lt;/button&gt;<br>&lt;/gmp-map&gt;</code></pre> <br> Internally, it uses {@link google.maps.Map}, which can be accessed with the {@link google.maps.MapElement.innerMap} property.
   * Access by calling `const {MapElement} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MapElement extends HTMLElement implements google.maps.MapElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.MapElementOptions);
    /**
     * The center latitude/longitude of the map.
     */
    center: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * Whether the map should allow user control of the camera heading (rotation). This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     * @defaultValue <code>false</code>
     */
    headingInteractionDisabled: boolean | null;
    /**
     * A reference to the {@link google.maps.Map} that the MapElement uses internally.
     */
    innerMap: google.maps.Map;
    /**
     * Adds a usage attribution ID to the initializer, which helps Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library. To opt out of sending the usage attribution ID, it is safe to delete this property or replace the value with an empty string. Only unique values will be sent. Changes to this value after instantiation may be ignored.
     * @defaultValue <code>null</code>
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Adds a usage attribution ID to the initializer, which helps Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library. To opt out of sending the usage attribution ID, it is safe to delete this property or replace the value with an empty string. Only unique values will be sent. Changes to this value after instantiation may be ignored.
     * @defaultValue <code>null</code>
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * The <a href="https://developers.google.com/maps/documentation/get-map-id">map ID</a> of the map. This parameter cannot be set or changed after a map is instantiated. {@link google.maps.Map.DEMO_MAP_ID} can be used to try out features that require a map ID but which do not require cloud enablement.
     */
    mapId: string | null;
    /**
     * Whether the map should be a raster or vector map. This parameter cannot be set or changed after a map is instantiated. If not set, then the cloud configuration for the map ID will determine the rendering type (if available). Please note that vector maps may not be available for all devices and browsers and the map will fall back to a raster map as needed.
     * @defaultValue {@link google.maps.RenderingType.VECTOR}
     */
    renderingType: google.maps.RenderingTypeString | null;
    /**
     * Whether the map should allow user control of the camera tilt. This option is only in effect when the map is a vector map. If not set in code, then the cloud configuration for the map ID will be used (if available).
     * @defaultValue <code>false</code>
     */
    tiltInteractionDisabled: boolean | null;
    /**
     * The zoom level of the map. Valid zoom values are numbers from zero up to the supported <a href="https://developers.google.com/maps/documentation/javascript/maxzoom">maximum zoom level</a>. Larger zoom values correspond to a higher resolution.
     */
    zoom: number | null;
    addEventListener<K extends keyof MapElementEventMap>(type: K, listener: (this: MapElement, ev: MapElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface MapElementEventMap extends HTMLElementEventMap {
    "gmp-zoomchange": google.maps.ZoomChangeEvent;
  }
  /**
   * Animations that can be played on a marker. Use the {@link google.maps.Marker.setAnimation} method on Marker or the {@link google.maps.MarkerOptions.animation} option to play an animation.
   *
   * Access by calling `const {Animation} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Animation {
    /**
     * Marker bounces until animation is stopped by calling {@link google.maps.Marker.setAnimation} with <code>null</code>.
     */
    BOUNCE = 1,
    /**
     * Marker drops from the top of the map to its final location. Animation will cease once the marker comes to rest and {@link google.maps.Marker.getAnimation} will return <code>null</code>. This type of animation is usually specified during creation of the marker.
     */
    DROP = 2,
  }
  /**
   * A service for obtaining the highest zoom level at which satellite imagery is available for a given location.
   * Access by calling `const {MaxZoomService} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MaxZoomService {
    /**
     * Creates a new instance of a <code>MaxZoomService</code> that can be used to send queries about the maximum zoom level available for satellite imagery.
     */
    constructor();
    /**
     * Returns the maximum zoom level for which detailed imagery is available at a particular <code>LatLng</code> for the <code>satellite</code> map type. As this request is asynchronous, you must pass a <code>callback</code> function which will be executed upon completion of the request, being passed a <code>MaxZoomResult</code>.
     */
    getMaxZoomAtLatLng(latlng: google.maps.LatLng | google.maps.LatLngLiteral, callback?: ((arg0: google.maps.MaxZoomResult) => void)): Promise<google.maps.MaxZoomResult>;
  }
  /**
   * The status returned by the <code>MaxZoomService</code> on the completion of a call to <code>getMaxZoomAtLatLng()</code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.MaxZoomStatus.OK</code>.
   *
   * Access by calling `const {MaxZoomStatus} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MaxZoomStatus {
    /**
     * An unknown error occurred.
     */
    ERROR = 'ERROR',
    /**
     * The response contains a valid <code>MaxZoomResult</code>.
     */
    OK = 'OK',
  }
  export type MaxZoomStatusString = `${google.maps.MaxZoomStatus}`;
  /**
   * This object is returned from a mouse event on a <code>FeatureLayer</code>.
   */
  export interface FeatureMouseEvent extends google.maps.MapMouseEvent {
    /**
     * The <code>Feature</code>s at this mouse event.
     */
    features: google.maps.Feature[];
  }
  /**
   * You can implement this class if you want to display custom types of overlay objects on the map. <br><br>Inherit from this class by setting your overlay&#39;s prototype: <code>MyOverlay.prototype = new google.maps.OverlayView();</code>. The <code>OverlayView</code> constructor is guaranteed to be an empty function. <br><br>You must implement three methods: <code>onAdd()</code>, <code>draw()</code>, and <code>onRemove()</code>. <ul> <li>In the <code>onAdd()</code> method, you should create DOM objects and append them as children of the panes.</li> <li>In the <code>draw()</code> method, you should position these elements.</li> <li>In the <code>onRemove()</code> method, you should remove the objects from the DOM.</li> </ul> You must call <code>setMap()</code> with a valid <code>Map</code> object to trigger the call to the <code>onAdd()</code> method and <code>setMap(null)</code> in order to trigger the <code>onRemove()</code> method. The <code>setMap()</code> method can be called at the time of construction or at any point afterward when the overlay should be re-shown after removing. The <code>draw()</code> method will then be called whenever a map property changes that could change the position of the element, such as zoom, center, or map type.
   * Access by calling `const {OverlayView} = await google.maps.importLibrary("maps");` or `const {OverlayView} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class OverlayView extends google.maps.MVCObject {
    /**
     * Creates an <code>OverlayView</code>.
     */
    constructor();
    /**
     * Stops click, tap, drag, and wheel events on the element from bubbling up to the map. Use this to prevent map dragging and zooming, as well as map &quot;click&quot; events.
     */
    static preventMapHitsAndGesturesFrom(element: Element): void;
    /**
     * Stops click or tap on the element from bubbling up to the map. Use this to prevent the map from triggering &quot;click&quot; events.
     */
    static preventMapHitsFrom(element: Element): void;
    /**
     * Implement this method to draw or update the overlay. Use the position from projection.fromLatLngToDivPixel() to correctly position the overlay relative to the MapPanes. This method is called after onAdd(), and is called on change of zoom or center. It is not recommended to do computationally expensive work in this method.
     */
    draw(): void;

    getMap(): google.maps.Map | google.maps.StreetViewPanorama;
    /**
     * Returns the panes in which this OverlayView can be rendered. The panes are not initialized until <code>onAdd</code> is called by the API.
     */
    getPanes(): google.maps.MapPanes | null;
    /**
     * Returns the <code>MapCanvasProjection</code> object associated with this <code>OverlayView</code>. The projection is not initialized until <code>onAdd</code> is called by the API.
     */
    getProjection(): google.maps.MapCanvasProjection;
    /**
     * Implement this method to initialize the overlay DOM elements. This method is called once after setMap() is called with a valid map. At this point, panes and projection will have been initialized.
     */
    onAdd(): void;
    /**
     * Implement this method to remove your elements from the DOM. This method is called once following a call to setMap(null).
     */
    onRemove(): void;
    /**
     * Adds the overlay to the map or panorama.
     */
    setMap(map: google.maps.Map | google.maps.StreetViewPanorama | null): void;
  }
  /**
   * A polygon (like a polyline) defines a series of connected coordinates in an ordered sequence. Additionally, polygons form a closed loop and define a filled region. See the samples in the developer&#39;s guide, starting with a <a href="https://developers.google.com/maps/documentation/javascript/examples/polygon-simple">simple polygon</a>, a <a href="https://developers.google.com/maps/documentation/javascript/examples/polygon-hole">polygon with a hole</a>, and more. Note that you can also use the <a href="https://developers.google.com/maps/documentation/javascript/reference/data#Data.Polygon">Data layer</a> to create a polygon. The Data layer offers a simpler way of creating holes because it handles the order of the inner and outer paths for you.
   * Access by calling `const {Polygon} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polygon extends google.maps.MVCObject {
    /**
     * Create a polygon using the passed <code><em><a href="#PolygonOptions">PolygonOptions</a></em></code>, which specify the polygon&#39;s path, the stroke style for the polygon&#39;s edges, and the fill style for the polygon&#39;s interior regions. A polygon may contain one or more paths, where each path consists of an array of <code>LatLng</code>s. You may pass either an array of LatLngs or an <code><a href="#MVCArray">MVCArray</a></code> of <code>LatLng</code>s when constructing these paths. Arrays are converted to <code>MVCArray</code>s within the polygon upon instantiation.
     * @param opts
     */
    constructor(opts?: google.maps.PolygonOptions | null);
    /**
     * Returns whether this shape can be dragged by the user.
     */
    getDraggable(): boolean;
    /**
     * Returns whether this shape can be edited by the user.
     */
    getEditable(): boolean;
    /**
     * Returns the map on which this shape is attached.
     */
    getMap(): google.maps.Map | null;
    /**
     * Retrieves the first path.
     */
    getPath(): google.maps.MVCArray<google.maps.LatLng>;
    /**
     * Retrieves the paths for this polygon.
     */
    getPaths(): google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>>;
    /**
     * Returns whether this poly is visible on the map.
     */
    getVisible(): boolean;
    /**
     * If set to <code>true</code>, the user can drag this shape over the map. The <code>geodesic</code> property defines the mode of dragging.
     */
    setDraggable(draggable: boolean): void;
    /**
     * If set to <code>true</code>, the user can edit this shape by dragging the control points shown at the vertices and on each segment.
     */
    setEditable(editable: boolean): void;
    /**
     * Renders this shape on the specified map. If map is set to <code>null</code>, the shape will be removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.PolygonOptions | null): void;
    /**
     * Sets the first path. See <em><code><a href="#PolygonOptions">PolygonOptions</a></code></em> for more details.
     */
    setPath(path: google.maps.MVCArray<google.maps.LatLng> | (google.maps.LatLng | google.maps.LatLngLiteral)[]): void;
    /**
     * Sets the path for this polygon.
     */
    setPaths(paths: google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>> | google.maps.MVCArray<google.maps.LatLng> | (google.maps.LatLng | google.maps.LatLngLiteral)[][] | (google.maps.LatLng | google.maps.LatLngLiteral)[]): void;
    /**
     * Hides this poly if set to <code>false</code>.
     */
    setVisible(visible: boolean): void;
  }
  /**
   * A polyline is a linear overlay of connected line segments on the map.
   * Access by calling `const {Polyline} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polyline extends google.maps.MVCObject {
    /**
     * Create a polyline using the passed <code><em><a href="#PolylineOptions">PolylineOptions</a></em></code>, which specify both the path of the polyline and the stroke style to use when drawing the polyline. You may pass either an array of <code>LatLng</code>s or an <code><a href="#MVCArray">MVCArray</a></code> of <code>LatLng</code>s when constructing a polyline, though simple arrays are converted to <code>MVCArray</code>s within the polyline upon instantiation.
     * @param opts
     */
    constructor(opts?: google.maps.PolylineOptions | null);
    /**
     * Returns whether this shape can be dragged by the user.
     */
    getDraggable(): boolean;
    /**
     * Returns whether this shape can be edited by the user.
     */
    getEditable(): boolean;
    /**
     * Returns the map on which this shape is attached.
     */
    getMap(): google.maps.Map | null;
    /**
     * Retrieves the path.
     */
    getPath(): google.maps.MVCArray<google.maps.LatLng>;
    /**
     * Returns whether this poly is visible on the map.
     */
    getVisible(): boolean;
    /**
     * If set to <code>true</code>, the user can drag this shape over the map. The <code>geodesic</code> property defines the mode of dragging.
     */
    setDraggable(draggable: boolean): void;
    /**
     * If set to <code>true</code>, the user can edit this shape by dragging the control points shown at the vertices and on each segment.
     */
    setEditable(editable: boolean): void;
    /**
     * Renders this shape on the specified map. If map is set to <code>null</code>, the shape will be removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.PolylineOptions | null): void;
    /**
     * Sets the path. See <em><code><a href="#PolylineOptions">PolylineOptions</a></code></em> for more details.
     */
    setPath(path: google.maps.MVCArray<google.maps.LatLng> | (google.maps.LatLng | google.maps.LatLngLiteral)[]): void;
    /**
     * Hides this poly if set to <code>false</code>.
     */
    setVisible(visible: boolean): void;
  }
  /**
   * A rectangle overlay.
   * Access by calling `const {Rectangle} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Rectangle extends google.maps.MVCObject {
    /**
     * Create a rectangle using the passed <code><em><a href="#RectangleOptions">RectangleOptions</a></em></code>, which specify the bounds and style.
     * @param opts
     */
    constructor(opts?: google.maps.RectangleOptions | null);
    /**
     * Returns the bounds of this rectangle.
     */
    getBounds(): google.maps.LatLngBounds | null;
    /**
     * Returns whether this rectangle can be dragged by the user.
     */
    getDraggable(): boolean;
    /**
     * Returns whether this rectangle can be edited by the user.
     */
    getEditable(): boolean;
    /**
     * Returns the map on which this rectangle is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Returns whether this rectangle is visible on the map.
     */
    getVisible(): boolean;
    /**
     * Sets the bounds of this rectangle.
     */
    setBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null): void;
    /**
     * If set to <code>true</code>, the user can drag this rectangle over the map.
     */
    setDraggable(draggable: boolean): void;
    /**
     * If set to <code>true</code>, the user can edit this rectangle by dragging the control points shown at the corners and on each edge.
     */
    setEditable(editable: boolean): void;
    /**
     * Renders the rectangle on the specified map. If map is set to <code>null</code>, the rectangle will be removed.
     */
    setMap(map: google.maps.Map | null): void;

    setOptions(options: google.maps.RectangleOptions | null): void;
    /**
     * Hides this rectangle if set to <code>false</code>.
     */
    setVisible(visible: boolean): void;
  }
  /**
   * The possible positions of the stroke on a polygon.
   *
   * Access by calling `const {StrokePosition} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum StrokePosition {
    /**
     * The stroke is centered on the polygon&#39;s path, with half the stroke inside the polygon and half the stroke outside the polygon.
     */
    CENTER = 0,
    /**
     * The stroke lies inside the polygon.
     */
    INSIDE = 1,
    /**
     * The stroke lies outside the polygon.
     */
    OUTSIDE = 2,
  }
  /**
   * A layer that illustrates the locations where Street View is available.
   * Access by calling `const {StreetViewCoverageLayer} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StreetViewCoverageLayer extends google.maps.MVCObject {
    /**
     * Creates a new instance of <code>StreetViewCoverageLayer</code>.
     */
    constructor();
    /**
     * Returns the map on which this layer is displayed.
     */
    getMap(): google.maps.Map | null;
    /**
     * Renders the layer on the specified map. If the map is set to null, the layer will be removed.
     */
    setMap(map: google.maps.Map | null): undefined;
  }
  /**
   * Options that bias a search result towards returning a Street View panorama that is nearest to the request location, or a panorama that is considered most likely to be what the user wants to see. Specify these by value, or by using the constant&#39;s name. For example, <code>'best'</code> or <code>google.maps.StreetViewPreference.BEST</code>.
   *
   * Access by calling `const {StreetViewPreference} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum StreetViewPreference {
    /**
     * Return the Street View panorama that is considered most likely to be what the user wants to see. The best result is determined by algorithms based on user research and parameters such as recognised points of interest, image quality, and distance from the given location.
     */
    BEST = 'best',
    /**
     * Return the Street View panorama that is the shortest distance from the provided location. This works well only within a limited radius. The recommended radius is 1km or less.
     */
    NEAREST = 'nearest',
  }
  export type StreetViewPreferenceString = `${google.maps.StreetViewPreference}`;
  /**
   * The response resolved for a Promise from {@link google.maps.StreetViewService.getPanorama}.
   */
  export interface StreetViewResponse {
    /**
     * The representation of a panorama.
     */
    data: google.maps.StreetViewPanoramaData;
  }
  /**
   * A <code>StreetViewService</code> object performs searches for Street View data.
   * Access by calling `const {StreetViewService} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StreetViewService {
    /**
     * Creates a <code>StreetViewService</code>, which provides an interface to the data stored in the Street View service.
     */
    constructor();
    /**
     * Retrieves the <code>StreetViewPanoramaData</code> for a panorama that matches the supplied Street View query request. The <code>StreetViewPanoramaData</code> is passed to the provided callback.
     */
    getPanorama(request: google.maps.StreetViewLocationRequest | google.maps.StreetViewPanoRequest, callback?: ((arg0: google.maps.StreetViewPanoramaData | null, arg1: google.maps.StreetViewStatusString) => void)): Promise<google.maps.StreetViewResponse>;
  }
  /**
   * Identifiers to limit Street View searches to selected sources. These values are specified as strings. For example, <code>'outdoor'</code>.
   *
   * Access by calling `const {StreetViewSource} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum StreetViewSource {
    /**
     * Uses the default sources of Street View, searches will not be limited to specific sources.
     */
    DEFAULT = 'default',
    /**
     * Limits Street View searches to official Google collections.
     */
    GOOGLE = 'google',
    /**
     * Limits Street View searches to outdoor collections. Indoor collections are not included in search results. Note also that the search only returns panoramas where it&#39;s possible to determine whether they&#39;re indoors or outdoors. For example, PhotoSpheres are not returned because it&#39;s unknown whether they are indoors or outdoors.
     */
    OUTDOOR = 'outdoor',
  }
  export type StreetViewSourceString = `${google.maps.StreetViewSource}`;
  /**
   * The status returned by the <code>StreetViewService</code> on completion of a Street View request. These can be specified by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.StreetViewStatus.OK</code>.
   *
   * Access by calling `const {StreetViewStatus} = await google.maps.importLibrary("streetView");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum StreetViewStatus {
    /**
     * The request was successful.
     */
    OK = 'OK',
    /**
     * The request could not be successfully processed, yet the exact reason for failure is unknown.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
    /**
     * There are no panoramas found that match the search criteria.
     */
    ZERO_RESULTS = 'ZERO_RESULTS',
  }
  export type StreetViewStatusString = `${google.maps.StreetViewStatus}`;
  /**
   * This class is used to create a MapType that renders image tiles.
   */
  export interface ImageMapTypeOptions {
    /**
     * Alt text to display when this MapType&#39;s button is hovered over in the MapTypeControl.
     */
    alt?: string | null;
    /**
     * Returns a string (URL) for given tile coordinate (x, y) and zoom level.
     */
    getTileUrl?: ((arg0: google.maps.Point, arg1: number) => (string | null)) | null;
    /**
     * The maximum zoom level for the map when displaying this MapType.
     */
    maxZoom?: number | null;
    /**
     * The minimum zoom level for the map when displaying this MapType. Optional.
     */
    minZoom?: number | null;
    /**
     * Name to display in the MapTypeControl.
     */
    name?: string | null;
    /**
     * The opacity to apply to the tiles. The opacity should be specified as a float value between 0 and 1.0, where 0 is fully transparent and 1 is fully opaque.
     */
    opacity?: number | null;
    /**
     * The tile size.
     */
    tileSize?: google.maps.Size | null;
  }
  /**
   * This class implements the MapType interface and is provided for rendering image tiles.
   * Access by calling `const {ImageMapType} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ImageMapType extends google.maps.MVCObject implements google.maps.MapType {
    /**
     * Constructs an ImageMapType using the provided ImageMapTypeOptions
     * @param opts
     */
    constructor(opts: google.maps.ImageMapTypeOptions | null);

    alt: string | null;

    maxZoom: number;

    minZoom: number;

    name: string | null;

    projection: google.maps.Projection | null;

    radius: number;

    tileSize: google.maps.Size | null;
    /**
     * Returns the opacity level (<code>0</code> (transparent) to <code>1.0</code>) of the <code>ImageMapType</code> tiles.
     */
    getOpacity(): number;

    getTile(tileCoord: google.maps.Point | null, zoom: number, ownerDocument: Document | null): Element | null;

    releaseTile(tileDiv: Element | null): void;
    /**
     * Sets the opacity level (<code>0</code> (transparent) to <code>1.0</code>) of the <code>ImageMapType</code> tiles.
     */
    setOpacity(opacity: number): void;
  }
  /**
   * The <code>MapTypeStyle</code> is a collection of selectors and stylers that define how the map should be styled. Selectors specify the map features and/or elements that should be affected, and stylers specify how those features and elements should be modified. For details, see the <a href="https://developers.google.com/maps/documentation/javascript/style-reference">style reference</a>.
   */
  export interface MapTypeStyle {
    /**
     * The element to which a styler should be applied. An element is a visual aspect of a feature on the map. Example: a label, an icon, the stroke or fill applied to the geometry, and more. Optional. If <code>elementType</code> is not specified, the value is assumed to be <code>'all'</code>. For details of usage and allowed values, see the <a href="https://developers.google.com/maps/documentation/javascript/style-reference#style-elements">style reference</a>.
     */
    elementType?: string | null;
    /**
     * The feature, or group of features, to which a styler should be applied. Optional. If <code>featureType</code> is not specified, the value is assumed to be <code>'all'</code>. For details of usage and allowed values, see the <a href="https://developers.google.com/maps/documentation/javascript/style-reference#style-features">style reference</a>.
     */
    featureType?: string | null;
    /**
     * The style rules to apply to the selected map features and elements. The rules are applied in the order that you specify in this array. For guidelines on usage and allowed values, see the <a href="https://developers.google.com/maps/documentation/javascript/style-reference#stylers">style reference</a>.
     */
    stylers: object[];
  }
  /**
   * This class is used to specify options when creating a <code>StyledMapType</code>. These options cannot be changed after the <code>StyledMapType</code> is instantiated.
   */
  export interface StyledMapTypeOptions {
    /**
     * Text to display when this <code>MapType</code>&#39;s button is hovered over in the map type control.
     */
    alt?: string | null;
    /**
     * The maximum zoom level for the map when displaying this <code>MapType</code>. Optional.
     */
    maxZoom?: number | null;
    /**
     * The minimum zoom level for the map when displaying this <code>MapType</code>. Optional.
     */
    minZoom?: number | null;
    /**
     * The name to display in the map type control.
     */
    name?: string | null;
  }
  /**
   * Creates a <code>MapType</code> with a custom style.
   * Access by calling `const {StyledMapType} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StyledMapType extends google.maps.MVCObject implements google.maps.MapType {
    /**
     * Creates a styled <code>MapType</code> with the specified options. The <code>StyledMapType</code> takes an array of <code>MapTypeStyle</code>s, where each <code>MapTypeStyle</code> is applied to the map consecutively. A later <code>MapTypeStyle</code> that applies the same <code>MapTypeStyler</code>s to the same selectors as an earlier <code>MapTypeStyle</code> will override the earlier <code>MapTypeStyle</code>. <br><br>Note that the <code>StyledMapType</code> is not supported when a map ID is set. When using both together, you will receive a console warning.
     * @param styles
     * @param options
     */
    constructor(styles: (google.maps.MapTypeStyle | null)[] | null, options?: google.maps.StyledMapTypeOptions | null);

    alt: string;

    maxZoom: number;

    minZoom: number;

    name: string;

    projection: google.maps.Projection | null;

    radius: number;

    tileSize: google.maps.Size | null;

    getTile(tileCoord: google.maps.Point | null, zoom: number, ownerDocument: Document | null): Element | null;

    releaseTile(tile: Element | null): void;
  }
  /**
   * An event listener, created by <code><a href="#event">google.maps.event.addListener</a>()</code> and friends.
   */
  export interface MapsEventListener {
    /**
     * Removes the listener. <p>Calling <code>listener.remove()</code> is equivalent to <code>google.maps.event.removeListener(listener)</code>.
     */
    remove(): void;
  }
  /**
   * The status returned by a web service. See <a href="https://grpc.github.io/grpc/core/md_doc_statuscodes.html">https://grpc.github.io/grpc/core/md_doc_statuscodes.html</a>.
   *
   * Access by calling `const {RPCStatus} = await google.maps.importLibrary("core");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RPCStatus {
    /**
     * The operation was aborted, typically due to a concurrency issue such as a sequencer check failure or transaction abort.
     */
    ABORTED = 'ABORTED',
    /**
     * The entity that a client attempted to create (e.g., file or directory) already exists.
     */
    ALREADY_EXISTS = 'ALREADY_EXISTS',
    /**
     * The operation was cancelled, typically by the caller.
     */
    CANCELLED = 'CANCELLED',
    /**
     * Unrecoverable data loss or corruption.
     */
    DATA_LOSS = 'DATA_LOSS',
    /**
     * The deadline expired before the operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long.
     */
    DEADLINE_EXCEEDED = 'DEADLINE_EXCEEDED',
    /**
     * The operation was rejected because the system is not in a state required for the operation&#39;s execution.
     */
    FAILED_PRECONDITION = 'FAILED_PRECONDITION',
    /**
     * Internal errors. This means that some invariants expected by the underlying system have been broken. This error code is reserved for serious errors.
     */
    INTERNAL = 'INTERNAL',
    /**
     * The client specified an invalid argument. Note that this differs from <code>FAILED_PRECONDITION</code>. <code>INVALID_ARGUMENT</code> indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name).
     */
    INVALID_ARGUMENT = 'INVALID_ARGUMENT',
    /**
     * Some requested entity (e.g., file or directory) was not found.
     */
    NOT_FOUND = 'NOT_FOUND',
    /**
     * Not an error; returned on success.
     */
    OK = 'OK',
    /**
     * The operation was attempted past the valid range. E.g., seeking or reading past end-of-file. Unlike <code>INVALID_ARGUMENT</code>, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate <code>INVALID_ARGUMENT</code> if asked to read at an offset that is not in the range [0,2^32-1], but it will generate <code>OUT_OF_RANGE</code> if asked to read from an offset past the current file size.
     */
    OUT_OF_RANGE = 'OUT_OF_RANGE',
    /**
     * The caller does not have permission to execute the specified operation. This error code does not imply the request is valid or the requested entity exists or satisfies other pre-conditions.
     */
    PERMISSION_DENIED = 'PERMISSION_DENIED',
    /**
     * Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.
     */
    RESOURCE_EXHAUSTED = 'RESOURCE_EXHAUSTED',
    /**
     * The request does not have valid authentication credentials for the operation.
     */
    UNAUTHENTICATED = 'UNAUTHENTICATED',
    /**
     * The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations.
     */
    UNAVAILABLE = 'UNAVAILABLE',
    /**
     * Operation is not implemented or not supported/enabled in this service.
     */
    UNIMPLEMENTED = 'UNIMPLEMENTED',
    /**
     * Unknown error. For example, this error may be returned when a status received from another address space belongs to an error space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error.
     */
    UNKNOWN = 'UNKNOWN',
  }
  export type RPCStatusString = `${google.maps.RPCStatus}`;

  export interface CoreLibrary {

    ColorScheme: typeof google.maps.ColorScheme;

    ControlPosition: typeof google.maps.ControlPosition;

    event: typeof google.maps.event;

    LatLng: typeof google.maps.LatLng;

    LatLngAltitude: typeof google.maps.LatLngAltitude;

    LatLngBounds: typeof google.maps.LatLngBounds;

    MapsNetworkError: typeof google.maps.MapsNetworkError;

    MapsNetworkErrorEndpoint: typeof google.maps.MapsNetworkErrorEndpoint;

    MapsRequestError: typeof google.maps.MapsRequestError;

    MapsServerError: typeof google.maps.MapsServerError;

    MVCArray: typeof google.maps.MVCArray;

    MVCObject: typeof google.maps.MVCObject;

    Orientation3D: typeof google.maps.Orientation3D;

    Point: typeof google.maps.Point;

    RPCStatus: typeof google.maps.RPCStatus;

    Settings: typeof google.maps.Settings;

    Size: typeof google.maps.Size;

    SymbolPath: typeof google.maps.SymbolPath;

    UnitSystem: typeof google.maps.UnitSystem;

    Vector3D: typeof google.maps.Vector3D;
  }

  export interface MapsLibrary {

    BicyclingLayer: typeof google.maps.BicyclingLayer;

    Circle: typeof google.maps.Circle;

    Data: typeof google.maps.Data;

    FeatureType: typeof google.maps.FeatureType;

    GroundOverlay: typeof google.maps.GroundOverlay;

    ImageMapType: typeof google.maps.ImageMapType;

    InfoWindow: typeof google.maps.InfoWindow;

    KmlLayer: typeof google.maps.KmlLayer;

    KmlLayerStatus: typeof google.maps.KmlLayerStatus;

    Map: typeof google.maps.Map;

    MapElement: typeof google.maps.MapElement;

    MapTypeControlStyle: typeof google.maps.MapTypeControlStyle;

    MapTypeId: typeof google.maps.MapTypeId;

    MapTypeRegistry: typeof google.maps.MapTypeRegistry;

    MaxZoomService: typeof google.maps.MaxZoomService;

    MaxZoomStatus: typeof google.maps.MaxZoomStatus;

    OverlayView: typeof google.maps.OverlayView;

    Polygon: typeof google.maps.Polygon;

    Polyline: typeof google.maps.Polyline;

    Rectangle: typeof google.maps.Rectangle;

    RenderingType: typeof google.maps.RenderingType;

    StrokePosition: typeof google.maps.StrokePosition;

    StyledMapType: typeof google.maps.StyledMapType;

    TrafficLayer: typeof google.maps.TrafficLayer;

    TransitLayer: typeof google.maps.TransitLayer;

    WebGLOverlayView: typeof google.maps.WebGLOverlayView;

    ZoomChangeEvent: typeof google.maps.ZoomChangeEvent;
  }

  export interface GeocodingLibrary {

    Containment: typeof google.maps.Containment;

    ExtraGeocodeComputation: typeof google.maps.ExtraGeocodeComputation;

    Geocoder: typeof google.maps.Geocoder;

    GeocoderLocationType: typeof google.maps.GeocoderLocationType;

    GeocoderStatus: typeof google.maps.GeocoderStatus;

    SpatialRelationship: typeof google.maps.SpatialRelationship;
  }

  export interface StreetViewLibrary {

    InfoWindow: typeof google.maps.InfoWindow;

    OverlayView: typeof google.maps.OverlayView;

    StreetViewCoverageLayer: typeof google.maps.StreetViewCoverageLayer;

    StreetViewPanorama: typeof google.maps.StreetViewPanorama;

    StreetViewPreference: typeof google.maps.StreetViewPreference;

    StreetViewService: typeof google.maps.StreetViewService;

    StreetViewSource: typeof google.maps.StreetViewSource;

    StreetViewStatus: typeof google.maps.StreetViewStatus;
  }
  /**
   * A <code>DirectionsWaypoint</code> represents a location between origin and destination through which the trip should be routed.
   */
  export interface DirectionsWaypoint {
    /**
     * Waypoint location. Can be an address string, a <code>LatLng</code>, or a <code>Place</code>. Optional.
     */
    location?: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.Place;
    /**
     * If <code>true</code>, indicates that this waypoint is a stop between the origin and destination. This has the effect of splitting the route into two legs. If <code>false</code>, indicates that the route should be biased to go through this waypoint, but not split into two legs. This is useful if you want to create a route in response to the user dragging waypoints on a map.
     * @defaultValue <code>true</code>
     */
    stopover?: boolean;
  }
  /**
   * Configures the <code><a href="#DirectionsRequest">DirectionsRequest</a></code> when the travel mode is set to <code>DRIVING</code>.
   */
  export interface DrivingOptions {
    /**
     * The desired departure time for the route, specified as a <code>Date</code> object. The <code>Date</code> object measures time in milliseconds since 1 January 1970. This must be specified for a <code>DrivingOptions</code> to be valid. The departure time must be set to the current time or some time in the future. It cannot be in the past.
     */
    departureTime: Date;
    /**
     * The preferred assumption to use when predicting duration in traffic. The default is <code>BEST_GUESS</code>.
     */
    trafficModel?: google.maps.TrafficModelString;
  }
  /**
   * The TransitOptions object to be included in a <code><a href="#DirectionsRequest">DirectionsRequest</a></code> when the travel mode is set to TRANSIT.
   */
  export interface TransitOptions {
    /**
     * The desired arrival time for the route, specified as a Date object. The Date object measures time in milliseconds since 1 January 1970. If arrival time is specified, departure time is ignored.
     */
    arrivalTime?: Date | null;
    /**
     * The desired departure time for the route, specified as a Date object. The Date object measures time in milliseconds since 1 January 1970. If neither departure time nor arrival time is specified, the time is assumed to be &quot;now&quot;.
     */
    departureTime?: Date | null;
    /**
     * One or more preferred modes of transit, such as bus or train. If no preference is given, the API returns the default best route.
     */
    modes?: google.maps.TransitModeString[] | null;
    /**
     * A preference that can bias the choice of transit route, such as less walking. If no preference is given, the API returns the default best route.
     */
    routingPreference?: google.maps.TransitRoutePreferenceString | null;
  }
  /**
   * A representation of time as a Date object, a localized string, and a time zone.
   */
  export interface Time {
    /**
     * A string representing the time&#39;s value. The time is displayed in the time zone of the transit stop.
     */
    text: string;
    /**
     * The time zone in which this stop lies. The value is the name of the time zone as defined in the IANA Time Zone Database, e.g. &quot;America/New_York&quot;.
     */
    time_zone: string;
    /**
     * The time of this departure or arrival, specified as a JavaScript Date object.
     */
    value: Date;
  }
  /**
   * Information about an agency that operates a transit line.
   */
  export interface TransitAgency {
    /**
     * The name of this transit agency.
     */
    name: string;
    /**
     * The transit agency&#39;s phone number.
     */
    phone: string;
    /**
     * The transit agency&#39;s URL.
     */
    url: string;
  }
  /**
   * Information about the vehicle that operates on a transit line.
   */
  export interface TransitVehicle {
    /**
     * A URL for an icon that corresponds to the type of vehicle used on this line.
     */
    icon: string;
    /**
     * A URL for an icon that corresponds to the type of vehicle used in this region instead of the more general icon.
     */
    local_icon: string;
    /**
     * A name for this type of TransitVehicle, e.g. &quot;Train&quot; or &quot;Bus&quot;.
     */
    name: string;
    /**
     * The type of vehicle used, e.g. train, bus, or ferry.
     */
    type: google.maps.VehicleTypeString;
  }
  /**
   * Information about the transit line that operates this transit step.
   */
  export interface TransitLine {
    /**
     * The transit agency that operates this transit line.
     */
    agencies: google.maps.TransitAgency[];
    /**
     * The color commonly used in signage for this transit line, represented as a hex string.
     */
    color: string;
    /**
     * The URL for an icon associated with this line.
     */
    icon: string;
    /**
     * The full name of this transit line, e.g. &quot;8 Avenue Local&quot;.
     */
    name: string;
    /**
     * The short name of this transit line, e.g. &quot;E&quot;.
     */
    short_name: string;
    /**
     * The text color commonly used in signage for this transit line, represented as a hex string.
     */
    text_color: string;
    /**
     * The agency&#39;s URL which is specific to this transit line.
     */
    url: string;
    /**
     * The type of vehicle used, e.g. train or bus.
     */
    vehicle: google.maps.TransitVehicle;
  }
  /**
   * Details about a transit stop or station.
   */
  export interface TransitStop {
    /**
     * The location of this stop.
     */
    location: google.maps.LatLng;
    /**
     * The name of this transit stop.
     */
    name: string;
  }
  /**
   * Details about the departure, arrival, and mode of transit used in this step.
   */
  export interface TransitDetails {
    /**
     * The arrival stop of this transit step.
     */
    arrival_stop: google.maps.TransitStop;
    /**
     * The arrival time of this step, specified as a Time object.
     */
    arrival_time: google.maps.Time;
    /**
     * The departure stop of this transit step.
     */
    departure_stop: google.maps.TransitStop;
    /**
     * The departure time of this step, specified as a Time object.
     */
    departure_time: google.maps.Time;
    /**
     * The direction in which to travel on this line, as it is marked on the vehicle or at the departure stop.
     */
    headsign: string;
    /**
     * The expected number of seconds between equivalent vehicles at this stop.
     */
    headway: number;
    /**
     * Details about the transit line used in this step.
     */
    line: google.maps.TransitLine;
    /**
     * The number of stops on this step. Includes the arrival stop, but not the departure stop.
     */
    num_stops: number;
    /**
     * The text that appears in schedules and sign boards to identify a transit trip to passengers, for example, to identify train numbers for commuter rail trips. The text uniquely identifies a trip within a service day.
     */
    trip_short_name: string;
  }
  /**
   * A fare of a <code><a href="#DirectionsResult">DirectionsRoute</a> </code> consisting of value and currency.
   */
  export interface TransitFare {
    /**
     * An <a href="http://en.wikipedia.org/wiki/ISO_4217">ISO 4217 currency code</a> indicating the currency in which the fare is expressed.
     */
    currency: string;
    /**
     * The value of the fare, expressed in the given <code>currency</code>, as a string.
     */
    text: string;
    /**
     * The numerical value of the fare, expressed in the given <code>currency</code>.
     */
    value: number;
  }
  /**
   * This object defines the properties that can be set on a <code>DirectionsRenderer</code> object.
   */
  export interface DirectionsRendererOptions {
    /**
     * The directions to display on the map and/or in a <code>&lt;div&gt;</code> panel, retrieved as a <code>DirectionsResult</code> object from <code>DirectionsService</code>.
     */
    directions?: google.maps.DirectionsResult | null;
    /**
     * If <code>true</code>, allows the user to drag and modify the paths of routes rendered by this <code>DirectionsRenderer</code>.
     */
    draggable?: boolean | null;
    /**
     * This property indicates whether the renderer should provide a user-selectable list of routes shown in the directions panel.
     * @defaultValue <code>false</code>
     */
    hideRouteList?: boolean | null;
    /**
     * The <code>InfoWindow</code> in which to render text information when a marker is clicked. Existing info window content will be overwritten and its position moved. If no info window is specified, the <code>DirectionsRenderer</code> will create and use its own info window. This property will be ignored if <code>suppressInfoWindows</code> is set to <code>true</code>.
     */
    infoWindow?: google.maps.InfoWindow | null;
    /**
     * Map on which to display the directions.
     */
    map?: google.maps.Map | null;
    /**
     * Options for the markers. All markers rendered by the <code>DirectionsRenderer</code> will use these options.
     */
    markerOptions?: google.maps.MarkerOptions | null;
    /**
     * The <code>&lt;div&gt;</code> in which to display the directions steps.
     */
    panel?: HTMLElement | null;
    /**
     * Options for the polylines. All polylines rendered by the <code>DirectionsRenderer</code> will use these options.
     */
    polylineOptions?: google.maps.PolylineOptions | null;
    /**
     * If this option is set to <code>true</code> or the map&#39;s center and zoom were never set, the input map is centered and zoomed to the bounding box of this set of directions.
     * @defaultValue <code>false</code>
     */
    preserveViewport?: boolean | null;
    /**
     * The index of the route within the <code>DirectionsResult</code> object. The default value is 0.
     */
    routeIndex?: number | null;
    /**
     * Suppress the rendering of the <code>BicyclingLayer</code> when bicycling directions are requested.
     */
    suppressBicyclingLayer?: boolean | null;
    /**
     * Suppress the rendering of info windows.
     */
    suppressInfoWindows?: boolean | null;
    /**
     * Suppress the rendering of markers.
     */
    suppressMarkers?: boolean | null;
    /**
     * Suppress the rendering of polylines.
     */
    suppressPolylines?: boolean | null;
  }
  /**
   * The result of an <code>ElevationService</code> request, consisting of the set of elevation coordinates and their elevation values. Note that a single request may produce multiple <code>ElevationResult</code>s.
   */
  export interface ElevationResult {
    /**
     * The elevation of this point on Earth, in meters above sea level.
     */
    elevation: number;
    /**
     * The location of this elevation result.
     */
    location: google.maps.LatLng | null;
    /**
     * The distance, in meters, between sample points from which the elevation was interpolated. This property will be missing if the resolution is not known. Note that elevation data becomes more coarse (larger <code>resolution</code> values) when multiple points are passed. To obtain the most accurate elevation value for a point, it should be queried independently.
     */
    resolution: number;
  }
  /**
   * An elevation query sent by the <code>ElevationService</code> containing the path along which to return sampled data. This request defines a continuous path along the earth along which elevation samples should be taken at evenly-spaced distances. All paths from vertex to vertex use segments of the great circle between those two points.
   */
  export interface PathElevationRequest {
    /**
     * The path along which to collect elevation values.
     */
    path?: (google.maps.LatLng | google.maps.LatLngLiteral)[] | null;
    /**
     * Required. The number of equidistant points along the given path for which to retrieve elevation data, including the endpoints. The number of samples must be a value between 2 and 512 inclusive.
     */
    samples: number;
  }
  /**
   * An elevation response returned by the {@link google.maps.ElevationService} containing the list of {@link google.maps.ElevationResult}s evenly-spaced along the path of the {@link google.maps.PathElevationRequest}.
   */
  export interface PathElevationResponse {
    /**
     * The list of {@link google.maps.ElevationResult}s matching the samples of the {@link google.maps.PathElevationRequest}.
     */
    results: google.maps.ElevationResult[];
  }
  /**
   * An elevation request sent by the <code>ElevationService</code> containing the list of discrete coordinates (<code>LatLng</code>s) for which to return elevation data.
   */
  export interface LocationElevationRequest {
    /**
     * The discrete locations for which to retrieve elevations.
     */
    locations?: (google.maps.LatLng | google.maps.LatLngLiteral)[] | null;
  }
  /**
   * An elevation response returned by the {@link google.maps.ElevationService} containing the list of {@link google.maps.ElevationResult}s matching the locations of the {@link google.maps.LocationElevationRequest}.
   */
  export interface LocationElevationResponse {
    /**
     * The list of {@link google.maps.ElevationResult}s matching the locations of the {@link google.maps.LocationElevationRequest}.
     */
    results: google.maps.ElevationResult[];
  }
  /**
   * A single address component within a <code>GeocoderResult</code>. A full address may consist of multiple address components.
   */
  export interface GeocoderAddressComponent {
    /**
     * The full text of the address component
     */
    long_name: string;
    /**
     * The abbreviated, short text of the given address component
     */
    short_name: string;
    /**
     * An array of strings denoting the type of this address component. A list of valid types can be found <a href="https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingAddressTypes">here</a>
     */
    types: string[];
  }
  /**
   * <code>GeocoderComponentRestrictions</code> represents a set of filters that resolve to a specific area. For details on how this works, see <a href="https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering"> Geocoding Component Filtering</a>.
   */
  export interface GeocoderComponentRestrictions {
    /**
     * Matches all the <code>administrative_area levels</code>. Optional.
     */
    administrativeArea?: string;
    /**
     * Matches a country name or a two letter ISO 3166-1 country code. Optional.
     */
    country?: string;
    /**
     * Matches against both <code>locality</code> and <code>sublocality</code> types. Optional.
     */
    locality?: string;
    /**
     * Matches <code>postal_code</code> and <code>postal_code_prefix</code>. Optional.
     */
    postalCode?: string;
    /**
     * Matches the long or short name of a <code>route</code>. Optional.
     */
    route?: string;
  }
  /**
   * A Geocoder response returned by the {@link google.maps.Geocoder} containing the list of {@link google.maps.GeocoderResult}s.
   */
  export interface GeocoderResponse {
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * A relational description of a location. Includes a ranked set of nearby landmarks and the areas containing the target location. It is only populated for reverse geocoding requests and only when {@link google.maps.ExtraGeocodeComputation.ADDRESS_DESCRIPTORS} is enabled.
     */
    address_descriptor?: google.maps.AddressDescriptor | null;
    /**
     * The plus code associated with the location.
     */
    plus_code?: google.maps.places.PlacePlusCode | null;
    /**
     * The list of {@link google.maps.GeocoderResult}s.
     */
    results: google.maps.GeocoderResult[];
  }
  /**
   * A single geocoder result retrieved from the geocode server. A geocode request may return multiple result objects. Note that though this result is &quot;JSON-like,&quot; it is not strictly JSON, as it indirectly includes a <code>LatLng</code> object.
   */
  export interface GeocoderResult {
    /**
     * An array of <code>GeocoderAddressComponent</code>s
     */
    address_components: google.maps.GeocoderAddressComponent[];
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * A relational description of the location associated with this geocode. Includes a ranked set of nearby landmarks and the areas containing the target location. This will only be populated for forward geocoding and place ID lookup requests, only when {@link google.maps.ExtraGeocodeComputation.ADDRESS_DESCRIPTORS} is enabled, and only for certain localized places.
     */
    address_descriptor?: google.maps.AddressDescriptor;
    /**
     * A string containing the human-readable address of this location.
     */
    formatted_address: string;
    /**
     * A <code>GeocoderGeometry</code> object
     */
    geometry: google.maps.GeocoderGeometry;
    /**
     * Whether the geocoder did not return an exact match for the original request, though it was able to match part of the requested address. If an exact match, the value will be <code>undefined</code>.
     */
    partial_match?: boolean;
    /**
     * The place ID associated with the location. Place IDs uniquely identify a place in the Google Places database and on Google Maps. Learn more about <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">Place IDs</a> in the Places API developer guide.
     */
    place_id: string;
    /**
     * The plus code associated with the location.
     */
    plus_code?: google.maps.places.PlacePlusCode;
    /**
     * An array of strings denoting all the localities contained in a postal code. This is only present when the result is a postal code that contains multiple localities.
     */
    postcode_localities?: string[];
    /**
     * An array of strings denoting the type of the returned geocoded element. For a list of possible strings, refer to the <a href= "https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingAddressTypes"> Address Component Types</a> section of the Developer&#39;s Guide.
     */
    types: string[];
  }
  /**
   * Geometry information about this <code>GeocoderResult</code>
   */
  export interface GeocoderGeometry {
    /**
     * The precise bounds of this <code>GeocoderResult</code>, if applicable
     */
    bounds?: google.maps.LatLngBounds;
    /**
     * The latitude/longitude coordinates of this result
     */
    location: google.maps.LatLng;
    /**
     * The type of location returned in <code>location</code>
     */
    location_type: google.maps.GeocoderLocationTypeString;
    /**
     * The bounds of the recommended viewport for displaying this <code>GeocoderResult</code>
     */
    viewport: google.maps.LatLngBounds;
  }
  /**
   * Object literals are accepted in place of <code>LatLngBounds</code> objects throughout the API. These are automatically converted to <code>LatLngBounds</code> objects. All <code>south</code>, <code>west</code>, <code>north</code> and <code>east</code> must be set, otherwise an exception is thrown.
   */
  export interface LatLngBoundsLiteral {
    /**
     * East longitude in degrees. Values outside the range [-180, 180] will be wrapped to the range [-180, 180). For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.
     */
    east: number;
    /**
     * North latitude in degrees. Values will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.
     */
    north: number;
    /**
     * South latitude in degrees. Values will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.
     */
    south: number;
    /**
     * West longitude in degrees. Values outside the range [-180, 180] will be wrapped to the range [-180, 180). For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.
     */
    west: number;
  }
  /**
   * Contains the four points defining the four-sided polygon that is the visible region of the map. On a vector map this polygon can be a trapezoid instead of a rectangle, when a vector map has tilt.
   */
  export interface VisibleRegion {

    farLeft: google.maps.LatLng;

    farRight: google.maps.LatLng;
    /**
     * The smallest bounding box that includes the visible region.
     */
    latLngBounds: google.maps.LatLngBounds;

    nearLeft: google.maps.LatLng;

    nearRight: google.maps.LatLng;
  }
  /**
   * InfoWindowOptions object used to define the properties that can be set on a InfoWindow.
   */
  export interface InfoWindowOptions {
    /**
     * AriaLabel to assign to the InfoWindow.
     */
    ariaLabel?: string | null;
    /**
     * Content to display in the InfoWindow. This can be an HTML element, a plain-text string, or a string containing HTML. The InfoWindow will be sized according to the content. To set an explicit size for the content, set content to be a HTML element with that size.
     */
    content?: string | Element | Text | null;
    /**
     * Disable panning the map to make the InfoWindow fully visible when it opens.
     * @defaultValue <code>false</code>
     */
    disableAutoPan?: boolean | null;
    /**
     * The content to display in the InfoWindow header row. This can be an HTML element, or a string of plain text. The InfoWindow will be sized according to the content. To set an explicit size for the header content, set headerContent to be a HTML element with that size.
     */
    headerContent?: string | Element | Text | null;
    /**
     * Disables the whole header row in the InfoWindow. When set to true, the header will be removed so that the header content and the close button will be hidden.
     */
    headerDisabled?: boolean | null;
    /**
     * Maximum width of the InfoWindow, regardless of content&#39;s width. This value is only considered if it is set before a call to <code>open()</code>. To change the maximum width when changing content, call <code>close()</code>, <code>setOptions()</code>, and then <code>open()</code>.
     */
    maxWidth?: number | null;
    /**
     * Minimum width of the InfoWindow, regardless of the content&#39;s width. When using this property, it is strongly recommended to set the <code>minWidth</code> to a value less than the width of the map (in pixels). This value is only considered if it is set before a call to <code>open()</code>. To change the minimum width when changing content, call <code>close()</code>, <code>setOptions()</code>, and then <code>open()</code>.
     */
    minWidth?: number | null;
    /**
     * The offset, in pixels, of the tip of the info window from the point on the map at whose geographical coordinates the info window is anchored. If an InfoWindow is opened with an anchor, the <code>pixelOffset</code> will be calculated from the anchor&#39;s <code>anchorPoint</code> property.
     */
    pixelOffset?: google.maps.Size | null;
    /**
     * The LatLng at which to display this InfoWindow. If the InfoWindow is opened with an anchor, the anchor&#39;s position will be used instead.
     */
    position?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * All InfoWindows are displayed on the map in order of their zIndex, with higher values displaying in front of InfoWindows with lower values. By default, InfoWindows are displayed according to their latitude, with InfoWindows of lower latitudes appearing in front of InfoWindows at higher latitudes. InfoWindows are always displayed in front of markers.
     */
    zIndex?: number | null;
  }

  export interface JourneySharingLibrary {

    AutomaticViewportMode: typeof google.maps.journeySharing.AutomaticViewportMode;

    DeliveryVehicleStopState: typeof google.maps.journeySharing.DeliveryVehicleStopState;

    FleetEngineDeliveryFleetLocationProvider: typeof google.maps.journeySharing.FleetEngineDeliveryFleetLocationProvider;

    FleetEngineDeliveryVehicleLocationProvider: typeof google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider;

    FleetEngineFleetLocationProvider: typeof google.maps.journeySharing.FleetEngineFleetLocationProvider;

    FleetEngineServiceType: typeof google.maps.journeySharing.FleetEngineServiceType;

    FleetEngineShipmentLocationProvider: typeof google.maps.journeySharing.FleetEngineShipmentLocationProvider;

    FleetEngineTripLocationProvider: typeof google.maps.journeySharing.FleetEngineTripLocationProvider;

    FleetEngineVehicleLocationProvider: typeof google.maps.journeySharing.FleetEngineVehicleLocationProvider;

    JourneySharingMapView: typeof google.maps.journeySharing.JourneySharingMapView;

    Speed: typeof google.maps.journeySharing.Speed;

    TripType: typeof google.maps.journeySharing.TripType;

    VehicleNavigationStatus: typeof google.maps.journeySharing.VehicleNavigationStatus;

    VehicleState: typeof google.maps.journeySharing.VehicleState;

    VehicleType: typeof google.maps.journeySharing.VehicleType;

    WaypointType: typeof google.maps.journeySharing.WaypointType;
  }
  /**
   * This object defines the properties that can be set on a <code>GroundOverlay</code> object.
   */
  export interface GroundOverlayOptions {
    /**
     * If <code>true</code>, the ground overlay can receive mouse events.
     */
    clickable?: boolean | null;
    /**
     * The map on which to display the overlay.
     */
    map?: google.maps.Map | null;
    /**
     * The opacity of the overlay, expressed as a number between 0 and 1. Optional.
     * @defaultValue <code>1.0</code>
     */
    opacity?: number | null;
  }
  /**
   * Contains details of the author of a KML document or feature.
   */
  export interface KmlAuthor {
    /**
     * The author&#39;s e-mail address, or an empty string if not specified.
     */
    email: string;
    /**
     * The author&#39;s name, or an empty string if not specified.
     */
    name: string;
    /**
     * The author&#39;s home page, or an empty string if not specified.
     */
    uri: string;
  }
  /**
   * Data for a single KML feature in JSON format, returned when a KML feature is clicked. The data contained in this object mirrors that associated with the feature in the KML or GeoRSS markup in which it is declared.
   */
  export interface KmlFeatureData {
    /**
     * The feature&#39;s <code>&lt;atom:author&gt;</code>, extracted from the layer markup (if specified).
     */
    author: google.maps.KmlAuthor;
    /**
     * The feature&#39;s <code>&lt;description&gt;</code>, extracted from the layer markup.
     */
    description: string;
    /**
     * The feature&#39;s <code>&lt;id&gt;</code>, extracted from the layer markup. If no <code>&lt;id&gt;</code> has been specified, a unique ID will be generated for this feature.
     */
    id: string;
    /**
     * The feature&#39;s balloon styled text, if set.
     */
    infoWindowHtml: string;
    /**
     * The feature&#39;s <code>&lt;name&gt;</code>, extracted from the layer markup.
     */
    name: string;
    /**
     * The feature&#39;s <code>&lt;Snippet&gt;</code>, extracted from the layer markup.
     */
    snippet: string;
  }
  /**
   * Metadata for a single KML layer, in JSON format.
   */
  export interface KmlLayerMetadata {
    /**
     * The layer&#39;s <code>&lt;atom:author&gt;</code>, extracted from the layer markup.
     */
    author: google.maps.KmlAuthor | null;
    /**
     * The layer&#39;s <code>&lt;description&gt;</code>, extracted from the layer markup.
     */
    description: string;
    /**
     * Whether the layer has any screen overlays.
     */
    hasScreenOverlays: boolean;
    /**
     * The layer&#39;s <code>&lt;name&gt;</code>, extracted from the layer markup.
     */
    name: string;
    /**
     * The layer&#39;s <code>&lt;Snippet&gt;</code>, extracted from the layer markup
     */
    snippet: string;
  }
  /**
   * This object defines the properties that can be set on a <code>KmlLayer</code> object.
   */
  export interface KmlLayerOptions {
    /**
     * If <code>true</code>, the layer receives mouse events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * The map on which to display the layer.
     */
    map?: google.maps.Map | null;
    /**
     * If this option is set to <code>true</code> or if the map&#39;s center and zoom were never set, the input map is centered and zoomed to the bounding box of the contents of the layer.
     * @defaultValue <code>false</code>
     */
    preserveViewport?: boolean | null;
    /**
     * Whether to render the screen overlays.
     * @defaultValue <code>true</code>
     */
    screenOverlays?: boolean | null;
    /**
     * Suppress the rendering of info windows when layer features are clicked.
     */
    suppressInfoWindows?: boolean | null;
    /**
     * The URL of the KML document to display.
     */
    url?: string | null;
    /**
     * The z-index of the layer.
     */
    zIndex?: number | null;
  }
  /**
   * The properties of a click event on a KML/KMZ or GeoRSS document.
   */
  export interface KmlMouseEvent {
    /**
     * A <code>KmlFeatureData</code> object, containing information about the clicked feature.
     */
    featureData: google.maps.KmlFeatureData;
    /**
     * The position at which to anchor an infowindow on the clicked feature.
     */
    latLng: google.maps.LatLng;
    /**
     * The offset to apply to an infowindow anchored on the clicked feature.
     */
    pixelOffset: google.maps.Size;
  }
  /**
   * TrafficLayerOptions object used to define the properties that can be set on a TrafficLayer.
   */
  export interface TrafficLayerOptions {
    /**
     * Whether the traffic layer refreshes with updated information automatically.
     * @defaultValue <code>true</code>
     */
    autoRefresh?: boolean | null;
    /**
     * Map on which to display the traffic layer.
     */
    map?: google.maps.Map | null;
  }
  /**
   * Used for retrieving camera parameters, such as that of the GL camera used for the {@link google.maps.WebGLOverlayView}.
   */
  export interface CameraParams extends google.maps.CameraOptions {

    center: google.maps.LatLng;

    heading: number;

    tilt: number;

    zoom: number;
  }

  export interface Padding {
    /**
     * Padding for the bottom, in pixels.
     */
    bottom?: number;
    /**
     * Padding for the left, in pixels.
     */
    left?: number;
    /**
     * Padding for the right, in pixels.
     */
    right?: number;
    /**
     * Padding for the top, in pixels.
     */
    top?: number;
  }
  /**
   * A structure representing a Marker icon image.
   */
  export interface Icon {
    /**
     * The position at which to anchor an image in correspondence to the location of the marker on the map. By default, the anchor is located along the center point of the bottom of the image.
     */
    anchor?: google.maps.Point | null;
    /**
     * The origin of the label relative to the top-left corner of the icon image, if a label is supplied by the marker. By default, the origin is located in the center point of the image.
     */
    labelOrigin?: google.maps.Point | null;
    /**
     * The position of the image within a sprite, if any. By default, the origin is located at the top left corner of the image <code>(0, 0)</code>.
     */
    origin?: google.maps.Point | null;
    /**
     * The size of the entire image after scaling, if any. Use this property to stretch/shrink an image or a sprite.
     */
    scaledSize?: google.maps.Size | null;
    /**
     * The display size of the sprite or image. When using sprites, you must specify the sprite size. If the size is not provided, it will be set when the image loads.
     */
    size?: google.maps.Size | null;
    /**
     * The URL of the image or sprite sheet.
     */
    url: string;
  }
  /**
   * MarkerOptions object used to define the properties that can be set on a Marker.
   * @deprecated As of February 21st, 2024, google.maps.Marker is deprecated. Please use google.maps.marker.AdvancedMarkerElement instead. Please see <a href="https://developers.google.com/maps/deprecations">https://developers.google.com/maps/deprecations</a> for deprecation details and <a href="https://developers.google.com/maps/documentation/javascript/advanced-markers/migration">https://developers.google.com/maps/documentation/javascript/advanced-markers/migration</a> for the migration guide.
   */
  export interface MarkerOptions {
    /**
     * The offset from the marker&#39;s position to the tip of an InfoWindow that has been opened with the marker as anchor.
     */
    anchorPoint?: google.maps.Point | null;
    /**
     * Which animation to play when marker is added to a map.
     * @defaultValue <code>null</code>
     */
    animation?: google.maps.Animation | null;
    /**
     * If <code>true</code>, the marker receives mouse and touch events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * If <code>false</code>, disables cross that appears beneath the marker when dragging.
     * @defaultValue <code>true</code>
     */
    crossOnDrag?: boolean | null;
    /**
     * Mouse cursor type to show on hover.
     * @defaultValue <code>pointer</code>
     */
    cursor?: string | null;
    /**
     * If <code>true</code>, the marker can be dragged. <b>Note:</b> Setting this to <code>true</code> will make the marker clickable even if <code>clickable</code> is set to <code>false</code>.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean | null;
    /**
     * Icon for the foreground. If a string is provided, it is treated as though it were an <code>Icon</code> with the string as <code>url</code>.
     */
    icon?: string | google.maps.Icon | google.maps.Symbol | null;
    /**
     * Adds a label to the marker. A marker label is a letter or number that appears inside a marker. The label can either be a string, or a <code>MarkerLabel</code> object. If provided and {@link google.maps.MarkerOptions.title} is not provided, an accessibility text (e.g. for use with screen readers) will be added to the marker with the provided label&#39;s text. Please note that the <code>label</code> is currently only used for accessibility text for non-optimized markers.
     * @defaultValue <code>null</code>
     */
    label?: string | google.maps.MarkerLabel | null;
    /**
     * Map on which to display Marker. The map is required to display the marker and can be provided with {@link google.maps.Marker.setMap} if not provided at marker construction.
     */
    map?: google.maps.Map | google.maps.StreetViewPanorama | null;
    /**
     * A number between 0.0, transparent, and 1.0, opaque.
     * @defaultValue 1.0
     */
    opacity?: number | null;
    /**
     * Optimization enhances performance by rendering many markers as a single static element. This is useful in cases where a large number of markers is required. Read more about <a href="https://developers.google.com/maps/documentation/javascript/markers#optimize">marker optimization</a>. <b>Note:</b> This optimization has no effect for markers on vector maps.
     */
    optimized?: boolean | null;
    /**
     * Sets the marker position. A marker may be constructed but not displayed until its position is provided - for example, by a user&#39;s actions or choices. A marker position can be provided with {@link google.maps.Marker.setPosition} if not provided at marker construction.
     */
    position?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * Image map region definition used for drag/click.
     */
    shape?: google.maps.MarkerShape | null;
    /**
     * Rollover text. If provided, an accessibility text (e.g. for use with screen readers) will be added to the marker with the provided value. Please note that the <code>title</code> is currently only used for accessibility text for non-optimized markers.
     * @defaultValue <code>undefined</code>
     */
    title?: string | null;
    /**
     * If <code>true</code>, the marker is visible.
     * @defaultValue <code>true</code>
     */
    visible?: boolean | null;
    /**
     * All markers are displayed on the map in order of their zIndex, with higher values displaying in front of markers with lower values. By default, markers are displayed according to their vertical position on screen, with lower markers appearing in front of markers further up the screen.
     */
    zIndex?: number | null;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Set a collision behavior for markers on vector maps.
     * @defaultValue <code>null</code>
     * @deprecated <code>collisionBehavior</code> is deprecated as of July 2023. Use {@link google.maps.marker.AdvancedMarkerElement.collisionBehavior} instead.
     */
    collisionBehavior?: string | google.maps.CollisionBehaviorString | null;
  }
  /**
   * This object defines the clickable region of a marker image. The shape consists of two properties &mdash; <code>type</code> and <code>coord</code> &mdash; which define the non-transparent region of an image.
   */
  export interface MarkerShape {
    /**
     * The format of this attribute depends on the value of the <code>type</code> and follows the w3 AREA <code>coords</code> specification found at <a href="http://www.w3.org/TR/REC-html40/struct/objects.html#adef-coords"> http://www.w3.org/TR/REC-html40/struct/objects.html#adef-coords</a>. <br>The <code>coords</code> attribute is an array of integers that specify the pixel position of the shape relative to the top-left corner of the target image. The coordinates depend on the value of <code>type</code> as follows: <br>&nbsp;&nbsp;- <code>circle</code>: coords is <code>[x1,y1,r]</code> where x1,y2 are the coordinates of the center of the circle, and r is the radius of the circle. <br>&nbsp;&nbsp;- <code>poly</code>: coords is <code>[x1,y1,x2,y2...xn,yn]</code> where each x,y pair contains the coordinates of one vertex of the polygon. <br>&nbsp;&nbsp;- <code>rect</code>: coords is <code>[x1,y1,x2,y2]</code> where x1,y1 are the coordinates of the upper-left corner of the rectangle and x2,y2 are the coordinates of the lower-right coordinates of the rectangle.
     */
    coords: number[] | null;
    /**
     * Describes the shape&#39;s type and can be <code>circle</code>, <code>poly</code> or <code>rect</code>.
     */
    type: string;
  }
  /**
   * These options specify the appearance of a marker label. A marker label is a string (often a single character) which will appear inside the marker. If you are using it with a custom marker, you can reposition it with the <code>labelOrigin</code> property in the <code>Icon</code> class.
   */
  export interface MarkerLabel {
    /**
     * The className property of the label&#39;s element (equivalent to the element&#39;s class attribute). Multiple space-separated CSS classes can be added. The font color, size, weight, and family can only be set via the other properties of <code>MarkerLabel</code>. CSS classes should not be used to change the position nor orientation of the label (e.g. using translations and rotations) if also using <a href="https://developers.google.com/maps/documentation/javascript/examples/marker-collision-management">marker collision management</a>.
     * @defaultValue <code>&#39;&#39;</code> (empty string)
     */
    className?: string;
    /**
     * The color of the label text.
     * @defaultValue <code>&#39;black&#39;</code>
     */
    color?: string;
    /**
     * The font family of the label text (equivalent to the CSS font-family property).
     */
    fontFamily?: string;
    /**
     * The font size of the label text (equivalent to the CSS font-size property).
     * @defaultValue <code>&#39;14px&#39;</code>
     */
    fontSize?: string;
    /**
     * The font weight of the label text (equivalent to the CSS font-weight property).
     */
    fontWeight?: string;
    /**
     * The text to be displayed in the label.
     */
    text: string;
  }
  /**
   * A MaxZoom result in JSON format retrieved from the MaxZoomService.
   */
  export interface MaxZoomResult {
    /**
     * Status of the request. This property is only defined when using callbacks with {@link google.maps.MaxZoomService.getMaxZoomAtLatLng} (it is not defined when using Promises).
     */
    status: google.maps.MaxZoomStatusString | null;
    /**
     * The maximum zoom level found at the given <code>LatLng</code>.
     */
    zoom: number;
  }
  /**
   * CircleOptions object used to define the properties that can be set on a Circle.
   */
  export interface CircleOptions {
    /**
     * The center of the Circle.
     */
    center?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * Indicates whether this <code>Circle</code> handles mouse events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can drag this circle over the map.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can edit this circle by dragging the control points shown at the center and around the circumference of the circle.
     * @defaultValue <code>false</code>
     */
    editable?: boolean | null;
    /**
     * The fill color. All CSS3 colors are supported except for extended named colors.
     */
    fillColor?: string | null;
    /**
     * The fill opacity between 0.0 and 1.0.
     */
    fillOpacity?: number | null;
    /**
     * Map on which to display the Circle.
     */
    map?: google.maps.Map | null;
    /**
     * The radius in meters on the Earth&#39;s surface.
     */
    radius?: number | null;
    /**
     * The stroke color. All CSS3 colors are supported except for extended named colors.
     */
    strokeColor?: string | null;
    /**
     * The stroke opacity between 0.0 and 1.0.
     */
    strokeOpacity?: number | null;
    /**
     * The stroke position.
     * @defaultValue {@link google.maps.StrokePosition.CENTER}
     */
    strokePosition?: google.maps.StrokePosition | null;
    /**
     * The stroke width in pixels.
     */
    strokeWeight?: number | null;
    /**
     * Whether this circle is visible on the map.
     * @defaultValue <code>true</code>
     */
    visible?: boolean | null;
    /**
     * The zIndex compared to other polys.
     */
    zIndex?: number | null;
  }
  /**
   * Describes how icons are to be rendered on a line. <br><br> If your polyline is geodesic, then the distances specified for both offset and repeat are calculated in meters by default. Setting either offset or repeat to a pixel value will cause the distances to be calculated in pixels on the screen.
   */
  export interface IconSequence {
    /**
     * If <code>true</code>, each icon in the sequence has the same fixed rotation regardless of the angle of the edge on which it lies. If <code>false</code>, case each icon in the sequence is rotated to align with its edge.
     * @defaultValue <code>false</code>
     */
    fixedRotation?: boolean;
    /**
     * The icon to render on the line.
     */
    icon?: google.maps.Symbol | null;
    /**
     * The distance from the start of the line at which an icon is to be rendered. This distance may be expressed as a percentage of line&#39;s length (e.g. &#39;50%&#39;) or in pixels (e.g. &#39;50px&#39;).
     * @defaultValue <code>&#39;100%&#39;</code>
     */
    offset?: string;
    /**
     * The distance between consecutive icons on the line. This distance may be expressed as a percentage of the line&#39;s length (e.g. &#39;50%&#39;) or in pixels (e.g. &#39;50px&#39;). To disable repeating of the icon, specify &#39;0&#39;.
     * @defaultValue <code>0</code>
     */
    repeat?: string;
  }
  /**
   * This object is returned from mouse events on polylines and polygons.
   */
  export interface PolyMouseEvent extends google.maps.MapMouseEvent {
    /**
     * The index of the edge within the path beneath the cursor when the event occurred, if the event occurred on a mid-point on an editable polygon.
     */
    edge?: number;
    /**
     * The index of the path beneath the cursor when the event occurred, if the event occurred on a vertex and the polygon is editable. Otherwise <code>undefined</code>.
     */
    path?: number;
    /**
     * The index of the vertex beneath the cursor when the event occurred, if the event occurred on a vertex and the polyline or polygon is editable. If the event does not occur on a vertex, the value is <code>undefined</code>.
     */
    vertex?: number;
  }
  /**
   * PolygonOptions object used to define the properties that can be set on a Polygon.
   */
  export interface PolygonOptions {
    /**
     * Indicates whether this <code>Polygon</code> handles mouse events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can drag this shape over the map. The <code>geodesic</code> property defines the mode of dragging.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can edit this shape by dragging the control points shown at the vertices and on each segment.
     * @defaultValue <code>false</code>
     */
    editable?: boolean | null;
    /**
     * The fill color. All CSS3 colors are supported except for extended named colors.
     */
    fillColor?: string | null;
    /**
     * The fill opacity between 0.0 and 1.0
     */
    fillOpacity?: number | null;
    /**
     * When <code>true</code>, edges of the polygon are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polygon are rendered as straight lines in screen space. Note that the shape of a geodesic polygon may appear to change when dragged, as the dimensions are maintained relative to the surface of the earth.
     * @defaultValue <code>false</code>
     */
    geodesic?: boolean | null;
    /**
     * Map on which to display Polygon.
     */
    map?: google.maps.Map | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths. As a result, the paths property may specify one or more arrays of <code>LatLng</code> coordinates. Paths are closed automatically; do not repeat the first vertex of the path as the last vertex. Simple polygons may be defined using a single array of <code>LatLng</code>s. More complex polygons may specify an array of arrays. Any simple arrays are converted into <code><a href="#MVCArray">MVCArray</a></code>s. Inserting or removing <code>LatLng</code>s from the <code>MVCArray</code> will automatically update the polygon on the map.
     */
    paths?: google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>> | google.maps.MVCArray<google.maps.LatLng> | (google.maps.LatLng | google.maps.LatLngLiteral)[][] | (google.maps.LatLng | google.maps.LatLngLiteral)[] | null;
    /**
     * The stroke color. All CSS3 colors are supported except for extended named colors.
     */
    strokeColor?: string | null;
    /**
     * The stroke opacity between 0.0 and 1.0
     */
    strokeOpacity?: number | null;
    /**
     * The stroke position.
     * @defaultValue {@link google.maps.StrokePosition.CENTER}
     */
    strokePosition?: google.maps.StrokePosition | null;
    /**
     * The stroke width in pixels.
     */
    strokeWeight?: number | null;
    /**
     * Whether this polygon is visible on the map.
     * @defaultValue <code>true</code>
     */
    visible?: boolean | null;
    /**
     * The zIndex compared to other polys.
     */
    zIndex?: number | null;
  }
  /**
   * PolylineOptions object used to define the properties that can be set on a Polyline.
   */
  export interface PolylineOptions {
    /**
     * Indicates whether this <code>Polyline</code> handles mouse events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can drag this shape over the map. The <code>geodesic</code> property defines the mode of dragging.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can edit this shape by dragging the control points shown at the vertices and on each segment.
     * @defaultValue <code>false</code>
     */
    editable?: boolean | null;
    /**
     * When <code>true</code>, edges of the polygon are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polygon are rendered as straight lines in screen space. Note that the shape of a geodesic polygon may appear to change when dragged, as the dimensions are maintained relative to the surface of the earth.
     * @defaultValue <code>false</code>
     */
    geodesic?: boolean | null;
    /**
     * The icons to be rendered along the polyline.
     */
    icons?: google.maps.IconSequence[] | null;
    /**
     * Map on which to display Polyline.
     */
    map?: google.maps.Map | null;
    /**
     * The ordered sequence of coordinates of the Polyline. This path may be specified using either a simple array of <code>LatLng</code>s, or an <code>MVCArray</code> of <code>LatLng</code>s. Note that if you pass a simple array, it will be converted to an <code>MVCArray</code> Inserting or removing LatLngs in the <code>MVCArray</code> will automatically update the polyline on the map.
     */
    path?: google.maps.MVCArray<google.maps.LatLng> | (google.maps.LatLng | google.maps.LatLngLiteral)[] | null;
    /**
     * The stroke color. All CSS3 colors are supported except for extended named colors.
     */
    strokeColor?: string | null;
    /**
     * The stroke opacity between 0.0 and 1.0.
     */
    strokeOpacity?: number | null;
    /**
     * The stroke width in pixels.
     */
    strokeWeight?: number | null;
    /**
     * Whether this polyline is visible on the map.
     * @defaultValue <code>true</code>
     */
    visible?: boolean | null;
    /**
     * The zIndex compared to other polys.
     */
    zIndex?: number | null;
  }
  /**
   * RectangleOptions object used to define the properties that can be set on a Rectangle.
   */
  export interface RectangleOptions {
    /**
     * The bounds.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * Indicates whether this <code>Rectangle</code> handles mouse events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can drag this rectangle over the map.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean | null;
    /**
     * If set to <code>true</code>, the user can edit this rectangle by dragging the control points shown at the corners and on each edge.
     * @defaultValue <code>false</code>
     */
    editable?: boolean | null;
    /**
     * The fill color. All CSS3 colors are supported except for extended named colors.
     */
    fillColor?: string | null;
    /**
     * The fill opacity between 0.0 and 1.0
     */
    fillOpacity?: number | null;
    /**
     * Map on which to display Rectangle.
     */
    map?: google.maps.Map | null;
    /**
     * The stroke color. All CSS3 colors are supported except for extended named colors.
     */
    strokeColor?: string | null;
    /**
     * The stroke opacity between 0.0 and 1.0
     */
    strokeOpacity?: number | null;
    /**
     * The stroke position.
     * @defaultValue {@link google.maps.StrokePosition.CENTER}
     */
    strokePosition?: google.maps.StrokePosition | null;
    /**
     * The stroke width in pixels.
     */
    strokeWeight?: number | null;
    /**
     * Whether this rectangle is visible on the map.
     * @defaultValue <code>true</code>
     */
    visible?: boolean | null;
    /**
     * The zIndex compared to other polys.
     */
    zIndex?: number | null;
  }
  /**
   * An interface representing a feature with a place ID which includes features of type {@link google.maps.FeatureType.ADMINISTRATIVE_AREA_LEVEL_1}, {@link google.maps.FeatureType.ADMINISTRATIVE_AREA_LEVEL_2}, {@link google.maps.FeatureType.COUNTRY}, {@link google.maps.FeatureType.LOCALITY}, {@link google.maps.FeatureType.POSTAL_CODE}, and {@link google.maps.FeatureType.SCHOOL_DISTRICT}.
   */
  export interface PlaceFeature extends google.maps.Feature {
    /**
     * The {@link google.maps.places.PlaceResult.place_id}.
     */
    placeId: string;
    /**
     * Fetches a <code>Place</code> for this <code>PlaceFeature</code>. In the resulting <code>Place</code> object, the <code>id</code> and the <code>displayName</code> properties will be populated. The display name will be in the language the end user sees on the map. (Additional fields can be subsequently requested via <code>Place.fetchFields()</code> subject to normal Places API enablement and billing.) Do not call this from a <code>FeatureStyleFunction</code> since only synchronous FeatureStyleFunctions are supported. The promise is rejected if there was an error fetching the <code>Place</code>.
     */
    fetchPlace(): Promise<google.maps.places.Place>;
  }
  /**
   * Options for the Custom Pano Provider.
   */
  export interface PanoProviderOptions {
    /**
     * If set, the renderer will use technologies (like webgl) that only work when cors headers are appropriately set on the provided images. It is the developer&#39;s task to serve the images correctly in combination with this flag, which might otherwise lead to SecurityErrors.
     */
    cors?: boolean;
  }
  /**
   * A collection of references to adjacent Street View panos.
   */
  export interface StreetViewLink {
    /**
     * A localized string describing the link.
     */
    description: string | null;
    /**
     * The heading of the link.
     */
    heading: number | null;
    /**
     * A unique identifier for the panorama. This id is stable within a session but unstable across sessions.
     */
    pano: string | null;
  }
  /**
   * A representation of a location in the Street View panorama.
   */
  export interface StreetViewLocation {
    /**
     * A localized string describing the location.
     */
    description?: string | null;
    /**
     * The latlng of the panorama.
     */
    latLng?: google.maps.LatLng | null;
    /**
     * A unique identifier for the panorama. This is stable within a session but unstable across sessions.
     */
    pano: string;
    /**
     * Short description of the location.
     */
    shortDescription?: string | null;
  }
  /**
   * A Street View request to be sent with <code>getPanorama</code>. <code>StreetViewLocationRequest</code> lets you search for a Street View panoroma at a specified location.
   */
  export interface StreetViewLocationRequest {
    /**
     * Specifies the location where to search for a Street View panorama.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * Sets a preference for which panorama should be found within the radius: the one nearest to the provided location, or the best one within the radius.
     */
    preference?: google.maps.StreetViewPreferenceString | null;
    /**
     * Sets a radius in meters in which to search for a panorama.
     * @defaultValue <code>50</code>
     */
    radius?: number | null;
    /**
     * Specifies the sources of panoramas to search. This allows a restriction to search for just outdoor panoramas for example. Setting multiple sources will be evaluated as the intersection of those sources.
     * @defaultValue [{@link google.maps.StreetViewSource.DEFAULT}]
     */
    sources?: Iterable<google.maps.StreetViewSourceString> | null;
    /**
     * Specifies the source of panoramas to search. This allows a restriction to search for just outdoor panoramas for example.
     * @defaultValue {@link google.maps.StreetViewSource.DEFAULT}
     * @deprecated Use <code>sources</code> instead.
     */
    source?: google.maps.StreetViewSourceString | null;
  }
  /**
   * A <code>StreetViewPanoRequest</code> is used with the <code>getPanorama</code> to find a panorama with a specified ID.
   */
  export interface StreetViewPanoRequest {
    /**
     * Specifies the pano ID to search for.
     */
    pano?: string | null;
  }
  /**
   * The representation of a panorama returned from the provider defined using <code>registerPanoProvider</code>.
   */
  export interface StreetViewPanoramaData {
    /**
     * Specifies the copyright text for this panorama.
     */
    copyright?: string;
    /**
     * Specifies the year and month in which the imagery in this panorama was acquired. The date string is in the form YYYY-MM.
     */
    imageDate?: string;
    /**
     * Specifies the navigational links to adjacent panoramas.
     */
    links?: google.maps.StreetViewLink[];
    /**
     * Specifies the location meta-data for this panorama.
     */
    location?: google.maps.StreetViewLocation;
    /**
     * Specifies the custom tiles for this panorama.
     */
    tiles: google.maps.StreetViewTileData;
  }
  /**
   * Options for the rendering of the pan control.
   */
  export interface PanControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_END_BLOCK_END}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options for the rendering of the zoom control.
   */
  export interface ZoomControlOptions {
    /**
     * Position id. Used to specify the position of the control on the map.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_END_BLOCK_END}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options for the rendering of the motion tracking control.
   */
  export interface MotionTrackingControlOptions {
    /**
     * Position id. This is used to specify the position of this control on the panorama.
     * @defaultValue {@link google.maps.ControlPosition.INLINE_END_BLOCK_END}
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options for the rendering of the Street View address control.
   */
  export interface StreetViewAddressControlOptions {
    /**
     * Position id. This id is used to specify the position of the control on the map. The default position is <code>TOP_LEFT</code>.
     */
    position?: google.maps.ControlPosition | null;
  }
  /**
   * Options defining the properties of a <code>StreetViewPanorama</code> object.
   */
  export interface StreetViewPanoramaOptions {
    /**
     * The enabled/disabled state of the address control.
     */
    addressControl?: boolean | null;
    /**
     * The display options for the address control.
     */
    addressControlOptions?: google.maps.StreetViewAddressControlOptions | null;
    /**
     * The enabled/disabled state of click-to-go. Not applicable to custom panoramas.
     * @defaultValue <code>true</code>
     */
    clickToGo?: boolean | null;
    /**
     * Size in pixels of the controls appearing on the panorama. This value must be supplied directly when creating the Panorama, updating this value later may bring the controls into an undefined state. Only governs the controls made by the Maps API itself. Does not scale developer created custom controls.
     */
    controlSize?: number | null;
    /**
     * Enables/disables all default UI. May be overridden individually.
     */
    disableDefaultUI?: boolean | null;
    /**
     * Enables/disables zoom on double click.
     * @defaultValue <code>true</code>
     */
    disableDoubleClickZoom?: boolean | null;
    /**
     * If <code>true</code>, the close button is displayed.
     * @defaultValue <code>false</code>
     */
    enableCloseButton?: boolean | null;
    /**
     * The enabled/disabled state of the fullscreen control.
     */
    fullscreenControl?: boolean | null;
    /**
     * The display options for the fullscreen control.
     */
    fullscreenControlOptions?: google.maps.FullscreenControlOptions | null;
    /**
     * The enabled/disabled state of the imagery acquisition date control. Disabled by default.
     */
    imageDateControl?: boolean | null;
    /**
     * The enabled/disabled state of the links control.
     */
    linksControl?: boolean | null;
    /**
     * Whether motion tracking is on or off. Enabled by default when the motion tracking control is present and permission is granted by a user or not required, so that the POV (point of view) follows the orientation of the device. This is primarily applicable to mobile devices. If <code>motionTracking</code> is set to <code>false</code> while <code>motionTrackingControl</code> is enabled, the motion tracking control appears but tracking is off. The user can tap the motion tracking control to toggle this option. If <code>motionTracking</code> is set to <code>true</code> while permission is required but not yet requested, the motion tracking control appears but tracking is off. The user can tap the motion tracking control to request permission. If <code>motionTracking</code> is set to <code>true</code> while permission is denied by a user, the motion tracking control appears disabled with tracking turned off.
     */
    motionTracking?: boolean | null;
    /**
     * The enabled/disabled state of the motion tracking control. Enabled by default when the device has motion data, so that the control appears on the map. This is primarily applicable to mobile devices.
     */
    motionTrackingControl?: boolean | null;
    /**
     * The display options for the motion tracking control.
     */
    motionTrackingControlOptions?: google.maps.MotionTrackingControlOptions | null;
    /**
     * The enabled/disabled state of the pan control.
     */
    panControl?: boolean | null;
    /**
     * The display options for the pan control.
     */
    panControlOptions?: google.maps.PanControlOptions | null;
    /**
     * The panorama ID, which should be set when specifying a custom panorama.
     */
    pano?: string | null;
    /**
     * The <code>LatLng</code> position of the Street View panorama.
     */
    position?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * The camera orientation, specified as heading and pitch, for the panorama.
     */
    pov?: google.maps.StreetViewPov | null;
    /**
     * If <code>false</code>, disables scrollwheel zooming in Street View.
     * @defaultValue <code>true</code>
     */
    scrollwheel?: boolean | null;
    /**
     * The display of street names on the panorama. If this value is not specified, or is set to <code>true</code>, street names are displayed on the panorama. If set to <code>false</code>, street names are not displayed.
     * @defaultValue <code>true</code>
     */
    showRoadLabels?: boolean | null;
    /**
     * If <code>true</code>, the Street View panorama is visible on load.
     */
    visible?: boolean | null;
    /**
     * The zoom of the panorama, specified as a number. A zoom of 0 gives a 180 degrees Field of View.
     */
    zoom?: number | null;
    /**
     * The enabled/disabled state of the zoom control.
     */
    zoomControl?: boolean | null;
    /**
     * The display options for the zoom control.
     */
    zoomControlOptions?: google.maps.ZoomControlOptions | null;
  }
  /**
   * The properties of the tile set used in a Street View panorama.
   */
  export interface StreetViewTileData {
    /**
     * The heading (in degrees) at the center of the panoramic tiles.
     */
    centerHeading: number;
    /**
     * The size (in pixels) at which tiles will be rendered.
     */
    tileSize: google.maps.Size;
    /**
     * The size (in pixels) of the whole panorama&#39;s &quot;world&quot;.
     */
    worldSize: google.maps.Size;
    /**
     * Gets the tile image URL for the specified tile.<br/> This is a custom method which you must implement, to supply your custom tiles. The API calls this method, supplying the following parameters:</br> <code>pano</code> is the panorama ID of the Street View tile.<br/> <code>tileZoom</code> is the zoom level of the tile.<br/> <code>tileX</code> is the x-coordinate of the tile.<br/> <code>tileY</code> is the y-coordinate of the tile.<br/> Your custom method must return the URL for the tile image.<br/>
     */
    getTileUrl(pano: string, tileZoom: number, tileX: number, tileY: number): string;
  }
  /**
   * This object is returned from various mouse events on the map and overlays, and contains all the fields shown below.
   */
  export interface MapMouseEvent {
    /**
     * The corresponding native DOM event. Developers should not rely on <code>target</code>, <code>currentTarget</code>, <code>relatedTarget</code> and <code>path</code> properties being defined and consistent. Developers should not also rely on the DOM structure of the internal implementation of the Maps API. Due to internal event mapping, the <code>domEvent</code> may have different semantics from the {@link google.maps.MapMouseEvent} (e.g. a {@link google.maps.MapMouseEvent} &quot;click&quot; may have a <code>domEvent</code> of type <code>KeyboardEvent</code>).
     */
    domEvent: MouseEvent | TouchEvent | PointerEvent | KeyboardEvent | Event;
    /**
     * The latitude/longitude that was below the cursor when the event occurred.
     */
    latLng: google.maps.LatLng | null;
    /**
     * Prevents this event from propagating further.
     */
    stop(): void;
  }
  /**
   * Object literals are accepted in place of <code>LatLngAltitude</code> objects, as a convenience, in many places. These are converted to <code>LatLngAltitude</code> objects when the Maps API encounters them.
   */
  export interface LatLngAltitudeLiteral extends google.maps.LatLngLiteral {
    /**
     * Distance (in meters) above the ground surface. Negative value means underneath the ground surface.
     */
    altitude: number;
    /**
     * Latitude in degrees. Values will be clamped to the range [-90, 90]. This means that if the value specified is less than -90, it will be set to -90. And if the value is greater than 90, it will be set to 90.
     */
    lat: number;
    /**
     * Longitude in degrees. Values outside the range [-180, 180] will be wrapped so that they fall within the range. For example, a value of -190 will be converted to 170. A value of 190 will be converted to -170. This reflects the fact that longitudes wrap around the globe.
     */
    lng: number;
  }
  /**
   * This interface provides convenience methods for generating matrices to use for rendering WebGL scenes on top of the Google base map. <br><br>Note: A reference to this object should <b>not</b> be held outside of the scope of the encapsulating {@link google.maps.WebGLOverlayView.onDraw} call.
   */
  export interface CoordinateTransformer {

    fromLatLngAltitude(latLngAltitude: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral, rotations?: Float32Array, scale?: Float32Array): Float64Array;

    getCameraParams(): google.maps.CameraParams;
  }
  /**
   * Contains information needed to locate, identify, or describe a place for a {@link google.maps.DirectionsRequest} or {@link google.maps.DistanceMatrixRequest}. In this context, &quot;place&quot; means a business, point of interest, or geographic location. For fetching information about a place, see {@link google.maps.places.PlacesService}.
   */
  export interface Place {
    /**
     * The <code>LatLng</code> of the entity described by this place.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * The place ID of the place (such as a business or point of interest). The place ID is a unique identifier of a place in the Google Maps database. Note that the <code>placeId</code> is the most accurate way of identifying a place. If possible, you should specify the <code>placeId</code> rather than a <code>query</code>. A place ID can be retrieved from any request to the Places API, such as a <a href="https://developers.google.com/maps/documentation/places/web-service/search">TextSearch</a>. Place IDs can also be retrieved from requests to the Geocoding API. For more information, see the <a href="https://developers.google.com/maps/documentation/places/web-service/place-id">overview of place IDs</a>.
     */
    placeId?: string;
    /**
     * A search query describing the place (such as a business or point of interest). An example query is &quot;Quay, Upper Level, Overseas Passenger Terminal 5 Hickson Road, The Rocks NSW&quot;. If possible, you should specify the <code>placeId</code> rather than a <code>query</code>. The API does not guarantee the accuracy of resolving the query string to a place. If both the <code>placeId</code> and <code>query</code> are provided, an error occurs.
     */
    query?: string;
  }

  export interface AddressValidationLibrary {

    Address: typeof google.maps.addressValidation.Address;

    AddressComponent: typeof google.maps.addressValidation.AddressComponent;

    AddressMetadata: typeof google.maps.addressValidation.AddressMetadata;

    AddressValidation: typeof google.maps.addressValidation.AddressValidation;

    ConfirmationLevel: typeof google.maps.addressValidation.ConfirmationLevel;

    Geocode: typeof google.maps.addressValidation.Geocode;

    Granularity: typeof google.maps.addressValidation.Granularity;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     */
    PossibleNextAction: typeof google.maps.addressValidation.PossibleNextAction;

    USPSAddress: typeof google.maps.addressValidation.USPSAddress;

    USPSData: typeof google.maps.addressValidation.USPSData;

    Verdict: typeof google.maps.addressValidation.Verdict;
  }

  export interface AirQualityLibrary {

    AirQualityMeterElement: typeof google.maps.airQuality.AirQualityMeterElement;
  }

  export interface DrawingLibrary {

    DrawingManager: typeof google.maps.drawing.DrawingManager;

    OverlayType: typeof google.maps.drawing.OverlayType;
  }

  export interface ElevationLibrary {

    ElevationService: typeof google.maps.ElevationService;

    ElevationStatus: typeof google.maps.ElevationStatus;
  }
  /**
   * Object literal which represents a circle.
   */
  export interface CircleLiteral extends google.maps.CircleOptions {
    /**
     * The center of the Circle.
     */
    center: google.maps.LatLng | google.maps.LatLngLiteral;
    /**
     * The radius in meters on the Earth&#39;s surface.
     */
    radius: number;
  }

  export interface GeometryLibrary {

    encoding: typeof google.maps.geometry.encoding;

    poly: typeof google.maps.geometry.poly;

    spherical: typeof google.maps.geometry.spherical;
  }
  /**
   * This object is made available to the <code>OverlayView</code> from within the draw method. It is not guaranteed to be initialized until draw is called.
   */
  export interface MapCanvasProjection {
    /**
     * Computes the geographical coordinates from pixel coordinates in the map&#39;s container.
     */
    fromContainerPixelToLatLng(pixel: google.maps.Point | null, noClampNoWrap?: boolean): google.maps.LatLng | null;
    /**
     * Computes the geographical coordinates from pixel coordinates in the div that holds the draggable map.
     */
    fromDivPixelToLatLng(pixel: google.maps.Point | null, noClampNoWrap?: boolean): google.maps.LatLng | null;
    /**
     * Computes the pixel coordinates of the given geographical location in the map&#39;s container element.
     */
    fromLatLngToContainerPixel(latLng: google.maps.LatLng | google.maps.LatLngLiteral): google.maps.Point | null;
    /**
     * Computes the pixel coordinates of the given geographical location in the DOM element that holds the draggable map.
     */
    fromLatLngToDivPixel(latLng: google.maps.LatLng | google.maps.LatLngLiteral | null): google.maps.Point | null;
    /**
     * The visible region of the map. Returns <code>null</code> if the map has no size. Returns <code>null</code> if the OverlayView is on a StreetViewPanorama.
     */
    getVisibleRegion(): google.maps.VisibleRegion | null;
    /**
     * The width of the world in pixels in the current zoom level. For projections with a heading angle of either 90 or 270 degrees, this corresponds to the pixel span in the Y-axis.
     */
    getWorldWidth(): number;
  }

  export interface MarkerLibrary {

    AdvancedMarkerClickEvent: typeof google.maps.marker.AdvancedMarkerClickEvent;

    AdvancedMarkerElement: typeof google.maps.marker.AdvancedMarkerElement;

    Animation: typeof google.maps.Animation;

    CollisionBehavior: typeof google.maps.CollisionBehavior;

    Marker: typeof google.maps.Marker;

    PinElement: typeof google.maps.marker.PinElement;
  }

  export interface Maps3DLibrary {

    AltitudeMode: typeof google.maps.maps3d.AltitudeMode;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     */
    AutofitsCameraAnimation: typeof google.maps.maps3d.AutofitsCameraAnimation;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     */
    CirclePathElement: typeof google.maps.maps3d.CirclePathElement;

    FlattenerElement: typeof google.maps.maps3d.FlattenerElement;

    GestureHandling: typeof google.maps.maps3d.GestureHandling;

    LocationClickEvent: typeof google.maps.maps3d.LocationClickEvent;

    Map3DElement: typeof google.maps.maps3d.Map3DElement;

    MapMode: typeof google.maps.maps3d.MapMode;

    Marker3DElement: typeof google.maps.maps3d.Marker3DElement;

    Marker3DInteractiveElement: typeof google.maps.maps3d.Marker3DInteractiveElement;

    MarkerElement: typeof google.maps.maps3d.MarkerElement;

    MarkerInteractiveElement: typeof google.maps.maps3d.MarkerInteractiveElement;

    Model3DElement: typeof google.maps.maps3d.Model3DElement;

    Model3DInteractiveElement: typeof google.maps.maps3d.Model3DInteractiveElement;

    PlaceClickEvent: typeof google.maps.maps3d.PlaceClickEvent;

    Polygon3DElement: typeof google.maps.maps3d.Polygon3DElement;

    Polygon3DInteractiveElement: typeof google.maps.maps3d.Polygon3DInteractiveElement;

    Polyline3DElement: typeof google.maps.maps3d.Polyline3DElement;

    Polyline3DInteractiveElement: typeof google.maps.maps3d.Polyline3DInteractiveElement;

    PopoverElement: typeof google.maps.maps3d.PopoverElement;

    SteadyChangeEvent: typeof google.maps.maps3d.SteadyChangeEvent;
  }

  export interface PlacesLibrary {

    AccessibilityOptions: typeof google.maps.places.AccessibilityOptions;

    AddressComponent: typeof google.maps.places.AddressComponent;

    AddressDescriptor: typeof google.maps.places.AddressDescriptor;

    Area: typeof google.maps.places.Area;

    Attribution: typeof google.maps.places.Attribution;

    AttributionColor: typeof google.maps.places.AttributionColor;

    AuthorAttribution: typeof google.maps.places.AuthorAttribution;

    Autocomplete: typeof google.maps.places.Autocomplete;

    AutocompleteService: typeof google.maps.places.AutocompleteService;

    AutocompleteSessionToken: typeof google.maps.places.AutocompleteSessionToken;

    AutocompleteSuggestion: typeof google.maps.places.AutocompleteSuggestion;

    BasicPlaceAutocompleteElement: typeof google.maps.places.BasicPlaceAutocompleteElement;

    BusinessStatus: typeof google.maps.places.BusinessStatus;

    ConnectorAggregation: typeof google.maps.places.ConnectorAggregation;

    ConsumerAlert: typeof google.maps.places.ConsumerAlert;

    ConsumerAlertDetails: typeof google.maps.places.ConsumerAlertDetails;

    Containment: typeof google.maps.places.Containment;

    ContentBlock: typeof google.maps.places.ContentBlock;

    EVChargeAmenitySummary: typeof google.maps.places.EVChargeAmenitySummary;

    EVChargeOptions: typeof google.maps.places.EVChargeOptions;

    EVConnectorType: typeof google.maps.places.EVConnectorType;

    FormattableText: typeof google.maps.places.FormattableText;

    FuelOptions: typeof google.maps.places.FuelOptions;

    FuelPrice: typeof google.maps.places.FuelPrice;

    FuelType: typeof google.maps.places.FuelType;

    GenerativeSummary: typeof google.maps.places.GenerativeSummary;

    GoogleMapsLinks: typeof google.maps.places.GoogleMapsLinks;

    Landmark: typeof google.maps.places.Landmark;

    MediaSize: typeof google.maps.places.MediaSize;

    Money: typeof google.maps.places.Money;

    NeighborhoodSummary: typeof google.maps.places.NeighborhoodSummary;

    OpeningHours: typeof google.maps.places.OpeningHours;

    OpeningHoursPeriod: typeof google.maps.places.OpeningHoursPeriod;

    OpeningHoursPoint: typeof google.maps.places.OpeningHoursPoint;

    ParkingOptions: typeof google.maps.places.ParkingOptions;

    PaymentOptions: typeof google.maps.places.PaymentOptions;

    Photo: typeof google.maps.places.Photo;

    Place: typeof google.maps.places.Place;

    PlaceAccessibleEntranceIconElement: typeof google.maps.places.PlaceAccessibleEntranceIconElement;

    PlaceAddressElement: typeof google.maps.places.PlaceAddressElement;

    PlaceAllContentElement: typeof google.maps.places.PlaceAllContentElement;

    PlaceAttributionElement: typeof google.maps.places.PlaceAttributionElement;

    PlaceAutocompleteElement: typeof google.maps.places.PlaceAutocompleteElement;

    PlaceContentConfigElement: typeof google.maps.places.PlaceContentConfigElement;

    PlaceContextualElement: typeof google.maps.places.PlaceContextualElement;

    PlaceContextualListConfigElement: typeof google.maps.places.PlaceContextualListConfigElement;

    PlaceContextualListLayout: typeof google.maps.places.PlaceContextualListLayout;

    PlaceDetailsCompactElement: typeof google.maps.places.PlaceDetailsCompactElement;

    PlaceDetailsElement: typeof google.maps.places.PlaceDetailsElement;

    PlaceDetailsLocationRequestElement: typeof google.maps.places.PlaceDetailsLocationRequestElement;

    PlaceDetailsOrientation: typeof google.maps.places.PlaceDetailsOrientation;

    PlaceDetailsPlaceRequestElement: typeof google.maps.places.PlaceDetailsPlaceRequestElement;

    PlaceFeatureListElement: typeof google.maps.places.PlaceFeatureListElement;

    PlaceMediaElement: typeof google.maps.places.PlaceMediaElement;

    PlaceNearbySearchRequestElement: typeof google.maps.places.PlaceNearbySearchRequestElement;

    PlaceOpeningHoursElement: typeof google.maps.places.PlaceOpeningHoursElement;

    PlaceOpenNowStatusElement: typeof google.maps.places.PlaceOpenNowStatusElement;

    PlacePhoneNumberElement: typeof google.maps.places.PlacePhoneNumberElement;

    PlacePlusCodeElement: typeof google.maps.places.PlacePlusCodeElement;

    PlacePrediction: typeof google.maps.places.PlacePrediction;

    PlacePredictionSelectEvent: typeof google.maps.places.PlacePredictionSelectEvent;

    PlacePriceElement: typeof google.maps.places.PlacePriceElement;

    PlaceRatingElement: typeof google.maps.places.PlaceRatingElement;

    PlaceReviewsElement: typeof google.maps.places.PlaceReviewsElement;

    PlaceReviewSummaryElement: typeof google.maps.places.PlaceReviewSummaryElement;

    PlaceSearchAttributionPosition: typeof google.maps.places.PlaceSearchAttributionPosition;

    PlaceSearchElement: typeof google.maps.places.PlaceSearchElement;

    PlaceSearchOrientation: typeof google.maps.places.PlaceSearchOrientation;

    PlaceSelectEvent: typeof google.maps.places.PlaceSelectEvent;

    PlacesService: typeof google.maps.places.PlacesService;

    PlacesServiceStatus: typeof google.maps.places.PlacesServiceStatus;

    PlaceStandardContentElement: typeof google.maps.places.PlaceStandardContentElement;

    PlaceSummaryElement: typeof google.maps.places.PlaceSummaryElement;

    PlaceTextSearchRequestElement: typeof google.maps.places.PlaceTextSearchRequestElement;

    PlaceTypeElement: typeof google.maps.places.PlaceTypeElement;

    PlaceTypeSpecificHighlightsElement: typeof google.maps.places.PlaceTypeSpecificHighlightsElement;

    PlaceWebsiteElement: typeof google.maps.places.PlaceWebsiteElement;

    PlusCode: typeof google.maps.places.PlusCode;

    PostalAddress: typeof google.maps.places.PostalAddress;

    PriceLevel: typeof google.maps.places.PriceLevel;

    PriceRange: typeof google.maps.places.PriceRange;

    RankBy: typeof google.maps.places.RankBy;

    Review: typeof google.maps.places.Review;

    ReviewSummary: typeof google.maps.places.ReviewSummary;

    SearchBox: typeof google.maps.places.SearchBox;

    SearchByTextRankPreference: typeof google.maps.places.SearchByTextRankPreference;

    SearchNearbyRankPreference: typeof google.maps.places.SearchNearbyRankPreference;

    SecondaryOpeningHours: typeof google.maps.places.SecondaryOpeningHours;

    SpatialRelationship: typeof google.maps.places.SpatialRelationship;

    StringRange: typeof google.maps.places.StringRange;

    TimeZone: typeof google.maps.places.TimeZone;

    TransitAgency: typeof google.maps.places.TransitAgency;

    TransitIcon: typeof google.maps.places.TransitIcon;

    TransitLine: typeof google.maps.places.TransitLine;

    TransitStation: typeof google.maps.places.TransitStation;

    TransitStop: typeof google.maps.places.TransitStop;

    TransitVehicleType: typeof google.maps.places.TransitVehicleType;
  }

  export interface RoutesLibrary {

    ComputeRouteMatrixExtraComputation: typeof google.maps.routes.ComputeRouteMatrixExtraComputation;

    ComputeRoutesExtraComputation: typeof google.maps.routes.ComputeRoutesExtraComputation;

    DirectionalLocation: typeof google.maps.routes.DirectionalLocation;

    DirectionsRenderer: typeof google.maps.DirectionsRenderer;

    DirectionsService: typeof google.maps.DirectionsService;

    DirectionsStatus: typeof google.maps.DirectionsStatus;

    DistanceMatrixElementStatus: typeof google.maps.DistanceMatrixElementStatus;

    DistanceMatrixService: typeof google.maps.DistanceMatrixService;

    DistanceMatrixStatus: typeof google.maps.DistanceMatrixStatus;

    FallbackInfo: typeof google.maps.routes.FallbackInfo;

    FallbackReason: typeof google.maps.routes.FallbackReason;

    FallbackRoutingMode: typeof google.maps.routes.FallbackRoutingMode;

    GeocodedWaypoint: typeof google.maps.routes.GeocodedWaypoint;

    GeocodingResults: typeof google.maps.routes.GeocodingResults;

    MultiModalSegment: typeof google.maps.routes.MultiModalSegment;

    PolylineDetailInfo: typeof google.maps.routes.PolylineDetailInfo;

    PolylineDetails: typeof google.maps.routes.PolylineDetails;

    PolylineQuality: typeof google.maps.routes.PolylineQuality;

    ReferenceRoute: typeof google.maps.routes.ReferenceRoute;

    RoadFeatureState: typeof google.maps.routes.RoadFeatureState;

    Route: typeof google.maps.routes.Route;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     */
    Route3DElement: typeof google.maps.routes.Route3DElement;

    RouteLabel: typeof google.maps.routes.RouteLabel;

    RouteLeg: typeof google.maps.routes.RouteLeg;

    RouteLegLocalizedValues: typeof google.maps.routes.RouteLegLocalizedValues;

    RouteLegStep: typeof google.maps.routes.RouteLegStep;

    RouteLegStepLocalizedValues: typeof google.maps.routes.RouteLegStepLocalizedValues;

    RouteLegTravelAdvisory: typeof google.maps.routes.RouteLegTravelAdvisory;

    RouteLocalizedValues: typeof google.maps.routes.RouteLocalizedValues;

    RouteMatrix: typeof google.maps.routes.RouteMatrix;

    RouteMatrixItem: typeof google.maps.routes.RouteMatrixItem;

    RouteMatrixItemCondition: typeof google.maps.routes.RouteMatrixItemCondition;

    RouteMatrixItemError: typeof google.maps.routes.RouteMatrixItemError;

    RouteMatrixItemLocalizedValues: typeof google.maps.routes.RouteMatrixItemLocalizedValues;

    RouteMatrixRow: typeof google.maps.routes.RouteMatrixRow;

    RouteTravelAdvisory: typeof google.maps.routes.RouteTravelAdvisory;

    RoutingPreference: typeof google.maps.routes.RoutingPreference;

    Speed: typeof google.maps.routes.Speed;

    SpeedReadingInterval: typeof google.maps.routes.SpeedReadingInterval;

    StepsOverview: typeof google.maps.routes.StepsOverview;

    TollInfo: typeof google.maps.routes.TollInfo;

    TrafficModel: typeof google.maps.TrafficModel;

    TransitAgency: typeof google.maps.routes.TransitAgency;

    TransitDetails: typeof google.maps.routes.TransitDetails;

    TransitLine: typeof google.maps.routes.TransitLine;

    TransitMode: typeof google.maps.TransitMode;

    TransitRoutePreference: typeof google.maps.TransitRoutePreference;

    TransitStop: typeof google.maps.routes.TransitStop;

    TransitVehicle: typeof google.maps.routes.TransitVehicle;

    TravelMode: typeof google.maps.TravelMode;

    VehicleEmissionType: typeof google.maps.routes.VehicleEmissionType;

    VehicleType: typeof google.maps.VehicleType;
  }

  export interface VisualizationLibrary {

    HeatmapLayer: typeof google.maps.visualization.HeatmapLayer;
  }

  export interface MapPanes {
    /**
     * This pane contains the info window. It is above all map overlays. (Pane 4).
     */
    floatPane: Element;
    /**
     * This pane is the lowest pane and is above the tiles. It does not receive DOM events. (Pane 0).
     */
    mapPane: Element;
    /**
     * This pane contains markers. It does not receive DOM events. (Pane 2).
     */
    markerLayer: Element;
    /**
     * This pane contains polylines, polygons, ground overlays and tile layer overlays. It does not receive DOM events. (Pane 1).
     */
    overlayLayer: Element;
    /**
     * This pane contains elements that receive DOM events. (Pane 3).
     */
    overlayMouseTarget: Element;
  }
  /**
   * Loads a <a href="https://developers.google.com/maps/documentation/javascript/libraries">library</a> of the Maps JavaScript API, resolving with the direct members of that API (without namespacing). (When loaded, libraries also add themselves to the global <code>google.maps</code> namespace, though using the global namespace is not generally recommended.)
   */
  export function importLibrary(libraryName: "core"): Promise<google.maps.CoreLibrary>;
  export function importLibrary(libraryName: "maps"): Promise<google.maps.MapsLibrary>;
  export function importLibrary(libraryName: "geocoding"): Promise<google.maps.GeocodingLibrary>;
  export function importLibrary(libraryName: "streetView"): Promise<google.maps.StreetViewLibrary>;
  export function importLibrary(libraryName: "maps3d"): Promise<google.maps.Maps3DLibrary>;
  export function importLibrary(libraryName: "places"): Promise<google.maps.PlacesLibrary>;
  export function importLibrary(libraryName: "routes"): Promise<google.maps.RoutesLibrary>;
  export function importLibrary(libraryName: "marker"): Promise<google.maps.MarkerLibrary>;
  export function importLibrary(libraryName: "geometry"): Promise<google.maps.GeometryLibrary>;
  export function importLibrary(libraryName: "elevation"): Promise<google.maps.ElevationLibrary>;
  export function importLibrary(libraryName: "journeySharing"): Promise<google.maps.JourneySharingLibrary>;
  export function importLibrary(libraryName: "drawing"): Promise<google.maps.DrawingLibrary>;
  export function importLibrary(libraryName: "visualization"): Promise<google.maps.VisualizationLibrary>;
  export function importLibrary(libraryName: "addressValidation"): Promise<google.maps.AddressValidationLibrary>;
  export function importLibrary(libraryName: "airQuality"): Promise<google.maps.AirQualityLibrary>;
  export function importLibrary(libraryName: string): Promise<google.maps.CoreLibrary | google.maps.MapsLibrary | google.maps.Maps3DLibrary | google.maps.PlacesLibrary | google.maps.GeocodingLibrary | google.maps.RoutesLibrary | google.maps.MarkerLibrary | google.maps.GeometryLibrary | google.maps.ElevationLibrary | google.maps.StreetViewLibrary | google.maps.JourneySharingLibrary | google.maps.DrawingLibrary | google.maps.VisualizationLibrary>;
  /**
   * Google Maps JavaScript API version loaded by the browser. See <a href="https://developers.google.com/maps/documentation/javascript/versions">https://developers.google.com/maps/documentation/javascript/versions</a>
   */
  export const version: string;
}

declare namespace google.maps.geometry.poly {
  /**
   * Computes whether the given point lies inside the specified polygon.
   */
  export function containsLocation(point: google.maps.LatLng | google.maps.LatLngLiteral, polygon: google.maps.Polygon): boolean;
  /**
   * Computes whether the given point lies on or near to a polyline, or the edge of a polygon, within a specified tolerance. Returns <code>true</code> when the difference between the latitude and longitude of the supplied point, and the closest point on the edge, is less than the tolerance. The tolerance defaults to 10<sup>-9</sup> degrees.
   */
  export function isLocationOnEdge(point: google.maps.LatLng | google.maps.LatLngLiteral, poly: google.maps.Polygon | google.maps.Polyline, tolerance?: number): boolean;
}

declare namespace google.maps.geometry.spherical {
  /**
   * Returns the unsigned area of a closed path, in the range [0, 2×pi×radius²]. The computed area uses the same units as the radius. The <code>radiusOfSphere</code> defaults to the Earth&#39;s radius in meters, in which case the area is in square meters. Passing a <code>Circle</code> requires the <code>radius</code> to be set to a non-negative value. Additionally, the Circle must not cover more than 100% of the sphere. And when passing a <code>LatLngBounds</code>, the southern LatLng cannot be more north than the northern LatLng.
   */
  export function computeArea(path: (google.maps.LatLng | google.maps.LatLngLiteral)[] | google.maps.MVCArray<google.maps.LatLng | google.maps.LatLngLiteral> | google.maps.Circle | google.maps.CircleLiteral | google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, radiusOfSphere?: number): number;
  /**
   * Returns the distance, in meters, between two LatLngs. You can optionally specify a custom radius. The radius defaults to the radius of the Earth.
   */
  export function computeDistanceBetween(from: google.maps.LatLng | google.maps.LatLngLiteral, to: google.maps.LatLng | google.maps.LatLngLiteral, radius?: number): number;
  /**
   * Returns the heading from one LatLng to another LatLng. Headings are expressed in degrees clockwise from North within the range [-180,180).
   */
  export function computeHeading(from: google.maps.LatLng | google.maps.LatLngLiteral, to: google.maps.LatLng | google.maps.LatLngLiteral): number;
  /**
   * Returns the length of the given path.
   */
  export function computeLength(path: (google.maps.LatLng | google.maps.LatLngLiteral)[] | google.maps.MVCArray<google.maps.LatLng | google.maps.LatLngLiteral>, radius?: number): number;
  /**
   * Returns the LatLng resulting from moving a distance from an origin in the specified heading (expressed in degrees clockwise from north).
   */
  export function computeOffset(from: google.maps.LatLng | google.maps.LatLngLiteral, distance: number, heading: number, radius?: number): google.maps.LatLng;
  /**
   * Returns the location of origin when provided with a LatLng destination, meters travelled and original heading. Headings are expressed in degrees clockwise from North. This function returns <code>null</code> when no solution is available.
   */
  export function computeOffsetOrigin(to: google.maps.LatLng | google.maps.LatLngLiteral, distance: number, heading: number, radius?: number): google.maps.LatLng | null;
  /**
   * Returns the signed area of a closed path, where counterclockwise is positive, in the range [-2×pi×radius², 2×pi×radius²]. The computed area uses the same units as the radius. The radius defaults to the Earth&#39;s radius in meters, in which case the area is in square meters. <br><br> The area is computed using the <a href="https://wikipedia.org/wiki/Parallel_transport">parallel transport</a> method; the parallel transport around a closed path on the unit sphere twists by an angle that is equal to the area enclosed by the path. This is simpler and more accurate and robust than triangulation using Girard, l&#39;Huilier, or Eriksson on each triangle. In particular, since it doesn&#39;t triangulate, it suffers no instability except in the unavoidable case when an <em>edge</em> (not a diagonal) of the polygon spans 180 degrees.
   */
  export function computeSignedArea(loop: (google.maps.LatLng | google.maps.LatLngLiteral)[] | google.maps.MVCArray<google.maps.LatLng | google.maps.LatLngLiteral>, radius?: number): number;
  /**
   * Returns the LatLng which lies the given fraction of the way between the origin LatLng and the destination LatLng.
   */
  export function interpolate(from: google.maps.LatLng | google.maps.LatLngLiteral, to: google.maps.LatLng | google.maps.LatLngLiteral, fraction: number): google.maps.LatLng;
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Returns the position which lies the given fraction of the way along the given path. If passing LatLngAltitude objects, altitude is currently ignored, but future versions may take altitude into account.
   */
  export function traversePath(path: (google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral)[], fraction: number): google.maps.LatLngLiteral;
}

declare namespace google.maps.geometry.encoding {
  /**
   * Decodes an encoded path string into a sequence of LatLngs.
   */
  export function decodePath(encodedPath: string): google.maps.LatLng[];
  /**
   * Encodes a sequence of LatLngs into an encoded path string.
   */
  export function encodePath(path: (google.maps.LatLng | google.maps.LatLngLiteral)[] | google.maps.MVCArray<google.maps.LatLng | google.maps.LatLngLiteral>): string;
}

declare namespace google.maps.journeySharing {
  /**
   * Automatic viewport mode.
   *
   * Access by calling `const {AutomaticViewportMode} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum AutomaticViewportMode {
    /**
     * Automatically adjust the viewport to fit markers and any visible anticipated route polylines. This is the default.
     */
    FIT_ANTICIPATED_ROUTE = 'FIT_ANTICIPATED_ROUTE',
    /**
     * Do not automatically adjust the viewport.
     */
    NONE = 'NONE',
  }
  export type AutomaticViewportModeString = `${google.maps.journeySharing.AutomaticViewportMode}`;
  /**
   * Types of Fleet Engine services.
   *
   * Access by calling `const {FleetEngineServiceType} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum FleetEngineServiceType {
    /**
     * Fleet Engine service used to access delivery vehicles.
     */
    DELIVERY_VEHICLE_SERVICE = 'DELIVERY_VEHICLE_SERVICE',
    /**
     * Fleet Engine service used to access task information.
     */
    TASK_SERVICE = 'TASK_SERVICE',
    /**
     * Fleet Engine service used to access trip information.
     */
    TRIP_SERVICE = 'TRIP_SERVICE',
    /**
     * Unknown Fleet Engine service.
     */
    UNKNOWN_SERVICE = 'UNKNOWN_SERVICE',
  }
  export type FleetEngineServiceTypeString = `${google.maps.journeySharing.FleetEngineServiceType}`;
  /**
   * Parent class of all location providers.
   */
  export class LocationProvider {
    /**
     * Adds a {@link google.maps.MapsEventListener} for an event fired by this location provider. Returns an identifier for this listener that can be used with {@link google.maps.event.removeListener}.
     */
    addListener(eventName: string, handler: Function): google.maps.MapsEventListener;
  }
  /**
   * Parent class of polling location providers.
   */
  export class PollingLocationProvider extends google.maps.journeySharing.LocationProvider {
    /**
     * True if this location provider is polling. Read only.
     */
    isPolling: boolean;
    /**
     * Minimum time between fetching location updates in milliseconds. If it takes longer than <code>pollingIntervalMillis</code> to fetch a location update, the next location update is not started until the current one finishes. <br><br>Setting this value to 0, Infinity, or a negative value disables automatic location updates. A new location update is fetched once if the tracking ID parameter (for example, the shipment tracking ID of the shipment location provider), or a filtering option (for example, viewport bounds or attribute filters for fleet location providers) changes. <br><br>The default, and minimum, polling interval is 5000 milliseconds. If you set the polling interval to a lower positive value, 5000 is stored and used.
     */
    pollingIntervalMillis: number;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.PollingLocationProvider.ispollingchange} event is triggered.
   */
  export interface PollingLocationProviderIsPollingChangeEvent {
    /**
     * The error that caused the polling state to change, if the state change was caused by an error. Undefined if the state change was due to normal operations.
     */
    error: Error | null;
  }
  /**
   * Contains additional information needed to mint JSON Web Tokens.
   */
  export interface AuthTokenContext {
    /**
     * When provided, the minted token should have a private <code>DeliveryVehicleId</code> claim for the provided deliveryVehicleId.
     */
    deliveryVehicleId?: string | null;
    /**
     * When provided, the minted token should have a private <code>TaskId</code> claim for the provided taskId.
     */
    taskId?: string | null;
    /**
     * When provided, the minted token should have a private <code>TrackingId</code> claim for the provided trackingId.
     */
    trackingId?: string | null;
    /**
     * When provided, the minted token should have a private <code>TripId</code> claim for the provided tripId.
     */
    tripId?: string | null;
    /**
     * When provided, the minted token should have a private <code>VehicleId</code> claim for the provided vehicleId.
     */
    vehicleId?: string | null;
  }
  /**
   * Options for the auth token fetcher.
   */
  export interface AuthTokenFetcherOptions {
    /**
     * The auth token context. IDs specified in the context should be added to the request sent to the JSON Web Token minting endpoint.
     */
    context: google.maps.journeySharing.AuthTokenContext;
    /**
     * The Fleet Engine service type.
     */
    serviceType: google.maps.journeySharing.FleetEngineServiceTypeString;
  }
  /**
   * The auth token returned by the token fetcher.
   */
  export interface AuthToken {
    /**
     * The expiration time in seconds. A token expires in this amount of time after fetching.
     */
    expiresInSeconds: number;
    /**
     * The token.
     */
    token: string;
  }
  /**
   * Options for the map view.
   */
  export interface JourneySharingMapViewOptions {
    /**
     * Automatic viewport mode. Default value is FIT_ANTICIPATED_ROUTE, which enables the map view to automatically adjust the viewport to fit vehicle markers, location markers, and any visible anticipated route polylines. Set this to NONE to turn off automatic fitting.
     */
    automaticViewportMode?: google.maps.journeySharing.AutomaticViewportModeString | null;
    /**
     * The DOM element backing the view. Required.
     */
    element: Element;
    /**
     * Sources of tracked locations to be shown in the tracking map view. Optional.
     */
    locationProviders: google.maps.journeySharing.LocationProvider[] | null;
    /**
     * Map options passed into the google.maps.Map constructor.
     */
    mapOptions?: google.maps.MapOptions | null;
    /**
     * A source of tracked locations to be shown in the tracking map view. Optional.
     * @deprecated Use {@link google.maps.journeySharing.JourneySharingMapViewOptions.locationProviders} instead.
     */
    locationProvider: google.maps.journeySharing.LocationProvider | null;
    /**
     * Configures options for a destination location marker. Invoked whenever a new destination marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    destinationMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for an origin location marker. Invoked whenever a new origin marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    originMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for a task outcome location marker. Invoked whenever a new task outcome location marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    taskOutcomeMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for an unsuccessful task location marker. Invoked whenever a new unsuccessful task marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    unsuccessfulTaskMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for a vehicle location marker. Invoked whenever a new vehicle marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    vehicleMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for a waypoint location marker. Invoked whenever a new waypoint marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    waypointMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for an anticipated route polyline. Invoked whenever a new anticipated route polyline is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultPolylineOptions field containing a google.maps.PolylineOptions object, and return it as polylineOptions in the output PolylineSetupOptions object. <br><br>Specifying a PolylineSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same PolylineSetupOptions object in different PolylineSetup functions or static values, and do not reuse the same google.maps.PolylineOptions object for the polylineOptions key in different PolylineSetupOptions objects. If polylineOptions or visible is unset or null, it will be overwritten with the default. Any values set for polylineOptions.map or polylineOptions.path will be ignored.
     * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    anticipatedRoutePolylineSetup?: google.maps.journeySharing.PolylineSetup | null;
    /**
     * Configures options for a taken route polyline. Invoked whenever a new taken route polyline is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultPolylineOptions field containing a google.maps.PolylineOptions object, and return it as polylineOptions in the output PolylineSetupOptions object. <br><br>Specifying a PolylineSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same PolylineSetupOptions object in different PolylineSetup functions or static values, and do not reuse the same google.maps.PolylineOptions object for the polylineOptions key in different PolylineSetupOptions objects. <br><br>Any values set for polylineOptions.map or polylineOptions.path will be ignored. Any unset or null value will be overwritten with the default.
     * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    takenRoutePolylineSetup?: google.maps.journeySharing.PolylineSetup | null;
    /**
     * Configures options for a ping location marker. Invoked whenever a new ping marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    pingMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
    /**
     * Configures options for a successful task location marker. Invoked whenever a new successful task marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    successfulTaskMarkerSetup?: google.maps.journeySharing.MarkerSetup | null;
  }
  /**
   * The map view.
   * Access by calling `const {JourneySharingMapView} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class JourneySharingMapView {
    /**
     * Instantiates a map view.
     * @param options Options for the map view.
     */
    constructor(options: google.maps.journeySharing.JourneySharingMapViewOptions);
    /**
     * This Field is read-only. Automatic viewport mode.
     */
    automaticViewportMode: google.maps.journeySharing.AutomaticViewportModeString;
    /**
     * This Field is read-only. The DOM element backing the view.
     */
    element: Element;
    /**
     * Enables or disables the traffic layer.
     */
    enableTraffic: boolean;
    /**
     * This field is read-only. Sources of tracked locations to be shown in the tracking map view. To add or remove location providers, use the {@link google.maps.journeySharing.JourneySharingMapView.addLocationProvider} and {@link google.maps.journeySharing.JourneySharingMapView.removeLocationProvider} methods.
     */
    locationProviders: google.maps.journeySharing.LocationProvider[] | null;
    /**
     * This Field is read-only. The map object contained in the map view.
     */
    map: google.maps.Map;
    /**
     * This Field is read-only. The map options passed into the map via the map view.
     */
    mapOptions: google.maps.MapOptions;
    /**
     * This Field is read-only. A source of tracked locations to be shown in the tracking map view.
     * @deprecated Use {@link google.maps.journeySharing.JourneySharingMapView.locationProviders} instead.
     */
    locationProvider: google.maps.journeySharing.LocationProvider | null;
    /**
     * Configures options for a destination location marker. Invoked whenever a new destination marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    destinationMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for an origin location marker. Invoked whenever a new origin marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    originMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for a task outcome location marker. Invoked whenever a new task outcome location marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    taskOutcomeMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for an unsuccessful task location marker. Invoked whenever a new unsuccessful task marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    unsuccessfulTaskMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for a vehicle location marker. Invoked whenever a new vehicle marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    vehicleMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for a waypoint location marker. Invoked whenever a new waypoint marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    waypointMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for an anticipated route polyline. Invoked whenever a new anticipated route polyline is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultPolylineOptions field containing a google.maps.PolylineOptions object, and return it as polylineOptions in the output PolylineSetupOptions object. <br><br>Specifying a PolylineSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same PolylineSetupOptions object in different PolylineSetup functions or static values, and do not reuse the same google.maps.PolylineOptions object for the polylineOptions key in different PolylineSetupOptions objects. If polylineOptions or visible is unset or null, it will be overwritten with the default. Any values set for polylineOptions.map or polylineOptions.path will be ignored.
     * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    anticipatedRoutePolylineSetup: google.maps.journeySharing.PolylineSetup;
    /**
     * Configures options for a taken route polyline. Invoked whenever a new taken route polyline is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultPolylineOptions field containing a google.maps.PolylineOptions object, and return it as polylineOptions in the output PolylineSetupOptions object. <br><br>Specifying a PolylineSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same PolylineSetupOptions object in different PolylineSetup functions or static values, and do not reuse the same google.maps.PolylineOptions object for the polylineOptions key in different PolylineSetupOptions objects. <br><br>Any values set for polylineOptions.map or polylineOptions.path will be ignored. Any unset or null value will be overwritten with the default.
     * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    takenRoutePolylineSetup: google.maps.journeySharing.PolylineSetup;
    /**
     * Configures options for a ping location marker. Invoked whenever a new ping marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    pingMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Configures options for a successful task location marker. Invoked whenever a new successful task marker is rendered. <br><br>If specifying a function, the function can and should modify the input&#39;s defaultMarkerOptions field containing a google.maps.MarkerOptions object, and return it as markerOptions in the output MarkerSetupOptions object. <br><br>Specifying a MarkerSetupOptions object has the same effect as specifying a function that returns that static object. <br><br>Do not reuse the same MarkerSetupOptions object in different MarkerSetup functions or static values, and do not reuse the same google.maps.MarkerOptions object for the markerOptions key in different MarkerSetupOptions objects. If markerOptions is unset or null, it will be overwritten with the default. Any value set for markerOptions.map or markerOptions.position will be ignored.
     * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead. This field will be removed in the future.
     */
    successfulTaskMarkerSetup: google.maps.journeySharing.MarkerSetup;
    /**
     * Returns the destination markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    destinationMarkers: google.maps.Marker[];
    /**
     * Returns the origin markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    originMarkers: google.maps.Marker[];
    /**
     * Returns the successful task markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    successfulTaskMarkers: google.maps.Marker[];
    /**
     * Returns the task outcome markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    taskOutcomeMarkers: google.maps.Marker[];
    /**
     * Returns the unsuccessful task markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    unsuccessfulTaskMarkers: google.maps.Marker[];
    /**
     * Returns the vehicle markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    vehicleMarkers: google.maps.Marker[];
    /**
     * Returns the waypoint markers, if any.
     * @deprecated getting a list of markers via the <code>MapView</code> is deprecated. Use the <code>MarkerCustomizationFunction</code>s for your location provider to receive callbacks when a marker is added to the map or updated.
     */
    waypointMarkers: google.maps.Marker[];
    /**
     * Returns the anticipated route polylines, if any.
     * @deprecated getting a list of polylines via the <code>MapView</code> is deprecated. Use the <code>PolylineCustomizationFunction</code>s for your location provider to receive callbacks when a polyline is added to the map or updated.
     */
    anticipatedRoutePolylines: google.maps.Polyline[];
    /**
     * Returns the taken route polylines, if any.
     * @deprecated getting a list of polylines via the <code>MapView</code> is deprecated. Use the <code>PolylineCustomizationFunction</code>s for your location provider to receive callbacks when a polyline is added to the map or updated.
     */
    takenRoutePolylines: google.maps.Polyline[];
    /**
     * Adds a location provider to the map view. If the location provider is already added, no action is performed.
     */
    addLocationProvider(locationProvider: google.maps.journeySharing.LocationProvider): void;
    /**
     * Removes a location provider from the map view. If the location provider is not already added to the map view, no action is performed.
     */
    removeLocationProvider(locationProvider: google.maps.journeySharing.LocationProvider): void;
  }
  /**
   * MarkerSetup options.
   * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead.
   */
  export interface MarkerSetupOptions {
    /**
     * Marker options.
     */
    markerOptions?: google.maps.MarkerOptions | null;
  }
  /**
   * MarkerSetup default options.
   * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead.
   */
  export interface DefaultMarkerSetupOptions {
    /**
     * Default marker options.
     */
    defaultMarkerOptions: google.maps.MarkerOptions;
  }
  /**
   * @deprecated Marker setup is deprecated. Use the <code>MarkerCustomizationFunction</code> methods for your location provider instead.
   */
  export type MarkerSetup = google.maps.journeySharing.MarkerSetupOptions | ((arg0: google.maps.journeySharing.DefaultMarkerSetupOptions) => google.maps.journeySharing.MarkerSetupOptions);
  /**
   * PolylineSetup options.
   * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead.
   */
  export interface PolylineSetupOptions {
    /**
     * Polyline options.
     */
    polylineOptions?: google.maps.PolylineOptions | null;
    /**
     * Polyline visibility.
     */
    visible?: boolean | null;
  }
  /**
   * PolylineSetup default options.
   * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead.
   */
  export interface DefaultPolylineSetupOptions {
    /**
     * Default polyline options.
     */
    defaultPolylineOptions: google.maps.PolylineOptions;
    /**
     * Default polyline visibility.
     */
    defaultVisible: boolean;
  }
  /**
   * @deprecated Polyline setup is deprecated. Use the <code>PolylineCustomizationFunction</code> methods for your location provider instead.
   */
  export type PolylineSetup = google.maps.journeySharing.PolylineSetupOptions | ((arg0: google.maps.journeySharing.DefaultPolylineSetupOptions) => google.maps.journeySharing.PolylineSetupOptions);

  export type AuthTokenFetcher = (arg0: google.maps.journeySharing.AuthTokenFetcherOptions) => Promise<google.maps.journeySharing.AuthToken>;
  /**
   * The current state of a {@link google.maps.journeySharing.DeliveryVehicleStop}.
   *
   * Access by calling `const {DeliveryVehicleStopState} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum DeliveryVehicleStopState {
    /**
     * Arrived at stop. Assumes that when the vehicle is routing to the next stop, that all previous stops have been completed.
     */
    ARRIVED = 'ARRIVED',
    /**
     * Assigned and actively routing.
     */
    ENROUTE = 'ENROUTE',
    /**
     * Created, but not actively routing.
     */
    NEW = 'NEW',
    /**
     * Unknown.
     */
    UNSPECIFIED = 'UNSPECIFIED',
  }
  export type DeliveryVehicleStopStateString = `${google.maps.journeySharing.DeliveryVehicleStopState}`;
  /**
   * The current navigation status of a {@link google.maps.journeySharing.Vehicle}.
   *
   * Access by calling `const {VehicleNavigationStatus} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum VehicleNavigationStatus {
    /**
     * The vehicle is within approximately 50m of the destination.
     */
    ARRIVED_AT_DESTINATION = 'ARRIVED_AT_DESTINATION',
    /**
     * Turn-by-turn navigation is available and the Driver app navigation has entered GUIDED_NAV mode.
     */
    ENROUTE_TO_DESTINATION = 'ENROUTE_TO_DESTINATION',
    /**
     * The Driver app&#39;s navigation is in FREE_NAV mode.
     */
    NO_GUIDANCE = 'NO_GUIDANCE',
    /**
     * The vehicle has gone off the suggested route.
     */
    OFF_ROUTE = 'OFF_ROUTE',
    /**
     * Unspecified navigation status.
     */
    UNKNOWN_NAVIGATION_STATUS = 'UNKNOWN_NAVIGATION_STATUS',
  }
  export type VehicleNavigationStatusString = `${google.maps.journeySharing.VehicleNavigationStatus}`;
  /**
   * The current state of a {@link google.maps.journeySharing.Vehicle}.
   *
   * Access by calling `const {VehicleState} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum VehicleState {
    /**
     * The vehicle is not accepting new trips.
     */
    OFFLINE = 'OFFLINE',
    /**
     * The vehicle is accepting new trips.
     */
    ONLINE = 'ONLINE',
    /**
     * Unknown vehicle state.
     */
    UNKNOWN_VEHICLE_STATE = 'UNKNOWN_VEHICLE_STATE',
  }
  export type VehicleStateString = `${google.maps.journeySharing.VehicleState}`;
  /**
   * The type of {@link google.maps.journeySharing.Vehicle}.
   *
   * Access by calling `const {VehicleType} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum VehicleType {
    /**
     * An automobile.
     */
    AUTO = 'AUTO',
    /**
     * Any vehicle that acts as a taxi (typically licensed or regulated).
     */
    TAXI = 'TAXI',
    /**
     * A vehicle with a large storage capacity.
     */
    TRUCK = 'TRUCK',
    /**
     * A motorcycle, moped, or other two-wheeled vehicle.
     */
    TWO_WHEELER = 'TWO_WHEELER',
    /**
     * Unknown vehicle type.
     */
    UNKNOWN = 'UNKNOWN',
  }
  export type VehicleTypeString = `${google.maps.journeySharing.VehicleType}`;
  /**
   * Trip types supported by a {@link google.maps.journeySharing.Vehicle}.
   *
   * Access by calling `const {TripType} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TripType {
    /**
     * The trip is exclusive to a vehicle.
     */
    EXCLUSIVE = 'EXCLUSIVE',
    /**
     * The trip may share a vehicle with other trips.
     */
    SHARED = 'SHARED',
    /**
     * Unknown trip type.
     */
    UNKNOWN_TRIP_TYPE = 'UNKNOWN_TRIP_TYPE',
  }
  export type TripTypeString = `${google.maps.journeySharing.TripType}`;
  /**
   * Waypoint types supported by {@link google.maps.journeySharing.Vehicle}.
   *
   * Access by calling `const {WaypointType} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum WaypointType {
    /**
     * Waypoints for dropping off riders.
     */
    DROP_OFF_WAYPOINT_TYPE = 'DROP_OFF_WAYPOINT_TYPE',
    /**
     * Waypoints for intermediate destinations in a multi-destination trip.
     */
    INTERMEDIATE_DESTINATION_WAYPOINT_TYPE = 'INTERMEDIATE_DESTINATION_WAYPOINT_TYPE',
    /**
     * Waypoints for picking up riders.
     */
    PICKUP_WAYPOINT_TYPE = 'PICKUP_WAYPOINT_TYPE',
    /**
     * Unknown waypoint type.
     */
    UNKNOWN_WAYPOINT_TYPE = 'UNKNOWN_WAYPOINT_TYPE',
  }
  export type WaypointTypeString = `${google.maps.journeySharing.WaypointType}`;
  /**
   * TaskInfo type, used by {@link google.maps.journeySharing.DeliveryVehicleStop}.
   */
  export interface TaskInfo {
    /**
     * The extra time it takes to perform the task, in milliseconds.
     */
    extraDurationMillis: number | null;
    /**
     * The ID of the task.
     */
    id: string | null;
    /**
     * The time window during which the task should be completed.
     */
    targetTimeWindow: google.maps.journeySharing.TimeWindow | null;
  }
  /**
   * DeliveryVehicleStop type
   */
  export interface DeliveryVehicleStop {
    /**
     * The location of the stop.
     */
    plannedLocation: google.maps.LatLngLiteral | null;
    /**
     * The state of the stop.
     */
    state: google.maps.journeySharing.DeliveryVehicleStopStateString | null;
    /**
     * The list of Tasks to be performed at this stop. <ul> <li><code>id</code>: the ID of the task. <li><code>extraDurationMillis</code>: the extra time it takes to perform the task, in milliseconds. </ul>
     */
    tasks: google.maps.journeySharing.TaskInfo[];
  }
  /**
   * VehicleJourneySegment type
   */
  export interface VehicleJourneySegment {
    /**
     * The travel distance from the previous stop to this stop, in meters.
     */
    drivingDistanceMeters: number | null;
    /**
     * The travel time from the previous stop this stop, in milliseconds.
     */
    drivingDurationMillis: number | null;
    /**
     * The path from the previous stop (or the vehicle&#39;s current location, if this stop is the first in the list of stops) to this stop.
     */
    path: google.maps.LatLngLiteral[] | null;
    /**
     * Information about the stop.
     */
    stop: google.maps.journeySharing.DeliveryVehicleStop | null;
  }
  /**
   * VehicleLocationUpdate type
   */
  export interface VehicleLocationUpdate {
    /**
     * The heading of the update. 0 corresponds to north, 180 to south.
     */
    heading: number | null;
    /**
     * The location of the update.
     */
    location: google.maps.LatLngLiteral | google.maps.LatLng | null;
    /**
     * The speed in kilometers per hour.
     */
    speedKilometersPerHour: number | null;
    /**
     * The time this update was received from the vehicle.
     */
    time: Date | null;
  }
  /**
   * VehicleWaypoint type.
   */
  export interface VehicleWaypoint {
    /**
     * The path distance between the previous waypoint (or the vehicle&#39;s current location, if this waypoint is the first in the list of waypoints) to this waypoint in meters.
     */
    distanceMeters: number | null;
    /**
     * Travel time between the previous waypoint (or the vehicle&#39;s current location, if this waypoint is the first in the list of waypoints) to this waypoint in milliseconds.
     */
    durationMillis: number | null;
    /**
     * The location of the waypoint.
     */
    location: google.maps.LatLngLiteral | null;
    /**
     * The path from the previous waypoint (or the vehicle&#39;s current location, if this waypoint is the first in the list of waypoints) to this waypoint.
     */
    path: google.maps.LatLngLiteral[] | null;
    /**
     * The list of traffic speeds along the path from the previous waypoint (or vehicle location) to the current waypoint. Each interval in the list describes the traffic on a contiguous segment on the path; the interval defines the starting and ending points of the segment via their indices. See the definition of {@link google.maps.journeySharing.SpeedReadingInterval} for more details.
     */
    speedReadingIntervals: google.maps.journeySharing.SpeedReadingInterval[] | null;
  }
  /**
   * TripWaypoint type.
   */
  export interface TripWaypoint {
    /**
     * The path distance between the previous waypoint (or the vehicle&#39;s current location, if this waypoint is the first in the list of waypoints) to this waypoint in meters.
     */
    distanceMeters: number | null;
    /**
     * Travel time between the previous waypoint (or the vehicle&#39;s current location, if this waypoint is the first in the list of waypoints) to this waypoint in milliseconds.
     */
    durationMillis: number | null;
    /**
     * The location of the waypoint.
     */
    location: google.maps.LatLng | null;
    /**
     * The path from the previous stop (or the vehicle&#39;s current location, if this stop is the first in the list of stops) to this stop.
     */
    path: google.maps.LatLng[] | null;
    /**
     * The list of traffic speeds along the path from the previous waypoint (or vehicle location) to the current waypoint. Each interval in the list describes the traffic on a contiguous segment on the path; the interval defines the starting and ending points of the segment via their indices. See the definition of {@link google.maps.journeySharing.SpeedReadingInterval} for more details.
     */
    speedReadingIntervals: google.maps.journeySharing.SpeedReadingInterval[] | null;
    /**
     * The trip associated with this waypoint.
     */
    tripId: string | null;
    /**
     * The role this waypoint plays in this trip, such as pickup or dropoff.
     */
    waypointType: google.maps.journeySharing.WaypointTypeString | null;
  }
  /**
   * The classification of polyline speed based on traffic data.
   *
   * Access by calling `const {Speed} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Speed {
    /**
     * Normal speed, no slowdown is detected.
     */
    NORMAL = 'NORMAL',
    /**
     * Slowdown detected, but no traffic jam formed.
     */
    SLOW = 'SLOW',
    /**
     * Traffic jam detected.
     */
    TRAFFIC_JAM = 'TRAFFIC_JAM',
  }
  export type SpeedString = `${google.maps.journeySharing.Speed}`;
  /**
   * Traffic density indicator on a contiguous path segment. The interval defines the starting and ending points of the segment via their indices.
   */
  export interface SpeedReadingInterval {
    /**
     * The zero-based index of the ending point of the interval in the path.
     */
    endPolylinePointIndex: number;
    /**
     * Traffic speed in this interval.
     */
    speed: google.maps.journeySharing.SpeedString;
    /**
     * The zero-based index of the starting point of the interval in the path.
     */
    startPolylinePointIndex: number;
  }
  /**
   * Options for shipment location provider.
   */
  export interface FleetEngineShipmentLocationProviderOptions {
    /**
     * Customization applied to the active polyline. An active polyline corresponds to a portion of the route the vehicle is currently traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    activePolylineCustomization?: ((arg0: google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * Customization applied to the delivery vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li> If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.ShipmentMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    deliveryVehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.ShipmentMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to the destination marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li> If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.ShipmentMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    destinationMarkerCustomization?: ((arg0: google.maps.journeySharing.ShipmentMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Minimum time between fetching location updates in milliseconds. If it takes longer than <code>pollingIntervalMillis</code> to fetch a location update, the next location update is not started until the current one finishes. <br><br>Setting this value to 0, Infinity, or a negative value disables automatic location updates. A new location update is fetched once if the tracking ID parameter (for example, the shipment tracking ID of the shipment location provider), or a filtering option (for example, viewport bounds or attribute filters for fleet location providers) changes. <br><br>The default, and minimum, polling interval is 5000 milliseconds. If you set the polling interval to a lower positive value, 5000 is stored and used.
     */
    pollingIntervalMillis: number | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Customization applied to the remaining polyline. A remaining polyline corresponds to a portion of the route the vehicle has not yet started traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    remainingPolylineCustomization?: ((arg0: google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Customization applied to the taken polyline. A taken polyline corresponds to a portion of the route the vehicle has already traversed through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    takenPolylineCustomization?: ((arg0: google.maps.journeySharing.ShipmentPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * The tracking ID of the task to track immediately after the location provider is instantiated. If not specified, the location provider does not start tracking any task; use {@link google.maps.journeySharing.FleetEngineShipmentLocationProvider.trackingId} to set the tracking ID and begin tracking.
     */
    trackingId: string | null;
  }
  /**
   * Shipment location provider.
   * Access by calling `const {FleetEngineShipmentLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineShipmentLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for Fleet Engine shipment tracking.
     * @param options Options for the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineShipmentLocationProviderOptions);
    /**
     * The tracking ID for the task that this location provider observes. Set this field to begin tracking.
     */
    trackingId: string;
    /**
     * Explicitly refreshes the tracked location.
     */
    refresh(): void;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineShipmentLocationProvider.update} event is triggered.
   */
  export interface FleetEngineShipmentLocationProviderUpdateEvent {
    /**
     * The task tracking info structure returned by the update. Unmodifiable.
     */
    taskTrackingInfo: google.maps.journeySharing.TaskTrackingInfo | null;
  }
  /**
   * A time range.
   */
  export interface TimeWindow {
    /**
     * The end time of the time window (inclusive).
     */
    endTime: Date;
    /**
     * The start time of the time window (inclusive).
     */
    startTime: Date;
  }
  /**
   * The details for a task tracking info object returned by Fleet Engine.
   */
  export interface TaskTrackingInfo {
    /**
     * Attributes assigned to the task.
     */
    attributes: { [key: string]: unknown };
    /**
     * The estimated arrival time to the stop location.
     */
    estimatedArrivalTime: Date | null;
    /**
     * The estimated completion time of a Task.
     */
    estimatedTaskCompletionTime: Date | null;
    /**
     * Information specific to the last location update.
     */
    latestVehicleLocationUpdate: google.maps.journeySharing.VehicleLocationUpdate | null;
    /**
     * The name in the format &quot;providers/{provider_id}/taskTrackingInfo/{tracking_id}&quot;, where <code>tracking_id</code> represents the tracking ID.
     */
    name: string;
    /**
     * The location where the Task will be completed.
     */
    plannedLocation: google.maps.LatLng | null;
    /**
     * The total remaining distance in meters to the <code>VehicleStop</code> of interest.
     */
    remainingDrivingDistanceMeters: number | null;
    /**
     * Indicates the number of stops the vehicle remaining until the task stop is reached, including the task stop. For example, if the vehicle&#39;s next stop is the task stop, the value will be 1.
     */
    remainingStopCount: number | null;
    /**
     * A list of points which when connected forms a polyline of the vehicle&#39;s expected route to the location of this task.
     */
    routePolylinePoints: google.maps.LatLng[] | null;
    /**
     * The current execution state of the Task.
     */
    state: string | null;
    /**
     * The time window during which the task should be completed.
     */
    targetTimeWindow: google.maps.journeySharing.TimeWindow | null;
    /**
     * The outcome of attempting to execute a Task.
     */
    taskOutcome: string | null;
    /**
     * The time when the Task&#39;s outcome was set by the provider.
     */
    taskOutcomeTime: Date | null;
    /**
     * The tracking ID of a Task.<br> <ul> <li>Must be a valid Unicode string.</li> <li>Limited to a maximum length of 64 characters.</li> <li>Normalized according to <a href="http://www.unicode.org/reports/tr15/">Unicode Normalization Form C</a>.</li> <li>May not contain any of the following ASCII characters: &#39;/&#39;, &#39;:&#39;, &#39;?&#39;, &#39;,&#39;, or &#39;#&#39;.</li> </ul>
     */
    trackingId: string;
  }
  /**
   * The details for a task returned by Fleet Engine.
   */
  export interface Task {
    /**
     * Attributes assigned to the task.
     */
    attributes: { [key: string]: unknown };
    /**
     * The timestamp of the estimated completion time of the task.
     */
    estimatedCompletionTime: Date | null;
    /**
     * Information specific to the last location update.
     */
    latestVehicleLocationUpdate: google.maps.journeySharing.VehicleLocationUpdate | null;
    /**
     * The task name in the format &quot;providers/{provider_id}/tasks/{task_id}&quot;. The task_id must be a unique identifier and not a tracking ID. To store a tracking ID of a shipment, use the tracking_id field. Multiple tasks can have the same tracking_id.
     */
    name: string;
    /**
     * The outcome of the task.
     */
    outcome: string | null;
    /**
     * The location where the task was completed (from provider).
     */
    outcomeLocation: google.maps.LatLngLiteral | null;
    /**
     * The setter of the task outcome location (&#39;PROVIDER&#39; or &#39;LAST_VEHICLE_LOCATION&#39;).
     */
    outcomeLocationSource: string | null;
    /**
     * The timestamp of when the task&#39;s outcome was set (from provider).
     */
    outcomeTime: Date | null;
    /**
     * The location where the task is to be completed.
     */
    plannedLocation: google.maps.LatLngLiteral | null;
    /**
     * Information about the segments left to be completed for this task.
     */
    remainingVehicleJourneySegments: google.maps.journeySharing.VehicleJourneySegment[];
    /**
     * The current execution state of the task.
     */
    status: string;
    /**
     * The time window during which the task should be completed.
     */
    targetTimeWindow: google.maps.journeySharing.TimeWindow | null;
    /**
     * The tracking ID of the shipment.
     */
    trackingId: string | null;
    /**
     * The task type; for example, a break or shipment.
     */
    type: string;
    /**
     * The ID of the vehicle performing this task.
     */
    vehicleId: string | null;
  }
  /**
   * Options for trip location provider.
   */
  export interface FleetEngineTripLocationProviderOptions {
    /**
     * Customization applied to the active polyline. An active polyline corresponds to a portion of the route the vehicle is currently traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.TripPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    activePolylineCustomization?: ((arg0: google.maps.journeySharing.TripPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * Customization applied to the destination marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TripMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    destinationMarkerCustomization?: ((arg0: google.maps.journeySharing.TripMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to the origin marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TripMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    originMarkerCustomization?: ((arg0: google.maps.journeySharing.TripMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Minimum time between fetching location updates in milliseconds. If it takes longer than <code>pollingIntervalMillis</code> to fetch a location update, the next location update is not started until the current one finishes. <br><br>Setting this value to 0 disables recurring location updates. A new location update is fetched if any of the parameters observed by the location provider changes. <br><br>The default polling interval is 5000 milliseconds, the minimum interval. If you set the polling interval to a lower non-zero value, 5000 is used.
     */
    pollingIntervalMillis: number | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Customization applied to the remaining polyline. A remaining polyline corresponds to a portion of the route the vehicle has not yet started traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.TripPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    remainingPolylineCustomization?: ((arg0: google.maps.journeySharing.TripPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Customization applied to the taken polyline. A taken polyline corresponds to a portion of the route the vehicle has already traversed through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.TripPolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    takenPolylineCustomization?: ((arg0: google.maps.journeySharing.TripPolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * The trip ID to track immediately after the location provider is instantiated. If not specified, the location provider does not start tracking any trip; use {@link google.maps.journeySharing.FleetEngineTripLocationProvider.tripId} to set the ID and begin tracking.
     */
    tripId: string | null;
    /**
     * Customization applied to the vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TripMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    vehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.TripMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to a waypoint marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TripWaypointMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    waypointMarkerCustomization?: ((arg0: google.maps.journeySharing.TripWaypointMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
  }
  /**
   * Trip location provider.
   * Access by calling `const {FleetEngineTripLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineTripLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for a Fleet Engine trip.
     * @param options Options for the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineTripLocationProviderOptions);
    /**
     * The ID for the trip that this location provider observes. Set this field to begin tracking.
     */
    tripId: string;
    /**
     * Polyline customization function that colors the active polyline according to its speed reading. Specify this function as the {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.activePolylineCustomization} to render a traffic-aware polyline for the active polyline.
     */
    static TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION(params: google.maps.journeySharing.TripPolylineCustomizationFunctionParams): void;
    /**
     * Polyline customization function that colors the remaining polyline according to its speed reading. Specify this function as the {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.remainingPolylineCustomization} to render a traffic-aware polyline for the remaining polyline.
     */
    static TRAFFIC_AWARE_REMAINING_POLYLINE_CUSTOMIZATION_FUNCTION(params: google.maps.journeySharing.TripPolylineCustomizationFunctionParams): void;
    /**
     * Explicitly refreshes the tracked location.
     */
    refresh(): void;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineTripLocationProvider.update} event is triggered.
   */
  export interface FleetEngineTripLocationProviderUpdateEvent {
    /**
     * The trip structure returned by the update. Unmodifiable.
     */
    trip: google.maps.journeySharing.Trip | null;
  }
  /**
   * The details for a trip returned by Fleet Engine.
   */
  export interface Trip {
    /**
     * Location where the customer was dropped off.
     */
    actualDropOffLocation: google.maps.LatLngLiteral | null;
    /**
     * Location where the customer was picked up.
     */
    actualPickupLocation: google.maps.LatLngLiteral | null;
    /**
     * The estimated future time when the passengers will be dropped off, or the actual time when they were dropped off.
     */
    dropOffTime: Date | null;
    /**
     * Information specific to the last location update.
     */
    latestVehicleLocationUpdate: google.maps.journeySharing.VehicleLocationUpdate | null;
    /**
     * In the format &quot;providers/{provider_id}/trips/{trip_id}&quot;. The trip_id must be a unique identifier.
     */
    name: string;
    /**
     * Number of passengers on this trip; does not include the driver.
     */
    passengerCount: number;
    /**
     * The estimated future time when the passengers will be picked up, or the actual time when they were picked up.
     */
    pickupTime: Date | null;
    /**
     * Location where the customer indicates they will be dropped off.
     */
    plannedDropOffLocation: google.maps.LatLngLiteral | null;
    /**
     * Location where customer indicates they will be picked up.
     */
    plannedPickupLocation: google.maps.LatLngLiteral | null;
    /**
     * An array of waypoints indicating the path from the current location to the drop-off point.
     */
    remainingWaypoints: google.maps.journeySharing.VehicleWaypoint[];
    /**
     * Current status of the trip. Possible values are UNKNOWN_TRIP_STATUS, NEW, ENROUTE_TO_PICKUP, ARRIVED_AT_PICKUP, ARRIVED_AT_INTERMEDIATE_DESTINATION, ENROUTE_TO_INTERMEDIATE_DESTINATION, ENROUTE_TO_DROPOFF, COMPLETE, or CANCELED.
     */
    status: string;
    /**
     * The type of the trip. Possible values are UNKNOWN_TRIP_TYPE, SHARED or EXCLUSIVE.
     */
    type: string;
    /**
     * ID of the vehicle making this trip.
     */
    vehicleId: string;
  }
  /**
   * Filtering options for tasks in the Delivery Vehicle Location Provider.
   */
  export interface FleetEngineTaskFilterOptions {
    /**
     * Exclusive lower bound for the completion time of the task. Used to filter for tasks that were completed after the specified time.
     */
    completionTimeFrom: Date | null;
    /**
     * Exclusive upper bound for the completion time of the task. Used to filter for tasks that were completed before the specified time.
     */
    completionTimeTo: Date | null;
    /**
     * The state of the task. Valid values are OPEN or CLOSED.
     */
    state: string | null;
  }
  /**
   * Options for delivery vehicle location provider.
   */
  export interface FleetEngineDeliveryVehicleLocationProviderOptions {
    /**
     * Customization applied to the active polyline. An active polyline corresponds to a portion of the route the vehicle is currently traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    activePolylineCustomization?: ((arg0: google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * The delivery vehicle ID to track immediately after the location provider is instantiated. If not specified, the location provider does not start tracking any vehicle; use {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider.deliveryVehicleId} to set the ID and begin tracking.
     */
    deliveryVehicleId: string | null;
    /**
     * Customization applied to the delivery vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    deliveryVehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to a planned stop marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.PlannedStopMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    plannedStopMarkerCustomization?: ((arg0: google.maps.journeySharing.PlannedStopMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Minimum time between fetching location updates in milliseconds. If it takes longer than <code>pollingIntervalMillis</code> to fetch a location update, the next location update is not started until the current one finishes. <br><br>Setting this value to 0 disables recurring location updates. A new location update is fetched if any of the parameters observed by the location provider changes. <br><br>The default polling interval is 5000 milliseconds, the minimum interval. If you set the polling interval to a lower non-zero value, 5000 is used.
     */
    pollingIntervalMillis: number | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Customization applied to the remaining polyline. A remaining polyline corresponds to a portion of the route the vehicle has not yet started traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    remainingPolylineCustomization?: ((arg0: google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Boolean to show or hide outcome locations for the fetched tasks.
     */
    shouldShowOutcomeLocations: boolean | null;
    /**
     * Boolean to show or hide tasks. Setting this to false will prevent the ListTasks endpoint from being called to fetch the tasks. Only the upcoming vehicle stops will be displayed.
     */
    shouldShowTasks: boolean | null;
    /**
     * Threshold for stale vehicle location. If the last updated location for the vehicle is older this threshold, the vehicle will not be displayed. Defaults to 24 hours in milliseconds. If the threshold is less than 0, or <i>Infinity</i>, the threshold will be ignored and the vehicle location will not be considered stale.
     */
    staleLocationThresholdMillis: number | null;
    /**
     * Customization applied to the taken polyline. A taken polyline corresponds to a portion of the route the vehicle has already traversed through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    takenPolylineCustomization?: ((arg0: google.maps.journeySharing.DeliveryVehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Filter options to apply when fetching tasks. The options can include specific vehicle, time, and task status.
     */
    taskFilterOptions: google.maps.journeySharing.FleetEngineTaskFilterOptions | null;
    /**
     * Customization applied to a task marker. A task marker is rendered at the planned location of each task assigned to the delivery vehicle. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TaskMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    taskMarkerCustomization?: ((arg0: google.maps.journeySharing.TaskMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to a task outcome marker. A task outcome marker is rendered at the actual outcome location of each task assigned to the delivery vehicle. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.TaskMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    taskOutcomeMarkerCustomization?: ((arg0: google.maps.journeySharing.TaskMarkerCustomizationFunctionParams) => void) | null;
  }
  /**
   * Delivery Vehicle Location Provider.
   * Access by calling `const {FleetEngineDeliveryVehicleLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineDeliveryVehicleLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for a Fleet Engine delivery vehicle.
     * @param options Options to pass to the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderOptions);
    /**
     * ID for the vehicle that this location provider observes. Set this field to track a vehicle.
     */
    deliveryVehicleId: string;
    /**
     * Optionally allow users to display the task&#39;s outcome location.
     */
    shouldShowOutcomeLocations: boolean | null;
    /**
     * Optionally allow users to display fetched tasks.
     */
    shouldShowTasks: boolean | null;
    /**
     * This Field is read-only. Threshold for stale vehicle location. If the last updated location for the vehicle is older than this threshold, the vehicle will not be displayed.
     */
    staleLocationThresholdMillis: number;
    /**
     * Returns the filter options to apply when fetching tasks.
     */
    taskFilterOptions: google.maps.journeySharing.FleetEngineTaskFilterOptions;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider.update} event is triggered.
   */
  export interface FleetEngineDeliveryVehicleLocationProviderUpdateEvent {
    /**
     * The journey segments that have been completed by this vehicle. Unmodifiable.
     */
    completedVehicleJourneySegments: google.maps.journeySharing.VehicleJourneySegment[] | null;
    /**
     * The delivery vehicle data structure returned by the update. Unmodifiable.
     */
    deliveryVehicle: google.maps.journeySharing.DeliveryVehicle | null;
    /**
     * The list of tasks served by this delivery vehicle. Unmodifiable.
     */
    tasks: google.maps.journeySharing.Task[] | null;
  }
  /**
   * Options for delivery fleet location provider.
   */
  export interface FleetEngineDeliveryFleetLocationProviderOptions {
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * A filter query to apply when fetching delivery vehicles. This filter is passed directly to Fleet Engine. <br><br>See <a href="https://goo.gle/3wT0Dlt">ListDeliveryVehiclesRequest.filter</a> for supported formats.<br><br>Note that valid filters for attributes must have the &quot;attributes&quot; prefix. For example, <code>attributes.x = &quot;y&quot;</code> or <code>attributes.&quot;x y&quot; = &quot;z&quot;</code>.
     */
    deliveryVehicleFilter: string | null;
    /**
     * Customization applied to a delivery vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li> If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    deliveryVehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams) => void) | null;
    /**
     * The latitude/longitude bounds within which to track vehicles immediately after the location provider is instantiated. If not set, the location provider does not start tracking any vehicles; use {@link google.maps.journeySharing.FleetEngineDeliveryFleetLocationProvider.locationRestriction} to set the bounds and begin tracking. To track all delivery vehicles regardless of location, set bounds equivalent to the entire earth.
     */
    locationRestriction: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Threshold for stale vehicle location. If the last updated location for the vehicle is older this threshold, the vehicle will not be displayed. Defaults to 24 hours in milliseconds. If the threshold is less than zero, or <i>Infinity</i>, the threshold will be ignored and the vehicle location will not be considered stale.
     */
    staleLocationThresholdMillis: number | null;
  }
  /**
   * Delivery Fleet Location Provider.
   * Access by calling `const {FleetEngineDeliveryFleetLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineDeliveryFleetLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for vehicles tracked by Fleet Engine.
     * @param options Options to pass to the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineDeliveryFleetLocationProviderOptions);
    /**
     * The filter applied when fetching the delivery vehicles.
     */
    deliveryVehicleFilter?: string | null;
    /**
     * The bounds within which to track delivery vehicles. If no bounds are set, no delivery vehicles will be tracked. To track all delivery vehicles regardless of location, set bounds equivalent to the entire earth.
     */
    locationRestriction?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * This Field is read-only. Threshold for stale vehicle location. If the last updated location for the vehicle is older than this threshold, the vehicle will not be displayed.
     */
    staleLocationThresholdMillis: number;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineDeliveryFleetLocationProvider.update} event is triggered.
   */
  export interface FleetEngineDeliveryFleetLocationProviderUpdateEvent {
    /**
     * The list of delivery vehicles returned by the query. Unmodifiable.
     */
    deliveryVehicles: google.maps.journeySharing.DeliveryVehicle[] | null;
  }
  /**
   * The details for a delivery vehicle returned by Fleet Engine.
   */
  export interface DeliveryVehicle {
    /**
     * Custom delivery vehicle attributes.
     */
    attributes: { [key: string]: string | null };
    /**
     * The location where the current route segment ends.
     */
    currentRouteSegmentEndPoint: google.maps.LatLngLiteral | null;
    /**
     * The last reported location of the delivery vehicle.
     */
    latestVehicleLocationUpdate: google.maps.journeySharing.VehicleLocationUpdate | null;
    /**
     * In the format &quot;providers/{provider_id}/deliveryVehicles/{delivery_vehicle_id}&quot;. The delivery_vehicle_id must be a unique identifier.
     */
    name: string;
    /**
     * The current navigation status of the vehicle.
     */
    navigationStatus: string;
    /**
     * The remaining driving distance in the current route segment, in meters.
     */
    remainingDistanceMeters: number;
    /**
     * The remaining driving duration in the current route segment, in milliseconds.
     */
    remainingDurationMillis: number | null;
    /**
     * The journey segments assigned to this delivery vehicle, starting from the vehicle&#39;s most recently reported location. This is only populated when the {@link google.maps.journeySharing.DeliveryVehicle} data object is provided through {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider}.
     */
    remainingVehicleJourneySegments: google.maps.journeySharing.VehicleJourneySegment[];
  }
  /**
   * Options for vehicle location provider.
   */
  export interface FleetEngineVehicleLocationProviderOptions {
    /**
     * Customization applied to the active polyline. An active polyline corresponds to a portion of the route the vehicle is currently traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    activePolylineCustomization?: ((arg0: google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * Customization applied to the vehicle trip destination marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    destinationMarkerCustomization?: ((arg0: google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to the vehicle trip intermediate destination markers. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    intermediateDestinationMarkerCustomization?: ((arg0: google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Customization applied to the vehicle trip origin marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    originMarkerCustomization?: ((arg0: google.maps.journeySharing.VehicleWaypointMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
    /**
     * Minimum time between fetching location updates in milliseconds. If it takes longer than <code>pollingIntervalMillis</code> to fetch a location update, the next location update is not started until the current one finishes. <br><br>Setting this value to 0 disables recurring location updates. A new location update is fetched if any of the parameters observed by the location provider changes. <br><br>The default polling interval is 5000 milliseconds, the minimum interval. If you set the polling interval to a lower non-zero value, 5000 is used.
     */
    pollingIntervalMillis: number | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Customization applied to the remaining polyline. A remaining polyline corresponds to a portion of the route the vehicle has not yet started traversing through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    remainingPolylineCustomization?: ((arg0: google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * Threshold for stale vehicle location. If the last updated location for the vehicle is older this threshold, the vehicle will not be displayed. Defaults to 24 hours in milliseconds. If the threshold is less than 0, or <i>Infinity</i>, the threshold will be ignored and the vehicle location will not be considered stale.
     */
    staleLocationThresholdMillis: number | null;
    /**
     * Customization applied to the taken polyline. A taken polyline corresponds to a portion of the route the vehicle has already traversed through. <br><br>Use this field to specify custom styling (such as polyline color) and interactivity (such as click handling).<ul><li> If a {@link google.maps.PolylineOptions} object is specified, the changes specified in it are applied to the polyline after the polyline has been created, overwriting its default options if they exist. </li><li>If a function is specified, it is invoked once when the polyline is created. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the polyline&#39;s coordinates change, or when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this polyline have changed.<br><br>See {@link google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    takenPolylineCustomization?: ((arg0: google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams) => void) | google.maps.PolylineOptions | null;
    /**
     * The vehicle ID to track immediately after the location provider is instantiated. If not specified, the location provider does not start tracking any vehicle; use {@link google.maps.journeySharing.FleetEngineVehicleLocationProvider.vehicleId} to set the ID and begin tracking.
     */
    vehicleId: string | null;
    /**
     * Customization applied to the vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li>If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.VehicleMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    vehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.VehicleMarkerCustomizationFunctionParams) => void) | google.maps.MarkerOptions | null;
  }
  /**
   * Vehicle Location Provider.
   * Access by calling `const {FleetEngineVehicleLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineVehicleLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for a Fleet Engine vehicle.
     * @param options Options to pass to the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions);
    /**
     * This Field is read-only. Threshold for stale vehicle location. If the last updated location for the vehicle is older than this threshold, the vehicle will not be displayed.
     */
    staleLocationThresholdMillis: number;
    /**
     * ID for the vehicle that this location provider observes. Set this field to track a vehicle.
     */
    vehicleId: string;
    /**
     * Polyline customization function that colors the active polyline according to its speed reading. Specify this function as the {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.activePolylineCustomization} to render a traffic-aware polyline for the active polyline.
     */
    static TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION(params: google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams): void;
    /**
     * Polyline customization function that colors the remaining polyline according to its speed reading. Specify this function as the {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.remainingPolylineCustomization} to render a traffic-aware polyline for the remaining polyline.
     */
    static TRAFFIC_AWARE_REMAINING_POLYLINE_CUSTOMIZATION_FUNCTION(params: google.maps.journeySharing.VehiclePolylineCustomizationFunctionParams): void;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineVehicleLocationProvider.update} event is triggered.
   */
  export interface FleetEngineVehicleLocationProviderUpdateEvent {
    /**
     * The list of trips completed by this vehicle. Unmodifiable.
     */
    trips: google.maps.journeySharing.Trip[] | null;
    /**
     * The vehicle data structure returned by the update. Unmodifiable.
     */
    vehicle: google.maps.journeySharing.Vehicle | null;
  }
  /**
   * Options for fleet location provider.
   */
  export interface FleetEngineFleetLocationProviderOptions {
    /**
     * Provides JSON Web Tokens for authenticating the client to Fleet Engine.
     */
    authTokenFetcher: google.maps.journeySharing.AuthTokenFetcher;
    /**
     * The latitude/longitude bounds within which to track vehicles immediately after the location provider is instantiated. If not set, the location provider does not start tracking any vehicles; use {@link google.maps.journeySharing.FleetEngineFleetLocationProvider.locationRestriction} to set the bounds and begin tracking. To track all vehicles regardless of location, set bounds equivalent to the entire earth.
     */
    locationRestriction: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * The consumer&#39;s project ID from Google Cloud Console.
     */
    projectId: string;
    /**
     * Threshold for stale vehicle location. If the last updated location for the vehicle is older than this threshold, the vehicle will not be displayed. Defaults to 24 hours in milliseconds. If the threshold is less than zero, or <i>Infinity</i>, the threshold will be ignored and the vehicle location will not be considered stale.
     */
    staleLocationThresholdMillis: number | null;
    /**
     * A filter query to apply when fetching vehicles. This filter is passed directly to Fleet Engine. <br><br>See <a href="https://goo.gle/ListVehiclesRequest-filter">ListVehiclesRequest.filter</a> for supported formats.<br><br>Note that valid filters for attributes must have the &quot;attributes&quot; prefix. For example, <code>attributes.x = &quot;y&quot;</code> or <code>attributes.&quot;x y&quot; = &quot;z&quot;</code>.
     */
    vehicleFilter: string | null;
    /**
     * Customization applied to a vehicle marker. <br><br>Use this field to specify custom styling (such as marker icon) and interactivity (such as click handling).<ul><li>If a {@link google.maps.MarkerOptions} object is specified, the changes specified in it are applied to the marker after the marker has been created, overwriting its default options if they exist.</li><li> If a function is specified, it is invoked once when the marker is created, before it is added to the map view. (On this invocation, the <code>isNew</code> parameter in the function parameters object is set to <code>true</code>.) Additionally, this function is invoked when the location provider receives data from Fleet Engine, regardless of whether the data corresponding to this marker have changed.<br><br>See {@link google.maps.journeySharing.VehicleMarkerCustomizationFunctionParams} for a list of supplied parameters and their uses.</li></ul>
     */
    vehicleMarkerCustomization?: ((arg0: google.maps.journeySharing.VehicleMarkerCustomizationFunctionParams) => void) | null;
  }
  /**
   * Fleet Location Provider.
   * Access by calling `const {FleetEngineFleetLocationProvider} = await google.maps.importLibrary("journeySharing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FleetEngineFleetLocationProvider extends google.maps.journeySharing.PollingLocationProvider {
    /**
     * Creates a new location provider for vehicles tracked by Fleet Engine.
     * @param options Options to pass to the location provider.
     */
    constructor(options: google.maps.journeySharing.FleetEngineFleetLocationProviderOptions);
    /**
     * The bounds within which to track vehicles. If no bounds are set, no vehicles will be tracked. To track all vehicles regardless of location, set bounds equivalent to the entire earth.
     */
    locationRestriction?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * This Field is read-only. Threshold for stale vehicle location. If the last updated location for the vehicle is older than this threshold, the vehicle will not be displayed.
     */
    staleLocationThresholdMillis: number;
    /**
     * The filter applied when fetching the vehicles.
     */
    vehicleFilter?: string | null;
  }
  /**
   * The event object passed to the event handler when the {@link google.maps.journeySharing.FleetEngineFleetLocationProvider.update} event is triggered.
   */
  export interface FleetEngineFleetLocationProviderUpdateEvent {
    /**
     * The list of vehicles returned by the query. Unmodifiable.
     */
    vehicles: google.maps.journeySharing.Vehicle[] | null;
  }
  /**
   * The details for a vehicle returned by Fleet Engine.
   */
  export interface Vehicle {
    /**
     * Custom vehicle attributes.
     */
    attributes: { [key: string]: unknown };
    /**
     * The waypoint where current route segment ends.
     */
    currentRouteSegmentEndPoint: google.maps.journeySharing.TripWaypoint | null;
    /**
     * Time when the current route segment was set.
     */
    currentRouteSegmentVersion: Date | null;
    /**
     * List of trip IDs for trips currently assigned to this vehicle.
     */
    currentTrips: string[] | null;
    /**
     * The ETA to the first entry in the waypoints field.
     */
    etaToFirstWaypoint: Date | null;
    /**
     * The last reported location of the vehicle.
     */
    latestLocation: google.maps.journeySharing.VehicleLocationUpdate | null;
    /**
     * The total numbers of riders this vehicle can carry. The driver is not considered in this value.
     */
    maximumCapacity: number | null;
    /**
     * In the format &quot;providers/{provider_id}/vehicles/{vehicle_id}&quot;. The vehicle_id must be a unique identifier.
     */
    name: string;
    /**
     * The current navigation status of the vehicle.
     */
    navigationStatus: google.maps.journeySharing.VehicleNavigationStatusString;
    /**
     * The remaining driving distance in the current route segment, in meters.
     */
    remainingDistanceMeters: number;
    /**
     * Trip types supported by this vehicle.
     */
    supportedTripTypes: google.maps.journeySharing.TripTypeString[] | null;
    /**
     * The vehicle state.
     */
    vehicleState: google.maps.journeySharing.VehicleStateString;
    /**
     * The type of this vehicle.
     */
    vehicleType: google.maps.journeySharing.VehicleTypeString;
    /**
     * The remaining waypoints assigned to this Vehicle.
     */
    waypoints: google.maps.journeySharing.TripWaypoint[] | null;
    /**
     * Last time the waypoints field was updated.
     */
    waypointsVersion: Date | null;
  }
  /**
   * Parameters that are common to all marker customization functions. No object of this class is provided directly to any marker customization function; an object of one of its descendent classes is provided instead.
   */
  export interface MarkerCustomizationFunctionParams {
    /**
     * The default options used to create this marker.
     */
    defaultOptions: google.maps.MarkerOptions;
    /**
     * If true, the marker was newly created, and the marker customization function is being called for the first time, before the marker has been added to the map view. False otherwise.
     */
    isNew: boolean;
    /**
     * The marker. Any customizations should be made to this object directly.
     */
    marker: google.maps.Marker;
  }
  /**
   * Parameters specific to marker customization functions that apply options to delivery vehicle markers. Used by {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderOptions.deliveryVehicleMarkerCustomization} and {@link google.maps.journeySharing.FleetEngineDeliveryFleetLocationProviderOptions.deliveryVehicleMarkerCustomization}.
   */
  export interface DeliveryVehicleMarkerCustomizationFunctionParams extends google.maps.journeySharing.MarkerCustomizationFunctionParams {
    /**
     * The delivery vehicle represented by this marker.
     */
    vehicle: google.maps.journeySharing.DeliveryVehicle;
  }
  /**
   * Parameters specific to marker customization functions that apply options to markers representing planned stops. Used by {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderOptions.plannedStopMarkerCustomization}.
   */
  export interface PlannedStopMarkerCustomizationFunctionParams extends google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams {
    /**
     * The 0-based index of this stop in the list of remaining stops.
     */
    stopIndex: number;
  }
  /**
   * Parameters specific to marker customization functions that apply options to markers representing planned or actual task locations. Used by {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderOptions.taskMarkerCustomization} and {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderOptions.taskOutcomeMarkerCustomization}.
   */
  export interface TaskMarkerCustomizationFunctionParams extends google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams {
    /**
     * The task location represented by this marker.
     */
    task: google.maps.journeySharing.Task;
  }
  /**
   * Parameters specific to marker customization functions that apply options to markers representing shipment delivery vehicle and destination locations. Used by {@link google.maps.journeySharing.FleetEngineShipmentLocationProviderOptions.deliveryVehicleMarkerCustomization} and {@link google.maps.journeySharing.FleetEngineShipmentLocationProviderOptions.destinationMarkerCustomization}.
   */
  export interface ShipmentMarkerCustomizationFunctionParams extends google.maps.journeySharing.MarkerCustomizationFunctionParams {
    /**
     * Information for the task associated with this marker.
     */
    taskTrackingInfo: google.maps.journeySharing.TaskTrackingInfo;
  }
  /**
   * Parameters specific to marker customization functions that apply options to markers representing trip vehicle, origin and destination locations. Used by {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.vehicleMarkerCustomization}, {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.originMarkerCustomization}, and {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.destinationMarkerCustomization}.
   */
  export interface TripMarkerCustomizationFunctionParams extends google.maps.journeySharing.MarkerCustomizationFunctionParams {
    /**
     * The trip associated with this marker. <br><br>For information about the vehicle servicing this trip, use {@link google.maps.journeySharing.Trip.latestVehicleLocationUpdate} and {@link google.maps.journeySharing.Trip.remainingWaypoints}.
     */
    trip: google.maps.journeySharing.Trip;
  }
  /**
   * Parameters specific to marker customization functions that apply options to markers representing trip waypoint locations. Used by {@link google.maps.journeySharing.FleetEngineTripLocationProviderOptions.waypointMarkerCustomization}.
   */
  export interface TripWaypointMarkerCustomizationFunctionParams extends google.maps.journeySharing.TripMarkerCustomizationFunctionParams {
    /**
     * The 0-based waypoint index associated with this marker. Use this index on {@link google.maps.journeySharing.Trip.remainingWaypoints} to retrieve information about the waypoint.
     */
    waypointIndex: number;
  }
  /**
   * Parameters specific to marker customization functions that apply options to vehicle markers. Used by {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.vehicleMarkerCustomization} and {@link google.maps.journeySharing.FleetEngineFleetLocationProviderOptions.vehicleMarkerCustomization}.
   */
  export interface VehicleMarkerCustomizationFunctionParams extends google.maps.journeySharing.MarkerCustomizationFunctionParams {
    /**
     * The vehicle represented by this marker.
     */
    vehicle: google.maps.journeySharing.Vehicle;
  }
  /**
   * Parameters specific to marker customization functions that apply options to vehicle waypoint markers. Used by {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.originMarkerCustomization}, {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.destinationMarkerCustomization} and {@link google.maps.journeySharing.FleetEngineVehicleLocationProviderOptions.intermediateDestinationMarkerCustomization}
   */
  export interface VehicleWaypointMarkerCustomizationFunctionParams extends google.maps.journeySharing.VehicleMarkerCustomizationFunctionParams {
    /**
     * The 0-based waypoint index associated with this marker. Use this index on {@link google.maps.journeySharing.Vehicle.waypoints} to retrieve information about the waypoint.
     */
    waypointIndex: number;
  }
  /**
   * Parameters that are common to all polyline customization functions. No object of this class is provided directly to any polyline customization function; an object of one of its descendent classes is provided instead.
   */
  export interface PolylineCustomizationFunctionParams {
    /**
     * The default options used to create this set of polylines.
     */
    defaultOptions: google.maps.PolylineOptions;
    /**
     * If true, the list of polylines was newly created, and the polyline customization function is being called for the first time. False otherwise.
     */
    isNew: boolean;
    /**
     * The list of polylines created. They are arranged sequentially to form the rendered route.
     */
    polylines: google.maps.Polyline[];
  }
  /**
   * Parameters specific to polyline customization functions for {@link google.maps.journeySharing.FleetEngineShipmentLocationProvider}.
   */
  export interface ShipmentPolylineCustomizationFunctionParams extends google.maps.journeySharing.PolylineCustomizationFunctionParams {
    /**
     * Information for the task associated with this polyline.
     */
    taskTrackingInfo: google.maps.journeySharing.TaskTrackingInfo;
  }
  /**
   * Parameters specific to polyline customization functions for {@link google.maps.journeySharing.FleetEngineTripLocationProvider}.
   */
  export interface TripPolylineCustomizationFunctionParams extends google.maps.journeySharing.PolylineCustomizationFunctionParams {
    /**
     * The trip associated with this polyline.
     */
    trip: google.maps.journeySharing.Trip;
  }
  /**
   * Parameters specific to polyline customization functions for {@link google.maps.journeySharing.FleetEngineVehicleLocationProvider}.
   */
  export interface VehiclePolylineCustomizationFunctionParams extends google.maps.journeySharing.PolylineCustomizationFunctionParams {
    /**
     * The vehicle traversing through this polyline.
     */
    vehicle: google.maps.journeySharing.Vehicle;
  }
  /**
   * Parameters specific to polyline customization functions for {@link google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider}.
   */
  export interface DeliveryVehiclePolylineCustomizationFunctionParams extends google.maps.journeySharing.PolylineCustomizationFunctionParams {
    /**
     * The delivery vehicle traversing through this polyline.
     */
    deliveryVehicle: google.maps.journeySharing.DeliveryVehicle;
  }
}

declare namespace google.maps.places {
  /**
   * The options that can be set on an <code>Autocomplete</code> object.
   */
  export interface AutocompleteOptions {
    /**
     * The area in which to search for places.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * The component restrictions. Component restrictions are used to restrict predictions to only those within the parent component. For example, the country.
     */
    componentRestrictions?: google.maps.places.ComponentRestrictions;
    /**
     * Fields to be included for the Place in the details response when the details are successfully retrieved, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If <code>[&#39;ALL&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see {@link google.maps.places.PlaceResult}. Nested fields can be specified with dot-paths (for example, <code>"geometry.location"</code>). The default is <code>[&#39;ALL&#39;]</code>.
     */
    fields?: string[];
    /**
     * A boolean value, indicating that the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent. Setting strictBounds to <code>false</code> (which is the default) will make the results biased towards, but not restricted to, places contained within the bounds.
     */
    strictBounds?: boolean;
    /**
     * The types of predictions to be returned. For supported types, see the <a href="https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types"> developer&#39;s guide</a>. If no types are specified, all types will be returned.
     */
    types?: string[];
    /**
     * Whether to retrieve only Place IDs. The PlaceResult made available when the place_changed event is fired will only have the place_id, types and name fields, with the place_id, types and description returned by the Autocomplete service. Disabled by default.
     * @deprecated <code>placeIdOnly</code> is deprecated as of January 15, 2019, and will be turned off on January 15, 2020. Use {@link google.maps.places.AutocompleteOptions.fields} instead: <code>fields: [&#39;place_id&#39;, &#39;name&#39;, &#39;types&#39;]</code>.
     */
    placeIdOnly?: boolean;
  }
  /**
   * Represents a single autocomplete prediction.
   */
  export interface AutocompletePrediction {
    /**
     * This is the unformatted version of the query suggested by the Places service.
     */
    description: string;
    /**
     * The distance in meters of the place from the {@link google.maps.places.AutocompletionRequest.origin}.
     */
    distance_meters?: number;
    /**
     * A set of substrings in the place&#39;s description that match elements in the user&#39;s input, suitable for use in highlighting those substrings. Each substring is identified by an offset and a length, expressed in unicode characters.
     */
    matched_substrings: google.maps.places.PredictionSubstring[];
    /**
     * A place ID that can be used to retrieve details about this place using the place details service (see {@link google.maps.places.PlacesService.getDetails}).
     */
    place_id: string;
    /**
     * Structured information about the place&#39;s description, divided into a main text and a secondary text, including an array of matched substrings from the autocomplete input, identified by an offset and a length, expressed in unicode characters.
     */
    structured_formatting: google.maps.places.StructuredFormatting;
    /**
     * Information about individual terms in the above description, from most to least specific. For example, &quot;Taco Bell&quot;, &quot;Willitis&quot;, and &quot;CA&quot;.
     */
    terms: google.maps.places.PredictionTerm[];
    /**
     * An array of types that the prediction belongs to, for example <code>'establishment'</code> or <code>'geocode'</code>.
     */
    types: string[];
  }
  /**
   * Represents a prediction term.
   */
  export interface PredictionTerm {
    /**
     * The offset, in unicode characters, of the start of this term in the description of the place.
     */
    offset: number;
    /**
     * The value of this term, for example, &quot;Taco Bell&quot;.
     */
    value: string;
  }
  /**
   * Represents a prediction substring.
   */
  export interface PredictionSubstring {
    /**
     * The length of the substring.
     */
    length: number;
    /**
     * The offset to the substring&#39;s start within the description string.
     */
    offset: number;
  }
  /**
   * Contains structured information about the place&#39;s description, divided into a main text and a secondary text, including an array of matched substrings from the autocomplete input, identified by an offset and a length, expressed in unicode characters.
   */
  export interface StructuredFormatting {
    /**
     * This is the main text part of the unformatted description of the place suggested by the Places service. Usually the name of the place.
     */
    main_text: string;
    /**
     * A set of substrings in the main text that match elements in the user&#39;s input, suitable for use in highlighting those substrings. Each substring is identified by an offset and a length, expressed in unicode characters.
     */
    main_text_matched_substrings: google.maps.places.PredictionSubstring[];
    /**
     * This is the secondary text part of the unformatted description of the place suggested by the Places service. Usually the location of the place.
     */
    secondary_text: string;
  }
  /**
   * An Autocompletion request to be sent to {@link google.maps.places.AutocompleteService.getPlacePredictions}.
   */
  export interface AutocompletionRequest {
    /**
     * The component restrictions. Component restrictions are used to restrict predictions to only those within the parent component. For example, the country.
     */
    componentRestrictions?: google.maps.places.ComponentRestrictions;
    /**
     * The user entered input string.
     */
    input: string;
    /**
     * A language identifier for the language in which the results should be returned, if possible. Results in the selected language may be given a higher ranking, but suggestions are not restricted to this language. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * A soft boundary or hint to use when searching for places.
     */
    locationBias?: google.maps.places.LocationBias | null;
    /**
     * Bounds to constrain search results.
     */
    locationRestriction?: google.maps.places.LocationRestriction | null;
    /**
     * The character position in the input term at which the service uses text for predictions (the position of the cursor in the input field).
     */
    offset?: number;
    /**
     * The location where {@link google.maps.places.AutocompletePrediction.distance_meters} is calculated from.
     */
    origin?: google.maps.LatLng | google.maps.LatLngLiteral;
    /**
     * A region code which is used for result formatting and for result filtering. It does not restrict the suggestions to this country. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    region?: string | null;
    /**
     * Unique reference used to bundle individual requests into sessions.
     */
    sessionToken?: google.maps.places.AutocompleteSessionToken;
    /**
     * The types of predictions to be returned. For supported types, see the <a href="https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types"> developer&#39;s guide</a>. If no types are specified, all types will be returned.
     */
    types?: string[];
    /**
     * Bounds for prediction biasing. Predictions will be biased towards, but not restricted to, the given <code>bounds</code>. Both <code>location</code> and <code>radius</code> will be ignored if <code>bounds</code> is set.
     * @deprecated <code>bounds</code> is deprecated as of May 2023. Use {@link google.maps.places.AutocompletionRequest.locationBias} and {@link google.maps.places.AutocompletionRequest.locationRestriction} instead.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * Location for prediction biasing. Predictions will be biased towards the given <code>location</code> and <code>radius</code>. Alternatively, <code>bounds</code> can be used.
     * @deprecated <code>location</code> is deprecated as of May 2023. Use {@link google.maps.places.AutocompletionRequest.locationBias} and {@link google.maps.places.AutocompletionRequest.locationRestriction} instead.
     */
    location?: google.maps.LatLng;
    /**
     * The radius of the area used for prediction biasing. The <code>radius</code> is specified in meters, and must always be accompanied by a <code>location</code> property. Alternatively, <code>bounds</code> can be used.
     * @deprecated <code>radius</code> is deprecated as of May 2023. Use {@link google.maps.places.AutocompletionRequest.locationBias} and {@link google.maps.places.AutocompletionRequest.locationRestriction} instead.
     */
    radius?: number;
  }
  /**
   * The operational status of the Place, if it is a business, returned in a PlaceResult (indicates whether the place is operational, or closed either temporarily or permanently). Specify these by value, or the constant&#39;s name (example: <code>&#39;OPERATIONAL&#39;</code> or <code>google.maps.places.BusinessStatus.OPERATIONAL</code>).
   *
   * Access by calling `const {BusinessStatus} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum BusinessStatus {
    /**
     * The business is closed permanently.
     */
    CLOSED_PERMANENTLY = 'CLOSED_PERMANENTLY',
    /**
     * The business is closed temporarily.
     */
    CLOSED_TEMPORARILY = 'CLOSED_TEMPORARILY',
    /**
     * The business will open in the future.
     */
    FUTURE_OPENING = 'FUTURE_OPENING',
    /**
     * The business is operating normally.
     */
    OPERATIONAL = 'OPERATIONAL',
  }
  export type BusinessStatusString = `${google.maps.places.BusinessStatus}`;
  /**
   * Defines the component restrictions that can be used with the autocomplete service.
   */
  export interface ComponentRestrictions {
    /**
     * Restricts predictions to the specified country (ISO 3166-1 Alpha-2 country code, case insensitive). For example, <code>'us'</code>, <code>'br'</code>, or <code>'au'</code>. You can provide a single one, or an array of up to five country code strings.
     */
    country: string | string[] | null;
  }
  /**
   * A Place details query to be sent to the <code>PlacesService</code>.
   */
  export interface PlaceDetailsRequest {
    /**
     * Fields to be included in the details response, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If no fields are specified or <code>[&#39;ALL&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see {@link google.maps.places.PlaceResult}. Nested fields can be specified with dot-paths (for example, <code>"geometry.location"</code>).
     */
    fields?: string[];
    /**
     * A language identifier for the language in which details should be returned. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * The Place ID of the Place for which details are being requested.
     */
    placeId: string;
    /**
     * A region code of the user&#39;s region. This can affect which photos may be returned, and possibly other things. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    region?: string | null;
    /**
     * Unique reference used to bundle the details request with an autocomplete session.
     */
    sessionToken?: google.maps.places.AutocompleteSessionToken;
  }
  /**
   * Represents a photo element of a Place.
   */
  export interface PlacePhoto {
    /**
     * The height of the photo in pixels.
     */
    height: number;
    /**
     * Attribution text to be displayed for this photo.
     */
    html_attributions: string[];
    /**
     * The width of the photo in pixels.
     */
    width: number;
    /**
     * Returns the image URL corresponding to the specified options.
     */
    getUrl(opts?: google.maps.places.PhotoOptions): string;
  }
  /**
   * Defines photo-requesting options.
   */
  export interface PhotoOptions {
    /**
     * The maximum height in pixels of the returned image.
     */
    maxHeight?: number | null;
    /**
     * The maximum width in pixels of the returned image.
     */
    maxWidth?: number | null;
  }
  /**
   * Represents a single review of a place.
   */
  export interface PlaceReview {
    /**
     * The name of the reviewer.
     */
    author_name: string;
    /**
     * A URL to the reviewer&#39;s profile. This will be <code>undefined</code> when the reviewer&#39;s profile is unavailable.
     */
    author_url?: string;
    /**
     * An IETF language code indicating the language in which this review is written. Note that this code includes only the main language tag without any secondary tag indicating country or region. For example, all the English reviews are tagged as <code>'en'</code> rather than &#39;en-AU&#39; or &#39;en-UK&#39;.
     */
    language: string;
    /**
     * A URL to the reviwer&#39;s profile image.
     */
    profile_photo_url: string;
    /**
     * The rating of this review, a number between 1.0 and 5.0 (inclusive).
     */
    rating?: number;
    /**
     * A string of formatted recent time, expressing the review time relative to the current time in a form appropriate for the language and country. For example <code>&quot;a month ago&quot;</code>.
     */
    relative_time_description: string;
    /**
     * The text of a review.
     */
    text: string;
    /**
     * Timestamp for the review, expressed in seconds since epoch.
     */
    time: number;
    /**
     * The aspects rated by the review. The ratings on a scale of 0 to 3.
     * @deprecated This field is no longer available.
     */
    aspects?: google.maps.places.PlaceAspectRating[];
  }
  /**
   * Defines information about an aspect of the place that users have reviewed.
   * @deprecated This interface is no longer used.
   */
  export interface PlaceAspectRating {
    /**
     * The rating of this aspect. For individual reviews this is an integer from 0 to 3. For aggregated ratings of a place this is an integer from 0 to 30.
     */
    rating: number;
    /**
     * The aspect type. For example, <code>"food"</code>, <code>"decor"</code>, <code>"service"</code>, or <code>"overall"</code>.
     */
    type: string;
  }
  /**
   * Defines information about a Place.
   */
  export interface PlaceResult {
    /**
     * The collection of address components for this Place’s location. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    address_components?: google.maps.GeocoderAddressComponent[];
    /**
     * The representation of the Place’s address in the <a href="http://microformats.org/wiki/adr">adr microformat</a>. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    adr_address?: string;
    /**
     * The rated aspects of this Place, based on Google and Zagat user reviews. The ratings are on a scale of 0 to 30.
     */
    aspects?: google.maps.places.PlaceAspectRating[];
    /**
     * A flag indicating the operational status of the Place, if it is a business (indicates whether the place is operational, or closed either temporarily or permanently). If no data is available, the flag is not present in search or details responses.
     */
    business_status?: google.maps.places.BusinessStatusString;
    /**
     * The Place’s full address.
     */
    formatted_address?: string;
    /**
     * The Place’s phone number, formatted according to the <a href="http://en.wikipedia.org/wiki/Local_conventions_for_writing_telephone_numbers"> number&#39;s regional convention</a>. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    formatted_phone_number?: string;
    /**
     * The Place’s geometry-related information.
     */
    geometry?: google.maps.places.PlaceGeometry;
    /**
     * Attribution text to be displayed for this Place result. Available <code>html_attributions</code> are always returned regardless of what <code>fields</code> have been requested, and must be displayed.
     */
    html_attributions?: string[];
    /**
     * URL to an image resource that can be used to represent this Place’s category.
     */
    icon?: string;
    /**
     * Background color for use with a Place&#39;s icon. See also {@link google.maps.places.PlaceResult.icon_mask_base_uri}.
     */
    icon_background_color?: string;
    /**
     * A truncated URL to an icon mask. Access different icon types by appending a file extension to the end (i.e. <code>.svg</code> or <code>.png</code>).
     */
    icon_mask_base_uri?: string;
    /**
     * The Place’s phone number in international format. International format includes the country code, and is prefixed with the plus (+) sign. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    international_phone_number?: string;
    /**
     * The Place’s name. Note: In the case of user entered Places, this is the raw text, as typed by the user. Please exercise caution when using this data, as malicious users may try to use it as a vector for code injection attacks (See <a href="http://en.wikipedia.org/wiki/Code_injection"> http://en.wikipedia.org/wiki/Code_injection</a>).
     */
    name?: string;
    /**
     * Defines when the Place opens or closes.
     */
    opening_hours?: google.maps.places.PlaceOpeningHours;
    /**
     * Photos of this Place. The collection will contain up to ten {@link google.maps.places.PlacePhoto} objects.
     */
    photos?: google.maps.places.PlacePhoto[];
    /**
     * A unique identifier for the Place.
     */
    place_id?: string;
    /**
     * Defines Open Location Codes or &quot;<a href="https://plus.codes/">plus codes</a>&quot; for the Place.
     */
    plus_code?: google.maps.places.PlacePlusCode;
    /**
     * The price level of the Place, on a scale of 0 to 4. Price levels are interpreted as follows: <ul style="list-style-type: none;"> <li><code>0</code>: Free <li><code>1</code>: Inexpensive <li><code>2</code>: Moderate <li><code>3</code>: Expensive <li><code>4</code>: Very Expensive </ul>
     */
    price_level?: number;
    /**
     * A rating, between 1.0 to 5.0, based on user reviews of this Place.
     */
    rating?: number;
    /**
     * A list of reviews of this Place. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    reviews?: google.maps.places.PlaceReview[];
    /**
     * An array of <a href="https://developers.google.com/maps/documentation/places/web-service/supported_types"> types for this Place</a> (for example, <code>["political", "locality"]</code> or <code>["restaurant", "establishment"]</code>).
     */
    types?: string[];
    /**
     * URL of the official Google page for this place. This is the Google-owned page that contains the best available information about the Place. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    url?: string;
    /**
     * The number of user ratings which contributed to this Place’s {@link google.maps.places.PlaceResult.rating}.
     */
    user_ratings_total?: number;
    /**
     * The offset from UTC of the Place’s current timezone, in minutes. For example, Sydney, Australia in daylight savings is 11 hours ahead of UTC, so the <code>utc_offset_minutes</code> will be <code>660</code>. For timezones behind UTC, the offset is negative. For example, the <code>utc_offset_minutes</code> is <code>-60</code> for Cape Verde. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    utc_offset_minutes?: number;
    /**
     * The simplified address for the Place, including the street name, street number, and locality, but not the province/state, postal code, or country. For example, Google&#39;s Sydney, Australia office has a vicinity value of <code>"48 Pirrama Road, Pyrmont"</code>. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    vicinity?: string;
    /**
     * The authoritative website for this Place, such as a business&#39; homepage. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    website?: string;
    /**
     * The offset from UTC of the Place’s current timezone, in minutes. For example, Sydney, Australia in daylight savings is 11 hours ahead of UTC, so the <code>utc_offset</code> will be <code>660</code>. For timezones behind UTC, the offset is negative. For example, the <code>utc_offset</code> is <code>-60</code> for Cape Verde. Only available with {@link google.maps.places.PlacesService.getDetails}.
     * @deprecated <code>utc_offset</code> is deprecated as of November 2019. Use {@link google.maps.places.PlaceResult.utc_offset_minutes} instead. See <a href="https://goo.gle/js-open-now">https://goo.gle/js-open-now</a>
     */
    utc_offset?: number;
    /**
     * A flag indicating whether the Place is closed, either permanently or temporarily. If the place is operational, or if no data is available, the flag is absent from the response.
     * @deprecated <code>permanently_closed</code> is deprecated as of May 2020 and will be turned off in May 2021. Use {@link google.maps.places.PlaceResult.business_status} instead as <code>permanently_closed</code> does not distinguish between temporary and permanent closures.
     */
    permanently_closed?: boolean;
  }
  /**
   * Defines information about the geometry of a Place.
   */
  export interface PlaceGeometry {
    /**
     * The Place’s position.
     */
    location?: google.maps.LatLng;
    /**
     * The preferred viewport when displaying this Place on a map. This property will be <code>null</code> if the preferred viewport for the Place is not known. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    viewport?: google.maps.LatLngBounds;
  }
  /**
   * Defines information about the opening hours of a Place.
   */
  export interface PlaceOpeningHours {
    /**
     * Opening periods covering for each day of the week, starting from Sunday, in chronological order. Days in which the Place is not open are not included. Only available with {@link google.maps.places.PlacesService.getDetails}.
     */
    periods?: google.maps.places.PlaceOpeningHoursPeriod[];
    /**
     * An array of seven strings representing the formatted opening hours for each day of the week. The Places Service will format and localize the opening hours appropriately for the current language. The ordering of the elements in this array depends on the language. Some languages start the week on Monday while others start on Sunday. Only available with {@link google.maps.places.PlacesService.getDetails}. Other calls may return an empty array.
     */
    weekday_text?: string[];
    /**
     * Whether the Place is open at the current time.
     * @deprecated <code>open_now</code> is deprecated as of November 2019. Use the {@link google.maps.places.PlaceOpeningHours.isOpen} method from a {@link google.maps.places.PlacesService.getDetails} result instead. See <a href="https://goo.gle/js-open-now">https://goo.gle/js-open-now</a>
     */
    open_now?: boolean;
    /**
     * Check whether the place is open now (when no date is passed), or at the given date. If this place does not have {@link google.maps.places.PlaceResult.utc_offset_minutes} or {@link google.maps.places.PlaceOpeningHours.periods} then <code>undefined</code> is returned ({@link google.maps.places.PlaceOpeningHours.periods} is only available via {@link google.maps.places.PlacesService.getDetails}). This method does not take exceptional hours, such as holiday hours, into consideration.
     */
    isOpen(date?: Date): boolean | undefined;
  }
  /**
   * Defines structured information about the opening hours of a Place. <strong>Note:</strong> If a Place is <strong>always open</strong>, the <code>close</code> section will be missing from the response. Clients can rely on always-open being represented as an <code>open</code> period containing <code>day</code> with value <code>0</code> and <code>time</code> with value <code>"0000"</code>, and no <code>close</code>.</li>
   */
  export interface PlaceOpeningHoursPeriod {
    /**
     * The closing time for the Place.
     */
    close?: google.maps.places.PlaceOpeningHoursTime;
    /**
     * The opening time for the Place.
     */
    open: google.maps.places.PlaceOpeningHoursTime;
  }
  /**
   * Defines when a Place opens or closes.
   */
  export interface PlaceOpeningHoursTime {
    /**
     * The days of the week, as a number in the range [<code>0</code>, <code>6</code>], starting on Sunday. For example, <code>2</code> means Tuesday.
     */
    day: number;
    /**
     * The hours of the {@link google.maps.places.PlaceOpeningHoursTime.time} as a number, in the range [<code>0</code>, <code>23</code>]. This will be reported in the Place’s time zone.
     */
    hours: number;
    /**
     * The minutes of the {@link google.maps.places.PlaceOpeningHoursTime.time} as a number, in the range [<code>0</code>, <code>59</code>]. This will be reported in the Place’s time zone.
     */
    minutes: number;
    /**
     * The timestamp (as milliseconds since the epoch, suitable for use with <code>new Date()</code>) representing the next occurrence of this PlaceOpeningHoursTime. It is calculated from the {@link google.maps.places.PlaceOpeningHoursTime.day} of week, the {@link google.maps.places.PlaceOpeningHoursTime.time}, and the {@link google.maps.places.PlaceResult.utc_offset_minutes}. If the {@link google.maps.places.PlaceResult.utc_offset_minutes} is <code>undefined</code>, then <code>nextDate</code> will be <code>undefined</code>.
     */
    nextDate?: number;
    /**
     * The time of day in 24-hour &quot;hhmm&quot; format. Values are in the range [<code>"0000"</code>, <code>"2359"</code>]. The time will be reported in the Place’s time zone.
     */
    time: string;
  }
  /**
   * Defines Open Location Codes or &quot;<a href="https://plus.codes/">plus codes</a>&quot; for a Place. Plus codes can be used as a replacement for street addresses in places where they do not exist (where buildings are not numbered or streets are not named).
   */
  export interface PlacePlusCode {
    /**
     * A <a href="https://plus.codes/">plus code</a> with a 1/8000th of a degree by 1/8000th of a degree area where the first four characters (the area code) are dropped and replaced with a locality description. For example, <code>"9G8F+5W Zurich, Switzerland"</code>. If no suitable locality that can be found to shorten the code then this field is omitted.
     */
    compound_code?: string;
    /**
     * A <a href="https://plus.codes/">plus code</a> with a 1/8000th of a degree by 1/8000th of a degree area. For example, <code>"8FVC9G8F+5W"</code>.
     */
    global_code: string;
  }
  /**
   * An object used to fetch additional pages of Places results.
   */
  export interface PlaceSearchPagination {
    /**
     * Indicates if further results are available. <code>true</code> when there is an additional results page.
     */
    hasNextPage: boolean;
    /**
     * Fetches the next page of results. Uses the same callback function that was provided to the first search request.
     */
    nextPage(): void;
  }
  /**
   * A Place search query to be sent to the <code>PlacesService</code>.
   */
  export interface PlaceSearchRequest {
    /**
     * The bounds within which to search for Places. Both <code>location</code> and <code>radius</code> will be ignored if <code>bounds</code> is set.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * A term to be matched against all available fields, including but not limited to name, type, and address, as well as customer reviews and other third-party content.
     */
    keyword?: string;
    /**
     * A language identifier for the language in which names and addresses should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * The location around which to search for Places.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral;
    /**
     * Restricts results to only those places at the specified price level or lower. Valid values are in the range from 0 (most affordable) to 4 (most expensive), inclusive. Must be greater than or equal to <code>minPrice </code>, if specified.
     */
    maxPriceLevel?: number;
    /**
     * Restricts results to only those places at the specified price level or higher. Valid values are in the range from 0 (most affordable) to 4 (most expensive), inclusive. Must be less than or equal to <code>maxPrice</code>, if specified.
     */
    minPriceLevel?: number;
    /**
     * Restricts results to only those places that are open right now.
     */
    openNow?: boolean;
    /**
     * The distance from the given location within which to search for Places, in meters. The maximum allowed value is 50&thinsp;000.
     */
    radius?: number;
    /**
     * Specifies the ranking method to use when returning results. Note that when <code>rankBy</code> is set to <code>DISTANCE</code>, you must specify a <code>location</code> but you cannot specify a <code>radius</code> or <code>bounds</code>.
     * @defaultValue {@link google.maps.places.RankBy.PROMINENCE}
     */
    rankBy?: google.maps.places.RankBy;
    /**
     * Searches for places of the given type. The type is translated to the local language of the request&#39;s target location and used as a query string. If a query is also provided, it is concatenated to the localized type string. Results of a different type are dropped from the response. Use this field to perform language and region independent categorical searches. Valid types are given <a href="https://developers.google.com/maps/documentation/places/web-service/supported_types">here</a>.
     */
    type?: string;
    /**
     * Equivalent to <code>keyword</code>. Values in this field are combined with values in the <code>keyword</code> field and passed as part of the same search string.
     * @deprecated Use <code>keyword</code> instead.
     */
    name?: string;
  }
  /**
   * Represents a single Query Autocomplete prediction.
   */
  export interface QueryAutocompletePrediction {
    /**
     * This is the unformatted version of the query suggested by the Places service.
     */
    description: string;
    /**
     * A set of substrings in the place&#39;s description that match elements in the user&#39;s input, suitable for use in highlighting those substrings. Each substring is identified by an offset and a length, expressed in unicode characters.
     */
    matched_substrings: google.maps.places.PredictionSubstring[];
    /**
     * Only available if prediction is a place. A place ID that can be used to retrieve details about this place using the place details service (see {@link google.maps.places.PlacesService.getDetails}).
     */
    place_id?: string;
    /**
     * Information about individual terms in the above description. Categorical terms come first (for example, &quot;restaurant&quot;). Address terms appear from most to least specific. For example, &quot;San Francisco&quot;, and &quot;CA&quot;.
     */
    terms: google.maps.places.PredictionTerm[];
  }
  /**
   * A QueryAutocompletion request to be sent to the <code>QueryAutocompleteService</code>.
   */
  export interface QueryAutocompletionRequest {
    /**
     * Bounds for prediction biasing. Predictions will be biased towards, but not restricted to, the given <code>bounds</code>. Both <code>location</code> and <code>radius</code> will be ignored if <code>bounds</code> is set.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * The user entered input string.
     */
    input: string;
    /**
     * Location for prediction biasing. Predictions will be biased towards the given <code>location</code> and <code>radius</code>. Alternatively, <code>bounds</code> can be used.
     */
    location?: google.maps.LatLng;
    /**
     * The character position in the input term at which the service uses text for predictions (the position of the cursor in the input field).
     */
    offset?: number;
    /**
     * The radius of the area used for prediction biasing. The <code>radius</code> is specified in meters, and must always be accompanied by a <code>location</code> property. Alternatively, <code>bounds</code> can be used.
     */
    radius?: number;
  }
  /**
   * A find place from text search request to be sent to {@link google.maps.places.PlacesService.findPlaceFromPhoneNumber}.
   */
  export interface FindPlaceFromPhoneNumberRequest {
    /**
     * Fields to be included in the response, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If <code>[&#39;ALL&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see {@link google.maps.places.PlaceResult}. Nested fields can be specified with dot-paths (for example, <code>"geometry.location"</code>).
     */
    fields: string[];
    /**
     * A language identifier for the language in which names and addresses should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * The bias used when searching for Place. The result will be biased towards, but not restricted to, the given {@link google.maps.places.LocationBias}.
     */
    locationBias?: google.maps.places.LocationBias;
    /**
     * The phone number of the place to look up. Format must be <a href="https://en.wikipedia.org/wiki/E.164">E.164</a>.
     */
    phoneNumber: string;
  }
  /**
   * A find place from text search request to be sent to {@link google.maps.places.PlacesService.findPlaceFromQuery}.
   */
  export interface FindPlaceFromQueryRequest {
    /**
     * Fields to be included in the response, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If <code>[&#39;ALL&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see {@link google.maps.places.PlaceResult}. Nested fields can be specified with dot-paths (for example, <code>"geometry.location"</code>).
     */
    fields: string[];
    /**
     * A language identifier for the language in which names and addresses should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * The bias used when searching for Place. The result will be biased towards, but not restricted to, the given {@link google.maps.places.LocationBias}.
     */
    locationBias?: google.maps.places.LocationBias;
    /**
     * The request&#39;s query. For example, the name or address of a place.
     */
    query: string;
  }
  /**
   * The options that can be set on a <code>SearchBox</code> object.
   */
  export interface SearchBoxOptions {
    /**
     * The area towards which to bias query predictions. Predictions are biased towards, but not restricted to, queries targeting these bounds.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
  }
  /**
   * A text search request to be sent to the <code>PlacesService</code>.
   */
  export interface TextSearchRequest {
    /**
     * Bounds used to bias results when searching for Places (optional). Both <code>location</code> and <code>radius</code> will be ignored if <code>bounds</code> is set. Results will not be restricted to those inside these bounds; but, results inside it will rank higher.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * A language identifier for the language in which names and addresses should be returned, when possible. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    language?: string | null;
    /**
     * The center of the area used to bias results when searching for Places.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral;
    /**
     * The request&#39;s query term. For example, the name of a place (&#39;Eiffel Tower&#39;), a category followed by the name of a location (&#39;pizza in New York&#39;), or the name of a place followed by a location disambiguator (&#39;Starbucks in Sydney&#39;).
     */
    query?: string;
    /**
     * The radius of the area used to bias results when searching for Places, in meters.
     */
    radius?: number;
    /**
     * A region code to bias results towards. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    region?: string | null;
    /**
     * Searches for places of the given type. The type is translated to the local language of the request&#39;s target location and used as a query string. If a query is also provided, it is concatenated to the localized type string. Results of a different type are dropped from the response. Use this field to perform language and region independent categorical searches. Valid types are given <a href="https://developers.google.com/maps/documentation/places/web-service/supported_types">here</a>.
     */
    type?: string;
  }
  /**
   * Represents a postal address (e.g. for a postal service to deliver items to). Note: PostalAddress is used by the JavaScript API to instantiate objects that represent data returned by the Web Service.
   * Access by calling `const {PostalAddress} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PostalAddress implements google.maps.places.PostalAddressLiteral {
    /**
     * Unstructured address lines describing the lower levels of an address.
     */
    get addressLines(): string[];
    /**
     * The highest administrative subdivision which is used for postal addresses of a country or region.
     */
    get administrativeArea(): string | null;
    /**
     * BCP-47 language code of the contents of this address. Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
     */
    get languageCode(): string | null;
    /**
     * Generally refers to the city/town portion of the address.
     */
    get locality(): string | null;
    /**
     * The name of the organization at the address.
     */
    get organization(): string | null;
    /**
     * Postal code of the address.
     */
    get postalCode(): string | null;
    /**
     * The recipient at the address.
     */
    get recipients(): string[];
    /**
     * CLDR region code of the country/region of the address. Example: &quot;CH&quot; for Switzerland. See <a href="https://cldr.unicode.org/">https://cldr.unicode.org/</a> and <a href="https://www.unicode.org/cldr/charts/30/supplemental/territory_information.html">https://www.unicode.org/cldr/charts/30/supplemental/territory_information.html</a> for details.
     */
    get regionCode(): string;
    /**
     * Sorting code of the address.
     */
    get sortingCode(): string | null;
    /**
     * Sublocality of the address such as neighborhoods, boroughs, or districts.
     */
    get sublocality(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Data for hydrating a PostalAddress.
   */
  export interface PostalAddressLiteral {
    /**
     * See {@link google.maps.places.PostalAddress.addressLines}.
     */
    addressLines?: Iterable<string>;
    /**
     * See {@link google.maps.places.PostalAddress.administrativeArea}.
     */
    administrativeArea?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.languageCode}.
     */
    languageCode?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.locality}.
     */
    locality?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.organization}.
     */
    organization?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.postalCode}.
     */
    postalCode?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.recipients}.
     */
    recipients?: Iterable<string>;
    /**
     * See {@link google.maps.places.PostalAddress.regionCode}.
     */
    regionCode: string;
    /**
     * See {@link google.maps.places.PostalAddress.sortingCode}.
     */
    sortingCode?: string | null;
    /**
     * See {@link google.maps.places.PostalAddress.sublocality}.
     */
    sublocality?: string | null;
  }
  /**
   * Represents a session token used for tracking an autocomplete session.
   * Access by calling `const {AutocompleteSessionToken} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AutocompleteSessionToken {
    /**
     * Creates a new instance of <code>AutocompleteSessionToken</code>.
     */
    constructor();
  }
  /**
   * Plus code for the Place. See <a href="https://plus.codes/">https://plus.codes/</a> for more information.
   * Access by calling `const {PlusCode} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlusCode {
    /**
     * A plus code with a 1/8000th of a degree by 1/8000th of a degree area where the first four characters (the area code) are dropped and replaced with a locality description. For example, &quot;9G8F+5W Zurich, Switzerland&quot;.
     */
    get compoundCode(): string | null;
    /**
     * A plus code with a 1/8000th of a degree by 1/8000th of a degree area. For example, &quot;8FVC9G8F+5W&quot;.
     */
    get globalCode(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * A widget that provides Place predictions based on a user&#39;s text input. It attaches to an input element of type <code>text</code>, and listens for text entry in that field. The list of predictions is presented as a drop-down list, and is updated as text is entered.
   * Access by calling `const {Autocomplete} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of March 1st, 2025, google.maps.places.Autocomplete is not available to new customers. Please use {@link google.maps.places.PlaceAutocompleteElement} instead. At this time, google.maps.places.Autocomplete is not scheduled to be discontinued, but {@link google.maps.places.PlaceAutocompleteElement} is recommended over google.maps.places.Autocomplete. While google.maps.places.Autocomplete will continue to receive bug fixes for any major regressions, existing bugs in google.maps.places.Autocomplete will not be addressed. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details and <a href="https://developers.google.com/maps/documentation/javascript/places-migration-overview">https://developers.google.com/maps/documentation/javascript/places-migration-overview</a> for the migration guide.
   */
  export class Autocomplete extends google.maps.MVCObject {
    /**
     * Creates a new instance of <code>Autocomplete</code> that attaches to the specified input text field with the given options.
     * @param inputField The <code>&lt;input&gt;</code> text field to which the <code>Autocomplete</code> should be attached.
     * @param opts Options.
     */
    constructor(inputField: HTMLInputElement, opts?: google.maps.places.AutocompleteOptions | null);
    /**
     * Returns the bounds to which predictions are biased.
     */
    getBounds(): google.maps.LatLngBounds | undefined;
    /**
     * Returns the fields to be included for the Place in the details response when the details are successfully retrieved. For a list of fields see {@link google.maps.places.PlaceResult}.
     */
    getFields(): string[] | undefined;
    /**
     * Returns the details of the Place selected by user if the details were successfully retrieved. Otherwise returns a stub Place object, with the <code>name</code> property set to the current value of the input field.
     */
    getPlace(): google.maps.places.PlaceResult;
    /**
     * Sets the preferred area within which to return Place results. Results are biased towards, but not restricted to, this area.
     */
    setBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined): void;
    /**
     * Sets the component restrictions. Component restrictions are used to restrict predictions to only those within the parent component. For example, the country.
     */
    setComponentRestrictions(restrictions: google.maps.places.ComponentRestrictions | null): void;
    /**
     * Sets the fields to be included for the Place in the details response when the details are successfully retrieved. For a list of fields see {@link google.maps.places.PlaceResult}.
     */
    setFields(fields: string[] | undefined): void;

    setOptions(options: google.maps.places.AutocompleteOptions | null): void;
    /**
     * Sets the types of predictions to be returned. For supported types, see the <a href="https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types"> developer&#39;s guide</a>. If no types are specified, all types will be returned.
     */
    setTypes(types: string[] | null): void;
  }
  /**
   * An Autocomplete response returned by the call to {@link google.maps.places.AutocompleteService.getPlacePredictions} containing a list of {@link google.maps.places.AutocompletePrediction}s.
   */
  export interface AutocompleteResponse {
    /**
     * The list of {@link google.maps.places.AutocompletePrediction}s.
     */
    predictions: google.maps.places.AutocompletePrediction[];
  }
  /**
   * Contains methods related to retrieving Autocomplete predictions.
   * Access by calling `const {AutocompleteService} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of March 1st, 2025, google.maps.places.AutocompleteService is not available to new customers. Please use {@link google.maps.places.AutocompleteSuggestion} instead. At this time, google.maps.places.AutocompleteService is not scheduled to be discontinued, but {@link google.maps.places.AutocompleteSuggestion} is recommended over google.maps.places.AutocompleteService. While google.maps.places.AutocompleteService will continue to receive bug fixes for any major regressions, existing bugs in google.maps.places.AutocompleteService will not be addressed. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details and <a href="https://developers.google.com/maps/documentation/javascript/places-migration-overview">https://developers.google.com/maps/documentation/javascript/places-migration-overview</a> for the migration guide.
   */
  export class AutocompleteService {
    /**
     * Creates a new instance of the <code>AutocompleteService</code>.
     */
    constructor();
    /**
     * Retrieves place autocomplete predictions based on the supplied autocomplete request.
     */
    getPlacePredictions(request: google.maps.places.AutocompletionRequest, callback?: ((arg0: google.maps.places.AutocompletePrediction[] | null, arg1: google.maps.places.PlacesServiceStatusString) => void)): Promise<google.maps.places.AutocompleteResponse>;
    /**
     * Retrieves query autocomplete predictions based on the supplied query autocomplete request.
     */
    getQueryPredictions(request: google.maps.places.QueryAutocompletionRequest, callback: (arg0: google.maps.places.QueryAutocompletePrediction[] | null, arg1: google.maps.places.PlacesServiceStatusString) => void): void;
  }

  export type LocationBias = google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | google.maps.Circle | google.maps.CircleLiteral | string;

  export type LocationRestriction = google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
  /**
   * Ranking options for a PlaceSearchRequest.
   *
   * Access by calling `const {RankBy} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RankBy {
    /**
     * Ranks place results by distance from the location.
     */
    DISTANCE = 0,
    /**
     * Ranks place results by their prominence.
     */
    PROMINENCE = 0,
  }
  /**
   * Contains methods related to searching for places and retrieving details about a place.
   * Access by calling `const {PlacesService} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of March 1st, 2025, google.maps.places.PlacesService is not available to new customers. Please use {@link google.maps.places.Place} instead. At this time, google.maps.places.PlacesService is not scheduled to be discontinued, but {@link google.maps.places.Place} is recommended over google.maps.places.PlacesService. While google.maps.places.PlacesService will continue to receive bug fixes for any major regressions, existing bugs in google.maps.places.PlacesService will not be addressed. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details and <a href="https://developers.google.com/maps/documentation/javascript/places-migration-overview">https://developers.google.com/maps/documentation/javascript/places-migration-overview</a> for the migration guide.
   */
  export class PlacesService {
    /**
     * Creates a new instance of the <code>PlacesService</code> that renders attributions in the specified container.
     * @param attrContainer
     */
    constructor(attrContainer: HTMLDivElement | google.maps.Map);
    /**
     * Retrieves a list of places based on a phone number. In most cases there should be just one item in the result list, however if the request is ambiguous more than one result may be returned. The {@link google.maps.places.PlaceResult}s passed to the callback are subsets of a full {@link google.maps.places.PlaceResult}. Your app can get a more detailed {@link google.maps.places.PlaceResult} for each place by calling {@link google.maps.places.PlacesService.getDetails} and passing the {@link google.maps.places.PlaceResult.place_id} for the desired place.
     */
    findPlaceFromPhoneNumber(request: google.maps.places.FindPlaceFromPhoneNumberRequest, callback: (arg0: google.maps.places.PlaceResult[] | null, arg1: google.maps.places.PlacesServiceStatusString) => void): void;
    /**
     * Retrieves a list of places based on a query string. In most cases there should be just one item in the result list, however if the request is ambiguous more than one result may be returned. The {@link google.maps.places.PlaceResult}s passed to the callback are subsets of a full {@link google.maps.places.PlaceResult}. Your app can get a more detailed {@link google.maps.places.PlaceResult} for each place by calling {@link google.maps.places.PlacesService.getDetails} and passing the {@link google.maps.places.PlaceResult.place_id} for the desired place.
     */
    findPlaceFromQuery(request: google.maps.places.FindPlaceFromQueryRequest, callback: (arg0: google.maps.places.PlaceResult[] | null, arg1: google.maps.places.PlacesServiceStatusString) => void): void;
    /**
     * Retrieves details about the place identified by the given <code>placeId</code>.
     */
    getDetails(request: google.maps.places.PlaceDetailsRequest, callback: (arg0: google.maps.places.PlaceResult | null, arg1: google.maps.places.PlacesServiceStatusString) => void): void;
    /**
     * Retrieves a list of places near a particular location, based on keyword or type. Location must always be specified, either by passing a <code>LatLngBounds</code>, or <code>location</code> and <code>radius</code> parameters. The {@link google.maps.places.PlaceResult}s passed to the callback are subsets of the full {@link google.maps.places.PlaceResult}. Your app can get a more detailed {@link google.maps.places.PlaceResult} for each place by sending a <a href="https://developers.google.com/maps/documentation/javascript/places#place_details_requests">Place Details request</a> passing the {@link google.maps.places.PlaceResult.place_id} for the desired place. The {@link google.maps.places.PlaceSearchPagination} object can be used to fetch additional pages of results (null if this is the last page of results or if there is only one page of results).
     */
    nearbySearch(request: google.maps.places.PlaceSearchRequest, callback: (arg0: google.maps.places.PlaceResult[] | null, arg1: google.maps.places.PlacesServiceStatusString, arg2: google.maps.places.PlaceSearchPagination | null) => void): void;
    /**
     * Retrieves a list of places based on a query string (for example, &quot;pizza in New York&quot;, or &quot;shoe stores near Ottawa&quot;). Location parameters are optional; when the location is specified, results are only biased toward nearby results rather than restricted to places inside the area. Use <code>textSearch</code> when you want to search for places using an arbitrary string, and in cases where you may not want to restrict search results to a particular location. The <code>PlaceSearchPagination</code> object can be used to fetch additional pages of results (null if this is the last page of results or if there is only one page of results).
     */
    textSearch(request: google.maps.places.TextSearchRequest, callback: (arg0: google.maps.places.PlaceResult[] | null, arg1: google.maps.places.PlacesServiceStatusString, arg2: google.maps.places.PlaceSearchPagination | null) => void): void;
  }
  /**
   * The status returned by the <code>PlacesService</code> on the completion of its searches. Specify these by value, or by using the constant&#39;s name. For example, <code>'OK'</code> or <code>google.maps.places.PlacesServiceStatus.OK</code>.
   *
   * Access by calling `const {PlacesServiceStatus} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PlacesServiceStatus {
    /**
     * This request was invalid.
     */
    INVALID_REQUEST = 'INVALID_REQUEST',
    /**
     * The place referenced was not found.
     */
    NOT_FOUND = 'NOT_FOUND',
    /**
     * The response contains a valid result.
     */
    OK = 'OK',
    /**
     * The application has gone over its request quota.
     */
    OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT',
    /**
     * The application is not allowed to use the <code>PlacesService</code>.
     */
    REQUEST_DENIED = 'REQUEST_DENIED',
    /**
     * The <code>PlacesService</code> request could not be processed due to a server error. The request may succeed if you try again.
     */
    UNKNOWN_ERROR = 'UNKNOWN_ERROR',
    /**
     * No result was found for this request.
     */
    ZERO_RESULTS = 'ZERO_RESULTS',
  }
  export type PlacesServiceStatusString = `${google.maps.places.PlacesServiceStatus}`;
  /**
   * A widget that provides query predictions based on a user&#39;s text input. It attaches to an input element of type <code>text</code>, and listens for text entry in that field. The list of predictions is presented as a drop-down list, and is updated as text is entered.
   * Access by calling `const {SearchBox} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated As of March 1st, 2025, google.maps.places.SearchBox is not available to new customers. At this time, google.maps.places.SearchBox is not scheduled to be discontinued and will continue to receive bug fixes for any major regressions. At least 12 months notice will be given before support is discontinued. Please see <a href="https://developers.google.com/maps/legacy">https://developers.google.com/maps/legacy</a> for additional details.
   */
  export class SearchBox extends google.maps.MVCObject {
    /**
     * Creates a new instance of <code>SearchBox</code> that attaches to the specified input text field with the given options.
     * @param inputField
     * @param opts
     */
    constructor(inputField: HTMLInputElement, opts?: google.maps.places.SearchBoxOptions | null);
    /**
     * Returns the bounds to which query predictions are biased.
     */
    getBounds(): google.maps.LatLngBounds | undefined;
    /**
     * Returns the query selected by the user to be used with <code>places_changed</code> event.
     */
    getPlaces(): google.maps.places.PlaceResult[] | undefined;
    /**
     * Sets the region to use for biasing query predictions. Results will only be biased towards this area and not be completely restricted to it.
     */
    setBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null): void;
  }
  /**
   * Options for <code>PlaceAllContentElement</code>.
   */
  export interface PlaceAllContentElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show all available content. Append this element as a child to use it. For example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-all-content&gt;&lt;/gmp-place-all-content&gt;<br> &lt;/gmp-place-details&gt;<br> </code></pre>
   * Access by calling `const {PlaceAllContentElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceAllContentElement extends HTMLElement implements google.maps.places.PlaceAllContentElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceAllContentElementOptions);
    addEventListener<K extends keyof PlaceAllContentElementEventMap>(type: K, listener: (this: PlaceAllContentElement, ev: PlaceAllContentElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceAllContentElementEventMap extends HTMLElementEventMap {
  }
  /**
   * The preferred media size in cases where multiple sizes are supported, such as the vertical {@link google.maps.places.PlaceSearchElement}.
   *
   * Access by calling `const {MediaSize} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MediaSize {
    /**
     * Large media size.
     */
    LARGE = 'LARGE',
    /**
     * Medium media size.
     */
    MEDIUM = 'MEDIUM',
    /**
     * Small media size.
     */
    SMALL = 'SMALL',
  }
  export type MediaSizeString = `${google.maps.places.MediaSize}`;
  /**
   * Color options for Google Maps attribution text. Attribution may be customized to use any of these colors.
   *
   * Access by calling `const {AttributionColor} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum AttributionColor {
    /**
     * Black attribution text.
     */
    BLACK = 'BLACK',
    /**
     * Gray attribution text.
     */
    GRAY = 'GRAY',
    /**
     * White attribution text.
     */
    WHITE = 'WHITE',
  }
  export type AttributionColorString = `${google.maps.places.AttributionColor}`;
  /**
   * Orientation variants for {@link google.maps.places.PlaceDetailsCompactElement}.
   *
   * Access by calling `const {PlaceDetailsOrientation} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PlaceDetailsOrientation {
    /**
     * Horizontal orientation.
     */
    HORIZONTAL = 'HORIZONTAL',
    /**
     * Vertical orientation.
     */
    VERTICAL = 'VERTICAL',
  }
  export type PlaceDetailsOrientationString = `${google.maps.places.PlaceDetailsOrientation}`;
  /**
   * Options for <code>PlaceAccessibleEntranceIconElement</code>.
   */
  export interface PlaceAccessibleEntranceIconElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a wheelchair icon if the place has an accessible entrance. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-accessible-entrance-icon&gt;&lt;/gmp-place-accessible-entrance-icon&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceAccessibleEntranceIconElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceAccessibleEntranceIconElement extends HTMLElement implements google.maps.places.PlaceAccessibleEntranceIconElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceAccessibleEntranceIconElementOptions);
    addEventListener<K extends keyof PlaceAccessibleEntranceIconElementEventMap>(type: K, listener: (this: PlaceAccessibleEntranceIconElement, ev: PlaceAccessibleEntranceIconElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceAccessibleEntranceIconElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceAddressElement</code>.
   */
  export interface PlaceAddressElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a place&#39;s address. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-address&gt;&lt;/gmp-place-address&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceAddressElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceAddressElement extends HTMLElement implements google.maps.places.PlaceAddressElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceAddressElementOptions);
    addEventListener<K extends keyof PlaceAddressElementEventMap>(type: K, listener: (this: PlaceAddressElement, ev: PlaceAddressElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceAddressElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceFeatureListElement</code>.
   */
  export interface PlaceFeatureListElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s feature list in the &quot;About&quot; tab. Feature list can include accessibility options, amenities, accepted payment methods, and more. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-feature-list&gt;&lt;/gmp-place-feature-list&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceFeatureListElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceFeatureListElement extends HTMLElement implements google.maps.places.PlaceFeatureListElementOptions {
    addEventListener<K extends keyof PlaceFeatureListElementEventMap>(type: K, listener: (this: PlaceFeatureListElement, ev: PlaceFeatureListElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceFeatureListElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Access by calling `const {AccessibilityOptions} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AccessibilityOptions {
    /**
     * Whether a place has a wheelchair accessible entrance. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasWheelchairAccessibleEntrance(): boolean | null;
    /**
     * Whether a place has wheelchair accessible parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasWheelchairAccessibleParking(): boolean | null;
    /**
     * Whether a place has a wheelchair accessible restroom. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasWheelchairAccessibleRestroom(): boolean | null;
    /**
     * Whether a place offers wheelchair accessible seating. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasWheelchairAccessibleSeating(): boolean | null;
  }
  /**
   * Address component for the Place&#39;s location.
   * Access by calling `const {AddressComponent} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AddressComponent {
    /**
     * The full text of the address component.
     */
    get longText(): string | null;
    /**
     * The abbreviated, short text of the given address component.
     */
    get shortText(): string | null;
    /**
     * An array of strings denoting the type of this address component. A list of valid types can be found <a href="https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingAddressTypes">here</a>.
     */
    get types(): string[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Defines the spatial relationship between the target location and the area.
   *
   * Access by calling `const {Containment} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Containment {
    /**
     * The target location is outside the area region, but close by.
     */
    NEAR = 'NEAR',
    /**
     * The target location is within the area region, close to the edge.
     */
    OUTSKIRTS = 'OUTSKIRTS',
    /**
     * The target location is within the area region, close to the center.
     */
    WITHIN = 'WITHIN',
  }
  export type ContainmentString = `${google.maps.places.Containment}`;
  /**
   * Area information and the area&#39;s relationship with the target location.
   * Access by calling `const {Area} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Area {
    /**
     * Defines the spatial relationship between the target location and the area.
     */
    get containment(): google.maps.places.ContainmentString | null;
    /**
     * The area&#39;s place.
     */
    get place(): google.maps.places.Place;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Defines the spatial relationship between the target location and the landmark
   *
   * Access by calling `const {SpatialRelationship} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum SpatialRelationship {
    /**
     * The target is directly opposite the landmark on the other side of the road.
     */
    ACROSS_THE_ROAD = 'ACROSS_THE_ROAD',
    /**
     * Not on the same route as the landmark but a single turn away.
     */
    AROUND_THE_CORNER = 'AROUND_THE_CORNER',
    /**
     * Close to the landmark&#39;s structure but further away from its street entrances.
     */
    BEHIND = 'BEHIND',
    /**
     * The target is directly adjacent to the landmark.
     */
    BESIDE = 'BESIDE',
    /**
     * On the same route as the landmark but not besides or across.
     */
    DOWN_THE_ROAD = 'DOWN_THE_ROAD',
    /**
     * The default relationship when nothing more specific below applies.
     */
    NEAR = 'NEAR',
    /**
     * The landmark has a spatial geometry and the target is within its bounds.
     */
    WITHIN = 'WITHIN',
  }
  export type SpatialRelationshipString = `${google.maps.places.SpatialRelationship}`;
  /**
   * Basic landmark information and the landmark&#39;s relationship with the target location. Landmarks are prominent places that can be used to describe a location.
   * Access by calling `const {Landmark} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Landmark {
    /**
     * The landmark&#39;s place.
     */
    get place(): google.maps.places.Place;
    /**
     * The spatial relationship between the target location and the landmark.
     */
    get spatialRelationship(): google.maps.places.SpatialRelationshipString;
    /**
     * The straight line distance, in meters, between the center point of the target and the center point of the landmark. In some situations, this value can be longer than <code>travelDistanceMeters</code>.
     */
    get straightLineDistanceMeters(): number;
    /**
     * The travel distance, in meters, along the road network from the target to the landmark, if known. This value does not take into account the mode of transportation, such as walking, driving, biking.
     */
    get travelDistanceMeters(): number | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * A relational description of a location. Includes a ranked set of nearby landmarks and precise containing areas and their relationship to the target location.
   * Access by calling `const {AddressDescriptor} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AddressDescriptor {
    /**
     * A ranked list of containing or adjacent areas. The most recognizable and precise areas are ranked first.
     */
    get areas(): google.maps.places.Area[];
    /**
     * A ranked list of nearby landmarks. The most recognizable and nearby landmarks are ranked first.
     */
    get landmarks(): google.maps.places.Landmark[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a data provider for a Place.
   * Access by calling `const {Attribution} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Attribution {
    /**
     * Name of the Place&#39;s data provider.
     */
    get provider(): string | null;
    /**
     * URI to the Place&#39;s data provider.
     */
    get providerURI(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * The consumer alert message. All text are rendered in the language specified by the <code>languageCode</code> field.
   * Access by calling `const {ConsumerAlert} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ConsumerAlert {
    /**
     * The details of the consumer alert message.
     */
    get details(): google.maps.places.ConsumerAlertDetails | null;
    /**
     * The language code of the consumer alert message.
     */
    get languageCode(): string | null;
    /**
     * The overview of the consumer alert message.
     */
    get overview(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Details of the consumer alert message.
   * Access by calling `const {ConsumerAlertDetails} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ConsumerAlertDetails {
    /**
     * The title to show for a link to provide more information.
     */
    get aboutLinkTitle(): string | null;
    /**
     * The URI for a link to provide more information.
     */
    get aboutLinkURI(): string | null;
    /**
     * The description of the consumer alert message.
     */
    get description(): string | null;
    /**
     * The title to show together with the detailed description.
     */
    get title(): string | null;
  }
  /**
   * ContentBlock describes the content of a summary and where it came from.
   * Access by calling `const {ContentBlock} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ContentBlock {
    /**
     * Content related to the topic.
     */
    get content(): string | null;
    /**
     * Language code of the content.
     */
    get contentLanguageCode(): string | null;
    /**
     * A list of {@link google.maps.places.Place}s referenced. When first retrieved, each Place only contains a place ID in the <code>id</code> field.
     */
    get referencedPlaces(): google.maps.places.Place[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * AI-generated summary of amenities near the EV charging station. This only applies to places with type <code>electric_vehicle_charging_station</code>.
   * Access by calling `const {EVChargeAmenitySummary} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class EVChargeAmenitySummary {
    /**
     * A summary of the nearby coffee options.
     */
    get coffee(): google.maps.places.ContentBlock | null;
    /**
     * The text for the disclosure relating to this summary.
     */
    get disclosureText(): string | null;
    /**
     * The language code of the disclosure text.
     */
    get disclosureTextLanguageCode(): string | null;
    /**
     * A URI to report a problem with the summary.
     */
    get flagContentURI(): string | null;
    /**
     * An overview of the available amenities.
     */
    get overview(): google.maps.places.ContentBlock | null;
    /**
     * A summary of the nearby restaurants.
     */
    get restaurant(): google.maps.places.ContentBlock | null;
    /**
     * A summary of nearby stores.
     */
    get store(): google.maps.places.ContentBlock | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * EV charging connector types.
   *
   * Access by calling `const {EVConnectorType} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum EVConnectorType {
    /**
     * Combined Charging System (AC and DC). Based on SAE Type-1 J-1772 connector.
     */
    CCS_COMBO_1 = 'CCS_COMBO_1',
    /**
     * Combined Charging System (AC and DC). Based on Type-2 Mennekes connector.
     */
    CCS_COMBO_2 = 'CCS_COMBO_2',
    /**
     * CHAdeMO type connector.
     */
    CHADEMO = 'CHADEMO',
    /**
     * J1772 type 1 connector.
     */
    J1772 = 'J1772',
    /**
     * The North American Charging System (NACS), standardized as SAE J3400.
     */
    NACS = 'NACS',
    /**
     * Other connector types.
     */
    OTHER = 'OTHER',
    /**
     * The generic TESLA connector. This is NACS in the North America but can be non-NACS in other parts of the world (e.g. CCS Combo 2 (CCS2) or GB/T). This value is less representative of an actual connector type, and more represents the ability to charge a Tesla brand vehicle at a Tesla owned charging station.
     */
    TESLA = 'TESLA',
    /**
     * IEC 62196 type 2 connector. Often referred to as MENNEKES.
     */
    TYPE_2 = 'TYPE_2',
    /**
     * GB/T type corresponds to the GB/T standard in China. This type covers all GB_T types.
     */
    UNSPECIFIED_GB_T = 'UNSPECIFIED_GB_T',
    /**
     * Unspecified wall outlet.
     */
    UNSPECIFIED_WALL_OUTLET = 'UNSPECIFIED_WALL_OUTLET',
  }
  export type EVConnectorTypeString = `${google.maps.places.EVConnectorType}`;
  /**
   * Information about the EV charging station hosted in the place.
   * Access by calling `const {EVChargeOptions} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class EVChargeOptions {
    /**
     * A list of EV charging connector aggregations that contain connectors of the same type and same charge rate.
     */
    get connectorAggregations(): google.maps.places.ConnectorAggregation[];
    /**
     * Number of connectors at this station. Because some ports can have multiple connectors but only be able to charge one car at a time, the number of connectors may be greater than the total number of cars which can charge simultaneously.
     */
    get connectorCount(): number;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * EV charging information, aggregated for connectors of the same type and the same charge rate.
   * Access by calling `const {ConnectorAggregation} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ConnectorAggregation {
    /**
     * The time when the connector availability information in this aggregation was last updated.
     */
    get availabilityLastUpdateTime(): Date | null;
    /**
     * Number of connectors in this aggregation that are currently available.
     */
    get availableCount(): number | null;
    /**
     * Number of connectors in this aggregation.
     */
    get count(): number;
    /**
     * The static max charging rate in kw of each connector of the aggregation.
     */
    get maxChargeRateKw(): number;
    /**
     * Number of connectors in this aggregation that are currently out of service.
     */
    get outOfServiceCount(): number | null;
    /**
     * The connector type of this aggregation.
     */
    get type(): google.maps.places.EVConnectorTypeString | null;
  }
  /**
   * A representation of an amount of money with its currency type.
   * Access by calling `const {Money} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Money {
    /**
     * The three-letter currency code, defined in ISO 4217.
     */
    get currencyCode(): string;
    /**
     * Number of nano (10^-9) units of the amount.
     */
    get nanos(): number;
    /**
     * The whole units of the amount. For example, if {@link google.maps.places.Money.currencyCode} is &quot;USD&quot;, then 1 unit is 1 US dollar.
     */
    get units(): number;
    /**
     * Returns a human-readable representation of the amount of money with its currency symbol.
     */
    toString(): string;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * The most recent information about fuel options in a gas station. This information is updated regularly.
   * Access by calling `const {FuelOptions} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FuelOptions {
    /**
     * A list of fuel prices for each type of fuel this station has, one entry per fuel type.
     */
    get fuelPrices(): google.maps.places.FuelPrice[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Fuel price information for a given type of fuel.
   * Access by calling `const {FuelPrice} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FuelPrice {
    /**
     * The price of the fuel.
     */
    get price(): google.maps.places.Money | null;
    /**
     * The type of fuel.
     */
    get type(): google.maps.places.FuelTypeString | null;
    /**
     * The time the fuel price was last updated.
     */
    get updateTime(): Date | null;
  }
  /**
   * Types of fuel.
   *
   * Access by calling `const {FuelType} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum FuelType {
    /**
     * Bio-diesel.
     */
    BIO_DIESEL = 'BIO_DIESEL',
    /**
     * Diesel fuel.
     */
    DIESEL = 'DIESEL',
    /**
     * Diesel plus fuel.
     */
    DIESEL_PLUS = 'DIESEL_PLUS',
    /**
     * E 100.
     */
    E100 = 'E100',
    /**
     * E 80.
     */
    E80 = 'E80',
    /**
     * E 85.
     */
    E85 = 'E85',
    /**
     * LPG.
     */
    LPG = 'LPG',
    /**
     * Methane.
     */
    METHANE = 'METHANE',
    /**
     * Midgrade.
     */
    MIDGRADE = 'MIDGRADE',
    /**
     * Premium.
     */
    PREMIUM = 'PREMIUM',
    /**
     * Regular unleaded.
     */
    REGULAR_UNLEADED = 'REGULAR_UNLEADED',
    /**
     * SP 100.
     */
    SP100 = 'SP100',
    /**
     * SP 91.
     */
    SP91 = 'SP91',
    /**
     * SP 91 E10.
     */
    SP91_E10 = 'SP91_E10',
    /**
     * SP 92.
     */
    SP92 = 'SP92',
    /**
     * SP 95.
     */
    SP95 = 'SP95',
    /**
     * SP95 E10.
     */
    SP95_E10 = 'SP95_E10',
    /**
     * SP 98.
     */
    SP98 = 'SP98',
    /**
     * SP 99.
     */
    SP99 = 'SP99',
    /**
     * Truck diesel.
     */
    TRUCK_DIESEL = 'TRUCK_DIESEL',
  }
  export type FuelTypeString = `${google.maps.places.FuelType}`;
  /**
   * AI-generated summary of the place.
   * Access by calling `const {GenerativeSummary} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GenerativeSummary {
    /**
     * The text for the disclosure relating to this summary.
     */
    get disclosureText(): string | null;
    /**
     * The language code of the disclosure text.
     */
    get disclosureTextLanguageCode(): string | null;
    /**
     * A URI to report a problem with the summary.
     */
    get flagContentURI(): string | null;
    /**
     * The overview of the place.
     */
    get overview(): string | null;
    /**
     * The language code of the overview.
     */
    get overviewLanguageCode(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Links to trigger different Google Maps actions.
   * Access by calling `const {GoogleMapsLinks} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GoogleMapsLinks {
    /**
     * A link to show the directions to the place on Google Maps. The link only populates the destination location and uses the default travel mode <code>DRIVE</code>.
     */
    get directionsURI(): string | null;
    /**
     * A link to show the photos for the place on Google Maps.
     */
    get photosURI(): string | null;
    /**
     * A link to show the place on Google Maps.
     */
    get placeURI(): string | null;
    /**
     * A link to show the reviews for the place on Google Maps.
     */
    get reviewsURI(): string | null;
    /**
     * A link to write a review for the place on Google Maps.
     */
    get writeAReviewURI(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * AI-generated summary of points of interest near the place.
   * Access by calling `const {NeighborhoodSummary} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class NeighborhoodSummary {
    /**
     * A detailed description of the neighborhood.
     */
    get description(): google.maps.places.ContentBlock | null;
    /**
     * The text for the disclosure relating to this summary.
     */
    get disclosureText(): string | null;
    /**
     * The language code of the disclosure text.
     */
    get disclosureTextLanguageCode(): string | null;
    /**
     * A URI to report a problem with the summary.
     */
    get flagContentURI(): string | null;
    /**
     * An overview of the neighborhood.
     */
    get overview(): google.maps.places.ContentBlock | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * A point where the Place changes its opening status.
   * Access by calling `const {OpeningHoursPoint} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class OpeningHoursPoint {
    /**
     * The day of the week, as a number in the range [0, 6], starting on Sunday. For example, 2 means Tuesday.
     */
    get day(): number;
    /**
     * The hour of the OpeningHoursPoint.time as a number, in the range [0, 23]. This will be reported in the Place’s time zone.
     */
    get hour(): number;
    /**
     * The minute of the OpeningHoursPoint.time as a number, in the range [0, 59]. This will be reported in the Place’s time zone.
     */
    get minute(): number;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * A period where the Place is open.
   * Access by calling `const {OpeningHoursPeriod} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class OpeningHoursPeriod {
    /**
     * The closing time for the Place.
     */
    get close(): google.maps.places.OpeningHoursPoint | null;
    /**
     * The opening time for the Place.
     */
    get open(): google.maps.places.OpeningHoursPoint;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about business hours of a Place.
   * Access by calling `const {OpeningHours} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class OpeningHours {
    /**
     * Opening periods covering each day of the week, starting from Sunday, in chronological order. Does not include days where the Place is not open.
     */
    get periods(): google.maps.places.OpeningHoursPeriod[];
    /**
     * An array of dates representing special days that fall within the current period. Special days impact the business hours of a place, e.g. Christmas day or one off closures. Set for currentOpeningHours and currentSecondaryOpeningHours if there are exceptional hours.
     */
    get specialDays(): Date[];
    /**
     * An array of seven strings representing the formatted opening hours for each day of the week. The Places Service will format and localize the opening hours appropriately for the current language. The ordering of the elements in this array depends on the language. Some languages start the week on Monday, while others start on Sunday.
     */
    get weekdayDescriptions(): string[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Access by calling `const {ParkingOptions} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ParkingOptions {
    /**
     * Whether a place offers free garage parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasFreeGarageParking(): boolean | null;
    /**
     * Whether a place offers free parking lots. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasFreeParkingLot(): boolean | null;
    /**
     * Whether a place offers free street parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasFreeStreetParking(): boolean | null;
    /**
     * Whether a place offers paid garage parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasPaidGarageParking(): boolean | null;
    /**
     * Whether a place offers paid parking lots. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasPaidParkingLot(): boolean | null;
    /**
     * Whether a place offers paid street parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasPaidStreetParking(): boolean | null;
    /**
     * Whether a place offers valet parking. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get hasValetParking(): boolean | null;
  }
  /**
   * Access by calling `const {PaymentOptions} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PaymentOptions {
    /**
     * Whether a place only accepts payment via cash. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get acceptsCashOnly(): boolean | null;
    /**
     * Whether a place accepts payment via credit card. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get acceptsCreditCards(): boolean | null;
    /**
     * Whether a place accepts payment via debit card. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get acceptsDebitCards(): boolean | null;
    /**
     * Whether a place accepts payment via NFC. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown.
     */
    get acceptsNFC(): boolean | null;
  }
  /**
   * Information about the author of user-generated content.
   * Access by calling `const {AuthorAttribution} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AuthorAttribution {
    /**
     * Author&#39;s name for this result.
     */
    get displayName(): string;
    /**
     * Author&#39;s photo URI for this result. This may not always be available.
     */
    get photoURI(): string | null;
    /**
     * Author&#39;s profile URI for this result.
     */
    get uri(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a photo of a Place.
   * Access by calling `const {Photo} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Photo {
    /**
     * Attribution text to be displayed for this photo.
     */
    get authorAttributions(): google.maps.places.AuthorAttribution[];
    /**
     * A link where user can flag a problem with the photo.
     */
    get flagContentURI(): string | null;
    /**
     * A link to show the photo on Google Maps.
     */
    get googleMapsURI(): string | null;
    /**
     * The height of the photo in pixels.
     */
    get heightPx(): number;
    /**
     * The width of the photo in pixels.
     */
    get widthPx(): number;
    /**
     * Returns the image URL corresponding to the specified options.
     */
    getURI(options?: google.maps.places.PhotoOptions): string;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Price level for a Place.
   *
   * Access by calling `const {PriceLevel} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PriceLevel {

    EXPENSIVE = 'EXPENSIVE',

    FREE = 'FREE',

    INEXPENSIVE = 'INEXPENSIVE',

    MODERATE = 'MODERATE',

    VERY_EXPENSIVE = 'VERY_EXPENSIVE',
  }
  export type PriceLevelString = `${google.maps.places.PriceLevel}`;
  /**
   * The price range associated with a Place. <code>endPrice</code> could be unset, which indicates a range without upper bound (e.g. &quot;More than $100&quot;).
   * Access by calling `const {PriceRange} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PriceRange {
    /**
     * The upper end of the price range (inclusive). Price should be lower than this amount.
     */
    get endPrice(): google.maps.places.Money | null;
    /**
     * The low end of the price range (inclusive). Price should be at or above this amount.
     */
    get startPrice(): google.maps.places.Money;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a review of a Place.
   * Access by calling `const {Review} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Review {
    /**
     * The reviewer.
     */
    get authorAttribution(): google.maps.places.AuthorAttribution | null;
    /**
     * A link where user can flag a problem with the review.
     */
    get flagContentURI(): string | null;
    /**
     * A link to show the review on Google Maps.
     */
    get googleMapsURI(): string | null;
    /**
     * The review text in its original language.
     */
    get originalText(): string | null;
    /**
     * An IETF language code indicating the original language of the review.
     */
    get originalTextLanguageCode(): string | null;

    get publishTime(): Date | null;
    /**
     * The rating of this review, a number between 1.0 and 5.0 (inclusive).
     */
    get rating(): number | null;
    /**
     * A string of formatted recent time, expressing the review time relative to the current time in a form appropriate for the language and country. For example `&quot;a month ago&quot;&#39;.
     */
    get relativePublishTimeDescription(): string | null;
    /**
     * The localized text of the review.
     */
    get text(): string | null;
    /**
     * An IETF language code indicating the localized language of the review.
     */
    get textLanguageCode(): string | null;
    /**
     * The month of the date when the review author visited the place. This field is 0-based; 0 is January, and 11 is December.
     */
    get visitDateMonth(): number | null;
    /**
     * The year of the date when the review author visited the place.
     */
    get visitDateYear(): number | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * AI-generated summary of the place user reviews.
   * Access by calling `const {ReviewSummary} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class ReviewSummary {
    /**
     * The text for the disclosure relating to this summary.
     */
    get disclosureText(): string | null;
    /**
     * The language code of the disclosure text.
     */
    get disclosureTextLanguageCode(): string | null;
    /**
     * A URI to report a problem with the summary.
     */
    get flagContentURI(): string | null;
    /**
     * A URI to show reviews of this place on Google Maps.
     */
    get reviewsURI(): string | null;
    /**
     * The summary of user reviews.
     */
    get text(): string | null;
    /**
     * The language code of the summary of user reviews.
     */
    get textLanguageCode(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about secondary business hours of a Place.
   * Access by calling `const {SecondaryOpeningHours} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class SecondaryOpeningHours extends google.maps.places.OpeningHours {
    /**
     * The type of secondary opening hours. This refers to what the secondary hours apply to like takeout, delivery, or pickup. See <a href="https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places#secondaryhourstype">SecondaryHoursType</a> for a list of valid values.
     */
    get type(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents a time zone from the IANA Time Zone Database <a href="https://www.iana.org/time-zones">https://www.iana.org/time-zones</a>.
   * Access by calling `const {TimeZone} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TimeZone {
    /**
     * IANA Time Zone Database time zone. For example &quot;America/New_York&quot;.
     */
    get id(): string | null;
    /**
     * IANA Time Zone Database version number. For example &quot;2019a&quot;.
     */
    get version(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents a transit icon.
   * Access by calling `const {TransitIcon} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitIcon {
    /**
     * Whether the name is contained in the icon and there is no need to display it next to the icon.
     */
    nameIncluded: boolean | null;
    /**
     * The URL of the icon.
     */
    url: URL | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * The type of a transit vehicle.
   *
   * Access by calling `const {TransitVehicleType} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum TransitVehicleType {
    /**
     * Airplane.
     */
    AIRPLANE = 'AIRPLANE',
    /**
     * Bus.
     */
    BUS = 'BUS',
    /**
     * Cable car.
     */
    CABLE_CAR = 'CABLE_CAR',
    /**
     * Coach.
     */
    COACH = 'COACH',
    /**
     * Commuter train.
     */
    COMMUTER_TRAIN = 'COMMUTER_TRAIN',
    /**
     * Ferry.
     */
    FERRY = 'FERRY',
    /**
     * Funicular.
     */
    FUNICULAR = 'FUNICULAR',
    /**
     * Gondola lift.
     */
    GONDOLA_LIFT = 'GONDOLA_LIFT',
    /**
     * Heavy rail.
     */
    HEAVY_RAIL = 'HEAVY_RAIL',
    /**
     * High speed train.
     */
    HIGH_SPEED_TRAIN = 'HIGH_SPEED_TRAIN',
    /**
     * Horse carriage.
     */
    HORSE_CARRIAGE = 'HORSE_CARRIAGE',
    /**
     * Intercity bus.
     */
    INTERCITY_BUS = 'INTERCITY_BUS',
    /**
     * Long distance train.
     */
    LONG_DISTANCE_TRAIN = 'LONG_DISTANCE_TRAIN',
    /**
     * Metro rail.
     */
    METRO_RAIL = 'METRO_RAIL',
    /**
     * Monorail.
     */
    MONORAIL = 'MONORAIL',
    /**
     * Rail.
     */
    RAIL = 'RAIL',
    /**
     * Share taxi.
     */
    SHARE_TAXI = 'SHARE_TAXI',
    /**
     * Special.
     */
    SPECIAL = 'SPECIAL',
    /**
     * Subway.
     */
    SUBWAY = 'SUBWAY',
    /**
     * Tram.
     */
    TRAM = 'TRAM',
    /**
     * Trolleybus.
     */
    TROLLEYBUS = 'TROLLEYBUS',
  }
  export type TransitVehicleTypeString = `${google.maps.places.TransitVehicleType}`;
  /**
   * Represents a transit line.
   * Access by calling `const {TransitLine} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitLine {
    /**
     * The background color of the labels for this transit line in hexadecimal format (e.g., &quot;#909CE1&quot;). This color can also be used for drawing shapes for this transit line.
     */
    backgroundColor: string | null;
    /**
     * The full name of this transit line (e.g., &quot;Sunnydale local&quot;).
     */
    displayName: string | null;
    /**
     * The transit line full name text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    displayNameLanguageCode: string | null;
    /**
     * Icon for this particular line.
     */
    icon: google.maps.places.TransitIcon | null;
    /**
     * The id of the transit line that can be used to uniquely identify the line among other transit lines in the same transit station. This identifier is not guaranteed to be stable across different responses.
     */
    id: string | null;
    /**
     * The short name of this transit line (e.g., &quot;S2&quot;).
     */
    shortDisplayName: string | null;
    /**
     * The transit line short name text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    shortDisplayNameLanguageCode: string | null;
    /**
     * The text color of labels for this transit line in hexadecimal format (e.g., &quot;#909CE1&quot;).
     */
    textColor: string | null;
    /**
     * The URL of a webpage with details about this line.
     */
    url: URL | null;
    /**
     * Icon for this particular vehicle type.
     */
    vehicleIcon: google.maps.places.TransitIcon | null;
    /**
     * The type of vehicle used.
     */
    vehicleType: google.maps.places.TransitVehicleTypeString | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents a transit agency.
   * Access by calling `const {TransitAgency} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitAgency {
    /**
     * The name of the agency in the requested language.
     */
    displayName: string | null;
    /**
     * The agency name text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    displayNameLanguageCode: string | null;
    /**
     * The URL of the agency&#39;s fare details page.
     */
    fareURL: URL | null;
    /**
     * A localized branded icon of a transit system.
     */
    icon: google.maps.places.TransitIcon | null;
    /**
     * The transit lines that are served by this agency.
     */
    lines: google.maps.places.TransitLine[];
    /**
     * The URL of the agency&#39;s homepage.
     */
    url: URL | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents a transit stop.
   * Access by calling `const {TransitStop} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitStop {
    /**
     * The name of the stop in the requested language.
     */
    displayName: string | null;
    /**
     * The name of the stop in the requested language&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    displayNameLanguageCode: string | null;
    /**
     * This field indicates whether there is an accessible path from outside the station to the stop. It does not indicate whether it is possible to board a vehicle from the stop.
     */
    hasWheelchairAccessibleEntrance: boolean | null;
    /**
     * The id of the transit stop that can be used to uniquely identify the stop among other transit stops in the same transit station. This identifier is not guaranteed to be stable across different responses.
     */
    id: string | null;
    /**
     * The stop&#39;s location.
     */
    location: google.maps.LatLngAltitude | null;
    /**
     * The platform code represented by this stop. It can be formatted in any way (e.g., &quot;2&quot;, &quot;Platform 2&quot;, &quot;2-4&quot;, or &quot;1x&quot;).
     */
    platformCode: string | null;
    /**
     * The platform code text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    platformCodeLanguageCode: string | null;
    /**
     * The verbatim text written on the signboard for this platform (e.g., &quot;Towards Central&quot; or &quot;East side &amp; Brooklyn&quot;). When <code>platformCode</code> is absent, this field is potentially the only identifier for the platform. However, both <code>platformCode</code> and <code>signageText</code> may be set simultaneously.
     */
    signageText: string | null;
    /**
     * The signage text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    signageTextLanguageCode: string | null;
    /**
     * Human readable identifier of the stop, used by transit agencies to distinguish stops with the same name.
     */
    stopCode: string | null;
    /**
     * The stop code text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    stopCodeLanguageCode: string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents transit-specific information for a place.
   * Access by calling `const {TransitStation} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitStation {
    /**
     * The transit agencies that serve this station.
     */
    agencies: google.maps.places.TransitAgency[];
    /**
     * The name of the station in the local language.
     */
    displayName: string | null;
    /**
     * The local display name text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    displayNameLanguageCode: string | null;
    /**
     * The transit stops at this station.
     */
    stops: google.maps.places.TransitStop[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Options for <code>PlaceMediaElement</code>.
   */
  export interface PlaceMediaElementOptions {
    /**
     * See {@link google.maps.places.PlaceMediaElement.lightboxPreferred}.
     */
    lightboxPreferred?: boolean | null;
    /**
     * See {@link google.maps.places.PlaceMediaElement.preferredSize}.
     */
    preferredSize?: google.maps.places.MediaSizeString | null;
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a place&#39;s media, such as photos. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceMediaElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceMediaElement extends HTMLElement implements google.maps.places.PlaceMediaElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceMediaElementOptions);
    /**
     * Whether to enable or disable the media lightbox, in cases where both options are supported.
     * @defaultValue <code>false</code>
     */
    get lightboxPreferred(): boolean;
    /**
     * Whether to enable or disable the media lightbox, in cases where both options are supported.
     * @defaultValue <code>false</code>
     */
    set lightboxPreferred(value: boolean | null | undefined);
    /**
     * The preferred media size in cases where multiple sizes are supported, such as the vertical {@link google.maps.places.PlaceSearchElement}. The vertical <code>PlaceSearchElement</code> will use <code>MediaSize.SMALL</code> by default if this is not specified.
     * @defaultValue <code>null</code>
     */
    get preferredSize(): google.maps.places.MediaSizeString | null;
    /**
     * The preferred media size in cases where multiple sizes are supported, such as the vertical {@link google.maps.places.PlaceSearchElement}. The vertical <code>PlaceSearchElement</code> will use <code>MediaSize.SMALL</code> by default if this is not specified.
     * @defaultValue <code>null</code>
     */
    set preferredSize(value: google.maps.places.MediaSizeString | null | undefined);
    addEventListener<K extends keyof PlaceMediaElementEventMap>(type: K, listener: (this: PlaceMediaElement, ev: PlaceMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceMediaElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceOpenNowStatusElement</code>.
   */
  export interface PlaceOpenNowStatusElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show the current open or closed status of a place. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-open-now-status&gt;&lt;/gmp-place-open-now-status&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceOpenNowStatusElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceOpenNowStatusElement extends HTMLElement implements google.maps.places.PlaceOpenNowStatusElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceOpenNowStatusElementOptions);
    addEventListener<K extends keyof PlaceOpenNowStatusElementEventMap>(type: K, listener: (this: PlaceOpenNowStatusElement, ev: PlaceOpenNowStatusElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceOpenNowStatusElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceOpeningHoursElement</code>.
   */
  export interface PlaceOpeningHoursElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s opening hours. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-opening-hours&gt;&lt;/gmp-place-opening-hours&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceOpeningHoursElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceOpeningHoursElement extends HTMLElement implements google.maps.places.PlaceOpeningHoursElementOptions {
    addEventListener<K extends keyof PlaceOpeningHoursElementEventMap>(type: K, listener: (this: PlaceOpeningHoursElement, ev: PlaceOpeningHoursElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceOpeningHoursElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlacePhoneNumberElement</code>.
   */
  export interface PlacePhoneNumberElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s phone number. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-phone-number&gt;&lt;/gmp-place-phone-number&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlacePhoneNumberElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlacePhoneNumberElement extends HTMLElement implements google.maps.places.PlacePhoneNumberElementOptions {
    addEventListener<K extends keyof PlacePhoneNumberElementEventMap>(type: K, listener: (this: PlacePhoneNumberElement, ev: PlacePhoneNumberElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlacePhoneNumberElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlacePlusCodeElement</code>.
   */
  export interface PlacePlusCodeElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s plus code. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-plus-code&gt;&lt;/gmp-place-plus-code&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlacePlusCodeElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlacePlusCodeElement extends HTMLElement implements google.maps.places.PlacePlusCodeElementOptions {
    addEventListener<K extends keyof PlacePlusCodeElementEventMap>(type: K, listener: (this: PlacePlusCodeElement, ev: PlacePlusCodeElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlacePlusCodeElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlacePriceElement</code>.
   */
  export interface PlacePriceElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a place&#39;s price level or price range. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-price&gt;&lt;/gmp-place-price&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlacePriceElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlacePriceElement extends HTMLElement implements google.maps.places.PlacePriceElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlacePriceElementOptions);
    addEventListener<K extends keyof PlacePriceElementEventMap>(type: K, listener: (this: PlacePriceElement, ev: PlacePriceElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlacePriceElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceRatingElement</code>.
   */
  export interface PlaceRatingElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a place&#39;s rating. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-rating&gt;&lt;/gmp-place-rating&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceRatingElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceRatingElement extends HTMLElement implements google.maps.places.PlaceRatingElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceRatingElementOptions);
    addEventListener<K extends keyof PlaceRatingElementEventMap>(type: K, listener: (this: PlaceRatingElement, ev: PlaceRatingElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceRatingElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceReviewSummaryElement</code>.
   */
  export interface PlaceReviewSummaryElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s review summary. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-review-summary&gt;&lt;/gmp-place-review-summary&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceReviewSummaryElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceReviewSummaryElement extends HTMLElement implements google.maps.places.PlaceReviewSummaryElementOptions {
    addEventListener<K extends keyof PlaceReviewSummaryElementEventMap>(type: K, listener: (this: PlaceReviewSummaryElement, ev: PlaceReviewSummaryElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceReviewSummaryElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceReviewsElement</code>.
   */
  export interface PlaceReviewsElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s reviews. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-reviews&gt;&lt;/gmp-place-reviews&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceReviewsElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceReviewsElement extends HTMLElement implements google.maps.places.PlaceReviewsElementOptions {
    addEventListener<K extends keyof PlaceReviewsElementEventMap>(type: K, listener: (this: PlaceReviewsElement, ev: PlaceReviewsElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceReviewsElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceSummaryElement</code>.
   */
  export interface PlaceSummaryElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s summary. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-summary&gt;&lt;/gmp-place-summary&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceSummaryElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceSummaryElement extends HTMLElement implements google.maps.places.PlaceSummaryElementOptions {
    addEventListener<K extends keyof PlaceSummaryElementEventMap>(type: K, listener: (this: PlaceSummaryElement, ev: PlaceSummaryElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceSummaryElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceTypeElement</code>.
   */
  export interface PlaceTypeElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a place&#39;s type. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-type&gt;&lt;/gmp-place-type&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceTypeElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceTypeElement extends HTMLElement implements google.maps.places.PlaceTypeElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceTypeElementOptions);
    addEventListener<K extends keyof PlaceTypeElementEventMap>(type: K, listener: (this: PlaceTypeElement, ev: PlaceTypeElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceTypeElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceTypeSpecificHighlightsElement</code>.
   */
  export interface PlaceTypeSpecificHighlightsElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s type-specific highlights, such as gas prices and EV charger availability. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-type-specific-highlights&gt;&lt;/gmp-place-type-specific-highlights&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceTypeSpecificHighlightsElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceTypeSpecificHighlightsElement extends HTMLElement implements google.maps.places.PlaceTypeSpecificHighlightsElementOptions {
    addEventListener<K extends keyof PlaceTypeSpecificHighlightsElementEventMap>(type: K, listener: (this: PlaceTypeSpecificHighlightsElement, ev: PlaceTypeSpecificHighlightsElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceTypeSpecificHighlightsElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceWebsiteElement</code>.
   */
  export interface PlaceWebsiteElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsElement} to show a place&#39;s website. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-website&gt;&lt;/gmp-place-website&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceWebsiteElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceWebsiteElement extends HTMLElement implements google.maps.places.PlaceWebsiteElementOptions {
    addEventListener<K extends keyof PlaceWebsiteElementEventMap>(type: K, listener: (this: PlaceWebsiteElement, ev: PlaceWebsiteElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceWebsiteElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceAttributionElement</code>.
   */
  export interface PlaceAttributionElementOptions {
    /**
     * See {@link google.maps.places.PlaceAttributionElement.darkSchemeColor}.
     */
    darkSchemeColor?: google.maps.places.AttributionColorString | null;
    /**
     * See {@link google.maps.places.PlaceAttributionElement.lightSchemeColor}.
     */
    lightSchemeColor?: google.maps.places.AttributionColorString | null;
  }
  /**
   * Allows customization of the Google Maps attribution text in a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement}. Append this element as a child of a {@link google.maps.places.PlaceContentConfigElement} to use it. If this element is omitted, attribution will still be shown with default colors. For example: <pre><code> &lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&lt;gmp-place-attribution<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light-scheme-color="black"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dark-scheme-color="white"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-attribution&gt;<br> &lt;/gmp-place-content-config&gt;<br> </code></pre>
   * Access by calling `const {PlaceAttributionElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceAttributionElement extends HTMLElement implements google.maps.places.PlaceAttributionElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceAttributionElementOptions);
    /**
     * The color of the Google Maps attribution in dark mode.
     * @defaultValue <code>AttributionColor.WHITE</code>
     */
    get darkSchemeColor(): google.maps.places.AttributionColorString;
    /**
     * The color of the Google Maps attribution in dark mode.
     * @defaultValue <code>AttributionColor.WHITE</code>
     */
    set darkSchemeColor(value: google.maps.places.AttributionColorString | null | undefined);
    /**
     * The color of the Google Maps attribution in light mode.
     * @defaultValue <code>AttributionColor.GRAY</code>
     */
    get lightSchemeColor(): google.maps.places.AttributionColorString;
    /**
     * The color of the Google Maps attribution in light mode.
     * @defaultValue <code>AttributionColor.GRAY</code>
     */
    set lightSchemeColor(value: google.maps.places.AttributionColorString | null | undefined);
    addEventListener<K extends keyof PlaceAttributionElementEventMap>(type: K, listener: (this: PlaceAttributionElement, ev: PlaceAttributionElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceAttributionElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceContentConfigElement</code>.
   */
  export interface PlaceContentConfigElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement} or {@link google.maps.places.PlaceSearchElement} to show a custom set of content. Append this element as a child to use it. <br> <br> For {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement} or {@link google.maps.places.PlaceSearchElement}, append any of the following elements to the {@link google.maps.places.PlaceContentConfigElement} to show the corresponding content: <br> {@link google.maps.places.PlaceAddressElement}, {@link google.maps.places.PlaceAccessibleEntranceIconElement}, {@link google.maps.places.PlaceAttributionElement} {@link google.maps.places.PlaceMediaElement}, {@link google.maps.places.PlaceOpenNowStatusElement}, {@link google.maps.places.PlacePriceElement}, {@link google.maps.places.PlaceRatingElement}, {@link google.maps.places.PlaceTypeElement}. <br> <br> Specific to {@link google.maps.places.PlaceDetailsElement}, you may also append any of the following elements: <br> {@link google.maps.places.PlaceFeatureListElement} {@link google.maps.places.PlaceOpeningHoursElement}, {@link google.maps.places.PlacePhoneNumberElement}, {@link google.maps.places.PlacePlusCodeElement}, {@link google.maps.places.PlaceReviewSummaryElement}, {@link google.maps.places.PlaceReviewsElement}, {@link google.maps.places.PlaceSummaryElement}, {@link google.maps.places.PlaceTypeSpecificHighlightsElement}, {@link google.maps.places.PlaceWebsiteElement}. <br> <br> The order of the children does not matter; the element renders content in a standard order which is not customizable. Example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-address&gt;&lt;/gmp-place-address&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-details&gt; </code></pre>
   * Access by calling `const {PlaceContentConfigElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceContentConfigElement extends HTMLElement implements google.maps.places.PlaceContentConfigElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceContentConfigElementOptions);
    addEventListener<K extends keyof PlaceContentConfigElementEventMap>(type: K, listener: (this: PlaceContentConfigElement, ev: PlaceContentConfigElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceContentConfigElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceStandardContentElement</code>.
   */
  export interface PlaceStandardContentElementOptions {
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement}, {@link google.maps.places.PlaceDetailsElement}, or {@link google.maps.places.PlaceSearchElement} to show a standard set of content. Append this element as a child to use it. <br> For {@link google.maps.places.PlaceDetailsElement}, standard content consists of: <ul> <li>media</li> <li>address</li> <li>rating</li> <li>type</li> <li>price</li> <li>accessible entrance icon</li> <li>website</li> <li>phone number</li> <li>opening hours</li> <li>summary</li> <li>type specific highlights</li> <li>reviews</li> <li>feature list</li> </ul> <br> For {@link google.maps.places.PlaceDetailsCompactElement}, standard content consists of: <ul> <li>media</li> <li>rating</li> <li>type</li> <li>price</li> <li>accessible entrance icon</li> <li>open now status</li> </ul> <br> For {@link google.maps.places.PlaceSearchElement}, standard content consists of: <ul> <li>media</li> <li>rating</li> <li>type</li> <li>price</li> <li>accessible entrance icon</li> </ul> <br> For example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-standard-content&gt;&lt;/gmp-place-standard-content&gt;<br> &lt;/gmp-place-details&gt;<br> </code></pre>
   * Access by calling `const {PlaceStandardContentElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceStandardContentElement extends HTMLElement implements google.maps.places.PlaceStandardContentElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceStandardContentElementOptions);
    addEventListener<K extends keyof PlaceStandardContentElementEventMap>(type: K, listener: (this: PlaceStandardContentElement, ev: PlaceStandardContentElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceStandardContentElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceDetailsLocationRequestElement</code>.
   */
  export interface PlaceDetailsLocationRequestElementOptions {
    /**
     * The location to render the place for.
     */
    location?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement} or {@link google.maps.places.PlaceDetailsElement} to load data based on a location. Append this element as a child of a {@link google.maps.places.PlaceDetailsCompactElement} or {@link google.maps.places.PlaceDetailsElement} to load data for the specified location. For example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-details-location-request<br> &nbsp;&nbsp;&nbsp;&nbsp;location="37.6207665,-122.4284806"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-details-location-request&gt;<br> &lt;/gmp-place-details&gt; </code></pre>
   * Access by calling `const {PlaceDetailsLocationRequestElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceDetailsLocationRequestElement extends HTMLElement implements google.maps.places.PlaceDetailsLocationRequestElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceDetailsLocationRequestElementOptions);
    /**
     * The location to render details for in the Place Details element. Normalizes to a <code>LatLngAltitude</code>.
     * @defaultValue <code>null</code>
     */
    get location(): google.maps.LatLngAltitude | null;
    /**
     * The location to render details for in the Place Details element. Normalizes to a <code>LatLngAltitude</code>.
     * @defaultValue <code>null</code>
     */
    set location(value: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    addEventListener<K extends keyof PlaceDetailsLocationRequestElementEventMap>(type: K, listener: (this: PlaceDetailsLocationRequestElement, ev: PlaceDetailsLocationRequestElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceDetailsLocationRequestElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for fetching Place fields.
   */
  export interface FetchFieldsRequest {
    /**
     * List of fields to be fetched.
     */
    fields: Iterable<string>;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
  }
  /**
   * Options for constructing a Place.
   */
  export interface PlaceOptions {
    /**
     * The unique place id.
     */
    id?: string;
    /**
     * A language identifier for the language in which details should be returned. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    requestedLanguage?: string | null;
    /**
     * A region code of the user&#39;s region. This can affect which photos may be returned, and possibly other things. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    requestedRegion?: string | null;
    /**
     * The unique place resource name.
     */
    resourceName?: string;
  }
  /**
   * RankPreference enum for SearchByTextRequest.
   *
   * Access by calling `const {SearchByTextRankPreference} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum SearchByTextRankPreference {
    /**
     * Ranks results by distance.
     */
    DISTANCE = 'DISTANCE',
    /**
     * Ranks results by relevance.
     */
    RELEVANCE = 'RELEVANCE',
  }
  export type SearchByTextRankPreferenceString = `${google.maps.places.SearchByTextRankPreference}`;
  /**
   * Request interface for {@link google.maps.places.Place.searchByText}.
   */
  export interface SearchByTextRequest {
    /**
     * EV-related options that can be specified for a place search request.
     */
    evSearchOptions?: google.maps.places.EVSearchOptions;
    /**
     * Fields to be included in the response, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If <code>[&#39;*&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). You can request any property in the {@link google.maps.places.Place} class as a field.
     */
    fields: string[];
    /**
     * Include places that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded?: boolean;
    /**
     * The requested place type. Full list of types supported: <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">https://developers.google.com/maps/documentation/places/web-service/place-types</a>. Only one included type is supported. See {@link google.maps.places.SearchByTextRequest.useStrictTypeFiltering}
     */
    includedType?: string;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * Used to restrict the search to places that are currently open.
     * @defaultValue <code>false</code>
     */
    isOpenNow?: boolean;
    /**
     * Place details will be displayed with the preferred language if available. Will default to the browser&#39;s language preference. Current list of supported languages: <a href="https://developers.google.com/maps/faq#languagesupport">https://developers.google.com/maps/faq#languagesupport</a>.
     */
    language?: string;
    /**
     * The region to search. This location serves as a bias which means results around given location might be returned. Cannot be set along with locationRestriction.
     */
    locationBias?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | google.maps.CircleLiteral | google.maps.Circle;
    /**
     * The region to search. This location serves as a restriction which means results outside given location will not be returned. Cannot be set along with locationBias.
     */
    locationRestriction?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;
    /**
     * Maximum number of results to return. It must be between 1 and 20, inclusively.
     */
    maxResultCount?: number;
    /**
     * Filter out results whose average user rating is strictly less than this limit. A valid value must be an float between 0 and 5 (inclusively) at a 0.5 cadence i.e. [0, 0.5, 1.0, ... , 5.0] inclusively. The input rating will be rounded up to the nearest 0.5(ceiling). For instance, a rating of 0.6 will eliminate all results with a less than 1.0 rating.
     */
    minRating?: number;
    /**
     * Used to restrict the search to places that are marked as certain price levels. Any combinations of price levels can be chosen. Defaults to all price levels.
     */
    priceLevels?: google.maps.places.PriceLevelString[];
    /**
     * Include pure service area businesses if the field is set to true. A pure service area business is a business that visits or delivers to customers directly but does not serve customers at their business address. For example, businesses like cleaning services or plumbers may not have a physical address or location on Google Maps. Places will not return fields including <code>location</code>, <code>plusCode</code>, and other location related fields for these businesses.
     */
    pureServiceAreaBusinessesIncluded?: boolean;
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>SearchByTextRankPreference.RELEVANCE</code>
     */
    rankPreference?: google.maps.places.SearchByTextRankPreferenceString;
    /**
     * The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see <a href="https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html">https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html</a>. Note that 3-digit region codes are not currently supported.
     */
    region?: string;
    /**
     * Required when you do not use {@link google.maps.places.SearchByTextRequest.query}. The text query for textual search.
     */
    textQuery?: string;
    /**
     * Used to set strict type filtering for {@link google.maps.places.SearchByTextRequest.includedType}. If set to true, only results of the same type will be returned.
     * @defaultValue <code>false</code>
     */
    useStrictTypeFiltering?: boolean;
    /**
     * @deprecated Please use textQuery instead
     */
    query?: string;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * @deprecated Please use rankPreference instead.
     */
    rankBy?: google.maps.places.SearchByTextRankPreferenceString;
  }
  /**
   * EV-related options that can be specified for a place search request.
   */
  export interface EVSearchOptions {
    /**
     * The list of preferred EV connector types. A place that does not support any of the listed connector types is filtered out.
     */
    connectorTypes?: google.maps.places.EVConnectorTypeString[];
    /**
     * Minimum required charging rate in kilowatts. A place with a charging rate less than the specified rate is filtered out.
     */
    minimumChargingRateKw?: number;
  }
  /**
   * RankPreference enum for SearchNearbyRequest.
   *
   * Access by calling `const {SearchNearbyRankPreference} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum SearchNearbyRankPreference {
    /**
     * Ranks results by distance.
     */
    DISTANCE = 'DISTANCE',
    /**
     * Ranks results by popularity.
     */
    POPULARITY = 'POPULARITY',
  }
  export type SearchNearbyRankPreferenceString = `${google.maps.places.SearchNearbyRankPreference}`;
  /**
   * Request interface for {@link google.maps.places.Place.searchNearby}. For more information on the request, see <a href="https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places/searchNearby">Places API reference</a>.
   */
  export interface SearchNearbyRequest {
    /**
     * Excluded primary place types. See the <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">full list of types supported</a>. A place can only have a single primary type. Up to 50 types may be specified. If you specify the same type in both <code>included</code> and <code>excluded</code> lists, an INVALID_ARGUMENT error is returned.
     */
    excludedPrimaryTypes?: string[];
    /**
     * Excluded place types. See the <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">full list of types supported</a>. A place can have many different place types. Up to 50 types may be specified. If you specify the same type in both <code>included</code> and <code>excluded</code> lists, an INVALID_ARGUMENT error is returned.
     */
    excludedTypes?: string[];
    /**
     * Fields to be included in the response, <a href="https://developers.google.com/maps/billing/understanding-cost-of-use#places-product">which will be billed for</a>. If <code>[&#39;*&#39;]</code> is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). You can request any property in the {@link google.maps.places.Place} class as a field.
     */
    fields: string[];
    /**
     * Include places that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded?: boolean;
    /**
     * Included primary place types. See the <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">full list of types supported</a>. A place can only have a single primary type. Up to 50 types may be specified. If you specify the same type in both <code>included</code> and <code>excluded</code> lists, an INVALID_ARGUMENT error is returned.
     */
    includedPrimaryTypes?: string[];
    /**
     * Included place types. See the <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">full list of types supported</a>. A place can have many different place types. Up to 50 types may be specified. If you specify the same type in both <code>included</code> and <code>excluded</code> lists, an INVALID_ARGUMENT error is returned.
     */
    includedTypes?: string[];
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * Place details will be displayed with the preferred language if available. Will default to the browser&#39;s language preference. Current list of supported languages: <a href="https://developers.google.com/maps/faq#languagesupport">https://developers.google.com/maps/faq#languagesupport</a>.
     */
    language?: string;
    /**
     * The region to search, specified as a circle with center and radius. Results outside given location are not returned.
     */
    locationRestriction: google.maps.Circle | google.maps.CircleLiteral;
    /**
     * Maximum number of results to return. For acceptable values and default, see <a href="https://developers.google.com/maps/documentation/places/web-service/reference/rpc/google.maps.places.v1#searchnearbyrequest">Places API reference</a>.
     */
    maxResultCount?: number;
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>SearchNearbyRankPreference.POPULARITY</code>
     */
    rankPreference?: google.maps.places.SearchNearbyRankPreferenceString;
    /**
     * The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see <a href="https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html">https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html</a>. Note that 3-digit region codes are not currently supported.
     */
    region?: string;
  }
  /**
   * Access by calling `const {Place} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Place implements google.maps.places.PlaceOptions {
    /**
     * 
     * @param options
     */
    constructor(options: google.maps.places.PlaceOptions);
    /**
     * Accessibility options of this Place. <code>undefined</code> if the accessibility options data have not been called for from the server.
     */
    get accessibilityOptions(): google.maps.places.AccessibilityOptions | null | undefined;
    /**
     * The collection of address components for this Place’s location. Empty object if there is no known address data. <code>undefined</code> if the address data has not been called for from the server.
     */
    get addressComponents(): google.maps.places.AddressComponent[] | undefined;
    /**
     * The address descriptor for this place. Address descriptors include additional information that help describe a location using landmarks and areas. See address descriptor regional coverage in <a href="https://developers.google.com/maps/documentation/geocoding/address-descriptors/coverage">https://developers.google.com/maps/documentation/geocoding/address-descriptors/coverage</a>.
     */
    get addressDescriptor(): google.maps.places.AddressDescriptor | null | undefined;
    /**
     * The representation of the Place’s address in the <a href="http://microformats.org/wiki/adr">adr microformat</a>.
     */
    get adrFormatAddress(): string | null | undefined;

    get allowsDogs(): boolean | null | undefined;
    /**
     * Data providers that must be shown for the Place.
     */
    get attributions(): google.maps.places.Attribution[] | undefined;
    /**
     * The location&#39;s operational status. <code>null</code> if there is no known status. <code>undefined</code> if the status data has not been loaded from the server.
     */
    get businessStatus(): google.maps.places.BusinessStatusString | null | undefined;
    /**
     * The consumer alert for this place.
     */
    get consumerAlert(): google.maps.places.ConsumerAlert | null | undefined;
    /**
     * The list of containing places for this place. Containing places are places that contain the place.
     */
    get containingPlaces(): google.maps.places.Place[] | undefined;
    /**
     * The hours of operation for the next seven days (including today). This includes exceptional hours like holidays and irregular closures.
     */
    get currentOpeningHours(): google.maps.places.OpeningHours | null | undefined;
    /**
     * The current secondary hours of this place which includes exceptional hours like holidays and irregular closures for the next seven days. Secondary hours are different from a place&#39;s main hours. For example, a restaurant can specify drive through hours or delivery hours as its secondary hours.
     */
    get currentSecondaryOpeningHours(): google.maps.places.SecondaryOpeningHours[] | undefined;
    /**
     * The location&#39;s display name. <code>null</code> if there is no name. <code>undefined</code> if the name data has not been loaded from the server.
     */
    get displayName(): string | null | undefined;
    /**
     * The language of the location&#39;s display name. <code>null</code> if there is no name. <code>undefined</code> if the name data has not been loaded from the server.
     */
    get displayNameLanguageCode(): string | null | undefined;
    /**
     * The editorial summary for this place. <code>null</code> if there is no editorial summary. <code>undefined</code> if this field has not yet been requested.
     */
    get editorialSummary(): string | null | undefined;
    /**
     * The language of the editorial summary for this place. <code>null</code> if there is no editorial summary. <code>undefined</code> if this field has not yet been requested.
     */
    get editorialSummaryLanguageCode(): string | null | undefined;
    /**
     * The EVChargeAmenitySummary for this place.
     */
    get evChargeAmenitySummary(): google.maps.places.EVChargeAmenitySummary | null | undefined;
    /**
     * EV Charge options provided by the place. <code>undefined</code> if the EV charge options have not been called for from the server.
     */
    get evChargeOptions(): google.maps.places.EVChargeOptions | null | undefined;
    /**
     * The location’s full address.
     */
    get formattedAddress(): string | null | undefined;
    /**
     * Fuel options provided by the place. <code>undefined</code> if the fuel options have not been called for from the server.
     */
    get fuelOptions(): google.maps.places.FuelOptions | null | undefined;
    /**
     * The date this place will open, if its <code>businessStatus</code> is <code>FUTURE_OPENING</code>. When the field is not requested, this field will be undefined. Otherwise, this field will be populated with the opening date if it is available, and null if it is not.
     */
    get futureOpeningDate(): Date | null | undefined;
    /**
     * The GenerativeSummary for this place.
     */
    get generativeSummary(): google.maps.places.GenerativeSummary | null | undefined;
    /**
     * Links to trigger different Google Maps actions.
     */
    get googleMapsLinks(): google.maps.places.GoogleMapsLinks | null | undefined;
    /**
     * URL of the official Google page for this place. This is the Google-owned page that contains the best available information about the Place.
     */
    get googleMapsURI(): string | null | undefined;
    /**
     * Whether a place has curbside pickup. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get hasCurbsidePickup(): boolean | null | undefined;
    /**
     * Whether a place has delivery. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get hasDelivery(): boolean | null | undefined;
    /**
     * Whether a place has dine in. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get hasDineIn(): boolean | null | undefined;

    get hasLiveMusic(): boolean | null | undefined;

    get hasMenuForChildren(): boolean | null | undefined;

    get hasOutdoorSeating(): boolean | null | undefined;

    get hasRestroom(): boolean | null | undefined;
    /**
     * Whether a place has takeout. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get hasTakeout(): boolean | null | undefined;
    /**
     * The default HEX color code for the place&#39;s category.
     */
    get iconBackgroundColor(): string | null | undefined;
    /**
     * The unique place id.
     */
    get id(): string;
    /**
     * The Place’s phone number in international format. International format includes the country code, and is prefixed with the plus (+) sign.
     */
    get internationalPhoneNumber(): string | null | undefined;

    get isGoodForChildren(): boolean | null | undefined;

    get isGoodForGroups(): boolean | null | undefined;

    get isGoodForWatchingSports(): boolean | null | undefined;
    /**
     * Indicates whether the place is a pure service area business. A pure service area business is a business that visits or delivers to customers directly but does not serve customers at their business address. For example, businesses like cleaning services or plumbers may not have a physical address or location on Google Maps.
     */
    get isPureServiceAreaBusiness(): boolean | null | undefined;
    /**
     * Whether a place is reservable. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get isReservable(): boolean | null | undefined;
    /**
     * The Place’s position.
     */
    get location(): google.maps.LatLng | null | undefined;
    /**
     * The Place’s phone number, formatted according to the <a href="http://en.wikipedia.org/wiki/Local_conventions_for_writing_telephone_numbers">number&#39;s regional convention</a>.
     */
    get nationalPhoneNumber(): string | null | undefined;
    /**
     * The NeighborhoodSummary for this place.
     */
    get neighborhoodSummary(): google.maps.places.NeighborhoodSummary | null | undefined;
    /**
     * Options of parking provided by the place. <code>undefined</code> if the parking options data have not been called for from the server.
     */
    get parkingOptions(): google.maps.places.ParkingOptions | null | undefined;
    /**
     * Payment options provided by the place. <code>undefined</code> if the payment options data have not been called for from the server.
     */
    get paymentOptions(): google.maps.places.PaymentOptions | null | undefined;
    /**
     * Photos of this Place. The collection will contain up to ten {@link google.maps.places.Photo} objects.
     */
    get photos(): google.maps.places.Photo[] | undefined;

    get plusCode(): google.maps.places.PlusCode | null | undefined;

    get postalAddress(): google.maps.places.PostalAddress | null | undefined;
    /**
     * The price level of the Place. This property can return any of the following values <ul style="list-style-type: none;"> <li><code>Free</code></li> <li><code>Inexpensive</code></li> <li><code>Moderate</code></li> <li><code>Expensive</code></li> <li><code>Very Expensive</code></li> </ul>
     */
    get priceLevel(): google.maps.places.PriceLevelString | null | undefined;
    /**
     * The price range for this Place. <code>endPrice</code> could be unset, which indicates a range without upper bound (e.g. &quot;More than $100&quot;).
     */
    get priceRange(): google.maps.places.PriceRange | null | undefined;
    /**
     * The location&#39;s primary type. <code>null</code> if there is no type. <code>undefined</code> if the type data has not been loaded from the server.
     */
    get primaryType(): string | null | undefined;
    /**
     * The location&#39;s primary type display name. <code>null</code> if there is no type. <code>undefined</code> if the type data has not been loaded from the server.
     */
    get primaryTypeDisplayName(): string | null | undefined;
    /**
     * The language of the location&#39;s primary type display name. <code>null</code> if there is no type. <code>undefined</code> if the type data has not been loaded from the server.
     */
    get primaryTypeDisplayNameLanguageCode(): string | null | undefined;
    /**
     * A rating, between 1.0 to 5.0, based on user reviews of this Place.
     */
    get rating(): number | null | undefined;
    /**
     * The regular hours of operation for this place. This does not include exceptional hours like holidays.
     */
    get regularOpeningHours(): google.maps.places.OpeningHours | null | undefined;
    /**
     * The regular secondary hours of this place which excludes exceptional hours like holidays and irregular closures. Secondary hours are different from a place&#39;s main hours. For example, a restaurant can specify drive through hours or delivery hours as its secondary hours.
     */
    get regularSecondaryOpeningHours(): google.maps.places.SecondaryOpeningHours[] | undefined;
    /**
     * The requested language for this place.
     */
    requestedLanguage?: string | null;
    /**
     * The requested region for this place.
     */
    requestedRegion?: string | null;
    /**
     * The unique place resource name.
     */
    get resourceName(): string;
    /**
     * A list of reviews for this Place.
     */
    get reviews(): google.maps.places.Review[] | undefined;
    /**
     * The ReviewSummary for this place.
     */
    get reviewSummary(): google.maps.places.ReviewSummary | null | undefined;
    /**
     * Whether a place serves beer. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesBeer(): boolean | null | undefined;
    /**
     * Whether a place serves breakfast. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesBreakfast(): boolean | null | undefined;
    /**
     * Whether a place serves brunch. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesBrunch(): boolean | null | undefined;

    get servesCocktails(): boolean | null | undefined;

    get servesCoffee(): boolean | null | undefined;

    get servesDessert(): boolean | null | undefined;
    /**
     * Whether a place serves dinner. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesDinner(): boolean | null | undefined;
    /**
     * Whether a place serves lunch. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesLunch(): boolean | null | undefined;
    /**
     * Whether a place serves vegetarian food. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesVegetarianFood(): boolean | null | undefined;
    /**
     * Whether a place serves wine. Returns &#39;true&#39; or &#39;false&#39; if the value is known. Returns &#39;null&#39; if the value is unknown. Returns &#39;undefined&#39; if this field has not yet been requested.
     */
    get servesWine(): boolean | null | undefined;
    /**
     * The location’s short address.
     */
    get shortFormattedAddress(): string | null | undefined;
    /**
     * The list of sub-destinations for this place. Sub-destinations are specific places associated with a main place. These provide more specific destinations for users who are searching within a large or complex place, like an airport, national park, university, or stadium.
     */
    get subDestinations(): google.maps.places.Place[] | undefined;
    /**
     * URI to the svg image mask resource that can be used to represent a place’s category.
     */
    get svgIconMaskURI(): string | null | undefined;
    /**
     * The TimeZone for this place.
     */
    get timeZone(): google.maps.places.TimeZone | null | undefined;
    /**
     * Information about the transit station. <code>undefined</code> if the transit data has not been loaded from the server.
     */
    get transitStation(): google.maps.places.TransitStation | null | undefined;
    /**
     * An array of <a href="https://developers.google.com/maps/documentation/places/web-service/supported_types">types for this Place</a> (for example, <code>[&quot;political&quot;, &quot;locality&quot;]</code> or <code>[&quot;restaurant&quot;, &quot;establishment&quot;]</code>).
     */
    get types(): string[] | undefined;
    /**
     * The number of user ratings which contributed to this Place’s {@link google.maps.places.Place.rating}.
     */
    get userRatingCount(): number | null | undefined;
    /**
     * The offset from UTC of the Place’s current timezone, in minutes. For example, Austrialian Eastern Standard Time (GMT+10) in daylight savings is 11 hours ahead of UTC, so the <code>utc_offset_minutes</code> will be <code>660</code>. For timezones behind UTC, the offset is negative. For example, the <code>utc_offset_minutes</code> is <code>-60</code> for Cape Verde.
     */
    get utcOffsetMinutes(): number | null | undefined;
    /**
     * The preferred viewport when displaying this Place on a map.
     */
    get viewport(): google.maps.LatLngBounds | null | undefined;
    /**
     * The authoritative website for this Place, such as a business&#39; homepage.
     */
    get websiteURI(): string | null | undefined;
    /**
     * @deprecated Use {@link google.maps.places.Place.regularOpeningHours} instead.
     */
    get openingHours(): google.maps.places.OpeningHours | null | undefined;
    /**
     * @deprecated This field was accidentally documented, but has never actually been populated.
     */
    get hasWiFi(): boolean | null | undefined;
    /**
     * Text query based place search.
     */
    static searchByText(request: google.maps.places.SearchByTextRequest): Promise<{places: google.maps.places.Place[]}>;
    /**
     * Search for nearby places.
     */
    static searchNearby(request: google.maps.places.SearchNearbyRequest): Promise<{places: google.maps.places.Place[]}>;

    fetchFields(options: google.maps.places.FetchFieldsRequest): Promise<{place: google.maps.places.Place}>;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Calculates the <code>Date</code> for the next opening time using the Place&#39;s {@link google.maps.places.Place.regularOpeningHours}. Returns undefined if the data is insufficient to calculate the result, or this place is not operational.
     */
    getNextOpeningTime(date?: Date): Promise<Date | undefined>;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Check if the place is open at the given <code>Date</code>. Resolves with <code>undefined</code> if the known data for the location is insufficient to calculate this, e.g. if the opening hours are unregistered.
     */
    isOpen(date?: Date): Promise<boolean | undefined>;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Options for <code>PlaceDetailsPlaceRequestElement</code>.
   */
  export interface PlaceDetailsPlaceRequestElementOptions {
    /**
     * See {@link google.maps.places.PlaceDetailsPlaceRequestElement.place}
     */
    place?: google.maps.places.Place | string | null;
  }
  /**
   * Configures a {@link google.maps.places.PlaceDetailsCompactElement} or {@link google.maps.places.PlaceDetailsElement} to load data based on a place object, ID, or resource name. Append this element as a child of a {@link google.maps.places.PlaceDetailsCompactElement} or {@link google.maps.places.PlaceDetailsElement} to load data for the specified place. For example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-details-place-request<br> &nbsp;&nbsp;&nbsp;&nbsp;place="<var>PLACE_ID</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-details-place-request&gt;<br> &lt;/gmp-place-details&gt; </code></pre>
   * Access by calling `const {PlaceDetailsPlaceRequestElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceDetailsPlaceRequestElement extends HTMLElement implements google.maps.places.PlaceDetailsPlaceRequestElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceDetailsPlaceRequestElementOptions);
    /**
     * The place object, ID, or resource name to render details for in the Place Details Compact element. This property reflects to the attribute as a resource name.
     * @defaultValue <code>null</code>
     */
    get place(): google.maps.places.Place | null;
    /**
     * The place object, ID, or resource name to render details for in the Place Details Compact element. This property reflects to the attribute as a resource name.
     * @defaultValue <code>null</code>
     */
    set place(value: google.maps.places.Place | string | null | undefined);
    addEventListener<K extends keyof PlaceDetailsPlaceRequestElementEventMap>(type: K, listener: (this: PlaceDetailsPlaceRequestElement, ev: PlaceDetailsPlaceRequestElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceDetailsPlaceRequestElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceDetailsCompactElement</code>.
   */
  export interface PlaceDetailsCompactElementOptions {
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * See {@link google.maps.places.PlaceDetailsCompactElement.orientation}.
     */
    orientation?: google.maps.places.PlaceDetailsOrientationString | null;
    /**
     * See {@link google.maps.places.PlaceDetailsCompactElement.truncationPreferred}.
     */
    truncationPreferred?: boolean | null;
  }
  /**
   * Displays details for a place in a compact layout. Append a {@link google.maps.places.PlaceDetailsPlaceRequestElement} or {@link google.maps.places.PlaceDetailsLocationRequestElement} to specify the place to be rendered. Append a {@link google.maps.places.PlaceContentConfigElement}, {@link google.maps.places.PlaceStandardContentElement}, or {@link google.maps.places.PlaceAllContentElement} to specify which content to render. <br><br> Example: <pre><code> &lt;gmp-place-details-compact&gt;<br> &nbsp;&nbsp;&lt;gmp-place-details-place-request<br> &nbsp;&nbsp;&nbsp;&nbsp;place="<var>PLACE_ID</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-details-place-request&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-details-compact&gt; </code></pre> <br> To use this element, enable the <a href="https://console.cloud.google.com/marketplace/product/google/placewidgets.googleapis.com" >Places UI Kit API</a> for your project in the Google Cloud console.
   * Access by calling `const {PlaceDetailsCompactElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceDetailsCompactElement extends HTMLElement implements google.maps.places.PlaceDetailsCompactElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceDetailsCompactElementOptions);
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * The orientation variant (vertical or horizontal) of the element.
     * @defaultValue <code>PlaceDetailsOrientation.VERTICAL</code>
     */
    orientation?: google.maps.places.PlaceDetailsOrientationString | null;
    /**
     * Read only. Place object containing the ID, location, and viewport of the currently rendered place.
     */
    get place(): google.maps.places.Place | undefined;
    /**
     * If true, truncates the place name and address to fit on one line instead of wrapping.
     * @defaultValue <code>false</code>
     */
    get truncationPreferred(): boolean;
    /**
     * If true, truncates the place name and address to fit on one line instead of wrapping.
     * @defaultValue <code>false</code>
     */
    set truncationPreferred(value: boolean | null | undefined);
    addEventListener<K extends keyof PlaceDetailsCompactElementEventMap>(type: K, listener: (this: PlaceDetailsCompactElement, ev: PlaceDetailsCompactElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceDetailsCompactElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-load": Event;
  }
  /**
   * Options for <code>PlaceDetailsElement</code>.
   */
  export interface PlaceDetailsElementOptions {
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
  }
  /**
   * Displays details for a place in a full layout. Append either a {@link google.maps.places.PlaceDetailsPlaceRequestElement} or {@link google.maps.places.PlaceDetailsLocationRequestElement} to specify the place to be rendered. Append a {@link google.maps.places.PlaceContentConfigElement}, {@link google.maps.places.PlaceStandardContentElement}, or {@link google.maps.places.PlaceAllContentElement} to specify which content to render. <br><br> Example: <pre><code> &lt;gmp-place-details&gt;<br> &nbsp;&nbsp;&lt;gmp-place-details-place-request<br> &nbsp;&nbsp;&nbsp;&nbsp;place="<var>PLACE_ID</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-details-place-request&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-details&gt; </code></pre> <br> To use this element, enable the <a href="https://console.cloud.google.com/marketplace/product/google/placewidgets.googleapis.com" >Places UI Kit API</a> for your project in the Google Cloud console.
   * Access by calling `const {PlaceDetailsElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceDetailsElement extends HTMLElement implements google.maps.places.PlaceDetailsElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceDetailsElementOptions);
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * Read only. Place object containing the ID, location, and viewport of the currently rendered place.
     */
    get place(): google.maps.places.Place | undefined;
    addEventListener<K extends keyof PlaceDetailsElementEventMap>(type: K, listener: (this: PlaceDetailsElement, ev: PlaceDetailsElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceDetailsElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-load": Event;
  }
  /**
   * Orientation variants for {@link google.maps.places.PlaceSearchElement}.
   *
   * Access by calling `const {PlaceSearchOrientation} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PlaceSearchOrientation {
    /**
     * Horizontal orientation.
     */
    HORIZONTAL = 'HORIZONTAL',
    /**
     * Vertical orientation.
     */
    VERTICAL = 'VERTICAL',
  }
  export type PlaceSearchOrientationString = `${google.maps.places.PlaceSearchOrientation}`;
  /**
   * Attribution positions for {@link google.maps.places.PlaceSearchElement}.
   *
   * Access by calling `const {PlaceSearchAttributionPosition} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PlaceSearchAttributionPosition {
    /**
     * Attribution at the bottom of the PlaceSearchElement
     */
    BOTTOM = 'BOTTOM',
    /**
     * Attribution at the top of the PlaceSearchElement
     */
    TOP = 'TOP',
  }
  export type PlaceSearchAttributionPositionString = `${google.maps.places.PlaceSearchAttributionPosition}`;
  /**
   * Options for <code>PlaceSearchElement</code>.
   */
  export interface PlaceSearchElementOptions {
    /**
     * See {@link google.maps.places.PlaceSearchElement.attributionPosition}.
     */
    attributionPosition?: google.maps.places.PlaceSearchAttributionPositionString | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * See {@link google.maps.places.PlaceSearchElement.orientation}.
     */
    orientation?: google.maps.places.PlaceSearchOrientationString | null;
    /**
     * See {@link google.maps.places.PlaceSearchElement.selectable}
     */
    selectable?: boolean | null;
    /**
     * See {@link google.maps.places.PlaceSearchElement.truncationPreferred}.
     */
    truncationPreferred?: boolean | null;
  }
  /**
   * Options for <code>PlaceNearbySearchRequestElement</code>.
   */
  export interface PlaceNearbySearchRequestElementOptions {
    /**
     * Excluded primary place types. See {@link google.maps.places.PlaceNearbySearchRequestElement.excludedPrimaryTypes} and {@link google.maps.places.SearchNearbyRequest.excludedPrimaryTypes} for more details.
     */
    excludedPrimaryTypes?: string[] | null;
    /**
     * Excluded place types. See {@link google.maps.places.PlaceNearbySearchRequestElement.excludedTypes} and {@link google.maps.places.SearchNearbyRequest.excludedTypes} for more details.
     */
    excludedTypes?: string[] | null;
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded?: boolean | null;
    /**
     * Included primary place types. See {@link google.maps.places.PlaceNearbySearchRequestElement.includedPrimaryTypes} and {@link google.maps.places.SearchNearbyRequest.includedPrimaryTypes} for more details.
     */
    includedPrimaryTypes?: string[] | null;
    /**
     * Included place types. See {@link google.maps.places.PlaceNearbySearchRequestElement.includedTypes} and {@link google.maps.places.SearchNearbyRequest.includedTypes} for more details.
     */
    includedTypes?: string[] | null;
    /**
     * The region to search. See {@link google.maps.places.PlaceNearbySearchRequestElement.locationRestriction} and {@link google.maps.places.SearchNearbyRequest.locationRestriction} for more details.
     */
    locationRestriction?: google.maps.Circle | google.maps.CircleLiteral | null;
    /**
     * Maximum number of results to return. See {@link google.maps.places.PlaceNearbySearchRequestElement.maxResultCount} and {@link google.maps.places.SearchNearbyRequest.maxResultCount} for more details.
     */
    maxResultCount?: number | null;
    /**
     * How results will be ranked in the response. See {@link google.maps.places.PlaceNearbySearchRequestElement.rankPreference} and {@link google.maps.places.SearchNearbyRankPreference} for more details.
     */
    rankPreference?: google.maps.places.SearchNearbyRankPreferenceString | null;
  }
  /**
   * Configures a {@link google.maps.places.PlaceSearchElement} to load results based on a nearby search request. The <code>locationRestriction</code> property is required for the search element to load. Any other configured properties will be ignored if <code>locationRestriction</code> is not set. Append this element as a child of a {@link google.maps.places.PlaceSearchElement} to load results. For example: <pre><code> &lt;gmp-place-search&gt;<br> &nbsp;&nbsp;&lt;gmp-place-nearby-search-request<br> &nbsp;&nbsp;&nbsp;&nbsp;location-restriction="<var>RADIUS</var>@<var>LAT</var>,<var>LNG</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-nearby-search-request&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-search&gt; </code></pre>
   * Access by calling `const {PlaceNearbySearchRequestElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceNearbySearchRequestElement extends HTMLElement implements google.maps.places.PlaceNearbySearchRequestElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceNearbySearchRequestElementOptions);
    /**
     * Excluded primary place types.
     * @defaultValue <code>null</code>
     */
    get excludedPrimaryTypes(): string[] | null;
    /**
     * Excluded primary place types.
     * @defaultValue <code>null</code>
     */
    set excludedPrimaryTypes(value: string[] | null | undefined);
    /**
     * Excluded place types.
     * @defaultValue <code>null</code>
     */
    get excludedTypes(): string[] | null;
    /**
     * Excluded place types.
     * @defaultValue <code>null</code>
     */
    set excludedTypes(value: string[] | null | undefined);
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    get futureOpeningBusinessesIncluded(): boolean | null;
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    set futureOpeningBusinessesIncluded(value: boolean | null | undefined);
    /**
     * Included primary place type.
     * @defaultValue <code>null</code>
     */
    get includedPrimaryTypes(): string[] | null;
    /**
     * Included primary place type.
     * @defaultValue <code>null</code>
     */
    set includedPrimaryTypes(value: string[] | null | undefined);
    /**
     * Included place type.
     * @defaultValue <code>null</code>
     */
    get includedTypes(): string[] | null;
    /**
     * Included place type.
     * @defaultValue <code>null</code>
     */
    set includedTypes(value: string[] | null | undefined);
    /**
     * The region to search. Normalizes to a <code>Circle</code>.
     * @defaultValue <code>null</code>
     */
    get locationRestriction(): google.maps.Circle | null;
    /**
     * The region to search. Normalizes to a <code>Circle</code>.
     * @defaultValue <code>null</code>
     */
    set locationRestriction(value: google.maps.Circle | google.maps.CircleLiteral | null | undefined);
    /**
     * Maximum number of results to return.
     * @defaultValue <code>null</code>
     */
    get maxResultCount(): number | null;
    /**
     * Maximum number of results to return.
     * @defaultValue <code>null</code>
     */
    set maxResultCount(value: number | null | undefined);
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>null</code>
     */
    get rankPreference(): google.maps.places.SearchNearbyRankPreferenceString | null;
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>null</code>
     */
    set rankPreference(value: google.maps.places.SearchNearbyRankPreferenceString | null | undefined);
    addEventListener<K extends keyof PlaceNearbySearchRequestElementEventMap>(type: K, listener: (this: PlaceNearbySearchRequestElement, ev: PlaceNearbySearchRequestElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceNearbySearchRequestElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Options for <code>PlaceTextSearchRequestElement</code>.
   */
  export interface PlaceTextSearchRequestElementOptions {
    /**
     * The list of preferred EV connector types. See {@link google.maps.places.SearchByTextRequest.evSearchOptions} and {@link google.maps.places.PlaceTextSearchRequestElement.evConnectorTypes} for more details.
     */
    evConnectorTypes?: google.maps.places.EVConnectorTypeString[] | null;
    /**
     * Minimum required charging rate in kilowatts. See {@link google.maps.places.SearchByTextRequest.evSearchOptions} and {@link google.maps.places.PlaceTextSearchRequestElement.evMinimumChargingRateKw} for more details.
     */
    evMinimumChargingRateKw?: number | null;
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded?: boolean | null;
    /**
     * The requested place type. See {@link google.maps.places.SearchByTextRequest.includedType} and {@link google.maps.places.PlaceTextSearchRequestElement.includedType} for more details.
     */
    includedType?: string | null;
    /**
     * Used to restrict the search to places that are currently open. See {@link google.maps.places.SearchByTextRequest.isOpenNow} and {@link google.maps.places.PlaceTextSearchRequestElement.isOpenNow} for more details.
     */
    isOpenNow?: boolean | null;
    /**
     * Location bias for the search. See {@link google.maps.places.SearchByTextRequest.locationBias} and {@link google.maps.places.PlaceTextSearchRequestElement.locationBias} for more details.
     */
    locationBias?: google.maps.places.LocationBias | null;
    /**
     * Location restriction for the search. See {@link google.maps.places.SearchByTextRequest.locationRestriction} and {@link google.maps.places.PlaceTextSearchRequestElement.locationRestriction} for more details.
     */
    locationRestriction?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * Maximum number of results to return. See {@link google.maps.places.SearchByTextRequest.maxResultCount} and {@link google.maps.places.PlaceTextSearchRequestElement.maxResultCount} for more details.
     */
    maxResultCount?: number | null;
    /**
     * Filter out results whose average user rating is strictly less than this limit. See {@link google.maps.places.SearchByTextRequest.minRating} and {@link google.maps.places.PlaceTextSearchRequestElement.minRating} for more details.
     */
    minRating?: number | null;
    /**
     * Used to restrict the search to places that are marked as certain price levels. See {@link google.maps.places.SearchByTextRequest.priceLevels} and {@link google.maps.places.PlaceTextSearchRequestElement.priceLevels} for more details.
     */
    priceLevels?: google.maps.places.PriceLevelString[] | null;
    /**
     * How results will be ranked in the response. See {@link google.maps.places.SearchByTextRequest.rankPreference} and {@link google.maps.places.PlaceTextSearchRequestElement.rankPreference} for more details.
     */
    rankPreference?: google.maps.places.SearchByTextRankPreferenceString | null;
    /**
     * The text query for textual search. See {@link google.maps.places.SearchByTextRequest.textQuery} and {@link google.maps.places.PlaceTextSearchRequestElement.textQuery} for more details.
     */
    textQuery?: string | null;
    /**
     * Used to set strict type filtering for {@link google.maps.places.SearchByTextRequest.includedType}. See {@link google.maps.places.SearchByTextRequest.useStrictTypeFiltering} and {@link google.maps.places.PlaceTextSearchRequestElement.useStrictTypeFiltering} for more details.
     */
    useStrictTypeFiltering?: boolean | null;
  }
  /**
   * Configures a {@link google.maps.places.PlaceSearchElement} to load results based on a text search request. The <code>textQuery</code> property is required for the search element to load. Any other configured properties will be ignored if <code>textQuery</code> is not set. Append this element as a child of a {@link google.maps.places.PlaceSearchElement} to load results. For example: <pre><code> &lt;gmp-place-search&gt;<br> &nbsp;&nbsp;&lt;gmp-place-text-search-request<br> &nbsp;&nbsp;&nbsp;&nbsp;text-query="<var>QUERY</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-text-search-request&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-search&gt; </code></pre>
   * Access by calling `const {PlaceTextSearchRequestElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceTextSearchRequestElement extends HTMLElement implements google.maps.places.PlaceTextSearchRequestElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceTextSearchRequestElementOptions);
    /**
     * The list of preferred EV connector types.
     * @defaultValue <code>null</code>
     */
    get evConnectorTypes(): google.maps.places.EVConnectorTypeString[] | null;
    /**
     * The list of preferred EV connector types.
     * @defaultValue <code>null</code>
     */
    set evConnectorTypes(value: google.maps.places.EVConnectorTypeString[] | null | undefined);
    /**
     * Minimum required charging rate in kilowatts.
     * @defaultValue <code>null</code>
     */
    get evMinimumChargingRateKw(): number | null;
    /**
     * Minimum required charging rate in kilowatts.
     * @defaultValue <code>null</code>
     */
    set evMinimumChargingRateKw(value: number | null | undefined);
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    get futureOpeningBusinessesIncluded(): boolean | null;
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    set futureOpeningBusinessesIncluded(value: boolean | null | undefined);
    /**
     * The requested place type.
     * @defaultValue <code>null</code>
     */
    get includedType(): string | null;
    /**
     * The requested place type.
     * @defaultValue <code>null</code>
     */
    set includedType(value: string | null | undefined);
    /**
     * Used to restrict the search to places that are currently open.
     * @defaultValue <code>null</code>
     */
    get isOpenNow(): boolean | null;
    /**
     * Used to restrict the search to places that are currently open.
     * @defaultValue <code>null</code>
     */
    set isOpenNow(value: boolean | null | undefined);
    /**
     * Location bias for the search.
     * @defaultValue <code>null</code>
     */
    get locationBias(): google.maps.LatLngAltitude | google.maps.LatLngBounds | google.maps.Circle | string | null;
    /**
     * Location bias for the search.
     * @defaultValue <code>null</code>
     */
    set locationBias(value: google.maps.places.LocationBias | null | undefined);
    /**
     * Location restriction for the search. Normalizes to a <code>LatLngBounds</code>.
     * @defaultValue <code>null</code>
     */
    get locationRestriction(): google.maps.LatLngBounds | null;
    /**
     * Location restriction for the search. Normalizes to a <code>LatLngBounds</code>.
     * @defaultValue <code>null</code>
     */
    set locationRestriction(value: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null | undefined);
    /**
     * Maximum number of results to return.
     * @defaultValue <code>null</code>
     */
    get maxResultCount(): number | null;
    /**
     * Maximum number of results to return.
     * @defaultValue <code>null</code>
     */
    set maxResultCount(value: number | null | undefined);
    /**
     * Filter out results whose average user rating is strictly less than this limit.
     * @defaultValue <code>null</code>
     */
    get minRating(): number | null;
    /**
     * Filter out results whose average user rating is strictly less than this limit.
     * @defaultValue <code>null</code>
     */
    set minRating(value: number | null | undefined);
    /**
     * Used to restrict the search to places that are marked as certain price levels.
     * @defaultValue <code>null</code>
     */
    get priceLevels(): google.maps.places.PriceLevelString[] | null;
    /**
     * Used to restrict the search to places that are marked as certain price levels.
     * @defaultValue <code>null</code>
     */
    set priceLevels(value: google.maps.places.PriceLevelString[] | null | undefined);
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>null</code>
     */
    get rankPreference(): google.maps.places.SearchByTextRankPreferenceString | null;
    /**
     * How results will be ranked in the response.
     * @defaultValue <code>null</code>
     */
    set rankPreference(value: google.maps.places.SearchByTextRankPreferenceString | null | undefined);
    /**
     * The text query for textual search.
     * @defaultValue <code>null</code>
     */
    get textQuery(): string | null;
    /**
     * The text query for textual search.
     * @defaultValue <code>null</code>
     */
    set textQuery(value: string | null | undefined);
    /**
     * Used to set strict type filtering for &#39;includedType&#39;.
     * @defaultValue <code>null</code>
     */
    get useStrictTypeFiltering(): boolean | null;
    /**
     * Used to set strict type filtering for &#39;includedType&#39;.
     * @defaultValue <code>null</code>
     */
    set useStrictTypeFiltering(value: boolean | null | undefined);
    addEventListener<K extends keyof PlaceTextSearchRequestElementEventMap>(type: K, listener: (this: PlaceTextSearchRequestElement, ev: PlaceTextSearchRequestElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceTextSearchRequestElementEventMap extends HTMLElementEventMap {
  }
  /**
   * This event fires when a place is selected from a list of places. Access the selection with <code>event.place</code>.
   * Access by calling `const {PlaceSelectEvent} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceSelectEvent extends Event {
    /**
     * The selected place.
     */
    get place(): google.maps.places.Place;
  }
  /**
   * Displays the results of a place search in a list. Append a {@link google.maps.places.PlaceTextSearchRequestElement} or {@link google.maps.places.PlaceNearbySearchRequestElement} to specify the request to render results for. Append a {@link google.maps.places.PlaceContentConfigElement}, {@link google.maps.places.PlaceStandardContentElement}, or {@link google.maps.places.PlaceAllContentElement} to specify which content to render. <br><br> Example: <pre><code> &lt;gmp-place-search&gt;<br> &nbsp;&nbsp;&lt;gmp-place-text-search-request<br> &nbsp;&nbsp;&nbsp;&nbsp;text-query="<var>QUERY</var>"<br> &nbsp;&nbsp;&gt;&lt;/gmp-place-text-search-request&gt;<br> &nbsp;&nbsp;&lt;gmp-place-content-config&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;gmp-place-media lightbox-preferred&gt;&lt;/gmp-place-media&gt;<br> &nbsp;&nbsp;&lt;/gmp-place-content-config&gt;<br> &lt;/gmp-place-search&gt; </code></pre> <br> To use the Place Search Element, enable the <a href="https://console.cloud.google.com/marketplace/product/google/placewidgets.googleapis.com" >Places UI Kit API</a> for your project in the Google Cloud console.
   * Access by calling `const {PlaceSearchElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceSearchElement extends HTMLElement implements google.maps.places.PlaceSearchElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceSearchElementOptions);
    /**
     * The position of the attribution logo and legal disclosure button.
     * @defaultValue <code>PlaceSearchAttributionPosition.TOP</code>
     */
    get attributionPosition(): google.maps.places.PlaceSearchAttributionPositionString;
    /**
     * The position of the attribution logo and legal disclosure button.
     * @defaultValue <code>PlaceSearchAttributionPosition.TOP</code>
     */
    set attributionPosition(value: google.maps.places.PlaceSearchAttributionPositionString | null | undefined);
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * The orientation variant (vertical or horizontal) of the element.
     * @defaultValue <code>PlaceSearchOrientation.VERTICAL</code>
     */
    get orientation(): google.maps.places.PlaceSearchOrientationString;
    /**
     * The orientation variant (vertical or horizontal) of the element.
     * @defaultValue <code>PlaceSearchOrientation.VERTICAL</code>
     */
    set orientation(value: google.maps.places.PlaceSearchOrientationString | null | undefined);
    /**
     * Read only. Array of <code>Place</code> objects containing the IDs, locations, and viewports of the currently rendered places.
     */
    get places(): google.maps.places.Place[];
    /**
     * Whether or not the list items are selectable. If true, the list items will be buttons that dispatch the <code>gmp-select</code> event when clicked. Accessible keyboard navigation and selection is also supported.
     * @defaultValue <code>false</code>
     */
    get selectable(): boolean;
    /**
     * Whether or not the list items are selectable. If true, the list items will be buttons that dispatch the <code>gmp-select</code> event when clicked. Accessible keyboard navigation and selection is also supported.
     * @defaultValue <code>false</code>
     */
    set selectable(value: boolean | null | undefined);
    /**
     * If true, truncates certain lines of content to fit on one line instead of wrapping.
     * @defaultValue <code>false</code>
     */
    get truncationPreferred(): boolean;
    /**
     * If true, truncates certain lines of content to fit on one line instead of wrapping.
     * @defaultValue <code>false</code>
     */
    set truncationPreferred(value: boolean | null | undefined);
    addEventListener<K extends keyof PlaceSearchElementEventMap>(type: K, listener: (this: PlaceSearchElement, ev: PlaceSearchElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceSearchElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-load": Event;
    "gmp-select": google.maps.places.PlaceSelectEvent;
  }
  /**
   * Request interface for {@link google.maps.places.AutocompleteSuggestion.fetchAutocompleteSuggestions}.
   */
  export interface AutocompleteRequest {
    /**
     * Include place predictions for businesses that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded?: boolean;
    /**
     * Included primary <a href="https://developers.google.com/maps/documentation/javascript/place-types">Place type</a> (for example, &quot;restaurant&quot; or &quot;gas_station&quot;). <br/><br/> A Place is only returned if its primary type is included in this list. Up to 5 values can be specified. If no types are specified, all Place types are returned.
     */
    includedPrimaryTypes?: string[];
    /**
     * Only include results in the specified regions, specified as up to 15 CLDR two-character region codes. An empty set will not restrict the results. If both <code>locationRestriction</code> and <code>includedRegionCodes</code> are set, the results will be located in the area of intersection.
     */
    includedRegionCodes?: string[];
    /**
     * The text string on which to search.
     */
    input: string;
    /**
     * A zero-based Unicode character offset of <code>input</code> indicating the cursor position in <code>input</code>. The cursor position may influence what predictions are returned. If not specified, defaults to the length of <code>input</code>.
     */
    inputOffset?: number;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * The language in which to return results. Will default to the browser&#39;s language preference. The results may be in mixed languages if the language used in <code>input</code> is different from <code>language</code>, or if the returned Place does not have a translation from the local language to <code>language</code>.
     */
    language?: string;
    /**
     * Bias results to a specified location. <br/><br/> At most one of <code>locationBias</code> or <code>locationRestriction</code> should be set. If neither are set, the results will be biased by IP address, meaning the IP address will be mapped to an imprecise location and used as a biasing signal.
     */
    locationBias?: google.maps.places.LocationBias;
    /**
     * Restrict results to a specified location. <br/><br/> At most one of <code>locationBias</code> or <code>locationRestriction</code> should be set. If neither are set, the results will be biased by IP address, meaning the IP address will be mapped to an imprecise location and used as a biasing signal.
     */
    locationRestriction?: google.maps.places.LocationRestriction;
    /**
     * The origin point from which to calculate geodesic distance to the destination (returned as {@link google.maps.places.PlacePrediction.distanceMeters}). If this value is omitted, geodesic distance will not be returned.
     */
    origin?: google.maps.LatLng | google.maps.LatLngLiteral;
    /**
     * Include pure service area businesses if the field is set to true. A pure service area business is a business that visits or delivers to customers directly but does not serve customers at their business address. For example, businesses like cleaning services or plumbers may not have a physical address or location on Google Maps.
     */
    pureServiceAreaBusinessesIncluded?: boolean;
    /**
     * The region code, specified as a CLDR two-character region code. This affects address formatting, result ranking, and may influence what results are returned. This does not restrict results to the specified region.
     */
    region?: string;
    /**
     * A token which identifies an Autocomplete session for billing purposes. Generate a new session token via {@link google.maps.places.AutocompleteSessionToken}. <br/><br/> The session begins when the user starts typing a query, and concludes when they select a place and call {@link google.maps.places.Place.fetchFields}. Each session can have multiple queries, followed by one <code>fetchFields</code> call. The credentials used for each request within a session must belong to the same Google Cloud Console project. Once a session has concluded, the token is no longer valid; your app must generate a fresh token for each session. If the <code>sessionToken</code> parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided (each request is billed separately). <br/><br/> When a session token is provided in the request to {@link google.maps.places.AutocompleteSuggestion.fetchAutocompleteSuggestions}, the same token will automatically be included in the first call to fetchFields on a {@link google.maps.places.Place} returned by calling {@link google.maps.places.PlacePrediction.toPlace} on one of the resulting {@link google.maps.places.AutocompleteSuggestion}s. <br/><br/> We recommend the following guidelines: <ul><li>Use session tokens for all Place Autocomplete calls.</li> <li>Generate a fresh token for each session.</li> <li>Be sure to pass a unique session token for each new session. Using the same token for more than one session will result in each request being billed individually.</li> </ul>
     */
    sessionToken?: google.maps.places.AutocompleteSessionToken;
  }
  /**
   * An Autocomplete suggestion result.
   * Access by calling `const {AutocompleteSuggestion} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AutocompleteSuggestion {
    /**
     * Contains the human-readable name for the returned result. For establishment results, this is usually the business name and address. <br/><br/> If a {@link google.maps.places.AutocompleteRequest.sessionToken} was provided in the AutocompleteRequest used to fetch this AutocompleteSuggestion, the same token will automatically be included when calling {@link google.maps.places.Place.fetchFields} for the first time on the {@link google.maps.places.Place} returned by a call to {@link google.maps.places.PlacePrediction.toPlace}.
     */
    get placePrediction(): google.maps.places.PlacePrediction | null;
    /**
     * Fetches a list of AutocompleteSuggestions. <br/><br/> If a {@link google.maps.places.AutocompleteRequest.sessionToken} is provided in the request, then that session token will automatically be included when calling {@link google.maps.places.Place.fetchFields} for the first time, on each {@link google.maps.places.Place} returned by {@link google.maps.places.PlacePrediction.toPlace} on the resulting {@link google.maps.places.PlacePrediction}s.
     */
    static fetchAutocompleteSuggestions(autocompleteRequest: google.maps.places.AutocompleteRequest): Promise<{suggestions: google.maps.places.AutocompleteSuggestion[]}>;
  }
  /**
   * Prediction results for a Place Autocomplete prediction.
   * Access by calling `const {PlacePrediction} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlacePrediction {
    /**
     * The length of the geodesic in meters from <code>origin</code> if <code>origin</code> is specified.
     */
    get distanceMeters(): number | null;
    /**
     * Represents the name of the Place.
     */
    get mainText(): google.maps.places.FormattableText | null;
    /**
     * The unique identifier of the suggested Place. This identifier can be used in other APIs that accept Place IDs.
     */
    get placeId(): string;
    /**
     * Represents additional disambiguating features (such as a city or region) to further identify the Place.
     */
    get secondaryText(): google.maps.places.FormattableText | null;
    /**
     * Contains the human-readable name for the returned result. For establishment results, this is usually the business name and address. <br/><br/> <code>text</code> is recommended for developers who wish to show a single UI element. Developers who wish to show two separate, but related, UI elements may want to use {@link google.maps.places.PlacePrediction.mainText} and {@link google.maps.places.PlacePrediction.secondaryText} instead.
     */
    get text(): google.maps.places.FormattableText;
    /**
     * List of types that apply to this Place from Table A or Table B in <a href="https://developers.google.com/maps/documentation/places/web-service/place-types">https://developers.google.com/maps/documentation/places/web-service/place-types</a>.
     */
    get types(): string[];
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * Sends an Address Validation request associated with this autocomplete session (internally populating the request with the autocomplete session token). No place information from the PlacePrediction is included automatically - this is a convenience method to help with autocomplete session management.
     */
    fetchAddressValidation(request: google.maps.addressValidation.AddressValidationRequest): Promise<google.maps.addressValidation.AddressValidation>;
    /**
     * Returns a {@link google.maps.places.Place} representation of this PlacePrediction. A subsequent call to {@link google.maps.places.Place.fetchFields} is required to get full Place details. <br/><br/> If a {@link google.maps.places.AutocompleteRequest.sessionToken} was provided in the {@link google.maps.places.AutocompleteRequest} used to fetch this PlacePrediction, the same token will automatically be included when calling fetchFields. <br/><br/> Alternatively, when using {@link google.maps.places.PlaceAutocompleteElement} the first call to {@link google.maps.places.Place.fetchFields} on a {@link google.maps.places.Place} returned by {@link google.maps.places.PlacePrediction.toPlace} will automatically include the session token.
     */
    toPlace(): google.maps.places.Place;
  }
  /**
   * Identifies a substring within a given text.
   * Access by calling `const {StringRange} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StringRange {
    /**
     * Zero-based offset of the last Unicode character of the substring (exclusive).
     */
    get endOffset(): number;
    /**
     * Zero-based offset of the first Unicode character of the substring (inclusive).
     */
    get startOffset(): number;
  }
  /**
   * Text representing a Place prediction. The text may be used as is or formatted.
   * Access by calling `const {FormattableText} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FormattableText {
    /**
     * A list of string ranges identifying where the input request matched in {@link google.maps.places.FormattableText.text}. The ranges can be used to format specific parts of <code>text</code>. The substrings may not be exact matches of {@link google.maps.places.AutocompleteRequest.input} if the matching was determined by criteria other than string matching (for example, spell corrections or transliterations). These values are Unicode character offsets of {@link google.maps.places.FormattableText.text}. The ranges are guaranteed to be ordered in increasing offset values.
     */
    get matches(): google.maps.places.StringRange[];
    /**
     * Text that may be used as is or formatted with {@link google.maps.places.FormattableText.matches}.
     */
    get text(): string;
    /**
     * Returns {@link google.maps.places.FormattableText.text}.
     */
    toString(): string;
  }
  /**
   * BasicPlaceAutocompleteElement is an <code>HTMLElement</code> subclass which provides a UI component for the Places Autocomplete API.
   * Access by calling `const {BasicPlaceAutocompleteElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class BasicPlaceAutocompleteElement extends HTMLElement implements google.maps.places.BasicPlaceAutocompleteElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options: google.maps.places.BasicPlaceAutocompleteElementOptions);
    /**
     * The description to be used for the input element. This will be detected by screen readers when the input element is focused. See <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby">https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby</a> for details.
     */
    description: string | null;
    /**
     * Whether the input element is disabled. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled</a> for details.
     */
    get disabled(): boolean;
    /**
     * Whether the input element is disabled. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled</a> for details.
     */
    set disabled(value: boolean | null | undefined);
    /**
     * Whether to include places that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded: boolean | null;
    /**
     * Included primary <a href="https://developers.google.com/maps/documentation/places/javascript/place-types">Place type</a> (for example, &quot;restaurant&quot; or &quot;gas_station&quot;). <br/><br/> A Place is only returned if its primary type is included in this list. Up to 5 values can be specified. If no types are specified, all Place types are returned.
     */
    includedPrimaryTypes: string[] | null;
    /**
     * Only include results in the specified regions, specified as up to 15 CLDR two-character region codes. An empty set will not restrict the results. If both <code>locationRestriction</code> and <code>includedRegionCodes</code> are set, the results will be located in the area of intersection.
     */
    includedRegionCodes: string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * A soft boundary or hint to use when searching for places.
     */
    locationBias: google.maps.places.LocationBias | null;
    /**
     * Bounds to constrain search results.
     */
    locationRestriction: google.maps.places.LocationRestriction | null;
    /**
     * The maximum number of characters that the user can enter. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#maxlength">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#maxlength</a> for details.
     */
    maxlength: number | null;
    /**
     * The name to be used for the input element. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name</a> for details. Follows the same behavior as the name attribute for inputs. Note that this is the name that will be used when a form is submitted. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form</a> for details.
     */
    name: string | null;
    /**
     * Whether to hide the clear button.
     */
    get noClearButton(): boolean;
    /**
     * Whether to hide the clear button.
     */
    set noClearButton(value: boolean | null | undefined);
    /**
     * Whether to hide the input icon.
     */
    get noInputIcon(): boolean;
    /**
     * Whether to hide the input icon.
     */
    set noInputIcon(value: boolean | null | undefined);
    /**
     * The origin from which to calculate distance. If not specified, distance is not calculated. The altitude, if given, is not used in the calculation.
     */
    get origin(): google.maps.LatLngAltitude | null;
    /**
     * The origin from which to calculate distance. If not specified, distance is not calculated. The altitude, if given, is not used in the calculation.
     */
    set origin(value: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    /**
     * The placeholder text to be used for the input element. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#placeholder">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#placeholder</a> for details.
     */
    placeholder: string | null;
    /**
     * Whether to include places that are pure service area businesses.
     */
    pureServiceAreaBusinessesIncluded: boolean | null;
    /**
     * Whether the input element is read-only. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly</a> for details.
     */
    get readonly(): boolean;
    /**
     * Whether the input element is read-only. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly</a> for details.
     */
    set readonly(value: boolean | null | undefined);
    /**
     * A language identifier for the language in which the results should be returned, if possible. Results in the selected language may be given a higher ranking, but suggestions are not restricted to this language. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    requestedLanguage: string | null;
    /**
     * A region code which is used for result formatting and for result filtering. It does not restrict the suggestions to this country. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    requestedRegion: string | null;
    /**
     * The unit system used to display distances. If not specified, the unit system is determined by requestedRegion.
     */
    get unitSystem(): google.maps.UnitSystem | null;
    /**
     * The unit system used to display distances. If not specified, the unit system is determined by requestedRegion.
     */
    set unitSystem(value: google.maps.UnitSystem | null | undefined);
    addEventListener<K extends keyof BasicPlaceAutocompleteElementEventMap>(type: K, listener: (this: BasicPlaceAutocompleteElement, ev: BasicPlaceAutocompleteElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface BasicPlaceAutocompleteElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-select": google.maps.places.PlaceSelectEvent;
  }
  /**
   * Options for constructing a BasicPlaceAutocompleteElement.
   */
  export interface BasicPlaceAutocompleteElementOptions {
    /**
     * The description to be used for the input element. This will be detected by screen readers when the input element is focused.
     */
    description?: string | null;

    disabled?: boolean | null;

    futureOpeningBusinessesIncluded?: boolean | null;

    includedPrimaryTypes?: string[] | null;

    includedRegionCodes?: string[] | null;

    internalUsageAttributionIds?: Iterable<string> | null;

    locationBias?: google.maps.places.LocationBias | null;

    locationRestriction?: google.maps.places.LocationRestriction | null;

    maxlength?: number | null;

    name?: string | null;

    noClearButton?: boolean | null;

    noInputIcon?: boolean | null;

    origin?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;

    placeholder?: string | null;

    pureServiceAreaBusinessesIncluded?: boolean | null;

    readonly?: boolean | null;

    requestedLanguage?: string | null;

    requestedRegion?: string | null;

    unitSystem?: google.maps.UnitSystem | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * The list of layouts that the Place Contextual Element supports for the list view.
   *
   * Access by calling `const {PlaceContextualListLayout} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PlaceContextualListLayout {
    /**
     * Compact list layout: list items are rendered as links across a single line, with overflows in a dropdown list.
     */
    COMPACT = 'COMPACT',
    /**
     * Vertical list layout: list items are rendered as cards in a vertical list.
     */
    VERTICAL = 'VERTICAL',
  }
  export type PlaceContextualListLayoutString = `${google.maps.places.PlaceContextualListLayout}`;
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Options for PlaceContextualListConfigElement.
   */
  export interface PlaceContextualListConfigElementOptions {
    /**
     * The layout.
     * @defaultValue {@link google.maps.places.PlaceContextualListLayout.VERTICAL}
     */
    layout?: google.maps.places.PlaceContextualListLayoutString | null;
    /**
     * True if the map should be hidden.
     * @defaultValue <code>false</code>
     */
    mapHidden?: boolean | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * An HTML element that configures options for the Place Contextual Element&#39;s list view.
   * Access by calling `const {PlaceContextualListConfigElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceContextualListConfigElement extends HTMLElement implements google.maps.places.PlaceContextualListConfigElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceContextualListConfigElementOptions);
    /**
     * The layout.
     */
    get layout(): google.maps.places.PlaceContextualListLayoutString;
    /**
     * The layout.
     */
    set layout(value: google.maps.places.PlaceContextualListLayoutString | null | undefined);
    /**
     * Whether the map is hidden.
     */
    get mapHidden(): boolean;
    /**
     * Whether the map is hidden.
     */
    set mapHidden(value: boolean | null | undefined);
    addEventListener<K extends keyof PlaceContextualListConfigElementEventMap>(type: K, listener: (this: PlaceContextualListConfigElement, ev: PlaceContextualListConfigElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceContextualListConfigElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Options for <code>PlaceContextualElement</code>.
   */
  export interface PlaceContextualElementOptions {
    /**
     * The context token provided by the Grounding with Google Maps response.
     */
    contextToken?: string | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * A widget that uses the context token to display a contextual view of the Grounding with Google Maps response.
   * Access by calling `const {PlaceContextualElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceContextualElement extends HTMLElement implements google.maps.places.PlaceContextualElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.places.PlaceContextualElementOptions);
    /**
     * The context token.
     */
    get contextToken(): string | undefined;
    /**
     * The context token.
     */
    set contextToken(value: string | null | undefined);
    addEventListener<K extends keyof PlaceContextualElementEventMap>(type: K, listener: (this: PlaceContextualElement, ev: PlaceContextualElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceContextualElementEventMap extends HTMLElementEventMap {
  }
  /**
   * This event is created after the user selects a prediction item with the PlaceAutocompleteElement. Access the selection with <code>event.placePrediction</code>. <br/><br/> Convert placePrediction to a {@link google.maps.places.Place} by calling {@link google.maps.places.PlacePrediction.toPlace}.
   * Access by calling `const {PlacePredictionSelectEvent} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlacePredictionSelectEvent extends Event {
    /**
     * Convert this to a {@link google.maps.places.Place} by calling {@link google.maps.places.PlacePrediction.toPlace}.
     */
    get placePrediction(): google.maps.places.PlacePrediction;
  }
  /**
   * PlaceAutocompleteElement is an <code>HTMLElement</code> subclass which provides a UI component for the Places Autocomplete API. <br/><br/> PlaceAutocompleteElement automatically uses {@link google.maps.places.AutocompleteSessionToken}s internally to group the query and selection phases of a user&#39;s autocomplete search. <br/><br/> The first call to {@link google.maps.places.Place.fetchFields} on a {@link google.maps.places.Place} returned by {@link google.maps.places.PlacePrediction.toPlace} will automatically include the session token used to fetch the <code>PlacePrediction</code>. <br/><br/> See <a href="https://developers.google.com/maps/documentation/places/web-service/place-session-tokens">https://developers.google.com/maps/documentation/places/web-service/place-session-tokens</a> for more details on how sessions work.
   * Access by calling `const {PlaceAutocompleteElement} = await google.maps.importLibrary("places");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceAutocompleteElement extends HTMLElement implements google.maps.places.PlaceAutocompleteElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options: google.maps.places.PlaceAutocompleteElementOptions);
    /**
     * The description to be used for the input element. This will be detected by screen readers when the input element is focused. See <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby">https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby</a> for details.
     */
    description: string | null;
    /**
     * Whether the input element is disabled. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled</a> for details.
     */
    get disabled(): boolean;
    /**
     * Whether the input element is disabled. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#disabled</a> for details.
     */
    set disabled(value: boolean | null | undefined);
    /**
     * Whether to include places that are not yet open but are expected to open in the future.
     */
    futureOpeningBusinessesIncluded: boolean | null;
    /**
     * Included primary <a href="https://developers.google.com/maps/documentation/places/javascript/place-types">Place type</a> (for example, &quot;restaurant&quot; or &quot;gas_station&quot;). <br/><br/> A Place is only returned if its primary type is included in this list. Up to 5 values can be specified. If no types are specified, all Place types are returned.
     */
    includedPrimaryTypes: string[] | null;
    /**
     * Only include results in the specified regions, specified as up to 15 CLDR two-character region codes. An empty set will not restrict the results. If both <code>locationRestriction</code> and <code>includedRegionCodes</code> are set, the results will be located in the area of intersection.
     */
    includedRegionCodes: string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * A soft boundary or hint to use when searching for places.
     */
    locationBias: google.maps.places.LocationBias | null;
    /**
     * Bounds to constrain search results.
     */
    locationRestriction: google.maps.places.LocationRestriction | null;
    /**
     * The maximum number of characters that the user can enter. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#maxlength">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#maxlength</a> for details.
     */
    maxlength: number | null;
    /**
     * The name to be used for the input element. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name</a> for details. Follows the same behavior as the name attribute for inputs. Note that this is the name that will be used when a form is submitted. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form</a> for details.
     */
    name: string | null;
    /**
     * Whether to hide the clear button.
     */
    get noClearButton(): boolean;
    /**
     * Whether to hide the clear button.
     */
    set noClearButton(value: boolean | null | undefined);
    /**
     * Whether to hide the input icon.
     */
    get noInputIcon(): boolean;
    /**
     * Whether to hide the input icon.
     */
    set noInputIcon(value: boolean | null | undefined);
    /**
     * The origin from which to calculate distance. If not specified, distance is not calculated. The altitude, if given, is not used in the calculation.
     */
    get origin(): google.maps.LatLngAltitude | null;
    /**
     * The origin from which to calculate distance. If not specified, distance is not calculated. The altitude, if given, is not used in the calculation.
     */
    set origin(value: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    /**
     * The placeholder text to be used for the input element. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#placeholder">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#placeholder</a> for details.
     */
    placeholder: string | null;
    /**
     * Whether to include places that are pure service area businesses.
     */
    pureServiceAreaBusinessesIncluded: boolean | null;
    /**
     * Whether the input element is read-only. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly</a> for details.
     */
    get readonly(): boolean;
    /**
     * Whether the input element is read-only. See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly">https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#readonly</a> for details.
     */
    set readonly(value: boolean | null | undefined);
    /**
     * A language identifier for the language in which the results should be returned, if possible. Results in the selected language may be given a higher ranking, but suggestions are not restricted to this language. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     */
    requestedLanguage: string | null;
    /**
     * A region code which is used for result formatting and for result filtering. It does not restrict the suggestions to this country. The region code accepts a <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">ccTLD (&quot;top-level domain&quot;)</a> two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom&#39;s ccTLD is &quot;uk&quot; (<code>.co.uk</code>) while its ISO 3166-1 code is &quot;gb&quot; (technically for the entity of &quot;The United Kingdom of Great Britain and Northern Ireland&quot;).
     */
    requestedRegion: string | null;
    /**
     * The unit system used to display distances. If not specified, the unit system is determined by requestedRegion.
     */
    get unitSystem(): google.maps.UnitSystem | null;
    /**
     * The unit system used to display distances. If not specified, the unit system is determined by requestedRegion.
     */
    set unitSystem(value: google.maps.UnitSystem | null | undefined);
    /**
     * The value of the input element.
     */
    get value(): string;
    /**
     * The value of the input element.
     */
    set value(value: string | null);
    addEventListener<K extends keyof PlaceAutocompleteElementEventMap>(type: K, listener: (this: PlaceAutocompleteElement, ev: PlaceAutocompleteElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PlaceAutocompleteElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-select": google.maps.places.PlacePredictionSelectEvent;
  }
  /**
   * Options for constructing a PlaceAutocompleteElement. For the description of each property, refer to the property of the same name in the PlaceAutocompleteElement class.
   */
  export interface PlaceAutocompleteElementOptions {
    /**
     * The description to be used for the input element. This will be detected by screen readers when the input element is focused.
     */
    description?: string | null;

    disabled?: boolean | null;

    futureOpeningBusinessesIncluded?: boolean | null;

    includedPrimaryTypes?: string[] | null;

    includedRegionCodes?: string[] | null;

    internalUsageAttributionIds?: Iterable<string> | null;

    locationBias?: google.maps.places.LocationBias | null;

    locationRestriction?: google.maps.places.LocationRestriction | null;

    maxlength?: number | null;

    name?: string | null;

    noClearButton?: boolean | null;

    noInputIcon?: boolean | null;

    origin?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;

    placeholder?: string | null;

    pureServiceAreaBusinessesIncluded?: boolean | null;

    readonly?: boolean | null;

    requestedLanguage?: string | null;

    requestedRegion?: string | null;

    unitSystem?: google.maps.UnitSystem | null;
    /**
     * The value of the input element.
     */
    value?: string | null;
  }
}

declare namespace google.maps.addressValidation {
  /**
   * Represents a single component of an address (ex. street name, city).
   * Access by calling `const {AddressComponent} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AddressComponent {
    /**
     * The component name text. For example, &quot;5th Avenue&quot; for a street name or &quot;1253&quot; for a street number,
     */
    get componentName(): string | null;
    /**
     * The BCP-47 language code. This will not be present if the component name is not associated with a language, such as a street number.
     */
    get componentNameLanguageCode(): string | null;
    /**
     * The type of the address component. See <a href="https://developers.google.com/places/web-service/supported_types#table2">Table 2: Additional types returned by the Places service</a> for a list of possible types.
     */
    get componentType(): string | null;
    /**
     * Indicates the level of certainty that the component is correct.
     */
    get confirmationLevel(): google.maps.addressValidation.ConfirmationLevelString | null;
    /**
     * If true, this component was not part of the input, but was inferred for the address location. Including this component is recommended for a complete address.
     */
    get inferred(): boolean;
    /**
     * Indicates the name of the component was replaced with a completely different one. For example, replacing a wrong postal code being with one that is correct for the address. This is not a cosmetic change; the input component has been changed to a different one.
     */
    get replaced(): boolean;
    /**
     * Indicates a correction to a misspelling in the component name. The API does not always flag changes from one spelling variant to another, such as &quot;centre&quot; to &quot;center&quot;.
     */
    get spellCorrected(): boolean;
    /**
     * If true, this component is not expected to be present in a postal address for the given region. It has been retained only because it was part of the input.
     */
    get unexpected(): boolean;
  }
  /**
   * The different possible values indicating the level of certainty that the component is correct.
   *
   * Access by calling `const {ConfirmationLevel} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ConfirmationLevel {

    CONFIRMED = 'CONFIRMED',

    UNCONFIRMED_AND_SUSPICIOUS = 'UNCONFIRMED_AND_SUSPICIOUS',

    UNCONFIRMED_BUT_PLAUSIBLE = 'UNCONFIRMED_BUT_PLAUSIBLE',
  }
  export type ConfirmationLevelString = `${google.maps.addressValidation.ConfirmationLevel}`;
  /**
   * Details of the post-processed address. Post-processing includes correcting misspelled parts of the address, replacing incorrect parts, and inferring missing parts.
   * Access by calling `const {Address} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Address {
    /**
     * The individual address components of the formatted and corrected address, along with validation information. This provides information on the validation status of the individual components.
     */
    get components(): google.maps.addressValidation.AddressComponent[];
    /**
     * The post-processed address, formatted as a single-line address following the address-formatting rules of the region where the address is located.
     */
    get formattedAddress(): string | null;
    /**
     * The types of components that were expected to be present in a correctly formatted mailing address but were not found in the input AND could not be inferred. Components of this type are not present in <code>formatted_address</code>, <code>postal_address</code>, or <code>address_components</code>. An example might be <code>[&#39;street_number&#39;, &#39;route&#39;]</code> for an input like &quot;Boulder, Colorado, 80301, USA&quot;. The list of possible types can be found <a href="https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types">here</a>.
     */
    get missingComponentTypes(): string[];
    /**
     * The post-processed address represented as a postal address.
     */
    get postalAddress(): google.maps.places.PostalAddress | null;
    /**
     * The types of the components that are present in the <code>address_components</code> but could not be confirmed to be correct. This field is provided for the sake of convenience: its contents are equivalent to iterating through the <code>address_components</code> to find the types of all the components where the {@link google.maps.addressValidation.AddressComponent.confirmationLevel} is not {@link google.maps.addressValidation.ConfirmationLevel.CONFIRMED} or the {@link google.maps.addressValidation.AddressComponent.inferred} flag is not set to <code>true</code>. The list of possible types can be found <a href="https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types">here</a>.
     */
    get unconfirmedComponentTypes(): string[];
    /**
     * Any tokens in the input that could not be resolved. This might be an input that was not recognized as a valid part of an address (for example in an input like &quot;123235253253 Main St, San Francisco, CA, 94105&quot;, the unresolved tokens may look like <code>[&quot;123235253253&quot;]</code> since that does not look like a valid street number.
     */
    get unresolvedTokens(): string[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * The metadata for the address. AddressMetadata is not guaranteed to be fully populated for every address sent to the Address Validation API.
   * Access by calling `const {AddressMetadata} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AddressMetadata {

    get business(): boolean;

    get poBox(): boolean;

    get residential(): boolean;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Request interface for {@link google.maps.addressValidation.AddressValidation.fetchAddressValidation}.
   */
  export interface AddressValidationRequest {
    /**
     * The address being validated. Unformatted addresses should be submitted via {@link google.maps.places.PostalAddress.addressLines}.
     */
    address: google.maps.places.PostalAddressLiteral;
    /**
     * If using a PlaceAutocompleteElement, include it here to link the AddressValidation API calls with the autocomplete session token.
     */
    placeAutocompleteElement?: google.maps.places.PlaceAutocompleteElement;
    /**
     * This field must not be set for the first address validation request. If more requests are necessary to fully validate a single address (for example if the changes the user makes after the initial validation need to be re-validated), then each followup request must populate this field with the {@link google.maps.addressValidation.AddressValidation.responseId} from the very first response in the validation sequence.
     */
    previousResponseId?: string;
    /**
     * A token which identifies an Autocomplete session for billing purposes.
     */
    sessionToken?: google.maps.places.AutocompleteSessionToken;
    /**
     * Enables USPS CASS compatible mode. This affects <em>only</em> the {@link google.maps.addressValidation.AddressValidation.uspsData} field of {@link google.maps.addressValidation.AddressValidation}. Note: for USPS CASS enabled requests for addresses in Puerto Rico, a {@link google.maps.places.PostalAddress.regionCode} of the <code>address</code> must be provided as &quot;PR&quot;, or an {@link google.maps.places.PostalAddress.administrativeArea} of the <code>address</code> must be provided as &quot;Puerto Rico&quot; (case-insensitive) or &quot;PR&quot;.
     */
    uspsCASSEnabled?: boolean;
  }
  /**
   * Contains information about the place the input was geocoded to.
   * Access by calling `const {Geocode} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Geocode {
    /**
     * The bounds of the geocoded place.
     */
    get bounds(): google.maps.LatLngBounds | null;
    /**
     * The size of the geocoded place, in meters. This is another measure of the coarseness of the geocoded location, but in physical size rather than in semantic meaning.
     */
    get featureSizeMeters(): number | null;
    /**
     * The geocoded location of the input.
     */
    get location(): google.maps.LatLngAltitude | null;
    /**
     * The Place ID of the geocoded place. Using Place is preferred over using addresses, latitude/longitude coordinates, or plus codes. Using coordinates for routing or calculating driving directions will always result in the point being snapped to the road nearest to those coordinates. This may not be a road that will quickly or safely lead to the destination and may not be near an access point to the property. Additionally, when a location is reverse geocoded, there is no guarantee that the returned address will match the original.
     */
    get placeId(): string | null;
    /**
     * The type(s) of place that the input geocoded to. For example, <code>[&#39;locality&#39;, &#39;political&#39;]</code>. The full list of types can be found in the <a href="https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types">Geocoding API documentation</a>.
     */
    get placeTypes(): string[];
    /**
     * The plus code corresponding to the <code>location</code>.
     */
    get plusCode(): google.maps.places.PlusCode | null;
    /**
     * Returns a Place representation of this Geocode. To get full place details, a call to place.fetchFields() should be made.
     */
    fetchPlace(): void;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * USPS representation of a US address.
   * Access by calling `const {USPSAddress} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class USPSAddress {
    /**
     * The city name.
     */
    get city(): string | null;
    /**
     * The address line containing the city, state, and zip code.
     */
    get cityStateZipAddressLine(): string | null;
    /**
     * The name of the firm.
     */
    get firm(): string | null;
    /**
     * The first line of the address.
     */
    get firstAddressLine(): string | null;
    /**
     * The second line of the address.
     */
    get secondAddressLine(): string | null;
    /**
     * The 2-letter state code.
     */
    get state(): string | null;
    /**
     * The Puerto Rican urbanization name.
     */
    get urbanization(): string | null;
    /**
     * The Postal code, e.g. &quot;10009&quot;.
     */
    get zipCode(): string | null;
    /**
     * The 4-digit postal code extension, e.g. &quot;5023&quot;.
     */
    get zipCodeExtension(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * The USPS data for the address. USPSData is not guaranteed to be fully populated for every US or PR address sent to the Address Validation API. It&#39;s recommended to integrate the backup address fields in the response if you utilize uspsData as the primary part of the response.
   * Access by calling `const {USPSData} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class USPSData {
    /**
     * Abbreviated city.
     */
    get abbreviatedCity(): string | null;
    /**
     * Type of the address record that matches the input address.
     */
    get addressRecordType(): string | null;
    /**
     * The carrier route code. A four character code consisting of a one letter prefix and a three digit route designator.
     */
    get carrierRoute(): string | null;
    /**
     * Carrier route rate sort indicator.
     */
    get carrierRouteIndicator(): string | null;
    /**
     * Indicator that the request has been CASS processed.
     */
    get cassProcessed(): boolean;
    /**
     * County name.
     */
    get county(): string | null;
    /**
     * The delivery point check digit. This number is added to the end of the delivery_point_barcode for mechanically scanned mail. Adding all the digits of the delivery_point_barcode, delivery_point_check_digit, postal code, and ZIP+4 together should yield a number divisible by 10.
     */
    get deliveryPointCheckDigit(): string | null;
    /**
     * The 2-digit delivery point code.
     */
    get deliveryPointCode(): string | null;
    /**
     * Indicates if the address is a CMRA (Commercial Mail Receiving Agency)--a private business receiving mail for clients. Returns a single character.
     */
    get dpvCMRA(): string | null;
    /**
     * The possible values for DPV confirmation. Returns a single character or returns no value.
     */
    get dpvConfirmation(): string | null;
    /**
     * Flag indicates addresses where USPS cannot knock on a door to deliver mail. Returns a single character.
     */
    get dpvDoorNotAccessible(): string | null;
    /**
     * Flag indicates mail is delivered to a single receptable at a site. Returns a single character.
     */
    get dpvDrop(): string | null;
    /**
     * Indicates that more than one DPV return code is valid for the address. Returns a single character.
     */
    get dpvEnhancedDeliveryCode(): string | null;
    /**
     * The footnotes from delivery point validation. Multiple footnotes may be strung together in the same string.
     */
    get dpvFootnote(): string | null;
    /**
     * Flag indicates mail delivery is not performed every day of the week. Returns a single character.
     */
    get dpvNonDeliveryDays(): string | null;
    /**
     * Integer identifying non-delivery days. It can be interrogated using bit flags: 0x40 – Sunday is a non-delivery day 0x20 – Monday is a non-delivery day 0x10 – Tuesday is a non-delivery day 0x08 – Wednesday is a non-delivery day 0x04 – Thursday is a non-delivery day 0x02 – Friday is a non-delivery day 0x01 – Saturday is a non-delivery day
     */
    get dpvNonDeliveryDaysValues(): number | null;
    /**
     * Flag indicates door is accessible, but package will not be left due to security concerns. Returns a single character.
     */
    get dpvNoSecureLocation(): string | null;
    /**
     * Indicates whether the address is a no stat address or an active address. No stat addresses are ones which are not continuously occupied or addresses that the USPS does not service. Returns a single character.
     */
    get dpvNoStat(): string | null;
    /**
     * Indicates the NoStat type. Returns a reason code as int.
     */
    get dpvNoStatReasonCode(): number | null;
    /**
     * Indicates the address was matched to PBSA record. Returns a single character.
     */
    get dpvPBSA(): string | null;
    /**
     * Indicates that mail is not delivered to the street address. Returns a single character.
     */
    get dpvThrowback(): string | null;
    /**
     * Indicates whether the address is vacant. Returns a single character.
     */
    get dpvVacant(): string | null;
    /**
     * eLOT Ascending/Descending Flag (A/D).
     */
    get elotFlag(): string | null;
    /**
     * Enhanced Line of Travel (eLOT) number.
     */
    get elotNumber(): string | null;
    /**
     * Error message for USPS data retrieval. This is populated when USPS processing is suspended because of the detection of artificially created addresses.
     */
    get errorMessage(): string | null;
    /**
     * FIPS county code.
     */
    get fipsCountyCode(): string | null;
    /**
     * Indicator that a default address was found, but more specific addresses exist.
     */
    get hasDefaultAddress(): boolean;
    /**
     * The delivery address is matchable, but the EWS file indicates that an exact match will be available soon.
     */
    get hasNoEWSMatch(): boolean;
    /**
     * LACSLink indicator.
     */
    get lacsLinkIndicator(): string | null;
    /**
     * LACSLink return code.
     */
    get lacsLinkReturnCode(): string | null;
    /**
     * PMB (Private Mail Box) unit designator.
     */
    get pmbDesignator(): string | null;
    /**
     * PMB (Private Mail Box) number.
     */
    get pmbNumber(): string | null;
    /**
     * PO Box only postal code.
     */
    get poBoxOnlyPostalCode(): boolean;
    /**
     * Main post office city.
     */
    get postOfficeCity(): string | null;
    /**
     * Main post office state.
     */
    get postOfficeState(): string | null;
    /**
     * USPS standardized address.
     */
    get standardizedAddress(): google.maps.addressValidation.USPSAddress | null;
    /**
     * Footnotes from matching a street or highrise record to suite information. If business name match is found, the secondary number is returned.
     */
    get suiteLinkFootnote(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Represents the post-processed address for the supplied address.
   * Access by calling `const {Verdict} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Verdict {
    /**
     * The address is considered complete if there are no unresolved tokens, no unexpected or missing address components. If unset, indicates that the value is <code>false</code>. See {@link google.maps.addressValidation.Address.missingComponentTypes}, {@link google.maps.addressValidation.Address.unresolvedTokens} or {@link google.maps.addressValidation.AddressComponent.unexpected} fields for more details.
     */
    get addressComplete(): boolean;
    /**
     * Information about the granularity of the {@link google.maps.addressValidation.Geocode}. This can be understood as the semantic meaning of how coarse or fine the geocoded location is.
     */
    get geocodeGranularity(): google.maps.addressValidation.GranularityString | null;
    /**
     * At least one address component was inferred (i.e. added) that wasn&#39;t in the input, see {@link google.maps.addressValidation.AddressComponent} for details.
     */
    get hasInferredComponents(): boolean;
    /**
     * At least one address component was replaced - see {@link google.maps.addressValidation.AddressComponent} for details.
     */
    get hasReplacedComponents(): boolean | null;
    /**
     * At least one address component cannot be categorized or validated, see {@link google.maps.addressValidation.AddressComponent} for details.
     */
    get hasUnconfirmedComponents(): boolean;
    /**
     * The granularity of the <strong>input</strong> address. This is the result of parsing the input address and does not give any validation signals. For validation signals, refer to <code>validationGranularity</code>.
     */
    get inputGranularity(): google.maps.addressValidation.GranularityString | null;
    /**
     * Available only in the v=beta channel: https://goo.gle/3oAthT3.
     * A possible next action to take based on other fields in the API response. See {@link google.maps.addressValidation.PossibleNextAction} for details.
     */
    get possibleNextAction(): google.maps.addressValidation.PossibleNextActionString | null;
    /**
     * The granularity level that the API can fully <strong>validate</strong> the address to. For example, a <code>validationGranularity</code> of <code>PREMISE</code> indicates all address components at the level of <code>PREMISE</code> and broader can be validated.
     */
    get validationGranularity(): google.maps.addressValidation.GranularityString | null;
  }
  /**
   * The various granularities that an address or a geocode can have. When used to indicate granularity for an <em>address</em>, these values indicate with how fine a granularity the address identifies a mailing destination. For example, an address such as &quot;123 Main Street, Redwood City, CA, 94061&quot; identifies a <code>PREMISE</code> while something like &quot;Redwood City, CA, 94061&quot; identifies a <code>LOCALITY</code>. However, if we are unable to find a geocode for &quot;123 Main Street&quot; in Redwood City, the geocode returned might be of <code>LOCALITY</code> granularity even though the address is more granular.
   *
   * Access by calling `const {Granularity} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Granularity {
    /**
     * The address or geocode indicates a block. Only used in regions which have block-level addressing, such as Japan.
     */
    BLOCK = 'BLOCK',
    /**
     * All other granularities, which are bucketed together since they are not deliverable.
     */
    OTHER = 'OTHER',
    /**
     * Building-level result.
     */
    PREMISE = 'PREMISE',
    /**
     * A geocode that approximates the building-level location of the address.
     */
    PREMISE_PROXIMITY = 'PREMISE_PROXIMITY',
    /**
     * The geocode or address is granular to route, such as a street, road, or highway.
     */
    ROUTE = 'ROUTE',
    /**
     * Below-building level result, such as an apartment.
     */
    SUB_PREMISE = 'SUB_PREMISE',
  }
  export type GranularityString = `${google.maps.addressValidation.Granularity}`;
  /**
   * Available only in the v=beta channel: https://goo.gle/3oAthT3.
   * Offers an interpretive summary of the API response, intended to assist in determining a potential subsequent action to take. This field is derived from other fields in the API response and should not be considered as a guarantee of address accuracy or deliverability.
   *
   * Access by calling `const {PossibleNextAction} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PossibleNextAction {
    /**
     * The API response does not contain signals that warrant one of the other PossibleNextAction values. You might consider using the post-processed address without further prompting your customer, though this does not guarantee the address is valid, and the address might still contain corrections. It is your responsibility to determine if and how to prompt your customer, depending on your own risk assessment.
     */
    ACCEPT = 'ACCEPT',
    /**
     * One or more fields of the API response indicate potential minor issues with the post-processed address, for example the <code>postal_code</code> address component was <code>replaced</code>. Prompting your customer to review the address could help improve the quality of the address.
     */
    CONFIRM = 'CONFIRM',
    /**
     * The API response indicates the post-processed address might be missing a subpremises. Prompting your customer to review the address and consider adding a unit number could help improve the quality of the address. The post-processed address might also have other minor issues. Note: this enum value can only be returned for US addresses.
     */
    CONFIRM_ADD_SUBPREMISES = 'CONFIRM_ADD_SUBPREMISES',
    /**
     * One or more fields of the API response indicate a potential issue with the post-processed address, for example the <code>verdict.validation_granularity</code> is <code>OTHER</code>. Prompting your customer to edit the address could help improve the quality of the address.
     */
    FIX = 'FIX',
  }
  export type PossibleNextActionString = `${google.maps.addressValidation.PossibleNextAction}`;
  /**
   * Static class for accessing the AddressValidation APIs.
   * Access by calling `const {AddressValidation} = await google.maps.importLibrary("addressValidation");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AddressValidation {
    /**
     * Information about the address itself as opposed to the geocode.
     */
    get address(): google.maps.addressValidation.Address | null;
    /**
     * Information about the location and place that the address geocoded to.
     */
    get geocode(): google.maps.addressValidation.Geocode | null;
    /**
     * Other information relevant to deliverability. <code>metadata</code> is not guaranteed to be fully populated for every address sent to the Address Validation API.
     */
    get metadata(): google.maps.addressValidation.AddressMetadata | null;
    /**
     * The UUID that identifies this response. If the address needs to be re-validated, this UUID <em>must</em> accompany the new request.
     */
    get responseId(): string | null;
    /**
     * Extra deliverability flags provided by USPS. Only provided in region <code>US</code> and <code>PR</code>.
     */
    get uspsData(): google.maps.addressValidation.USPSData | null;
    /**
     * Overall verdict flags
     */
    get verdict(): google.maps.addressValidation.Verdict | null;
    /**
     * Validates an address. See <a href="https://developers.google.com/maps/documentation/javascript/address-validation/validate-address">https://developers.google.com/maps/documentation/javascript/address-validation/validate-address</a>.
     */
    static fetchAddressValidation(request: google.maps.addressValidation.AddressValidationRequest): Promise<google.maps.addressValidation.AddressValidation>;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
}

declare namespace google.maps.airQuality {
  /**
   * AirQualityMeterElement options.
   */
  export interface AirQualityMeterElementOptions {
    /**
     * See {@link google.maps.airQuality.AirQualityMeterElement.location}
     */
    location?: google.maps.LatLngLiteral | google.maps.LatLng | google.maps.LatLngAltitudeLiteral | google.maps.LatLngAltitude | null;
    /**
     * See {@link google.maps.airQuality.AirQualityMeterElement.requestedLanguage}
     */
    requestedLanguage?: string | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Displays air quality information for a given location.
   * Access by calling `const {AirQualityMeterElement} = await google.maps.importLibrary("airQuality");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AirQualityMeterElement extends HTMLElement implements google.maps.airQuality.AirQualityMeterElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.airQuality.AirQualityMeterElementOptions);
    /**
     * The location to render the air quality meter for. Normalizes to a <code>LatLngAltitude</code>.
     * @defaultValue <code>null</code>
     */
    get location(): google.maps.LatLngAltitude | null;
    /**
     * The location to render the air quality meter for. Normalizes to a <code>LatLngAltitude</code>.
     * @defaultValue <code>null</code>
     */
    set location(value: google.maps.LatLngLiteral | google.maps.LatLng | google.maps.LatLngAltitudeLiteral | google.maps.LatLngAltitude | null | undefined);
    /**
     * An override for the language to request from the <a href="https://developers.google.com/maps/documentation/air-quality/overview">Air Quality API</a>. See the <a href="https://developers.google.com/maps/faq#languagesupport">list of supported languages</a>.
     * @defaultValue <code>null</code>
     */
    requestedLanguage: string | null;
    addEventListener<K extends keyof AirQualityMeterElementEventMap>(type: K, listener: (this: AirQualityMeterElement, ev: AirQualityMeterElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface AirQualityMeterElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-load": Event;
  }
}

declare namespace google.maps.drawing {
  /**
   * Allows users to draw markers, polygons, polylines, rectangles, and circles on the map. The <code>DrawingManager</code>&#39;s drawing mode defines the type of overlay that will be created by the user. Adds a control to the map, allowing the user to switch drawing mode.
   * Access by calling `const {DrawingManager} = await google.maps.importLibrary("drawing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated The DrawingManager functionality in the Maps JavaScript API is no longer available in the Maps JavaScript API as of version 3.65. For more info, see <a href="https://developers.google.com/maps/deprecations">https://developers.google.com/maps/deprecations</a>.
   */
  export class DrawingManager extends google.maps.MVCObject {
  }
  /**
   * The types of overlay that may be created by the <code>DrawingManager</code>. Specify these by value, or by using the constant&#39;s name. For example, <code>'polygon'</code> or <code>google.maps.drawing.OverlayType.POLYGON</code>.
   *
   * Access by calling `const {OverlayType} = await google.maps.importLibrary("drawing");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum OverlayType {
    /**
     * Specifies that the <code>DrawingManager</code> creates circles, and that the overlay given in the <code>overlaycomplete</code> event is a circle.
     */
    CIRCLE = 'circle',
    /**
     * Specifies that the <code>DrawingManager</code> creates markers, and that the overlay given in the <code>overlaycomplete</code> event is a marker.
     */
    MARKER = 'marker',
    /**
     * Specifies that the <code>DrawingManager</code> creates polygons, and that the overlay given in the <code>overlaycomplete</code> event is a polygon.
     */
    POLYGON = 'polygon',
    /**
     * Specifies that the <code>DrawingManager</code> creates polylines, and that the overlay given in the <code>overlaycomplete</code> event is a polyline.
     */
    POLYLINE = 'polyline',
    /**
     * Specifies that the <code>DrawingManager</code> creates rectangles, and that the overlay given in the <code>overlaycomplete</code> event is a rectangle.
     */
    RECTANGLE = 'rectangle',
  }
  export type OverlayTypeString = `${google.maps.drawing.OverlayType}`;
}

declare namespace google.maps.marker {
  /**
   * Options for creating a {@link google.maps.marker.PinElement}.
   */
  export interface PinElementOptions {
    /**
     * The background color of the pin shape. Supports any CSS <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value">color value</a>.
     */
    background?: string | null;
    /**
     * The border color of the pin shape. Supports any CSS <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value">color value</a>.
     */
    borderColor?: string | null;
    /**
     * The color of the glyph. Supports any CSS <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value">color value</a>.
     */
    glyphColor?: string | null;
    /**
     * The source of the glyph image to be displayed in the pin.
     */
    glyphSrc?: URL | string | null;
    /**
     * The text displayed in the pin.
     */
    glyphText?: string | null;
    /**
     * The scale of the pin.
     * @defaultValue <code>1</code>
     */
    scale?: number | null;
    /**
     * The DOM element displayed in the pin.
     * @deprecated Use {@link google.maps.marker.PinElementOptions.glyphText} or {@link google.maps.marker.PinElementOptions.glyphSrc} instead.
     */
    glyph?: string | Element | URL | null;
  }
  /**
   * A <code>PinElement</code> represents a DOM element that consists of a shape and a glyph. The shape has the same balloon style as seen in the default {@link google.maps.marker.AdvancedMarkerElement} or {@link google.maps.maps3d.Marker3DElement}. The glyph is an optional DOM element displayed in the balloon shape. A <code>PinElement</code> may have a different aspect ratio depending on its {@link google.maps.marker.PinElement.scale}.<br> <br>
   * Access by calling `const {PinElement} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PinElement extends HTMLElement implements google.maps.marker.PinElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.marker.PinElementOptions);
    /**
     * The background color of the pin shape. See {@link google.maps.marker.PinElementOptions.background}.
     */
    background?: string | null;
    /**
     * The border color of the pin shape. See {@link google.maps.marker.PinElementOptions.borderColor}.
     */
    borderColor?: string | null;
    /**
     * The color of the pin glyph. See {@link google.maps.marker.PinElementOptions.glyphColor}.
     */
    glyphColor?: string | null;
    /**
     * The source of the glyph image to be displayed in the pin. See {@link google.maps.marker.PinElementOptions.glyphSrc}.
     */
    glyphSrc?: URL | string | null;
    /**
     * The text displayed in the pin. See {@link google.maps.marker.PinElementOptions.glyphText}.
     */
    glyphText?: string | null;
    /**
     * See {@link google.maps.marker.PinElementOptions.scale}.
     */
    scale?: number | null;
    /**
     * This field is read-only. The DOM Element backing the view.
     * @deprecated Use the PinElement directly.
     */
    get element(): HTMLElement;
    /**
     * See {@link google.maps.marker.PinElementOptions.glyph}.
     * @deprecated Use {@link google.maps.marker.PinElementOptions.glyphText} or {@link google.maps.marker.PinElementOptions.glyphSrc} instead.
     */
    glyph?: string | Element | URL | null;
  }
  /**
   * This event is created from clicking an Advanced Marker. Access the marker&#39;s position with <code>event.target.position</code>.
   * Access by calling `const {AdvancedMarkerClickEvent} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AdvancedMarkerClickEvent extends Event {
  }
  /**
   * Options for constructing an {@link google.maps.marker.AdvancedMarkerElement}.
   */
  export interface AdvancedMarkerElementOptions {
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point of the marker from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different than the typical bottom center point of the default marker.
     * @defaultValue &quot;-50%&quot;
     */
    anchorLeft?: string | null;
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point of the marker from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different than the typical bottom center point of the default marker.
     * @defaultValue &quot;-100%&quot;
     */
    anchorTop?: string | null;
    /**
     * An enumeration specifying how an <code>AdvancedMarkerElement</code> should behave when it collides with another <code>AdvancedMarkerElement</code> or with the basemap labels on a vector map. <p><strong>Note</strong>: <code>AdvancedMarkerElement</code> to <code>AdvancedMarkerElement</code> collision works on both raster and vector maps, however, <code>AdvancedMarkerElement</code> to base map&#39;s label collision only works on vector maps.
     */
    collisionBehavior?: google.maps.CollisionBehaviorString | null;
    /**
     * The DOM Element backing the visual of an <code>AdvancedMarkerElement</code>. <p><strong>Note</strong>: <code>AdvancedMarkerElement</code> does not clone the passed-in DOM element. Once the DOM element is passed to an <code>AdvancedMarkerElement</code>, passing the same DOM element to another <code>AdvancedMarkerElement</code> will move the DOM element and cause the previous <code>AdvancedMarkerElement</code> to look empty.
     * @defaultValue {@link google.maps.marker.PinElement}
     */
    content?: Node | null;
    /**
     * If <code>true</code>, the <code>AdvancedMarkerElement</code> will be clickable and trigger the <code>gmp-click</code> event, and will be interactive for accessibility purposes (e.g. allowing keyboard navigation via arrow keys).
     * @defaultValue <code>false</code>
     */
    gmpClickable?: boolean | null;
    /**
     * If <code>true</code>, the <code>AdvancedMarkerElement</code> can be dragged. <p><strong>Note</strong>: <code>AdvancedMarkerElement</code> with altitude is not draggable.
     * @defaultValue <code>false</code>
     */
    gmpDraggable?: boolean | null;
    /**
     * Map on which to display the <code>AdvancedMarkerElement</code>. The map is required to display the <code>AdvancedMarkerElement</code> and can be provided by setting {@link google.maps.marker.AdvancedMarkerElement.map} if not provided at the construction.
     */
    map?: google.maps.Map | null;
    /**
     * Sets the <code>AdvancedMarkerElement</code>&#39;s position. An <code>AdvancedMarkerElement</code> may be constructed without a position, but will not be displayed until its position is provided - for example, by a user&#39;s actions or choices. An <code>AdvancedMarkerElement</code>&#39;s position can be provided by setting {@link google.maps.marker.AdvancedMarkerElement.position} if not provided at the construction. <p><strong>Note</strong>: <code>AdvancedMarkerElement</code> with altitude is only supported on vector maps.
     */
    position?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
    /**
     * Rollover text. If provided, an accessibility text (e.g. for use with screen readers) will be added to the <code>AdvancedMarkerElement</code> with the provided value.
     */
    title?: string | null;
    /**
     * All <code>AdvancedMarkerElement</code>s are displayed on the map in order of their zIndex, with higher values displaying in front of <code>AdvancedMarkerElement</code>s with lower values. By default, <code>AdvancedMarkerElement</code>s are displayed according to their vertical position on screen, with lower <code>AdvancedMarkerElement</code>s appearing in front of <code>AdvancedMarkerElement</code>s farther up the screen. Mixing markers with an explicit <code>zIndex</code> and markers without one can lead to unexpected visual results. To ensure predictable behavior, it is recommended to either set the <code>zIndex</code> for all markers or leave it unset. Note that <code>zIndex</code> is also used to help determine relative priority between {@link google.maps.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY} Advanced Markers. A higher <code>zIndex</code> value indicates higher priority.
     */
    zIndex?: number | null;
  }
  /**
   * Shows a position on a map. Note that the <code>position</code> must be set for the <code>AdvancedMarkerElement</code> to display.
   * Access by calling `const {AdvancedMarkerElement} = await google.maps.importLibrary("marker");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class AdvancedMarkerElement extends HTMLElement implements google.maps.marker.AdvancedMarkerElementOptions {
    /**
     * Creates an <code>AdvancedMarkerElement</code> with the options specified. If a map is specified, the <code>AdvancedMarkerElement</code> is added to the map upon construction.
     * @param options
     */
    constructor(options?: google.maps.marker.AdvancedMarkerElementOptions);
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point of the marker from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different than the typical bottom center point of the default marker.
     * @defaultValue &quot;-50%&quot;
     */
    anchorLeft?: string | null;
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point of the marker from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different than the typical bottom center point of the default marker.
     * @defaultValue &quot;-100%&quot;
     */
    anchorTop?: string | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.collisionBehavior}.
     */
    collisionBehavior?: google.maps.CollisionBehaviorString | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.gmpClickable}.
     */
    gmpClickable?: boolean | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.gmpDraggable}.
     */
    gmpDraggable?: boolean | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.map}.
     */
    map?: google.maps.Map | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.position}.
     */
    position?: google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.title}.
     */
    title: string;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.zIndex}.
     */
    zIndex?: number | null;
    /**
     * This field is read-only. The DOM Element backing the view.
     * @deprecated Use the AdvancedMarkerElement directly.
     */
    get element(): HTMLElement;
    /**
     * See {@link google.maps.marker.AdvancedMarkerElementOptions.content}.
     * @deprecated Use <a href="https://developer.mozilla.org/docs/Web/API/Element/children">.children</a> instead.
     */
    content?: Node | null;
    /**
     * Adds the given listener function to the given event name in the Maps Eventing system.
     */
    addListener(eventName: string, handler: Function): google.maps.MapsEventListener;
    addEventListener<K extends keyof AdvancedMarkerElementEventMap>(type: K, listener: (this: AdvancedMarkerElement, ev: AdvancedMarkerElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface AdvancedMarkerElementEventMap extends HTMLElementEventMap {
    "gmp-click": google.maps.marker.AdvancedMarkerClickEvent;
  }
}

declare namespace google.maps.maps3d {
  /**
   * Specifies how altitude components in the coordinates are interpreted.
   *
   * Access by calling `const {AltitudeMode} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum AltitudeMode {
    /**
     * Allows to express objects relative to the average mean sea level. That also means that if the terrain level of detail changes underneath the object, its absolute position will remain the same.
     */
    ABSOLUTE = 'ABSOLUTE',
    /**
     * Allows to express objects placed on the ground. They will remain at ground level following the terrain regardless of what altitude is provided. If the object is positioned over a major body of water, it will be placed at sea level.
     */
    CLAMP_TO_GROUND = 'CLAMP_TO_GROUND',
    /**
     * Allows to express objects relative to the ground surface. If the terrain level of detail changes, the position of the object will remain constant relative to the ground. When over water, the altitude will be interpreted as a value in meters above sea level.
     */
    RELATIVE_TO_GROUND = 'RELATIVE_TO_GROUND',
    /**
     * Allows to express objects relative to the highest of ground+building+water surface. When over water, this will be water surface; when over terrain, this will be the building surface (if present) or ground surface (if no buildings).
     */
    RELATIVE_TO_MESH = 'RELATIVE_TO_MESH',
  }
  export type AltitudeModeString = `${google.maps.maps3d.AltitudeMode}`;
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * CirclePathElementOptions object used to define the properties that can be set on a CirclePathElement.
   */
  export interface CirclePathElementOptions {
    /**
     * See {@link google.maps.maps3d.CirclePathElement.center}.
     */
    center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.maps3d.CirclePathElement.radius}.
     */
    radius?: number | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * A 3D circle overlay on a 3D map.
   * Access by calling `const {CirclePathElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class CirclePathElement extends HTMLElement implements google.maps.maps3d.CirclePathElementOptions {
    /**
     * Creates a <code>CirclePathElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.CirclePathElementOptions);
    /**
     * The center of the circle.
     */
    get center(): google.maps.LatLngAltitude | null;
    /**
     * The center of the circle.
     */
    set center(value: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null | undefined);
    /**
     * The radius of the circle in meters.
     */
    get radius(): number | null;
    /**
     * The radius of the circle in meters.
     */
    set radius(value: number | null | undefined);
    addEventListener<K extends keyof CirclePathElementEventMap>(type: K, listener: (this: CirclePathElement, ev: CirclePathElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface CirclePathElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Specifies a mode the map should be rendered in.
   *
   * Access by calling `const {MapMode} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum MapMode {
    /**
     * This map mode displays a transparent layer of major streets on satellite, or photorealistic imagery.
     */
    HYBRID = 'HYBRID',
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * This map mode displays a normal street map.
     */
    ROADMAP = 'ROADMAP',
    /**
     * This map mode displays satellite, or photorealistic imagery where available.
     */
    SATELLITE = 'SATELLITE',
  }
  export type MapModeString = `${google.maps.maps3d.MapMode}`;
  /**
   * FlattenerElementOptions object used to define the properties that can be set on a FlattenerElement.
   */
  export interface FlattenerElementOptions {
    /**
     * See {@link google.maps.maps3d.FlattenerElement.innerPaths}.
     */
    innerPaths?: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral>> | null;
    /**
     * See {@link google.maps.maps3d.FlattenerElement.path}.
     */
    path?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
  }
  /**
   * A flattener element is used to flatten a specified area on the map.
   * Access by calling `const {FlattenerElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FlattenerElement extends HTMLElement implements google.maps.maps3d.FlattenerElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.maps3d.FlattenerElementOptions);
    /**
     * The ordered sequence of coordinates that designates a closed loop. These paths define Exclusion Holes within the polygon&#39;s main path, which is the Flattening Zone. Areas within an innerPath are exempt from flattening.
     */
    get innerPaths(): google.maps.LatLngAltitude[][] | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. These paths define Exclusion Holes within the polygon&#39;s main path, which is the Flattening Zone. Areas within an innerPath are exempt from flattening.
     */
    set innerPaths(value: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral>> | null | undefined);
    /**
     * The ordered sequence of coordinates that designates a closed loop. This loop defines the Flattening Zone.
     */
    get path(): google.maps.LatLngAltitude[] | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. This loop defines the Flattening Zone.
     */
    set path(value: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null | undefined);
    addEventListener<K extends keyof FlattenerElementEventMap>(type: K, listener: (this: FlattenerElement, ev: FlattenerElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface FlattenerElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Marker3DElementOptions object used to define the properties that can be set on a Marker3DElement.
   */
  export interface Marker3DElementOptions {
    /**
     * See {@link google.maps.maps3d.Marker3DElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * See {@link google.maps.maps3d.Marker3DElement.autofitsCamera}.
     */
    autofitsCamera?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.collisionBehavior}.
     */
    collisionBehavior?: google.maps.CollisionBehaviorString | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.collisionPriority}.
     */
    collisionPriority?: number | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.drawsWhenOccluded}.
     */
    drawsWhenOccluded?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.extruded}.
     */
    extruded?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.label}.
     */
    label?: string | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.position}.
     */
    position?: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.sizePreserved}.
     */
    sizePreserved?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Marker3DElement.zIndex}.
     */
    zIndex?: number | null;
  }
  /**
   * Shows a position on a 3D map. Note that the <code>position</code> must be set for the <code>Marker3DElement</code> to display.
   * Access by calling `const {Marker3DElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Marker3DElement extends HTMLElement implements google.maps.maps3d.Marker3DElementOptions {
    /**
     * Creates an <code>Marker3DElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Marker3DElementOptions);
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified marker will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    get autofitsCamera(): boolean;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified marker will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    set autofitsCamera(value: boolean | null | undefined);
    /**
     * An enumeration specifying how a Marker3DElement should behave when it collides with another Marker3DElement or with the basemap labels.
     * @defaultValue {@link google.maps.CollisionBehavior.REQUIRED}
     */
    get collisionBehavior(): google.maps.CollisionBehaviorString;
    /**
     * An enumeration specifying how a Marker3DElement should behave when it collides with another Marker3DElement or with the basemap labels.
     * @defaultValue {@link google.maps.CollisionBehavior.REQUIRED}
     */
    set collisionBehavior(value: google.maps.CollisionBehaviorString | null | undefined);
    /**
     * The collision priority used for collision detection.
     */
    get collisionPriority(): number | null;
    /**
     * The collision priority used for collision detection.
     */
    set collisionPriority(value: number | null | undefined);
    /**
     * Specifies whether this marker should be drawn or not when it&#39;s occluded. The marker can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    get drawsWhenOccluded(): boolean;
    /**
     * Specifies whether this marker should be drawn or not when it&#39;s occluded. The marker can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    set drawsWhenOccluded(value: boolean | null | undefined);
    /**
     * Specifies whether to connect the marker to the ground. To extrude a marker, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    get extruded(): boolean;
    /**
     * Specifies whether to connect the marker to the ground. To extrude a marker, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    set extruded(value: boolean | null | undefined);
    /**
     * Text to be displayed by this marker.
     */
    get label(): string | null;
    /**
     * Text to be displayed by this marker.
     */
    set label(value: string | null | undefined);
    /**
     * The location of the tip of the marker. Altitude is ignored in certain modes and thus optional.
     */
    get position(): google.maps.LatLngAltitude | null;
    /**
     * The location of the tip of the marker. Altitude is ignored in certain modes and thus optional.
     */
    set position(value: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    /**
     * Specifies whether this marker should preserve its size or not regardless of distance from camera. By default, the marker is scaled based on distance from camera/tilt.
     * @defaultValue <code>false</code>
     */
    get sizePreserved(): boolean;
    /**
     * Specifies whether this marker should preserve its size or not regardless of distance from camera. By default, the marker is scaled based on distance from camera/tilt.
     * @defaultValue <code>false</code>
     */
    set sizePreserved(value: boolean | null | undefined);
    /**
     * The zIndex compared to other markers.
     */
    get zIndex(): number | null;
    /**
     * The zIndex compared to other markers.
     */
    set zIndex(value: number | null | undefined);
    addEventListener<K extends keyof Marker3DElementEventMap>(type: K, listener: (this: Marker3DElement, ev: Marker3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Marker3DElementEventMap extends HTMLElementEventMap {
  }
  /**
   * This event is created from clicking a Map3DElement.
   * Access by calling `const {LocationClickEvent} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LocationClickEvent extends Event {
    /**
     * The latitude/longitude/altitude that was below the cursor when the event occurred. Please note, that at coarser levels, less accurate data will be returned. Also, sea floor elevation may be returned for the altitude value when clicking at the water surface from higher camera positions. This event bubbles up through the DOM tree.
     */
    position: google.maps.LatLngAltitude | null;
  }
  /**
   * This event is created from monitoring a steady state of <code>Map3DElement</code>. This event bubbles up through the DOM tree.
   * Access by calling `const {SteadyChangeEvent} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class SteadyChangeEvent extends Event {
    /**
     * Indicates whether Map3DElement is steady (i.e. all rendering for the current scene has completed) or not.
     */
    isSteady: boolean;
  }
  /**
   * Shows a position on a 3D map. Note that the <code>position</code> must be set for the <code>Marker3DInteractiveElement</code> to display. Unlike <code>Marker3DElement</code>, <code>Marker3DInteractiveElement</code> receives a <code>gmp-click</code> event.
   * Access by calling `const {Marker3DInteractiveElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Marker3DInteractiveElement extends google.maps.maps3d.Marker3DElement implements google.maps.maps3d.Marker3DInteractiveElementOptions {
    /**
     * Creates an <code>Marker3DInteractiveElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Marker3DInteractiveElementOptions);
    /**
     * When set, the popover element will be open on this marker&#39;s click.
     */
    get gmpPopoverTargetElement(): google.maps.maps3d.PopoverElement | null;
    /**
     * When set, the popover element will be open on this marker&#39;s click.
     */
    set gmpPopoverTargetElement(value: google.maps.maps3d.PopoverElement | null | undefined);
    /**
     * Rollover text. If provided, an accessibility text (e.g. for use with screen readers) will be added to the <code>Marker3DInteractiveElement</code> with the provided value.
     */
    title: string;
    addEventListener<K extends keyof Marker3DInteractiveElementEventMap>(type: K, listener: (this: Marker3DInteractiveElement, ev: Marker3DInteractiveElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Marker3DInteractiveElementEventMap extends google.maps.maps3d.Marker3DElementEventMap {
    "gmp-click": google.maps.maps3d.LocationClickEvent;
  }
  /**
   * Marker3DInteractiveElementOptions object used to define the properties that can be set on a Marker3DInteractiveElement.
   */
  export interface Marker3DInteractiveElementOptions extends google.maps.maps3d.Marker3DElementOptions {
    /**
     * See {@link google.maps.maps3d.Marker3DInteractiveElement.gmpPopoverTargetElement}.
     */
    gmpPopoverTargetElement?: google.maps.maps3d.PopoverElement | null;
    /**
     * See {@link google.maps.maps3d.Marker3DInteractiveElement.title}.
     */
    title?: string;
  }
  /**
   * MarkerElementOptions object used to define the properties that can be set on a MarkerElement.
   */
  export interface MarkerElementOptions {
    /**
     * See {@link google.maps.maps3d.MarkerElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.anchorLeft}.
     */
    anchorLeft?: string | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.anchorTop}.
     */
    anchorTop?: string | null;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * See {@link google.maps.maps3d.MarkerElement.autofitsCamera}.
     */
    autofitsCamera?: boolean | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.collisionBehavior}.
     */
    collisionBehavior?: google.maps.CollisionBehaviorString | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.collisionPriority}.
     */
    collisionPriority?: number | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.position}.
     */
    position?: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
    /**
     * See {@link google.maps.maps3d.MarkerElement.title}.
     */
    title?: string;
  }
  /**
   * Shows a position on a 3D map. Note that the <code>position</code> must be set for the <code>MarkerElement</code> to display.<br><br> <code>MarkerElement</code> supports high customization via custom HTML elements, but has lower interaction performance than <code>Marker3DElement</code>, especially when handling more than 1000 markers on a map.
   * Access by calling `const {MarkerElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MarkerElement extends HTMLElement implements google.maps.maps3d.MarkerElementOptions {
    /**
     * Creates an <code>MarkerElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.MarkerElementOptions);
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different from the typical bottom center point of the default marker.
     * @defaultValue -50%
     */
    get anchorLeft(): string;
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different from the typical bottom center point of the default marker.
     * @defaultValue -50%
     */
    set anchorLeft(value: string | null | undefined);
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different from the typical bottom center point of the default marker.
     * @defaultValue -100%
     */
    get anchorTop(): string;
    /**
     * A <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage">CSS length-percentage</a> value which is used to offset the anchor point from the top left corner of the marker. This is useful when using a visual which has an anchor point that is different from the typical bottom center point of the default marker.
     * @defaultValue -100%
     */
    set anchorTop(value: string | null | undefined);
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified marker will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    autofitsCamera?: boolean | null;
    /**
     * An enumeration specifying how a MarkerElement should behave when it collides with another <code>MarkerElement</code>, <code>Marker3DElement</code>, or with the basemap labels.
     * @defaultValue {@link google.maps.CollisionBehavior.REQUIRED}
     */
    get collisionBehavior(): google.maps.CollisionBehaviorString;
    /**
     * An enumeration specifying how a MarkerElement should behave when it collides with another <code>MarkerElement</code>, <code>Marker3DElement</code>, or with the basemap labels.
     * @defaultValue {@link google.maps.CollisionBehavior.REQUIRED}
     */
    set collisionBehavior(value: google.maps.CollisionBehaviorString | null | undefined);
    /**
     * A number which is used to help determine relative priority between {@link google.maps.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY} markers (including {@link google.maps.maps3d.Marker3DElement} ). A higher <code>collisionPriority</code> value indicates higher priority.
     */
    get collisionPriority(): number | null;
    /**
     * A number which is used to help determine relative priority between {@link google.maps.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY} markers (including {@link google.maps.maps3d.Marker3DElement} ). A higher <code>collisionPriority</code> value indicates higher priority.
     */
    set collisionPriority(value: number | null | undefined);
    /**
     * The location of the tip of the marker. Altitude is ignored in certain modes and thus optional.
     */
    get position(): google.maps.LatLngAltitude | null;
    /**
     * The location of the tip of the marker. Altitude is ignored in certain modes and thus optional.
     */
    set position(value: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    /**
     * Rollover text. If provided, an accessibility text (e.g. for use with screen readers) will be added to the <code>MarkerElement</code> with the provided value.
     */
    title: string;
    addEventListener<K extends keyof MarkerElementEventMap>(type: K, listener: (this: MarkerElement, ev: MarkerElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface MarkerElementEventMap extends HTMLElementEventMap {
  }
  /**
   * Shows a position on a 3D map. Note that the <code>position</code> must be set for the <code>MarkerInteractiveElement</code> to display. Unlike <code>MarkerElement</code>, <code>MarkerInteractiveElement</code> receives a <code>gmp-click</code> event.
   * Access by calling `const {MarkerInteractiveElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MarkerInteractiveElement extends google.maps.maps3d.MarkerElement implements google.maps.maps3d.MarkerInteractiveElementOptions {
    /**
     * Creates a <code>MarkerInteractiveElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.MarkerInteractiveElementOptions);
    /**
     * When set, the popover element will be open on this marker&#39;s click.
     */
    get gmpPopoverTargetElement(): google.maps.maps3d.PopoverElement | null;
    /**
     * When set, the popover element will be open on this marker&#39;s click.
     */
    set gmpPopoverTargetElement(value: google.maps.maps3d.PopoverElement | null | undefined);
    addEventListener<K extends keyof MarkerInteractiveElementEventMap>(type: K, listener: (this: MarkerInteractiveElement, ev: MarkerInteractiveElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface MarkerInteractiveElementEventMap extends google.maps.maps3d.MarkerElementEventMap {
    "gmp-click": google.maps.maps3d.LocationClickEvent;
  }
  /**
   * MarkerInteractiveElementOptions object used to define the properties that can be set on a MarkerInteractiveElement.
   */
  export interface MarkerInteractiveElementOptions extends google.maps.maps3d.MarkerElementOptions {
    /**
     * See {@link google.maps.maps3d.MarkerInteractiveElement.gmpPopoverTargetElement}.
     */
    gmpPopoverTargetElement?: google.maps.maps3d.PopoverElement | null;
  }
  /**
   * Model3DElementOptions object used to define the properties that can be set on a Model3DElement.
   */
  export interface Model3DElementOptions {
    /**
     * See {@link google.maps.maps3d.Model3DElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * See {@link google.maps.maps3d.Model3DElement.orientation}.
     */
    orientation?: google.maps.Orientation3D | google.maps.Orientation3DLiteral | null;
    /**
     * See {@link google.maps.maps3d.Model3DElement.position}.
     */
    position?: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null;
    /**
     * See {@link google.maps.maps3d.Model3DElement.scale}.
     */
    scale?: number | google.maps.Vector3D | google.maps.Vector3DLiteral | null;
    /**
     * See {@link google.maps.maps3d.Model3DElement.src}.
     */
    src?: string | URL | null;
  }
  /**
   * A 3D model which allows the rendering of gLTF models. Note that the <code>position</code> and the <code>src</code> must be set for the <code>Model3DElement</code> to display. <br /><br /> Core properties of the <a href="https://www.khronos.org/gltf/pbr">gLTF PBR</a> should be supported. No extensions or extension properties are currently supported.
   * Access by calling `const {Model3DElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Model3DElement extends HTMLElement implements google.maps.maps3d.Model3DElementOptions {
    /**
     * Creates an <code>Model3DElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Model3DElementOptions);
    /**
     * Specifies how altitude in the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how altitude in the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * Describes rotation of a 3D model&#39;s coordinate system to position the model on the 3D Map. <br /><br /> Rotations are applied to the model in the following order: roll, tilt and then heading.
     */
    get orientation(): google.maps.Orientation3D | null;
    /**
     * Describes rotation of a 3D model&#39;s coordinate system to position the model on the 3D Map. <br /><br /> Rotations are applied to the model in the following order: roll, tilt and then heading.
     */
    set orientation(value: google.maps.Orientation3D | google.maps.Orientation3DLiteral | null | undefined);
    /**
     * Sets the <code>Model3DElement</code>&#39;s position. Altitude is ignored in certain modes and thus optional.
     */
    get position(): google.maps.LatLngAltitude | null;
    /**
     * Sets the <code>Model3DElement</code>&#39;s position. Altitude is ignored in certain modes and thus optional.
     */
    set position(value: google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | null | undefined);
    /**
     * Scales the model along the x, y, and z axes in the model&#39;s coordinate space.
     * @defaultValue <code>1</code>
     */
    get scale(): google.maps.Vector3D | null;
    /**
     * Scales the model along the x, y, and z axes in the model&#39;s coordinate space.
     * @defaultValue <code>1</code>
     */
    set scale(value: number | google.maps.Vector3D | google.maps.Vector3DLiteral | null | undefined);
    /**
     * Specifies the url of the 3D model. At this time, only models in the <code>.glb</code> format are supported. <br /><br /> Any relative HTTP urls will be resolved to their corresponding absolute ones. <br /><br /> Please note that If you&#39;re hosting your <code>.glb</code> model files on a different website or server than your main application, make sure to set up the correct CORS HTTP headers. This allows your application to securely access the model files from the other domain.
     */
    get src(): URL | null;
    /**
     * Specifies the url of the 3D model. At this time, only models in the <code>.glb</code> format are supported. <br /><br /> Any relative HTTP urls will be resolved to their corresponding absolute ones. <br /><br /> Please note that If you&#39;re hosting your <code>.glb</code> model files on a different website or server than your main application, make sure to set up the correct CORS HTTP headers. This allows your application to securely access the model files from the other domain.
     */
    set src(value: string | URL | null | undefined);
    addEventListener<K extends keyof Model3DElementEventMap>(type: K, listener: (this: Model3DElement, ev: Model3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Model3DElementEventMap extends HTMLElementEventMap {
  }
  /**
   * A 3D model which allows the rendering of gLTF models. Note that the <code>position</code> and the <code>src</code> must be set for the <code>Model3DElement</code> to display. <br /><br /> Core properties of the <a href="https://www.khronos.org/gltf/pbr">gLTF PBR</a> should be supported. No extensions or extension properties are currently supported. <br /><br /> Unlike <code>Model3DElement</code>, <code>Model3DInteractiveElement</code> receives a <code>gmp-click</code> event.
   * Access by calling `const {Model3DInteractiveElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Model3DInteractiveElement extends google.maps.maps3d.Model3DElement implements google.maps.maps3d.Model3DInteractiveElementOptions {
    /**
     * Creates a <code>Model3DInteractiveElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Model3DElementOptions);
    addEventListener<K extends keyof Model3DInteractiveElementEventMap>(type: K, listener: (this: Model3DInteractiveElement, ev: Model3DInteractiveElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Model3DInteractiveElementEventMap extends google.maps.maps3d.Model3DElementEventMap {
    "gmp-click": google.maps.maps3d.LocationClickEvent;
  }
  /**
   * Model3DInteractiveElementOptions object used to define the properties that can be set on a Model3DInteractiveElement.
   */
  export interface Model3DInteractiveElementOptions extends google.maps.maps3d.Model3DElementOptions {
  }
  /**
   * Polygon3DElementOptions object used to define the properties that can be set on a Polygon3DElement.
   */
  export interface Polygon3DElementOptions {
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * See {@link google.maps.maps3d.Polygon3DElement.autofitsCamera}.
     */
    autofitsCamera?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.drawsOccludedSegments}.
     */
    drawsOccludedSegments?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.extruded}.
     */
    extruded?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.fillColor}.
     */
    fillColor?: string | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.geodesic}.
     */
    geodesic?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.innerCoordinates}.
     */
    innerCoordinates?: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral> | Iterable<google.maps.LatLngLiteral>> | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.innerPaths}.
     */
    innerPaths?: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral> | Iterable<google.maps.LatLngLiteral>> | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.outerCoordinates}.
     */
    outerCoordinates?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.path}.
     */
    path?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.strokeColor}.
     */
    strokeColor?: string | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.strokeWidth}.
     */
    strokeWidth?: number | null;
    /**
     * See {@link google.maps.maps3d.Polygon3DElement.zIndex}.
     */
    zIndex?: number | null;
  }
  /**
   * A 3D polygon (like a 3D polyline) defines a series of connected coordinates in an ordered sequence. Additionally, polygons form a closed loop and define a filled region.
   * Access by calling `const {Polygon3DElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polygon3DElement extends HTMLElement implements google.maps.maps3d.Polygon3DElementOptions {
    /**
     * Creates an <code>Polygon3DElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Polygon3DElementOptions);
    /**
     * Specifies how altitude components in the coordinates are interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how altitude components in the coordinates are interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified polygon will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    get autofitsCamera(): boolean;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified polygon will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    set autofitsCamera(value: boolean | null | undefined);
    /**
     * Specifies whether parts of the polygon which could be occluded are drawn or not. Polygons can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    get drawsOccludedSegments(): boolean;
    /**
     * Specifies whether parts of the polygon which could be occluded are drawn or not. Polygons can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    set drawsOccludedSegments(value: boolean | null | undefined);
    /**
     * Specifies whether to connect the polygon to the ground. To extrude a polygon, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    get extruded(): boolean;
    /**
     * Specifies whether to connect the polygon to the ground. To extrude a polygon, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    set extruded(value: boolean | null | undefined);
    /**
     * The fill color. All CSS3 colors are supported.
     */
    get fillColor(): string | null;
    /**
     * The fill color. All CSS3 colors are supported.
     */
    set fillColor(value: string | null | undefined);
    /**
     * When <code>true</code>, edges of the polygon are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polygon are rendered as straight lines in screen space.
     * @defaultValue <code>false</code>
     */
    get geodesic(): boolean;
    /**
     * When <code>true</code>, edges of the polygon are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polygon are rendered as straight lines in screen space.
     * @defaultValue <code>false</code>
     */
    set geodesic(value: boolean | null | undefined);
    /**
     * The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths, which create multiple cut-outs inside the polygon.
     */
    get innerPaths(): google.maps.LatLngAltitude[][] | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths, which create multiple cut-outs inside the polygon.
     */
    set innerPaths(value: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral>> | null | undefined);
    /**
     * The ordered sequence of coordinates that designates a closed loop. Altitude is ignored in certain modes and thus optional.
     */
    get path(): google.maps.LatLngAltitude[] | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. Altitude is ignored in certain modes and thus optional.
     */
    set path(value: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null | undefined);
    /**
     * The stroke color. All CSS3 colors are supported.
     */
    get strokeColor(): string | null;
    /**
     * The stroke color. All CSS3 colors are supported.
     */
    set strokeColor(value: string | null | undefined);
    /**
     * The stroke width in pixels.
     */
    get strokeWidth(): number | null;
    /**
     * The stroke width in pixels.
     */
    set strokeWidth(value: number | null | undefined);
    /**
     * The zIndex compared to other polys.
     */
    get zIndex(): number | null;
    /**
     * The zIndex compared to other polys.
     */
    set zIndex(value: number | null | undefined);
    /**
     * The ordered sequence of coordinates that designates a closed loop. Altitude is ignored in certain modes and thus optional.
     * @deprecated Use <code>path</code> instead. This property will be removed in a future release.
     */
    outerCoordinates?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    /**
     * The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths, which create multiple cut-outs inside the polygon.
     * @deprecated Use <code>innerPaths</code> instead. This property will be removed in a future release.
     */
    innerCoordinates?: Iterable<Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral>> | null;
    addEventListener<K extends keyof Polygon3DElementEventMap>(type: K, listener: (this: Polygon3DElement, ev: Polygon3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Polygon3DElementEventMap extends HTMLElementEventMap {
  }
  /**
   * A 3D polygon (like a 3D polyline) defines a series of connected coordinates in an ordered sequence. Additionally, polygons form a closed loop and define a filled region. Unlike <code>Polygon3DElement</code>, <code>Polygon3DInteractiveElement</code> receives a <code>gmp-click</code> event.
   * Access by calling `const {Polygon3DInteractiveElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polygon3DInteractiveElement extends google.maps.maps3d.Polygon3DElement implements google.maps.maps3d.Polygon3DInteractiveElementOptions {
    /**
     * Creates a <code>Polygon3DInteractiveElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Polygon3DElementOptions);
    addEventListener<K extends keyof Polygon3DInteractiveElementEventMap>(type: K, listener: (this: Polygon3DInteractiveElement, ev: Polygon3DInteractiveElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Polygon3DInteractiveElementEventMap extends google.maps.maps3d.Polygon3DElementEventMap {
    "gmp-click": google.maps.maps3d.LocationClickEvent;
  }
  /**
   * Polygon3DInteractiveElementOptions object used to define the properties that can be set on a Polygon3DInteractiveElement.
   */
  export interface Polygon3DInteractiveElementOptions extends google.maps.maps3d.Polygon3DElementOptions {
  }
  /**
   * Polyline3DElementOptions object used to define the properties that can be set on a Polyline3DElement.
   */
  export interface Polyline3DElementOptions {
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * See {@link google.maps.maps3d.Polyline3DElement.autofitsCamera}.
     */
    autofitsCamera?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.coordinates}.
     */
    coordinates?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.drawsOccludedSegments}.
     */
    drawsOccludedSegments?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.extruded}.
     */
    extruded?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.geodesic}.
     */
    geodesic?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.outerColor}.
     */
    outerColor?: string | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.outerWidth}.
     */
    outerWidth?: number | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.path}.
     */
    path?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.strokeColor}.
     */
    strokeColor?: string | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.strokeWidth}.
     */
    strokeWidth?: number | null;
    /**
     * See {@link google.maps.maps3d.Polyline3DElement.zIndex}.
     */
    zIndex?: number | null;
  }
  /**
   * A 3D polyline is a linear overlay of connected line segments on a 3D map.
   * Access by calling `const {Polyline3DElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polyline3DElement extends HTMLElement implements google.maps.maps3d.Polyline3DElementOptions {
    /**
     * Creates an <code>Polyline3DElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Polyline3DElementOptions);
    /**
     * Specifies how altitude components in the coordinates are interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how altitude components in the coordinates are interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified polyline will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    get autofitsCamera(): boolean;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * If provided, the specified polyline will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    set autofitsCamera(value: boolean | null | undefined);
    /**
     * Specifies whether parts of the polyline which could be occluded are drawn or not. Polylines can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    get drawsOccludedSegments(): boolean;
    /**
     * Specifies whether parts of the polyline which could be occluded are drawn or not. Polylines can be occluded by map geometry (e.g. buildings).
     * @defaultValue <code>false</code>
     */
    set drawsOccludedSegments(value: boolean | null | undefined);
    /**
     * Specifies whether to connect the polyline to the ground. To extrude a polyline, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    get extruded(): boolean;
    /**
     * Specifies whether to connect the polyline to the ground. To extrude a polyline, the <code>altitudeMode</code> must be either <code>RELATIVE_TO_GROUND</code> or <code>ABSOLUTE</code>.
     * @defaultValue <code>false</code>
     */
    set extruded(value: boolean | null | undefined);
    /**
     * When <code>true</code>, edges of the polyline are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polyline are rendered as straight lines in screen space.
     * @defaultValue <code>false</code>
     */
    get geodesic(): boolean;
    /**
     * When <code>true</code>, edges of the polyline are interpreted as geodesic and will follow the curvature of the Earth. When <code>false</code>, edges of the polyline are rendered as straight lines in screen space.
     * @defaultValue <code>false</code>
     */
    set geodesic(value: boolean | null | undefined);
    /**
     * The outer color. All CSS3 colors are supported.
     */
    get outerColor(): string | null;
    /**
     * The outer color. All CSS3 colors are supported.
     */
    set outerColor(value: string | null | undefined);
    /**
     * The outer width is between <code>0.0</code> and <code>1.0</code>. This is a percentage of the <code>strokeWidth</code>.
     */
    get outerWidth(): number | null;
    /**
     * The outer width is between <code>0.0</code> and <code>1.0</code>. This is a percentage of the <code>strokeWidth</code>.
     */
    set outerWidth(value: number | null | undefined);
    /**
     * The ordered sequence of coordinates of the Polyline. Altitude is ignored in certain modes and thus optional.
     */
    get path(): google.maps.LatLngAltitude[] | null;
    /**
     * The ordered sequence of coordinates of the Polyline. Altitude is ignored in certain modes and thus optional.
     */
    set path(value: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null | undefined);
    /**
     * The stroke color. All CSS3 colors are supported.
     */
    get strokeColor(): string | null;
    /**
     * The stroke color. All CSS3 colors are supported.
     */
    set strokeColor(value: string | null | undefined);
    /**
     * The stroke width in pixels.
     */
    get strokeWidth(): number | null;
    /**
     * The stroke width in pixels.
     */
    set strokeWidth(value: number | null | undefined);
    /**
     * The zIndex compared to other polys.
     */
    get zIndex(): number | null;
    /**
     * The zIndex compared to other polys.
     */
    set zIndex(value: number | null | undefined);
    /**
     * The ordered sequence of coordinates of the Polyline. Altitude is ignored in certain modes and thus optional.
     * @deprecated Use <code>path</code> instead. This property will be removed in a future release.
     */
    coordinates?: Iterable<google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral> | null;
    addEventListener<K extends keyof Polyline3DElementEventMap>(type: K, listener: (this: Polyline3DElement, ev: Polyline3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Polyline3DElementEventMap extends HTMLElementEventMap {
  }
  /**
   * A 3D polyline is a linear overlay of connected line segments on a 3D map. Unlike <code>Polyline3DElement</code>, <code>Polyline3DInteractiveElement</code> receives a <code>gmp-click</code> event.
   * Access by calling `const {Polyline3DInteractiveElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polyline3DInteractiveElement extends google.maps.maps3d.Polyline3DElement implements google.maps.maps3d.Polyline3DInteractiveElementOptions {
    /**
     * Creates a <code>Polyline3DInteractiveElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.maps3d.Polyline3DElementOptions);
    addEventListener<K extends keyof Polyline3DInteractiveElementEventMap>(type: K, listener: (this: Polyline3DInteractiveElement, ev: Polyline3DInteractiveElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Polyline3DInteractiveElementEventMap extends google.maps.maps3d.Polyline3DElementEventMap {
    "gmp-click": google.maps.maps3d.LocationClickEvent;
  }
  /**
   * Polyline3DInteractiveElementOptions object used to define the properties that can be set on a Polyline3DInteractiveElement.
   */
  export interface Polyline3DInteractiveElementOptions extends google.maps.maps3d.Polyline3DElementOptions {
  }
  /**
   * Customization options for the FlyCameraTo Animation.
   */
  export interface FlyToAnimationOptions {
    /**
     * The duration of the animation in milliseconds. A duration of 0 will teleport the camera straight to the end position.
     */
    durationMillis?: number;
    /**
     * The location at which the camera should point at the end of the animation.
     */
    endCamera: google.maps.maps3d.CameraOptions;
  }
  /**
   * Customization options for the FlyCameraAround Animation.
   */
  export interface FlyAroundAnimationOptions {
    /**
     * The central point at which the camera should look at during the orbit animation. Note that the map heading will change as the camera orbits around this center point.
     */
    camera: google.maps.maps3d.CameraOptions;
    /**
     * The duration of one animation cycle in milliseconds.
     */
    durationMillis?: number;
    /**
     * Specifies the number of times an animation should repeat. If the number is zero, the animation will complete immediately after it starts. If Number.Infinity is passed, the animation will repeat forever.
     */
    repeatCount?: number;
    /**
     * The number of rounds to rotate around the center in the given duration. This controls the overall speed of rotation. Passing a negative number to rounds will cause the camera to rotate in a counter-clockwise direction instead of the default clockwise direction.
     * @deprecated Please use {@link google.maps.maps3d.FlyAroundAnimationOptions.repeatCount} instead.
     */
    rounds?: number;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Specifies how the camera should behave when it moves to a new position to center itself according to its opted-in child elements.
   *
   * Access by calling `const {AutofitsCameraAnimation} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum AutofitsCameraAnimation {
    /**
     * Flies to the new position.
     */
    FLY_TO = 'FLY_TO',
    /**
     * Snaps to the new position without an animation.
     */
    NONE = 'NONE',
  }
  export type AutofitsCameraAnimationString = `${google.maps.maps3d.AutofitsCameraAnimation}`;
  /**
   * CameraOptions object used to define the properties that can be set on a camera object. The camera object can be anything that has a camera position, e.g. a current map state, or a future requested animation state.
   */
  export interface CameraOptions {
    /**
     * An enum specifying how to interpret the altitude value of the given <code>CameraOptions</code> object. This reuses the existing {@link google.maps.maps3d.AltitudeMode} enum.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.ABSOLUTE}
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.cameraPosition}.
     */
    cameraPosition?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.center}.
     */
    center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.fov}.
     */
    fov?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.heading}.
     */
    heading?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.range}.
     */
    range?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.roll}.
     */
    roll?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.tilt}.
     */
    tilt?: number | null;
  }
  /**
   * This event is created from clicking on a place icon on a <code>Map3DElement</code>. To prevent the default popover from showing up, call the <code>preventDefault()</code> method on this event to prevent it being handled by the <code>Map3DElement</code>.
   * Access by calling `const {PlaceClickEvent} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PlaceClickEvent extends google.maps.maps3d.LocationClickEvent {
    /**
     * The place id of the map feature.
     */
    placeId: string;
    /**
     * Fetches a <code>Place</code> for this place id. In the resulting <code>Place</code> object, the id property will be populated. Additional fields can be subsequently requested via <code>Place.fetchFields()</code> subject to normal Places API enablement and billing. The promise is rejected if there was an error fetching the <code>Place</code>.
     */
    fetchPlace(): Promise<google.maps.places.Place>;
  }
  /**
   * Map3DElementOptions object used to define the properties that can be set on a Map3DElement.
   */
  export interface Map3DElementOptions {
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * See {@link google.maps.maps3d.Map3DElement.autofitsCameraAnimation}.
     */
    autofitsCameraAnimation?: google.maps.maps3d.AutofitsCameraAnimationString | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.bounds}.
     */
    bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.cameraPosition}.
     */
    cameraPosition?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.center}.
     */
    center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.defaultUIHidden}.
     */
    defaultUIHidden?: boolean | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.description}.
     */
    description?: string | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.fov}.
     */
    fov?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.gestureHandling}.
     */
    gestureHandling?: google.maps.maps3d.GestureHandlingString | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.heading}.
     */
    heading?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.internalUsageAttributionIds}.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.language}.
     */
    language?: string | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.mapId}.
     */
    mapId?: string | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.maxAltitude}.
     */
    maxAltitude?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.maxHeading}.
     */
    maxHeading?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.maxTilt}.
     */
    maxTilt?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.minAltitude}.
     */
    minAltitude?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.minHeading}.
     */
    minHeading?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.minTilt}.
     */
    minTilt?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.mode}.
     */
    mode?: google.maps.maps3d.MapModeString | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.range}.
     */
    range?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.region}.
     */
    region?: string | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.roll}.
     */
    roll?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.tilt}.
     */
    tilt?: number | null;
    /**
     * See {@link google.maps.maps3d.Map3DElement.defaultUIDisabled}.
     * @deprecated Please use {@link google.maps.maps3d.Map3DElement.defaultUIHidden} instead. This property will be removed in a future release.
     */
    defaultUIDisabled?: boolean | null;
  }
  /**
   * Specifies how gesture events should be handled on the map element.
   *
   * Access by calling `const {GestureHandling} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum GestureHandling {
    /**
     * This lets the map choose whether to use cooperative or greedy gesture handling. This is the default behavior if not specified.<br /><br />This will cause the map to enter cooperative mode if the map is dominating its scroll parent (usually the host page) to where the user cannot scroll away from the map to other content.
     */
    AUTO = 'AUTO',
    /**
     * This forces cooperative mode, where modifier keys or two-finger gestures are required to scroll the map.
     */
    COOPERATIVE = 'COOPERATIVE',
    /**
     * This forces greedy mode, where the host page cannot be scrolled from user events on the map element.
     */
    GREEDY = 'GREEDY',
  }
  export type GestureHandlingString = `${google.maps.maps3d.GestureHandling}`;
  /**
   * Map3DElement is an HTML interface for the 3D Map view. Note that the <code>mode</code> must be set for the 3D Map to start rendering.
   * Access by calling `const {Map3DElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Map3DElement extends HTMLElement implements google.maps.maps3d.Map3DElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.maps3d.Map3DElementOptions);
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * The animation to use for automatic camera fitting.
     * @defaultValue <code>none</code>
     */
    get autofitsCameraAnimation(): google.maps.maps3d.AutofitsCameraAnimationString | null;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * The animation to use for automatic camera fitting.
     * @defaultValue <code>none</code>
     */
    set autofitsCameraAnimation(value: google.maps.maps3d.AutofitsCameraAnimationString | null | undefined);
    /**
     * When set, restricts the position of the camera within the specified lat/lng bounds. Note that objects outside the bounds are still rendered. Bounds can restrict both longitude and latitude, or can restrict either latitude or longitude only. For latitude-only bounds use west and east longitudes of <code>-180</code> and <code>180</code>, respectively. For longitude-only bounds use north and south latitudes of <code>90</code> and <code>-90</code>, respectively.
     */
    get bounds(): google.maps.LatLngBounds | null;
    /**
     * When set, restricts the position of the camera within the specified lat/lng bounds. Note that objects outside the bounds are still rendered. Bounds can restrict both longitude and latitude, or can restrict either latitude or longitude only. For latitude-only bounds use west and east longitudes of <code>-180</code> and <code>180</code>, respectively. For longitude-only bounds use north and south latitudes of <code>90</code> and <code>-90</code>, respectively.
     */
    set bounds(value: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null | undefined);
    /**
     * The position of the camera given as a LatLngAltitude. Will be derived if omitted. If <code>center</code> is omitted but <code>cameraPosition</code> is specified, <code>center</code> will derive from <code>cameraPosition.</code> If both are updated in the same run loop, <code>cameraPosition</code> will be favored. The fields <code>cameraPosition</code> and <code>center</code> can be one-to-one-derived from each other in context of the given shared heading, range, roll, and tilt.
     */
    get cameraPosition(): google.maps.LatLngAltitude | null;
    /**
     * The position of the camera given as a LatLngAltitude. Will be derived if omitted. If <code>center</code> is omitted but <code>cameraPosition</code> is specified, <code>center</code> will derive from <code>cameraPosition.</code> If both are updated in the same run loop, <code>cameraPosition</code> will be favored. The fields <code>cameraPosition</code> and <code>center</code> can be one-to-one-derived from each other in context of the given shared heading, range, roll, and tilt.
     */
    set cameraPosition(value: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null | undefined);
    /**
     * The center of the map given as a LatLngAltitude, where altitude is in meters above the mean sea level. Note that this is not necessarily where the camera is located, as the <code>range</code> field affects the camera&#39;s distance from the map center. If not set, defaults to <code>{lat: 0, lng: 0, altitude: 63170000}</code>. 63170000 meters is a maximum allowed altitude (Earth radius multiplied by 10).
     */
    get center(): google.maps.LatLngAltitude | null;
    /**
     * The center of the map given as a LatLngAltitude, where altitude is in meters above the mean sea level. Note that this is not necessarily where the camera is located, as the <code>range</code> field affects the camera&#39;s distance from the map center. If not set, defaults to <code>{lat: 0, lng: 0, altitude: 63170000}</code>. 63170000 meters is a maximum allowed altitude (Earth radius multiplied by 10).
     */
    set center(value: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.LatLngLiteral | null | undefined);
    /**
     * When <code>true</code>, all default UI buttons are hidden.
     * @defaultValue <code>false</code>
     */
    get defaultUIHidden(): boolean;
    /**
     * When <code>true</code>, all default UI buttons are hidden.
     * @defaultValue <code>false</code>
     */
    set defaultUIHidden(value: boolean | null | undefined);
    /**
     * If provided, an accessibility description (e.g. for use with screen readers) will be added to the map with the provided value.
     */
    get description(): string | null;
    /**
     * If provided, an accessibility description (e.g. for use with screen readers) will be added to the map with the provided value.
     */
    set description(value: string | null | undefined);
    /**
     * Specifies the vertical field of view in degrees. Valid values range from 5.0 to 80.0. Higher values increase the visible area but may introduce perspective distortion. Default: 35.0.
     */
    get fov(): number | null;
    /**
     * Specifies the vertical field of view in degrees. Valid values range from 5.0 to 80.0. Higher values increase the visible area but may introduce perspective distortion. Default: 35.0.
     */
    set fov(value: number | null | undefined);
    /**
     * Controls cooperative gesture handling. When set to <code>COOPERATIVE</code>, modifier keys or two-finger gestures are required to scroll the map. When set to <code>GREEDY</code>, the host page cannot be scrolled from user events on the map element. When set to <code>AUTO</code>, the gesture handling is determined by the scrollability of the host page.
     * @defaultValue {@link google.maps.maps3d.GestureHandling.GREEDY}
     */
    get gestureHandling(): google.maps.maps3d.GestureHandlingString;
    /**
     * Controls cooperative gesture handling. When set to <code>COOPERATIVE</code>, modifier keys or two-finger gestures are required to scroll the map. When set to <code>GREEDY</code>, the host page cannot be scrolled from user events on the map element. When set to <code>AUTO</code>, the gesture handling is determined by the scrollability of the host page.
     * @defaultValue {@link google.maps.maps3d.GestureHandling.GREEDY}
     */
    set gestureHandling(value: google.maps.maps3d.GestureHandlingString | null | undefined);
    /**
     * The compass heading of the map, in degrees, where due north is zero. When there is no tilt, any roll will be interpreted as heading.
     */
    get heading(): number | null;
    /**
     * The compass heading of the map, in degrees, where due north is zero. When there is no tilt, any roll will be interpreted as heading.
     */
    set heading(value: number | null | undefined);
    /**
     * Adds a usage attribution ID to the initializer, which helps Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library. To opt out of sending the usage attribution ID, it is safe to delete this property. Only unique values will be sent. Changes to this value after instantiation may be ignored.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Adds a usage attribution ID to the initializer, which helps Google understand which libraries and samples are helpful to developers, such as usage of a marker clustering library. To opt out of sending the usage attribution ID, it is safe to delete this property. Only unique values will be sent. Changes to this value after instantiation may be ignored.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * Language in which to attempt to render the base map&#39;s language. Will default to the language requested by the developer when loading the Maps JS API.
     */
    get language(): string | null;
    /**
     * Language in which to attempt to render the base map&#39;s language. Will default to the language requested by the developer when loading the Maps JS API.
     */
    set language(value: string | null | undefined);
    /**
     * Specifies a map ID which will be used to fetch cloud-based map style for the map.
     */
    get mapId(): string | null;
    /**
     * Specifies a map ID which will be used to fetch cloud-based map style for the map.
     */
    set mapId(value: string | null | undefined);
    /**
     * The maximum altitude above the ground which will be displayed on the map. A valid value is between <code>0</code> and <code>63170000</code> meters (Earth radius multiplied by 10).
     */
    get maxAltitude(): number | null;
    /**
     * The maximum altitude above the ground which will be displayed on the map. A valid value is between <code>0</code> and <code>63170000</code> meters (Earth radius multiplied by 10).
     */
    set maxAltitude(value: number | null | undefined);
    /**
     * The maximum angle of heading (rotation) of the map. A valid value is between <code>0</code> and <code>360</code> degrees. <code>minHeading</code> and <code>maxHeading</code> represent an interval of &lt;= <code>360</code> degrees in which heading gestures will be allowed. <code>minHeading = 180</code> and <code>maxHeading = 90</code> will allow heading in <code>[0, 90]</code> and heading in <code>[180, 360]</code>. <code>minHeading = 90</code> and <code>maxHeading = 180</code> will allow heading in <code>[90, 180]</code>.
     */
    get maxHeading(): number | null;
    /**
     * The maximum angle of heading (rotation) of the map. A valid value is between <code>0</code> and <code>360</code> degrees. <code>minHeading</code> and <code>maxHeading</code> represent an interval of &lt;= <code>360</code> degrees in which heading gestures will be allowed. <code>minHeading = 180</code> and <code>maxHeading = 90</code> will allow heading in <code>[0, 90]</code> and heading in <code>[180, 360]</code>. <code>minHeading = 90</code> and <code>maxHeading = 180</code> will allow heading in <code>[90, 180]</code>.
     */
    set maxHeading(value: number | null | undefined);
    /**
     * The maximum angle of incidence of the map. A valid value is between <code>0</code> and <code>90</code> degrees.
     */
    get maxTilt(): number | null;
    /**
     * The maximum angle of incidence of the map. A valid value is between <code>0</code> and <code>90</code> degrees.
     */
    set maxTilt(value: number | null | undefined);
    /**
     * The minimum altitude above the ground which will be displayed on the map. A valid value is between <code>0</code> and <code>63170000</code> meters (Earth radius multiplied by 10).
     */
    get minAltitude(): number | null;
    /**
     * The minimum altitude above the ground which will be displayed on the map. A valid value is between <code>0</code> and <code>63170000</code> meters (Earth radius multiplied by 10).
     */
    set minAltitude(value: number | null | undefined);
    /**
     * The minimum angle of heading (rotation) of the map. A valid value is between <code>0</code> and <code>360</code> degrees. <code>minHeading</code> and <code>maxHeading</code> represent an interval of &lt;= <code>360</code> degrees in which heading gestures will be allowed. <code>minHeading = 180</code> and <code>maxHeading = 90</code> will allow heading in <code>[0, 90]</code> and heading in <code>[180, 360]</code>. <code>minHeading = 90</code> and <code>maxHeading = 180</code> will allow heading in <code>[90, 180]</code>.
     */
    get minHeading(): number | null;
    /**
     * The minimum angle of heading (rotation) of the map. A valid value is between <code>0</code> and <code>360</code> degrees. <code>minHeading</code> and <code>maxHeading</code> represent an interval of &lt;= <code>360</code> degrees in which heading gestures will be allowed. <code>minHeading = 180</code> and <code>maxHeading = 90</code> will allow heading in <code>[0, 90]</code> and heading in <code>[180, 360]</code>. <code>minHeading = 90</code> and <code>maxHeading = 180</code> will allow heading in <code>[90, 180]</code>.
     */
    set minHeading(value: number | null | undefined);
    /**
     * The minimum angle of incidence of the map. A valid value is between <code>0</code> and <code>90</code> degrees.
     */
    get minTilt(): number | null;
    /**
     * The minimum angle of incidence of the map. A valid value is between <code>0</code> and <code>90</code> degrees.
     */
    set minTilt(value: number | null | undefined);
    /**
     * Specifies a mode the map should be rendered in. If not set, the map won&#39;t be rendered.
     */
    get mode(): google.maps.maps3d.MapModeString | null;
    /**
     * Specifies a mode the map should be rendered in. If not set, the map won&#39;t be rendered.
     */
    set mode(value: google.maps.maps3d.MapModeString | null | undefined);
    /**
     * The distance from camera to the center of the map, in meters.
     */
    get range(): number | null;
    /**
     * The distance from camera to the center of the map, in meters.
     */
    set range(value: number | null | undefined);
    /**
     * Region with which to attempt to render the base map&#39;s POIs. Will default to the region requested by the developer when loading the Maps JS API.
     */
    get region(): string | null;
    /**
     * Region with which to attempt to render the base map&#39;s POIs. Will default to the region requested by the developer when loading the Maps JS API.
     */
    set region(value: string | null | undefined);
    /**
     * The roll of the camera around the view vector in degrees. To resolve ambiguities, when there is no tilt, any roll will be interpreted as heading.
     */
    get roll(): number | null;
    /**
     * The roll of the camera around the view vector in degrees. To resolve ambiguities, when there is no tilt, any roll will be interpreted as heading.
     */
    set roll(value: number | null | undefined);
    /**
     * The tilt of the camera&#39;s view vector in degrees. A view vector looking directly down at the earth would have a tilt of zero degrees. A view vector pointing away from the earth would have a tilt of <code>180</code> degrees.
     */
    get tilt(): number | null;
    /**
     * The tilt of the camera&#39;s view vector in degrees. A view vector looking directly down at the earth would have a tilt of zero degrees. A view vector pointing away from the earth would have a tilt of <code>180</code> degrees.
     */
    set tilt(value: number | null | undefined);
    /**
     * When <code>true</code>, all default UI buttons are disabled. Does not disable the keyboard and gesture controls.
     * @defaultValue <code>false</code>
     * @deprecated Please use {@link google.maps.maps3d.Map3DElement.defaultUIHidden} instead. This property will be removed in a future release.
     */
    defaultUIDisabled?: boolean | null;
    /**
     * This method orbits the camera around a given location for a given duration. The animation can be repeated by the given number of {@link google.maps.maps3d.FlyAroundAnimationOptions.repeatCount} times. <br /><br /> The camera will move in a clockwise direction. <br /><br /> The location being orbited around is specified via {@link google.maps.maps3d.CameraOptions.center}. This is the location that will show in the center of the viewport during the orbit animation, while the camera moves around it. <br /><br /> The method is asynchronous because animations can only start after the map has loaded a minimum amount. The method returns once the animation has been started. <br /><br /> If the number of {@link google.maps.maps3d.FlyAroundAnimationOptions.repeatCount} times is zero, no spin will occur, and the animation will complete immediately after it starts.
     */
    flyCameraAround(options: google.maps.maps3d.FlyAroundAnimationOptions): void;
    /**
     * This method moves the camera parabolically from the current location to a given end location over a given duration. End location can be specified via {@link google.maps.maps3d.CameraOptions.cameraPosition}, which controls the exact camera position, or via {@link google.maps.maps3d.CameraOptions.center}, which controls the visible viewport center of the map. <br /><br /> The method is asynchronous because animations can only start after the map has loaded a minimum amount. The method returns once the animation has been started.
     */
    flyCameraTo(options: google.maps.maps3d.FlyToAnimationOptions): void;
    /**
     * This method stops any fly animation that might happen to be running. The camera stays wherever it is mid-animation; it does not teleport to the end point. <br /><br /> The method is asynchronous because animations can only start or stop after the map has loaded a minimum amount. The method returns once the animation has stopped.
     */
    stopCameraAnimation(): void;
    addEventListener<K extends keyof Map3DElementEventMap>(type: K, listener: (this: Map3DElement, ev: Map3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Map3DElementEventMap extends HTMLElementEventMap {
    "gmp-animationend": Event;
    "gmp-camerapositionchange": Event;
    "gmp-centerchange": Event;
    "gmp-click": google.maps.maps3d.LocationClickEvent | google.maps.maps3d.PlaceClickEvent;
    "gmp-error": Event;
    "gmp-fovchange": Event;
    "gmp-headingchange": Event;
    "gmp-map-id-error": Event;
    "gmp-rangechange": Event;
    "gmp-rollchange": Event;
    "gmp-steadychange": google.maps.maps3d.SteadyChangeEvent;
    "gmp-tiltchange": Event;
  }
  /**
   * PopoverElementOptions object used to define the properties that can be set on a PopoverElement.
   */
  export interface PopoverElementOptions {
    /**
     * See {@link google.maps.maps3d.PopoverElement.altitudeMode}.
     */
    altitudeMode?: google.maps.maps3d.AltitudeModeString | null;
    /**
     * See {@link google.maps.maps3d.PopoverElement.autoPanDisabled}.
     */
    autoPanDisabled?: boolean | null;
    /**
     * See {@link google.maps.maps3d.PopoverElement.lightDismissDisabled}.
     */
    lightDismissDisabled?: boolean | null;
    /**
     * See {@link google.maps.maps3d.PopoverElement.open}.
     */
    open?: boolean | null;
    /**
     * See {@link google.maps.maps3d.PopoverElement.positionAnchor}.
     */
    positionAnchor?: google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | string | google.maps.maps3d.Marker3DInteractiveElement | google.maps.maps3d.MarkerInteractiveElement | null;
  }
  /**
   * A custom HTML element that renders a popover. It looks like a bubble and is often connected to a marker.
   * Access by calling `const {PopoverElement} = await google.maps.importLibrary("maps3d");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PopoverElement extends HTMLElement implements google.maps.maps3d.PopoverElementOptions {
    /**
     * 
     * @param options
     */
    constructor(options?: google.maps.maps3d.PopoverElementOptions);
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    get altitudeMode(): google.maps.maps3d.AltitudeModeString;
    /**
     * Specifies how the altitude component of the position is interpreted.
     * @defaultValue {@link google.maps.maps3d.AltitudeMode.CLAMP_TO_GROUND}
     */
    set altitudeMode(value: google.maps.maps3d.AltitudeModeString | null | undefined);
    /**
     * If set to true, disables panning the map to make the popover fully visible when it opens.
     * @defaultValue <code>false</code>
     */
    get autoPanDisabled(): boolean;
    /**
     * If set to true, disables panning the map to make the popover fully visible when it opens.
     * @defaultValue <code>false</code>
     */
    set autoPanDisabled(value: boolean | null | undefined);
    /**
     * Specifies whether this popover should be &quot;light dismissed&quot; or not. The &quot;light dismiss&quot; behavior is similar to setting the <code>popover=&quot;auto&quot;</code> attribute which is part of the browser <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover">Popover API</a>.
     * @defaultValue <code>false</code>
     */
    get lightDismissDisabled(): boolean;
    /**
     * Specifies whether this popover should be &quot;light dismissed&quot; or not. The &quot;light dismiss&quot; behavior is similar to setting the <code>popover=&quot;auto&quot;</code> attribute which is part of the browser <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover">Popover API</a>.
     * @defaultValue <code>false</code>
     */
    set lightDismissDisabled(value: boolean | null | undefined);
    /**
     * Specifies whether this popover should be open or not.
     * @defaultValue <code>false</code>
     */
    get open(): boolean;
    /**
     * Specifies whether this popover should be open or not.
     * @defaultValue <code>false</code>
     */
    set open(value: boolean | null | undefined);
    /**
     * The position at which to display this popover. If the popover is anchored to an interactive marker, the marker&#39;s position will be used instead.
     */
    get positionAnchor(): google.maps.LatLngAltitude | google.maps.maps3d.Marker3DInteractiveElement | google.maps.maps3d.MarkerInteractiveElement | null;
    /**
     * The position at which to display this popover. If the popover is anchored to an interactive marker, the marker&#39;s position will be used instead.
     */
    set positionAnchor(value: google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.maps3d.Marker3DInteractiveElement | google.maps.maps3d.MarkerInteractiveElement | string | null | undefined);
    addEventListener<K extends keyof PopoverElementEventMap>(type: K, listener: (this: PopoverElement, ev: PopoverElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface PopoverElementEventMap extends HTMLElementEventMap {
  }
}

declare namespace google.maps.routes {
  /**
   * The classification of polyline speed based on traffic data. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#speed">web service documentation</a> for more information.
   *
   * Access by calling `const {Speed} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum Speed {
    /**
     * Normal speed, no traffic delays. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#speed">web service documentation</a> for more information.
     */
    NORMAL = 'NORMAL',
    /**
     * Slowdown detected, medium amount of traffic. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#speed">web service documentation</a> for more information.
     */
    SLOW = 'SLOW',
    /**
     * Traffic delays. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#speed">web service documentation</a> for more information.
     */
    TRAFFIC_JAM = 'TRAFFIC_JAM',
  }
  export type SpeedString = `${google.maps.routes.Speed}`;
  /**
   * Traffic density indicator on a contiguous segment of a polyline or path. Given a path with points P_0, P_1, ... , P_N (zero-based index), the <code>SpeedReadingInterval</code> describes the traffic density of an interval.
   * Access by calling `const {SpeedReadingInterval} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class SpeedReadingInterval {
    /**
     * The ending index of this interval in the polyline.
     */
    get endPolylinePointIndex(): number | null | undefined;
    /**
     * Traffic speed in this interval.
     */
    get speed(): google.maps.routes.SpeedString | null | undefined;
    /**
     * The starting index of this interval in the polyline.
     */
    get startPolylinePointIndex(): number | null | undefined;
  }
  /**
   * Encapsulates toll information on a {@link google.maps.routes.Route} or {@link google.maps.routes.RouteLeg}.
   * Access by calling `const {TollInfo} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TollInfo {
    /**
     * The monetary amount of tolls for the corresponding {@link google.maps.routes.Route} or {@link google.maps.routes.RouteLeg}. This list contains an amount for each currency that is expected to be charged by toll stations. Typically this list will contain only one item for routes with tolls in one currency. For international trips, this list may contain multiple items to reflect tolls in different currencies. This field may be an empty array if tolls are expected but the estimated price is unknown.
     */
    get estimatedPrices(): google.maps.places.Money[] | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Extra computations to perform while completing the request. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
   *
   * Access by calling `const {ComputeRouteMatrixExtraComputation} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ComputeRouteMatrixExtraComputation {
    /**
     * Toll information for the matrix element(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    TOLLS = 'TOLLS',
  }
  export type ComputeRouteMatrixExtraComputationString = `${google.maps.routes.ComputeRouteMatrixExtraComputation}`;
  /**
   * A set of values describing the vehicle&#39;s emission type. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#vehicleemissiontype">web service documentation</a> for more information.
   *
   * Access by calling `const {VehicleEmissionType} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum VehicleEmissionType {
    /**
     * Diesel fueled vehicle. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#vehicleemissiontype">web service documentation</a> for more information.
     */
    DIESEL = 'DIESEL',
    /**
     * Electricity powered vehicle. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#vehicleemissiontype">web service documentation</a> for more information.
     */
    ELECTRIC = 'ELECTRIC',
    /**
     * Gasoline/petrol fueled vehicle. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#vehicleemissiontype">web service documentation</a> for more information.
     */
    GASOLINE = 'GASOLINE',
    /**
     * Hybrid fuel (such as gasoline + electric) vehicle. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#vehicleemissiontype">web service documentation</a> for more information.
     */
    HYBRID = 'HYBRID',
  }
  export type VehicleEmissionTypeString = `${google.maps.routes.VehicleEmissionType}`;
  /**
   * Contains the vehicle information, such as the vehicle emission type.
   */
  export interface VehicleInfo {
    /**
     * Describes the vehicle&#39;s emission type. Applies only to the <code>DRIVING</code> travel mode.
     */
    emissionType?: google.maps.routes.VehicleEmissionTypeString | null;
  }
  /**
   * Encapsulates a set of optional conditions to satisfy when calculating routes.
   */
  export interface RouteModifiers {
    /**
     * When set to <code>true</code>, avoids ferries where reasonable, giving preference to routes not containing ferries. Applies only to <code>DRIVING</code> or <code>TWO_WHEELER</code> {@link google.maps.TravelMode}.
     */
    avoidFerries?: boolean | null;
    /**
     * When set to <code>true</code>, avoids highways where reasonable, giving preference to routes not containing highways. Applies only to <code>DRIVING</code> or <code>TWO_WHEELER</code> {@link google.maps.TravelMode}.
     */
    avoidHighways?: boolean | null;
    /**
     * When set to <code>true</code>, avoids navigating indoors where reasonable, giving preference to routes not containing indoor navigation. Applies only to <code>WALKING</code> {@link google.maps.TravelMode}.
     */
    avoidIndoor?: boolean | null;
    /**
     * When set to <code>true</code>, avoids toll roads where reasonable, giving preference to routes not containing toll roads. Applies only to <code>DRIVING</code> or <code>TWO_WHEELER</code> {@link google.maps.TravelMode}.
     */
    avoidTolls?: boolean | null;
    /**
     * Encapsulates information about toll passes. If toll passes are provided, the API tries to return the pass price. If toll passes are not provided, the API treats the toll pass as unknown and tries to return the cash price. Applies only to <code>DRIVING</code> or <code>TWO_WHEELER</code> {@link google.maps.TravelMode}. See <a href="https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers#tollpass">TollPass</a> for a list of valid values.
     */
    tollPasses?: Iterable<string> | null;
    /**
     * Specifies the vehicle information.
     */
    vehicleInfo?: google.maps.routes.VehicleInfo | null;
  }
  /**
   * A set of values that specify factors to take into consideration when calculating the route. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routingpreference">web service documentation</a> for more information.
   *
   * Access by calling `const {RoutingPreference} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RoutingPreference {
    /**
     * Calculates routes taking live traffic conditions into consideration. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routingpreference">web service documentation</a> for more information.
     */
    TRAFFIC_AWARE = 'TRAFFIC_AWARE',
    /**
     * Calculates the routes taking live traffic conditions into consideration, without applying most performance optimizations. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routingpreference">web service documentation</a> for more information.
     */
    TRAFFIC_AWARE_OPTIMAL = 'TRAFFIC_AWARE_OPTIMAL',
    /**
     * Computes routes without taking live traffic conditions into consideration. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routingpreference">web service documentation</a> for more information.
     */
    TRAFFIC_UNAWARE = 'TRAFFIC_UNAWARE',
  }
  export type RoutingPreferenceString = `${google.maps.routes.RoutingPreference}`;
  /**
   * Preferences for <code>TRANSIT</code> based routes that influence the route that is returned.
   */
  export interface TransitPreference {
    /**
     * A set of travel modes to use when getting a <code>TRANSIT</code> route. Defaults to all supported modes of travel.
     */
    allowedTransitModes?: Iterable<google.maps.TransitModeString>;
    /**
     * A routing preference that, when specified, influences the <code>TRANSIT</code> route returned.
     */
    routingPreference?: google.maps.TransitRoutePreferenceString;
  }
  /**
   * Object literals are accepted in place of {@link google.maps.routes.DirectionalLocation} instances as a convenience. These are converted to {@link google.maps.routes.DirectionalLocation} when the Maps JS API encounters them.
   */
  export interface DirectionalLocationLiteral extends google.maps.LatLngAltitudeLiteral {
    /**
     * The compass heading associated with the direction of the flow of traffic. Heading values can be numbers from 0 to 360, where 0 specifies a heading of due North, 90 specifies a heading of due East, and so on. You can use this field only for <code>DRIVING</code> and <code>TWO_WHEELER</code> {@link google.maps.routes.ComputeRoutesRequest.travelMode}.
     */
    heading?: number | null;
  }
  /**
   * Encapsulates a geographic point and an optional heading.
   * Access by calling `const {DirectionalLocation} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class DirectionalLocation extends google.maps.LatLngAltitude implements google.maps.routes.DirectionalLocationLiteral {
    /**
     * The compass heading associated with the direction of the flow of traffic. Heading values can be numbers from 0 to 360, where 0 specifies a heading of due North, 90 specifies a heading of due East, and so on. You can use this field only for <code>DRIVING</code> and <code>TWO_WHEELER</code> {@link google.maps.routes.ComputeRoutesRequest.travelMode}.
     */
    get heading(): number | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): google.maps.routes.DirectionalLocationLiteral;
  }
  /**
   * Represents a waypoint in a route.
   */
  export interface Waypoint {
    /**
     * The location of the waypoint. A string may be an address, a <a href="https://plus.codes">plus code</a>, or a Place resource name.
     */
    location: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place;
    /**
     * Indicates that the location of this waypoint is meant to have a preference for the vehicle to stop at a particular side of road. When you set this value, the route will pass through the location so that the vehicle can stop at the side of road that the location is biased towards from the center of the road. This option works only for <code>DRIVING</code> and <code>TWO_WHEELER</code> {@link google.maps.routes.ComputeRoutesRequest.travelMode}
     */
    sideOfRoad?: boolean | null;
    /**
     * Indicates that the waypoint is meant for vehicles to stop at, where the intention is to either pickup or drop-off. When you set this value, the calculated route won&#39;t include non-<code>via</code> waypoints on roads that are unsuitable for pickup and drop-off. This option works only for <code>DRIVING</code> and <code>TWO_WHEELER</code> {@link google.maps.routes.ComputeRoutesRequest.travelMode} and when the {@link google.maps.routes.Waypoint.location} is not a <code>string</code> or a {@link google.maps.places.Place}.
     */
    vehicleStopover?: boolean | null;
    /**
     * Marks this waypoint as a milestone rather a stopping point. For each non-<code>via</code> waypoint in the {@link google.maps.routes.ComputeRoutesRequest}, {@link google.maps.routes.Route.computeRoutes} appends an entry to the {@link google.maps.routes.Route.legs} array to provide the details for stopovers on that leg of the trip. <br><br> Set this value to <code>true</code> when you want the route to pass through this waypoint without stopping over. Via waypoints don&#39;t cause an entry to be added to the {@link google.maps.routes.Route.legs} array, but they do route the journey through the waypoint. <br><br> Notes: <ul> <li> You can only set this value on waypoints that are intermediates. The request fails if you set this field on terminal waypoints. </li> <li> If {@link google.maps.routes.ComputeRoutesRequest.optimizeWaypointOrder} is set to <code>true</code>, this field cannot be set to true; otherwise, the request fails. </li> </ul>
     */
    via?: boolean | null;
  }
  /**
   * Request for a route matrix.
   */
  export interface ComputeRouteMatrixRequest {
    /**
     * The arrival time. <br><br> Note: Can only be set when {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} is set to <code>TRANSIT</code>. You can specify either {@link google.maps.routes.ComputeRouteMatrixRequest.departureTime} or {@link google.maps.routes.ComputeRouteMatrixRequest.arrivalTime}, but not both. Transit trips are available for up to 7 days in the past or 100 days in the future.
     */
    arrivalTime?: Date;
    /**
     * The departure time. If you don&#39;t set this value, then this value defaults to the time that you made the request. <br><br> Note: You can only specify a time in the past when {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} is set to <code>TRANSIT</code>. Transit trips are available for up to 7 days in the past or 100 days in the future.
     */
    departureTime?: Date;
    /**
     * Array of destinations, which determines the columns of the response matrix. A value passed as a string may be an address, a <a href="https://plus.codes">plus code</a>, or a Place resource name. Altitude values are not taken into consideration.
     */
    destinations: Iterable<string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place | google.maps.routes.Waypoint>;
    /**
     * A list of extra computations which may be used to complete the request. <br><br> Note: These extra computations may return extra fields on the response. These extra fields must also be specified in {@link google.maps.routes.ComputeRouteMatrixRequest.fields} to be returned in the response.
     */
    extraComputations?: Iterable<google.maps.routes.ComputeRouteMatrixExtraComputationString>;
    /**
     * Collection of fields to be fetched. Specify <code>[&quot;*&quot;]</code> for all fields.
     */
    fields: Iterable<string>;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">Unicode Locale Identifier</a>. See <a href="https://developers.google.com/maps/faq#languagesupport">Language Support</a> for the list of supported languages. When you don&#39;t provide this value, the language is inferred from your Google Maps JavaScript API <a href="https://developers.google.com/maps/documentation/javascript/localization#Language">localization settings</a>. Otherwise, the language is inferred from the location of the first origin.
     */
    language?: string;
    /**
     * Array of origins, which determines the rows of the response matrix. A value passed as a string may be an address, a <a href="https://plus.codes">plus code</a>, or a Place resource name. Altitude values are not taken into consideration. <br><br> Several size restrictions apply to the cardinality of origins and destinations: <ul> <li> The total number of origins and destinations specified as <code>string</code>s or {@link google.maps.places.Place}s must be no greater than 50. </li> <li> The product of the number of origins and the number of destinations must be no greater than 625. </li> <li> The product of the number of origins and destinations must be no greater than 100 if {@link google.maps.routes.ComputeRouteMatrixRequest.routingPreference} is set to <code>TRAFFIC_AWARE_OPTIMAL</code>. </li> <li> The product of the number of origins and destinations must be no greater than 100 if {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} is set to <code>TRANSIT</code>. </li> </ul>
     */
    origins: Iterable<string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place | google.maps.routes.RouteMatrixOrigin | google.maps.routes.Waypoint>;
    /**
     * The region code, specified as a ccTLD (&quot;top-level domain&quot;) two-character value. For more information see <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">Country code top-level domains</a>. When you don&#39;t provide this value, the region is inferred from your Google Maps JavaScript API <a href="https://developers.google.com/maps/documentation/javascript/localization#Region">localization settings</a>. Otherwise, the region is inferred from the location of the first origin.
     */
    region?: string;
    /**
     * Specifies how to compute the route matrix. The server attempts to use the selected routing preference to compute the route matrix. If the routing preference results in an error or an extra long latency, an error is returned. You can specify this option only when {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} is <code>DRIVING</code> or <code>TWO_WHEELER</code>, otherwise the request fails.
     */
    routingPreference?: google.maps.routes.RoutingPreferenceString;
    /**
     * Specifies the assumptions to use when calculating time in traffic. This setting affects the value returned in {@link google.maps.routes.RouteMatrixItem.durationMillis} which contains the predicted time in traffic based on historical averages. {@link google.maps.routes.ComputeRouteMatrixRequest.trafficModel} is only available for requests that have set {@link google.maps.routes.ComputeRouteMatrixRequest.routingPreference} to <code>TRAFFIC_AWARE_OPTIMAL</code> and {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} to <code>DRIVING</code>. Defaults to <code>BEST_GUESS</code>.
     */
    trafficModel?: google.maps.TrafficModelString;
    /**
     * Specifies preferences that influence the route returned for <code>TRANSIT</code> routes. <br><br> Note: Can only be specified when {@link google.maps.routes.ComputeRouteMatrixRequest.travelMode} is set to <code>TRANSIT</code>.
     */
    transitPreference?: google.maps.routes.TransitPreference;
    /**
     * Specifies the mode of transportation.
     */
    travelMode?: google.maps.TravelModeString;
    /**
     * Specifies the units of measure for the display fields. If you don&#39;t provide this value, then the display units are inferred from the location of the first origin.
     */
    units?: google.maps.UnitSystem;
  }
  /**
   * Extra computations to perform while completing the request. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
   *
   * Access by calling `const {ComputeRoutesExtraComputation} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ComputeRoutesExtraComputation {
    /**
     * Flyover information for the route(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    FLYOVER_INFO_ON_POLYLINE = 'FLYOVER_INFO_ON_POLYLINE',
    /**
     * Estimated fuel consumption for the route(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    FUEL_CONSUMPTION = 'FUEL_CONSUMPTION',
    /**
     * See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    HTML_FORMATTED_NAVIGATION_INSTRUCTIONS = 'HTML_FORMATTED_NAVIGATION_INSTRUCTIONS',
    /**
     * Narrow road information for the route(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    NARROW_ROAD_INFO_ON_POLYLINE = 'NARROW_ROAD_INFO_ON_POLYLINE',
    /**
     * Toll information for the route(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    TOLLS = 'TOLLS',
    /**
     * Traffic aware polylines for the route(s). See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#extracomputation">web service documentation</a> for more information.
     */
    TRAFFIC_ON_POLYLINE = 'TRAFFIC_ON_POLYLINE',
  }
  export type ComputeRoutesExtraComputationString = `${google.maps.routes.ComputeRoutesExtraComputation}`;
  /**
   * A set of values that specify the quality of the polyline. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#polylinequality">web service documentation</a> for more information.
   *
   * Access by calling `const {PolylineQuality} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum PolylineQuality {
    /**
     * Specifies a high-quality polyline - which is composed using more points than <code>OVERVIEW</code>, at the cost of increased response size. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#polylinequality">web service documentation</a> for more information.
     */
    HIGH_QUALITY = 'HIGH_QUALITY',
    /**
     * Specifies an overview polyline - which is composed using a small number of points. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#polylinequality">web service documentation</a> for more information.
     */
    OVERVIEW = 'OVERVIEW',
  }
  export type PolylineQualityString = `${google.maps.routes.PolylineQuality}`;
  /**
   * A supported reference route on the ComputeRoutesRequest. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#referenceroute">web service documentation</a> for more information.
   *
   * Access by calling `const {ReferenceRoute} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum ReferenceRoute {
    /**
     * Fuel efficient route. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#referenceroute">web service documentation</a> for more information.
     */
    FUEL_EFFICIENT = 'FUEL_EFFICIENT',
    /**
     * Route with shorter travel distance. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#referenceroute">web service documentation</a> for more information.
     */
    SHORTER_DISTANCE = 'SHORTER_DISTANCE',
  }
  export type ReferenceRouteString = `${google.maps.routes.ReferenceRoute}`;
  /**
   * Request for routes.
   */
  export interface ComputeRoutesRequest {
    /**
     * The arrival time. <br><br> Note: Can only be set when {@link google.maps.routes.ComputeRoutesRequest.travelMode} is set to <code>TRANSIT</code>. You can specify either {@link google.maps.routes.ComputeRoutesRequest.departureTime} or {@link google.maps.routes.ComputeRoutesRequest.arrivalTime}, but not both. Transit trips are available for up to 7 days in the past or 100 days in the future.
     */
    arrivalTime?: Date;
    /**
     * Specifies whether to calculate alternate routes in addition to the route. No alternative routes are returned for requests that have intermediate waypoints.
     */
    computeAlternativeRoutes?: boolean;
    /**
     * The departure time. If you don&#39;t set this value, then this value defaults to the time that you made the request. <br><br> Note: You can only specify a time in the past when {@link google.maps.routes.ComputeRoutesRequest.travelMode} is set to <code>TRANSIT</code>. Transit trips are available for up to 7 days in the past or 100 days in the future.
     */
    departureTime?: Date;
    /**
     * The destination of the route. A value passed as a string may be an address, <a href="https://plus.codes">plus code</a>, or a Place resource name. Altitude values are not taken into consideration for computing routes.
     */
    destination: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place | google.maps.routes.Waypoint;
    /**
     * A list of extra computations which may be used to complete the request. <br><br> Note: These extra computations may return extra fields on the response. These extra fields must also be specified in {@link google.maps.routes.ComputeRoutesRequest.fields} to be returned in the response.
     */
    extraComputations?: Iterable<google.maps.routes.ComputeRoutesExtraComputationString>;
    /**
     * Collection of fields to be fetched. Specify <code>[&quot;*&quot;]</code> for all fields.
     */
    fields: Iterable<string>;
    /**
     * A set of waypoints along the route (excluding terminal points), for either stopping at or passing by. Up to 25 intermediate waypoints are supported.
     */
    intermediates?: Iterable<google.maps.routes.Waypoint>;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">Unicode Locale Identifier</a>. See <a href="https://developers.google.com/maps/faq#languagesupport">Language Support</a> for the list of supported languages. When you don&#39;t provide this value, the language is inferred from your Google Maps JavaScript API <a href="https://developers.google.com/maps/documentation/javascript/localization#Language">localization settings</a>. Otherwise, the language is inferred from the location of the origin.
     */
    language?: string;
    /**
     * If set to true, the service attempts to minimize the overall cost of the route by re-ordering the specified intermediate waypoints. The request fails if any of the intermediate waypoints is a via waypoint. Use {@link google.maps.routes.Route.optimizedIntermediateWaypointIndices} in the response to find the new ordering. If <code>&quot;optimizedIntermediateWaypointIndices&quot;</code> is not requested in {@link google.maps.routes.ComputeRoutesRequest.fields}, the request fails. If set to false, {@link google.maps.routes.Route.optimizedIntermediateWaypointIndices} in the response will be empty.
     */
    optimizeWaypointOrder?: boolean;
    /**
     * The origin of the route. A value passed as a string may be an address, <a href="https://plus.codes">plus code</a>, or a Place resource name. Altitude values are not taken into consideration for computing routes.
     */
    origin: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place | google.maps.routes.Waypoint;
    /**
     * Specifies the preference for the quality of the polyline.
     */
    polylineQuality?: google.maps.routes.PolylineQualityString;
    /**
     * The region code, specified as a ccTLD (&quot;top-level domain&quot;) two-character value. For more information see <a href="https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains">Country code top-level domains</a>. When you don&#39;t provide this value, the region is inferred from your Google Maps JavaScript API <a href="https://developers.google.com/maps/documentation/javascript/localization#Language">localization settings</a>. Otherwise, the region is inferred from the location of the origin.
     */
    region?: string;
    /**
     * Specifies what reference routes to calculate as part of the request in addition to the default route. A reference route is a route with a different route calculation objective than the default route. For example a <code>FUEL_EFFICIENT</code> reference route calculation takes into account various parameters that would generate an optimal fuel efficient route. When using this feature, look for {@link google.maps.routes.Route.routeLabels} on the resulting routes.
     */
    requestedReferenceRoutes?: Iterable<google.maps.routes.ReferenceRouteString>;
    /**
     * A set of conditions to satisfy that affect the way routes are calculated. For example you can specify features to avoid such as toll roads or highways.
     */
    routeModifiers?: google.maps.routes.RouteModifiers;
    /**
     * Specifies how to compute the route. The server attempts to use the selected routing preference to compute the route. If the routing preference results in an error or an extra long latency, an error is returned. You can specify this option only when {@link google.maps.routes.ComputeRoutesRequest.travelMode} is <code>DRIVING</code> or <code>TWO_WHEELER</code>, otherwise the request fails.
     */
    routingPreference?: google.maps.routes.RoutingPreferenceString;
    /**
     * Specifies the assumptions to use when calculating time in traffic. This setting affects the value of {@link google.maps.routes.Route.durationMillis} and {@link google.maps.routes.RouteLeg.durationMillis} which contain the predicted time in traffic based on historical averages. {@link google.maps.routes.ComputeRoutesRequest.trafficModel} is only available for requests that have set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to <code>TRAFFIC_AWARE_OPTIMAL</code> and {@link google.maps.routes.ComputeRoutesRequest.travelMode} to <code>DRIVING</code>. Defaults to <code>BEST_GUESS</code>.
     */
    trafficModel?: google.maps.TrafficModelString;
    /**
     * Specifies preferences that influence the route returned for <code>TRANSIT</code> routes. <br><br> Note: Can only be specified when {@link google.maps.routes.ComputeRoutesRequest.travelMode} is set to <code>TRANSIT</code>.
     */
    transitPreference?: google.maps.routes.TransitPreference;
    /**
     * Specifies the mode of transportation.
     */
    travelMode?: google.maps.TravelModeString;
    /**
     * Specifies the units of measure for the display fields, such as navigation instructions. The units of measure used for the route, leg, step distance, and duration are not affected by this value. If you don&#39;t provide this value, then the display units are inferred from the location of the origin.
     */
    units?: google.maps.UnitSystem;
  }
  /**
   * An error that occurred during {@link google.maps.routes.RouteMatrix.computeRouteMatrix} for a specific origin/destination pair.
   * Access by calling `const {RouteMatrixItemError} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteMatrixItemError extends Error {
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Reasons for using fallback response. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackreason">web service documentation</a> for more information.
   *
   * Access by calling `const {FallbackReason} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum FallbackReason {
    /**
     * We were not able to finish the calculation with your preferred routing mode on time, but we were able to return a result calculated by an alternative mode. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackreason">web service documentation</a> for more information.
     */
    LATENCY_EXCEEDED = 'LATENCY_EXCEEDED',
    /**
     * A server error happened while calculating routes with your preferred routing mode, but we were able to return a result calculated by an alternative mode. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackreason">web service documentation</a> for more information.
     */
    SERVER_ERROR = 'SERVER_ERROR',
  }
  export type FallbackReasonString = `${google.maps.routes.FallbackReason}`;
  /**
   * Actual routing mode used for returned fallback response. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackroutingmode">web service documentation</a> for more information.
   *
   * Access by calling `const {FallbackRoutingMode} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum FallbackRoutingMode {
    /**
     * See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackroutingmode">web service documentation</a> for more information.
     */
    TRAFFIC_AWARE = 'TRAFFIC_AWARE',
    /**
     * See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#fallbackroutingmode">web service documentation</a> for more information.
     */
    TRAFFIC_UNAWARE = 'TRAFFIC_UNAWARE',
  }
  export type FallbackRoutingModeString = `${google.maps.routes.FallbackRoutingMode}`;
  /**
   * Information related to how and why a fallback result was used in a {@link google.maps.routes.Route.computeRoutes} response. If this field is set, then it means the server used a different routing mode from your preferred mode as fallback.
   * Access by calling `const {FallbackInfo} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class FallbackInfo {
    /**
     * The reason why fallback response was used instead of the original response. This field is only populated when the fallback mode is triggered and the fallback response is returned.
     */
    get reason(): google.maps.routes.FallbackReasonString | null | undefined;
    /**
     * Routing mode used for the response. If fallback was triggered, the mode may be different from routing preference set in the original client request.
     */
    get routingMode(): google.maps.routes.FallbackRoutingModeString | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Geocoding about the locations used as waypoints. Only populated for address waypoints. Includes details about the geocoding results for the purposes of determining what the address was geocoded to.
   * Access by calling `const {GeocodedWaypoint} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GeocodedWaypoint {
    /**
     * Indicates the status code resulting from the geocoding operation.
     */
    get geocoderStatus(): google.maps.RPCStatusString | null;
    /**
     * The index of the corresponding intermediate waypoint in the request. Only populated if the corresponding waypoint is an intermediate waypoint.
     */
    get intermediateWaypointRequestIndex(): number | null;
    /**
     * Indicates that the geocoder did not return an exact match for the original request, though it was able to match part of the requested address. You may wish to examine the original request for misspellings and/or an incomplete address.
     */
    get partialMatch(): boolean;
    /**
     * The place ID for this result.
     */
    get placeId(): string;
    /**
     * The type(s) of the result, in the form of zero or more type tags. See <a href="https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types">https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types</a> for supported types.
     */
    get types(): string[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains {@link google.maps.routes.GeocodedWaypoint}s for origin, destination, and intermediate waypoints. Only populated for address waypoints.
   * Access by calling `const {GeocodingResults} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GeocodingResults {
    /**
     * The geocoded waypoint for the destination.
     */
    get destination(): google.maps.routes.GeocodedWaypoint | null | undefined;
    /**
     * A list of intermediate geocoded waypoints each containing an index field that corresponds to the zero-based position of the waypoint in the order they were specified in the request.
     */
    get intermediates(): google.maps.routes.GeocodedWaypoint[] | undefined;
    /**
     * The geocoded waypoint for the origin.
     */
    get origin(): google.maps.routes.GeocodedWaypoint | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Provides summarized information about a multi-modal segment of the {@link google.maps.routes.RouteLeg.steps} of a route. A multi-modal segment is defined as one or more contiguous {@link google.maps.routes.RouteLegStep}&#39;s that have the same {@link google.maps.TravelMode}.
   * Access by calling `const {MultiModalSegment} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MultiModalSegment {
    /**
     * Instructions for navigating this multi-modal segment.
     */
    get instructions(): string | null;
    /**
     * The navigation maneuver to perform at this step. See <a href="https://developers.google.com/maps/documentation/routes/reference/rest/v2/TopLevel/computeRoutes#maneuver">Maneuver</a> for a list of possible values.
     */
    get maneuver(): string | null;
    /**
     * The corresponding {@link google.maps.routes.RouteLegStep} index that is the end of a multi-modal segment.
     */
    get stepEndIndex(): number;
    /**
     * The corresponding {@link google.maps.routes.RouteLegStep} index that is the start of a multi-modal segment.
     */
    get stepStartIndex(): number;
    /**
     * The travel mode used for this multi-modal segment.
     */
    get travelMode(): google.maps.TravelModeString | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Encapsulates the states of road features along a stretch of polyline. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#roadfeaturestate">web service documentation</a> for more information.
   *
   * Access by calling `const {RoadFeatureState} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RoadFeatureState {
    /**
     * The road feature does not exist. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#roadfeaturestate">web service documentation</a> for more information.
     */
    DOES_NOT_EXIST = 'DOES_NOT_EXIST',
    /**
     * The road feature exists. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#roadfeaturestate">web service documentation</a> for more information.
     */
    EXISTS = 'EXISTS',
  }
  export type RoadFeatureStateString = `${google.maps.routes.RoadFeatureState}`;
  /**
   * Encapsulates information about a road feature along a stretch of polyline.
   * Access by calling `const {PolylineDetailInfo} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PolylineDetailInfo {
    /**
     * The end index of this road feature in the polyline.
     */
    get endIndex(): number | null;
    /**
     * Denotes whether the road feature exists along the polyline.
     */
    get presence(): google.maps.routes.RoadFeatureStateString | null;
    /**
     * The start index of this road feature in the polyline.
     */
    get startIndex(): number | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Details corresponding to a given index or contiguous segment of a polyline. Given a polyline with points P_0, P_1, ... , P_N (zero-based index), the <code>PolylineDetails</code> describes a road feature for a given interval.
   * Access by calling `const {PolylineDetails} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class PolylineDetails {
    /**
     * Flyover details along the polyline.
     */
    get flyoverInfo(): google.maps.routes.PolylineDetailInfo[];
    /**
     * Narrow road details along the polyline.
     */
    get narrowRoadInfo(): google.maps.routes.PolylineDetailInfo[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routelabel">web service documentation</a> for more information.
   *
   * Access by calling `const {RouteLabel} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RouteLabel {
    /**
     * The default &quot;best&quot; route returned for the route computation. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routelabel">web service documentation</a> for more information.
     */
    DEFAULT_ROUTE = 'DEFAULT_ROUTE',
    /**
     * An alternative to the default &quot;best&quot; route. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routelabel">web service documentation</a> for more information.
     */
    DEFAULT_ROUTE_ALTERNATE = 'DEFAULT_ROUTE_ALTERNATE',
    /**
     * Fuel efficient route. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routelabel">web service documentation</a> for more information.
     */
    FUEL_EFFICIENT = 'FUEL_EFFICIENT',
    /**
     * Shorter travel distance route. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routelabel">web service documentation</a> for more information.
     */
    SHORTER_DISTANCE = 'SHORTER_DISTANCE',
  }
  export type RouteLabelString = `${google.maps.routes.RouteLabel}`;
  /**
   * Text representations of the {@link google.maps.routes.RouteLeg}.
   * Access by calling `const {RouteLegLocalizedValues} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLegLocalizedValues {
    /**
     * Travel distance of the route leg in text form.
     */
    get distance(): string | null;
    /**
     * The distance text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get distanceLanguage(): string | null;
    /**
     * Duration, represented in text form and localized to the region of the query. Takes traffic conditions into consideration.
     */
    get duration(): string | null;
    /**
     * The duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get durationLanguage(): string | null;
    /**
     * Duration without taking traffic conditions into consideration, represented in text form.
     */
    get staticDuration(): string | null;
    /**
     * The static duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
     */
    get staticDurationLanguage(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Text representations of properties of the <code>RouteLegStep</code>.
   * Access by calling `const {RouteLegStepLocalizedValues} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLegStepLocalizedValues {
    /**
     * Travel distance of the route leg step in text form.
     */
    get distance(): string | null;
    /**
     * The distance text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get distanceLanguage(): string | null;
    /**
     * Duration without taking traffic conditions into consideration, represented in text form.
     */
    get staticDuration(): string | null;
    /**
     * The static duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get staticDurationLanguage(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a transit agency.
   * Access by calling `const {TransitAgency} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitAgency {
    /**
     * The name of this transit agency.
     */
    get name(): string | null;
    /**
     * The transit agency&#39;s locale-specific formatted phone number.
     */
    get phoneNumber(): string | null;
    /**
     * The transit agency&#39;s URL.
     */
    get url(): URL | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a vehicle used in transit routes.
   * Access by calling `const {TransitVehicle} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitVehicle {
    /**
     * The URL for an icon associated with this vehicle type.
     */
    get iconURL(): URL | null;
    /**
     * The URL for the icon associated with this vehicle type, based on the local transport signage.
     */
    get localIconURL(): URL | null;
    /**
     * The name of this vehicle, capitalized.
     */
    get name(): string | null;
    /**
     * The vehicle name text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information see: <a href="https://www.unicode.org/reports/tr35/#Unicode_locale_identifier">https://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get nameLanguage(): string | null;
    /**
     * The type of vehicle used. <br><br> See <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#transitvehicletype">https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#transitvehicletype</a> for a list of possible values.
     */
    get vehicleType(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a transit line.
   * Access by calling `const {TransitLine} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitLine {
    /**
     * The transit agency (or agencies) that operates this transit line.
     */
    get agencies(): google.maps.routes.TransitAgency[];
    /**
     * The color commonly used in signage for this line. Represented in hexadecimal.
     */
    get color(): string | null;
    /**
     * The URL for the icon associated with this line.
     */
    get iconURL(): URL | null;
    /**
     * The full name of this transit line, For example, &quot;8 Avenue Local&quot;.
     */
    get name(): string | null;
    /**
     * The short name of this transit line. This name will normally be a line number, such as &quot;M7&quot; or &quot;355&quot;.
     */
    get shortName(): string | null;
    /**
     * The color commonly used in text on signage for this line. Represented in hexadecimal.
     */
    get textColor(): string | null;
    /**
     * The URL for this transit line as provided by the transit agency.
     */
    get url(): URL | null;
    /**
     * The type of vehicle that operates on this transit line.
     */
    get vehicle(): google.maps.routes.TransitVehicle | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Information about a transit stop.
   * Access by calling `const {TransitStop} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitStop {
    /**
     * The location of the stop expressed in latitude/longitude coordinates and an optional heading.
     */
    get location(): google.maps.routes.DirectionalLocation | null;
    /**
     * The name of the transit stop.
     */
    get name(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Additional information about a transit step in a route.
   * Access by calling `const {TransitDetails} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class TransitDetails {
    /**
     * Information about the arrival stop for the step.
     */
    get arrivalStop(): google.maps.routes.TransitStop | null;
    /**
     * The estimated time of arrival for the step.
     */
    get arrivalTime(): Date | null;
    /**
     * Information about the departure stop for the step.
     */
    get departureStop(): google.maps.routes.TransitStop | null;
    /**
     * The estimated time of departure for the step.
     */
    get departureTime(): Date | null;
    /**
     * Specifies the direction in which to travel on this line as marked on the vehicle or at the departure stop. The direction is often the terminus station.
     */
    get headsign(): string | null;
    /**
     * Specifies the expected time in milliseconds between departures from the same stop at this time. For example, with a headway value of 600,000, you would expect a ten minute wait if you should miss your bus. <br><br> Note: If the headway exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get headwayMillis(): number | null;
    /**
     * The number of stops from the departure to the arrival stop. This count includes the arrival stop, but excludes the departure stop. For example, if your route leaves from Stop A, passes through stops B and C, and arrives at stop D, <code>stopCount</code> will be 3.
     */
    get stopCount(): number;
    /**
     * Information about the transit line used in the step.
     */
    get transitLine(): google.maps.routes.TransitLine | null;
    /**
     * The text that appears in schedules and sign boards to identify a transit trip to passengers. The text uniquely identifies a trip within a service day. For example, &quot;538&quot; is the <code>tripShortText</code> of the Amtrak train that leaves San Jose, CA at 15:10 on weekdays to Sacramento, CA.
     */
    get tripShortText(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains a segment of a <code>RouteLeg</code>. A step corresponds to a single navigation instruction. Route legs are made up of steps.
   * Access by calling `const {RouteLegStep} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLegStep {
    /**
     * The travel distance of this step, in meters.
     */
    get distanceMeters(): number;
    /**
     * The end location of this step.
     */
    get endLocation(): google.maps.routes.DirectionalLocation | null;
    /**
     * Instructions for navigating this step.
     */
    get instructions(): string | null;
    /**
     * Text representations of properties of the <code>RouteLegStep</code>.
     */
    get localizedValues(): google.maps.routes.RouteLegStepLocalizedValues | null;
    /**
     * The navigation maneuver to perform at this step. See <a href="https://developers.google.com/maps/documentation/routes/reference/rest/v2/TopLevel/computeRoutes#maneuver">Maneuver</a> for a list of possible values.
     */
    get maneuver(): string | null;
    /**
     * The list of {@link google.maps.LatLngAltitude}s of the route leg step, which can be used to draw a route leg step polyline. Granularity of the path can be controlled by setting {@link google.maps.routes.ComputeRoutesRequest.polylineQuality}. The <code>&quot;path&quot;</code> field must be requested in {@link google.maps.routes.ComputeRoutesRequest.fields} in order for this field to be populated.
     */
    get path(): google.maps.LatLngAltitude[];
    /**
     * The start location of this step.
     */
    get startLocation(): google.maps.routes.DirectionalLocation | null;
    /**
     * The duration of traveling through this step without taking traffic conditions into consideration. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get staticDurationMillis(): number | null;
    /**
     * Details pertaining to this step if the travel mode is <code>TRANSIT</code>.
     */
    get transitDetails(): google.maps.routes.TransitDetails | null;
    /**
     * The travel mode used for this step.
     */
    get travelMode(): google.maps.TravelModeString | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains additional information that the user should be informed about on a {@link google.maps.routes.RouteLeg}.
   * Access by calling `const {RouteLegTravelAdvisory} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLegTravelAdvisory {
    /**
     * Speed reading intervals detailing traffic density. Applicable in case of <code>TRAFFIC_AWARE</code> and <code>TRAFFIC_AWARE_OPTIMAL</code> {@link google.maps.routes.ComputeRoutesRequest.routingPreference}. The intervals cover the entire polyline of the {@link google.maps.routes.RouteLeg} without overlap. The start point of a specified interval is the same as the end point of the preceding interval. <br><br> Example: <br> <pre> <code>polyline: A ---- B ---- C ---- D ---- E ---- F ---- G<br> speedReadingIntervals: [A,C), [C,D), [D,G) </code> </pre>
     */
    get speedReadingIntervals(): google.maps.routes.SpeedReadingInterval[] | undefined;
    /**
     * Contains information about tolls on the specific {@link google.maps.routes.RouteLeg}. This field is only populated if tolls are expected on the {@link google.maps.routes.RouteLeg}. If this field is set but {@link google.maps.routes.TollInfo.estimatedPrices} is not populated, then the route leg contains tolls but the estimated price is unknown. If this field is empty, then there are no tolls on the {@link google.maps.routes.RouteLeg}.
     */
    get tollInfo(): google.maps.routes.TollInfo | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Provides overview information about a list of {@link google.maps.routes.RouteLeg.steps}.
   * Access by calling `const {StepsOverview} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class StepsOverview {
    /**
     * Summarized information about different multi-modal segments of the {@link google.maps.routes.RouteLeg.steps}.
     */
    get multiModalSegments(): google.maps.routes.MultiModalSegment[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains a segment between non-<code>via</code> waypoints.
   * Access by calling `const {RouteLeg} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLeg {
    /**
     * The travel distance of the route leg, in meters.
     */
    get distanceMeters(): number;
    /**
     * The length of time needed to navigate the route leg in milliseconds. If you set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to <code>TRAFFIC_UNAWARE</code>, then this value is the same as <code>staticDurationMillis</code>. If you set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to either <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code>, then this value is calculated taking traffic conditions into account. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get durationMillis(): number | null;
    /**
     * The end location of this leg. This location might be different from {@link google.maps.routes.ComputeRoutesRequest.destination}. For example, when {@link google.maps.routes.ComputeRoutesRequest.destination} is not near a road, this is a point on the road.
     */
    get endLocation(): google.maps.routes.DirectionalLocation | null;
    /**
     * Text representations of properties of the <code>RouteLeg</code>.
     */
    get localizedValues(): google.maps.routes.RouteLegLocalizedValues | null;
    /**
     * The list of {@link google.maps.LatLngAltitude}s of the route leg, which can be used to draw a route leg polyline. Granularity of the path can be controlled by setting {@link google.maps.routes.ComputeRoutesRequest.polylineQuality}.
     */
    get path(): google.maps.LatLngAltitude[];
    /**
     * Groupings of sections of the route leg path with their corresponding speed reading. For this field to be populated, {@link google.maps.routes.ComputeRoutesRequest.routingPreference} must be set to <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code> and {@link google.maps.routes.ComputeRoutesRequest.extraComputations} must include <code>TRAFFIC_ON_POLYLINE</code>.
     */
    get speedPaths(): google.maps.routes.SpeedPath[];
    /**
     * The start location of this leg. This location might be different from {@link google.maps.routes.ComputeRoutesRequest.origin}. For example, when {@link google.maps.routes.ComputeRoutesRequest.origin} is not near a road, this is a point on the road.
     */
    get startLocation(): google.maps.routes.DirectionalLocation | null;
    /**
     * The duration of traveling through the leg without taking traffic conditions into consideration. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get staticDurationMillis(): number | null;
    /**
     * An array of steps denoting segments within this leg. Each step represents one navigation instruction.
     */
    get steps(): google.maps.routes.RouteLegStep[];
    /**
     * Overview information about the steps in this <code>RouteLeg</code>. This field is only populated for <code>TRANSIT</code> routes.
     */
    get stepsOverview(): google.maps.routes.StepsOverview | null;
    /**
     * Contains the additional information that the user should be informed about, such as possible traffic zone restrictions, on a route leg.
     */
    get travelAdvisory(): google.maps.routes.RouteLegTravelAdvisory | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Text representations of properties of the <code>Route</code>.
   * Access by calling `const {RouteLocalizedValues} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteLocalizedValues {
    /**
     * Travel distance of the route represented in text form.
     */
    get distance(): string | null;
    /**
     * The distance text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get distanceLanguage(): string | null;
    /**
     * Duration, represented in text form and localized to the region of the query. Takes traffic conditions into consideration. Note: If you did not request traffic information, this value is the same value as <code>staticDuration</code>.
     */
    get duration(): string | null;
    /**
     * The duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get durationLanguage(): string | null;
    /**
     * Duration without taking traffic conditions into consideration, represented in text form.
     */
    get staticDuration(): string | null;
    /**
     * The static duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
     */
    get staticDurationLanguage(): string | null;
    /**
     * Transit fare represented in text form.
     */
    get transitFare(): string | null;
    /**
     * The transit fare text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
     */
    get transitFareLanguage(): string | null;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains additional information that the user should be informed about on a {@link google.maps.routes.Route}.
   * Access by calling `const {RouteTravelAdvisory} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteTravelAdvisory {
    /**
     * The predicted fuel consumption in microliters. <br><br> Note: If the fuel consumption exceeds 2^53 microliters, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get fuelConsumptionMicroliters(): number | undefined;
    /**
     * The {@link google.maps.routes.Route} may have restrictions that are not suitable for the requested travel mode or route modifiers.
     */
    get routeRestrictionsPartiallyIgnored(): boolean | null | undefined;
    /**
     * Speed reading intervals detailing traffic density. Applicable in case of <code>TRAFFIC_AWARE</code> and <code>TRAFFIC_AWARE_OPTIMAL</code> {@link google.maps.routes.ComputeRoutesRequest.routingPreference}. The intervals cover the entire polyline of the {@link google.maps.routes.Route} without overlap. The start point of a specified interval is the same as the end point of the preceding interval. <br><br> Example: <br> <pre> <code>polyline: A ---- B ---- C ---- D ---- E ---- F ---- G<br> speedReadingIntervals: [A,C), [C,D), [D,G) </code> </pre>
     */
    get speedReadingIntervals(): google.maps.routes.SpeedReadingInterval[] | undefined;
    /**
     * Contains information about tolls on the {@link google.maps.routes.Route}. This field is only populated if tolls are expected on the {@link google.maps.routes.Route}. If this field is set but {@link google.maps.routes.TollInfo.estimatedPrices} is not populated, then the route contains tolls but the estimated price is unknown. If this field is empty, then there are no tolls on the {@link google.maps.routes.Route}.
     */
    get tollInfo(): google.maps.routes.TollInfo | null | undefined;
    /**
     * If present, contains the total fare or ticket costs of this {@link google.maps.routes.Route}. This property is only returned for <code>TRANSIT</code> {@link google.maps.routes.ComputeRoutesRequest.travelMode} and only for routes where fare information is available for all transit steps.
     */
    get transitFare(): google.maps.places.Money | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Groups together the {@link google.maps.LatLngAltitude}s of a route interval with the speed reading for the interval.
   */
  export interface SpeedPath {
    /**
     * The path covered by this speed path.
     */
    path: google.maps.LatLngAltitude[];
    /**
     * The speed reading of the path.
     */
    speed?: google.maps.routes.SpeedString | null;
  }
  /**
   * A single origin for a {@link google.maps.routes.ComputeRouteMatrixRequest}.
   */
  export interface RouteMatrixOrigin {
    /**
     * Modifiers for every route that takes this as the origin.
     */
    routeModifiers?: google.maps.routes.RouteModifiers | null;
    /**
     * The location of the origin. A value passed as a string may be an address or <a href="https://plus.codes">plus code</a>. Altitude values for are not taken into consideration.
     */
    waypoint: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitudeLiteral | google.maps.routes.DirectionalLocationLiteral | google.maps.places.Place | google.maps.routes.Waypoint;
  }
  /**
   * Contains a route, which consists of a series of connected road segments that join beginning, ending, and intermediate waypoints.
   * Access by calling `const {Route} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Route {
    /**
     * A description of the route.
     */
    get description(): string | null | undefined;
    /**
     * The travel distance of the route, in meters.
     */
    get distanceMeters(): number | undefined;
    /**
     * The length of time needed to navigate the route in milliseconds. If you set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to <code>TRAFFIC_UNAWARE</code>, then this value is the same as {@link google.maps.routes.Route.staticDurationMillis}. If you set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to either <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code>, then this value is calculated taking traffic conditions into account. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get durationMillis(): number | null | undefined;
    /**
     * A collection of legs (path segments between waypoints) that make up the route. Each leg corresponds to the trip between two non-<code>via</code> waypoints. <br><br> For example: <ul> <li>A route with no intermediate waypoints has only one leg.</li> <li> A route that includes one non-<code>via</code> intermediate waypoint has two legs. </li> <li> A route that includes one <code>via</code> intermediate waypoint has one leg. </li> </ul> The order of the legs matches the order of waypoints from <code>origin</code> to <code>intermediates</code> to <code>destination</code>.
     */
    get legs(): google.maps.routes.RouteLeg[] | undefined;
    /**
     * Text representations of properties of the {@link google.maps.routes.Route}.
     */
    get localizedValues(): google.maps.routes.RouteLocalizedValues | null | undefined;
    /**
     * If you set {@link google.maps.routes.ComputeRoutesRequest.optimizeWaypointOrder} to <code>true</code>, this field contains the optimized ordering of intermediate waypoints. Otherwise, this field is empty. The index starts with 0 for the first intermediate waypoint provided in the input. <br><br> For example, if you give an input of: <ul> <li>Origin: LA</li> <li>Intermediate waypoints: Dallas, Bangor, Phoenix</li> <li>Destination: New York</li> </ul> and the optimized intermediate waypoint order is Phoenix, Dallas, Bangor, then this field will be <code>[2, 0, 1]</code>.
     */
    get optimizedIntermediateWaypointIndices(): number[] | undefined;
    /**
     * The list of {@link google.maps.LatLngAltitude}s of the route, which can be used to draw a route polyline. Granularity of the path can be controlled by setting {@link google.maps.routes.ComputeRoutesRequest.polylineQuality}.
     */
    get path(): google.maps.LatLngAltitude[] | undefined;
    /**
     * Contains information about details along the path.
     */
    get polylineDetails(): google.maps.routes.PolylineDetails | null | undefined;
    /**
     * Labels for the route that are useful to identify specific properties of to compare against others.
     */
    get routeLabels(): google.maps.routes.RouteLabelString[] | undefined;
    /**
     * An opaque token that can be passed to Navigation SDK to reconstruct the route during navigation, and, in the event of rerouting, honor the original intention when the route was created. Treat this token as an opaque blob. Don&#39;t compare its value across requests as its value may change even if the service returns the exact same route. <br><br> Note: <code>routeToken</code> is only available for requests that have set {@link google.maps.routes.ComputeRoutesRequest.routingPreference} to <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code>. It is not supported for requests that have <code>via</code> waypoints.
     */
    get routeToken(): string | null | undefined;
    /**
     * Groupings of sections of the route path with their corresponding speed reading. For this field to be populated, {@link google.maps.routes.ComputeRoutesRequest.routingPreference} must be set to <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code> and {@link google.maps.routes.ComputeRoutesRequest.extraComputations} must include <code>TRAFFIC_ON_POLYLINE</code>.
     */
    get speedPaths(): google.maps.routes.SpeedPath[] | undefined;
    /**
     * The duration of traveling through the route without taking traffic conditions into consideration. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get staticDurationMillis(): number | null | undefined;
    /**
     * Additional information about the route.
     */
    get travelAdvisory(): google.maps.routes.RouteTravelAdvisory | null | undefined;
    /**
     * The viewport bounding box of the route.
     */
    get viewport(): google.maps.LatLngBounds | null | undefined;
    /**
     * An array of warnings to show when displaying the route.
     */
    get warnings(): string[] | undefined;
    /**
     * Returns the primary route along with optional alternate routes, given a set of terminal and intermediate waypoints. <br><br> Note: This method requires that you specify a response field mask in the request by setting the {@link google.maps.routes.ComputeRoutesRequest.fields} property. The value is a list of field paths. <br><br> For example: <ul> <li> Field mask of all available fields: <code>fields: [&#39;*&#39;]</code></li> <li> Field mask of Route-level duration, distance, and path: <code>fields: [&#39;durationMillis&#39;, &#39;distanceMeters&#39;, &#39;path&#39;]</code></li> </ul> <br> Use of the wildcard response field mask <code>fields: [&#39;*&#39;]</code> is discouraged because: <ul> <li>Selecting only the fields that you need helps our server save computation cycles, allowing us to return the result to you with a lower latency.</li> <li>Selecting only the fields that you need in your production job ensures stable latency performance. We might add more response fields in the future, and those new fields might require extra computation time. If you select all fields, or if you select all fields at the top level, then you might experience performance degradation because any new field we add will be automatically included in the response.</li> <li>Selecting only the fields that you need results in a smaller response size, and thus a faster load over the network.</li> </ul>
     */
    static computeRoutes(request: google.maps.routes.ComputeRoutesRequest): Promise<{routes: (google.maps.routes.Route[] | undefined), fallbackInfo: (google.maps.routes.FallbackInfo | null), geocodingResults: (google.maps.routes.GeocodingResults | null)}>;
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * Creates 3D polylines for the route based on the data available for the route.
     */
    create3DPolylines(options?: google.maps.routes.RoutePolyline3DOptions): Promise<google.maps.maps3d.Polyline3DElement[]>;
    /**
     * Creates polylines for the route based on the data available. <br><br> Multi-modal polylines: <ul> <li> Requirements: <ul> <li> The <code>&quot;path&quot;</code> and <code>&quot;legs&quot;</code> fields must be requested in {@link google.maps.routes.ComputeRoutesRequest.fields} </li> <li> {@link google.maps.routes.ComputeRoutesRequest.travelMode} must be set to <code>TRANSIT</code>. </li> </ul> </li> <li> Creates a polyline for each multi-modal route segment. Polylines are styled according to the segment travel mode and transit line data when available. Options can be passed in to alter the polyline style based on travel mode and transit line. </li> </ul> <br> Traffic polylines: <ul> <li> Requirements: <ul> <li>The <code>&quot;path&quot;</code> and <code>&quot;travelAdvisory&quot;</code> fields (or just <code>&quot;speedPaths&quot;</code> as a shorthand) must be requested in {@link google.maps.routes.ComputeRoutesRequest.fields}. </li> <li> {@link google.maps.routes.ComputeRoutesRequest.routingPreference} must be set to <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code>. </li> <li> {@link google.maps.routes.ComputeRoutesRequest.extraComputations} must include <code>TRAFFIC_ON_POLYLINE</code>. </li> </ul> </li> <li> Creates a polyline for each route interval when the speed reading differs from the preceding interval. Polylines have default speed-based styling applied. Options can be passed in to alter the polyline style based on speed. </li> </ul> <br> Overall polyline: <ul> <li> Requirements: <ul> <li> The <code>&quot;path&quot;</code> or <code>&quot;legs&quot;</code> field must be requested in {@link google.maps.routes.ComputeRoutesRequest.fields}. </li> </ul> </li> <li> Creates a single polyline for the entire route with default styling applied. Options can be passed in to alter the polyline style based on the route travel mode. For further customization, create polylines directly using {@link google.maps.routes.Route.path} or {@link google.maps.routes.RouteLeg.path}. </li> </ul>
     */
    createPolylines(options?: google.maps.routes.RoutePolylineOptions): google.maps.Polyline[];
    /**
     * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
     * Creates a popover for the route based on the data available for the route, configured in a way suitable for annotating a route on a map. Currently uses {@link google.maps.routes.Route.localizedValues} and {@link google.maps.routes.Route.path}, if available.
     */
    createPopover(): Promise<google.maps.maps3d.PopoverElement>;
    /**
     * Creates markers for the route labeled &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, etc. for each waypoint. Markers have default styling applied. Options can be passed in to alter the marker style based on the marker index or properties of the corresponding {@link google.maps.routes.RouteLeg}. The {@link google.maps.routes.WaypointMarkerDetails.leg} parameter will be undefined if the route has no legs. <br><br> The <code>&quot;legs&quot;</code> field must be requested in {@link google.maps.routes.ComputeRoutesRequest.fields} in order for intermediate waypoints to be included.
     */
    createWaypointAdvancedMarkers(options?: google.maps.marker.AdvancedMarkerElementOptions | ((arg0: google.maps.marker.AdvancedMarkerElementOptions, arg1: google.maps.routes.WaypointMarkerDetails) => google.maps.marker.AdvancedMarkerElementOptions)): Promise<google.maps.marker.AdvancedMarkerElement[]>;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * Options for creating route 3D polylines.
   */
  export interface RoutePolyline3DOptions {
    /**
     * The color scheme to use for the 3D polyline. When specified as <code>FOLLOW_SYSTEM</code> while the map <code>colorScheme</code> is also <code>FOLLOW_SYSTEM</code>, the polylines will be drawn in the same dark/light mode as the map. When not specified, {@link google.maps.routes.Route.create3DPolylines} attempts to use the <code>colorScheme</code> of the map or falls back to the system default.
     */
    colorScheme?: google.maps.ColorSchemeString;
    /**
     * Options for customizing the style of a 3D polyline.
     */
    polylineOptions?: google.maps.maps3d.Polyline3DElementOptions | ((arg0: google.maps.maps3d.Polyline3DElementOptions, arg1: google.maps.routes.RoutePolylineDetails) => google.maps.maps3d.Polyline3DElementOptions);
  }
  /**
   * Options for creating route polylines.
   */
  export interface RoutePolylineOptions {
    /**
     * The color scheme to use for the polyline. When specified as <code>FOLLOW_SYSTEM</code> while the map <code>colorScheme</code> is also <code>FOLLOW_SYSTEM</code>, the polylines will be drawn in the same dark/light mode as the map. When not specified, {@link google.maps.routes.Route.createPolylines} attempts to use the <code>colorScheme</code> of the map or falls back to the system default.
     */
    colorScheme?: google.maps.ColorSchemeString;
    /**
     * Options for customizing the style of a polyline. Can either be a {@link google.maps.PolylineOptions} object that is applied to all polylines for the route or a function that takes default {@link google.maps.PolylineOptions} and {@link google.maps.routes.RoutePolylineDetails} and returns the {@link google.maps.PolylineOptions} to be applied to that polyline.
     */
    polylineOptions?: google.maps.PolylineOptions | ((arg0: google.maps.PolylineOptions, arg1: google.maps.routes.RoutePolylineDetails) => google.maps.PolylineOptions);
  }
  /**
   * Details about a section of a route corresponding to a polyline that can be used to customize the polyline style.
   */
  export interface RoutePolylineDetails {
    /**
     * The speed reading of the section of the route corresponding to this polyline. Only populated for routes with traffic information.
     */
    speed?: google.maps.routes.SpeedString | null;
    /**
     * The transit details of the section of the route corresponding to this polyline. Only populated for routes with transit information.
     */
    transitDetails?: google.maps.routes.TransitDetails | null;
    /**
     * The travel mode of the section of the route corresponding to this polyline. Empty for traffic polylines.
     */
    travelMode?: google.maps.TravelModeString | null;
  }
  /**
   * Details about a waypoint that can be used to customize marker style.
   */
  export interface WaypointMarkerDetails {
    /**
     * The index of the marker.
     */
    index: number;
    /**
     * The leg that the marker belongs to. Empty if the route has no legs.
     */
    leg?: google.maps.routes.RouteLeg;
    /**
     * The total number of markers in the route.
     */
    totalMarkers: number;
  }
  /**
   * Route3DElementOptions object used to define the properties that can be set on a Route3DElement.
   */
  export interface Route3DElementOptions {
    /**
     * Whether or not to opt into automatically fitting the camera to the route.
     */
    autofitsCamera?: boolean | null;
    /**
     * See {@link google.maps.routes.Route3DElement.departureTime}.
     */
    departureTime?: Date | null;
    /**
     * See {@link google.maps.routes.Route3DElement.destination}.
     */
    destination?: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    internalUsageAttributionIds?: Iterable<string> | null;
    /**
     * See {@link google.maps.routes.Route3DElement.origin}.
     */
    origin?: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null;
    /**
     * See {@link google.maps.routes.Route3DElement.routingPreference}.
     */
    routingPreference?: google.maps.routes.RoutingPreferenceString | null;
    /**
     * See {@link google.maps.routes.Route3DElement.travelMode}.
     */
    travelMode?: google.maps.TravelModeString | null;
  }
  /**
   * Available only in the v=alpha channel: https://goo.gle/js-alpha-channel.
   * A web component for 3D route rendering. Currently support origin and destination parameters to render a polyline in 3D space in a 3D map.
   * Access by calling `const {Route3DElement} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Route3DElement extends HTMLElement implements google.maps.routes.Route3DElementOptions {
    /**
     * Creates a <code>Route3DElement</code> with the options specified.
     * @param options
     */
    constructor(options?: google.maps.routes.Route3DElementOptions);
    /**
     * If provided, the specified route will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    get autofitsCamera(): boolean;
    /**
     * If provided, the specified route will be made visible within the map viewport, alongside any other elements that have opted in.
     * @defaultValue <code>false</code>
     */
    set autofitsCamera(value: boolean | null | undefined);
    /**
     * If provided, the route will be computed with the specified departure time. When specifying via HTML attribute, use the ISO 8601 format for reliable results across browsers. For information on usage requirements, see {@link google.maps.routes.ComputeRoutesRequest.departureTime}.
     */
    get departureTime(): Date | null;
    /**
     * If provided, the route will be computed with the specified departure time. When specifying via HTML attribute, use the ISO 8601 format for reliable results across browsers. For information on usage requirements, see {@link google.maps.routes.ComputeRoutesRequest.departureTime}.
     */
    set departureTime(value: Date | null | undefined);
    /**
     * The destination of the route.
     */
    get destination(): string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null;
    /**
     * The destination of the route.
     */
    set destination(value: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null | undefined);
    /**
     * Fallback info for the computed routes.
     */
    get fallbackInfo(): google.maps.routes.FallbackInfo | null;
    /**
     * Geocoding results for the origin and destination.
     */
    get geocodingResults(): google.maps.routes.GeocodingResults | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    get internalUsageAttributionIds(): string[] | null;
    /**
     * Identifiers used to attribute calls to specific packages or OSS libraries.
     */
    set internalUsageAttributionIds(value: Iterable<string> | null | undefined);
    /**
     * The origin of the route.
     */
    get origin(): string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null;
    /**
     * The origin of the route.
     */
    set origin(value: string | google.maps.LatLng | google.maps.LatLngLiteral | google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral | google.maps.places.Place | null | undefined);
    /**
     * The primary route along with optional alternate routes, computed from the Routes API.
     */
    get routes(): google.maps.routes.Route[] | null;
    /**
     * If provided, the route will be computed with traffic information along the route that&#39;s based on the {@link google.maps.routes.RoutingPreference} specified, and use traffic-specific coloring.
     */
    get routingPreference(): google.maps.routes.RoutingPreferenceString | null;
    /**
     * If provided, the route will be computed with traffic information along the route that&#39;s based on the {@link google.maps.routes.RoutingPreference} specified, and use traffic-specific coloring.
     */
    set routingPreference(value: google.maps.routes.RoutingPreferenceString | null | undefined);
    /**
     * If provided, the polyline is based on the specified travel mode.
     */
    get travelMode(): google.maps.TravelModeString | null;
    /**
     * If provided, the polyline is based on the specified travel mode.
     */
    set travelMode(value: google.maps.TravelModeString | null | undefined);
    addEventListener<K extends keyof Route3DElementEventMap>(type: K, listener: (this: Route3DElement, ev: Route3DElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
  }
  export interface Route3DElementEventMap extends HTMLElementEventMap {
    "gmp-error": Event;
    "gmp-load": Event;
  }
  /**
   * The condition of the route being returned. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routematrixelementcondition">web service documentation</a> for more information.
   *
   * Access by calling `const {RouteMatrixItemCondition} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export enum RouteMatrixItemCondition {
    /**
     * A route was found, and the corresponding information was filled out for the element. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routematrixelementcondition">web service documentation</a> for more information.
     */
    ROUTE_EXISTS = 'ROUTE_EXISTS',
    /**
     * No route could be found. See the <a href="https://developers.google.com/maps/documentation/routes/reference/rpc/google.maps.routing.v2#routematrixelementcondition">web service documentation</a> for more information.
     */
    ROUTE_NOT_FOUND = 'ROUTE_NOT_FOUND',
  }
  export type RouteMatrixItemConditionString = `${google.maps.routes.RouteMatrixItemCondition}`;
  /**
   * Text representations of the {@link google.maps.routes.RouteMatrixItem}.
   * Access by calling `const {RouteMatrixItemLocalizedValues} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteMatrixItemLocalizedValues {
    /**
     * Travel distance of the route matrix item in text form.
     */
    get distance(): string | null | undefined;
    /**
     * The distance text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get distanceLanguage(): string | null | undefined;
    /**
     * Duration, represented in text form and localized to the region of the query. Takes traffic conditions into consideration. <br><br> Note: If you did not request traffic information, this value is the same value as {@link google.maps.routes.RouteMatrixItemLocalizedValues.staticDuration}.
     */
    get duration(): string | null | undefined;
    /**
     * The duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get durationLanguage(): string | null | undefined;
    /**
     * Duration without taking traffic conditions into consideration, represented in text form.
     */
    get staticDuration(): string | null | undefined;
    /**
     * The static duration text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
     */
    get staticDurationLanguage(): string | null | undefined;
    /**
     * Transit fare, represented in text form.
     */
    get transitFare(): string | null | undefined;
    /**
     * The transit fare text&#39;s BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. <br><br> For more information, see <a href="http://www.unicode.org/reports/tr35/#Unicode_locale_identifier">http://www.unicode.org/reports/tr35/#Unicode_locale_identifier</a>.
     */
    get transitFareLanguage(): string | null | undefined;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * A matrix of routes computed for a set of origin/destination pairs by {@link google.maps.routes.RouteMatrix.computeRouteMatrix}
   * Access by calling `const {RouteMatrix} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteMatrix {
    /**
     * The rows of the matrix. Each row corresponds to an origin and contains an array of {@link google.maps.routes.RouteMatrixItem}s, each representing a route to a destination.
     */
    get rows(): google.maps.routes.RouteMatrixRow[];
    /**
     * Takes in a list of origins and destinations and returns a matrix containing route information for each combination of origin and destination. <br><br> Note: This method requires that you specify a response field mask in the request by setting the {@link google.maps.routes.ComputeRouteMatrixRequest.fields} property. The value is a list of field paths. <br><br> For example: <ul> <li> Field mask of all available fields: <code>fields: [&#39;*&#39;]</code></li> <li> Field mask of Route-level duration and distance: <code>fields: [&#39;durationMillis&#39;, &#39;distanceMeters&#39;]</code></li> </ul> <br> Use of the wildcard response field mask <code>fields: [&#39;*&#39;]</code> is discouraged because: <ul> <li>Selecting only the fields that you need helps our server save computation cycles, allowing us to return the result to you with a lower latency.</li> <li>Selecting only the fields that you need in your production job ensures stable latency performance. We might add more response fields in the future, and those new fields might require extra computation time. If you select all fields, or if you select all fields at the top level, then you might experience performance degradation because any new field we add will be automatically included in the response.</li> <li>Selecting only the fields that you need results in a smaller response size, and thus a faster load over the network.</li> </ul>
     */
    static computeRouteMatrix(request: google.maps.routes.ComputeRouteMatrixRequest): Promise<{matrix: google.maps.routes.RouteMatrix}>;
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Corresponds to an origin passed to {@link google.maps.routes.RouteMatrix.computeRouteMatrix}. Contains a list of {@link google.maps.routes.RouteMatrixItem}s, each item representing a route to a destination.
   * Access by calling `const {RouteMatrixRow} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteMatrixRow {
    /**
     * The route information for each destination.
     */
    get items(): google.maps.routes.RouteMatrixItem[];
    /**
     * Converts to a plain object.
     */
    toJSON(key?: string): unknown;
  }
  /**
   * Contains route information computed for an origin/destination pair passed to {@link google.maps.routes.RouteMatrix.computeRouteMatrix}.
   * Access by calling `const {RouteMatrixItem} = await google.maps.importLibrary("routes");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class RouteMatrixItem {
    /**
     * Indicates whether the route was found or not.
     */
    get condition(): google.maps.routes.RouteMatrixItemConditionString | null | undefined;
    /**
     * The travel distance of the route in meters.
     */
    get distanceMeters(): number | undefined;
    /**
     * The length of time needed to navigate the route in milliseconds. If you set {@link google.maps.routes.ComputeRouteMatrixRequest.routingPreference} to <code>TRAFFIC_UNAWARE</code>, then this value is the same as {@link google.maps.routes.RouteMatrixItem.staticDurationMillis}. If you set {@link google.maps.routes.ComputeRouteMatrixRequest.routingPreference} to either <code>TRAFFIC_AWARE</code> or <code>TRAFFIC_AWARE_OPTIMAL</code>, then this value is calculated taking traffic conditions into account. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get durationMillis(): number | null | undefined;
    /**
     * Error that occurred during the computation of the route.
     */
    get error(): google.maps.routes.RouteMatrixItemError | null | undefined;
    /**
     * In some cases when the server is not able to compute the route with the given preferences for this particular origin/destination pair, it may fall back to using a different mode of computation. When a fallback is used, this field contains detailed information about the fallback response. Otherwise this field is unset.
     */
    get fallbackInfo(): google.maps.routes.FallbackInfo | null | undefined;
    /**
     * Text representations of properties of the {@link google.maps.routes.RouteMatrixItem}.
     */
    get localizedValues(): google.maps.routes.RouteMatrixItemLocalizedValues | null | undefined;
    /**
     * The duration of traveling through the route without taking traffic conditions into consideration. <br><br> Note: If the duration exceeds 2^53 milliseconds, then this value is <code>Number.POSITIVE_INFINITY</code>.
     */
    get staticDurationMillis(): number | null | undefined;
    /**
     * Additional information about the route.
     */
    get travelAdvisory(): google.maps.routes.RouteTravelAdvisory | null | undefined;
  }
}

declare namespace google.maps.visualization {
  /**
   * A layer that provides a client-side rendered heatmap, depicting the intensity of data at geographical points.
   * Access by calling `const {HeatmapLayer} = await google.maps.importLibrary("visualization");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   * @deprecated The Heatmap Layer functionality in the Maps JavaScript API is no longer available in the Maps JavaScript API as of version 3.65. For more info, see <a href="https://developers.google.com/maps/deprecations">https://developers.google.com/maps/deprecations</a>.
   */
  export class HeatmapLayer {
    /**
     * Creates a new instance of <code>HeatmapLayer</code>. the layer.
     */
    constructor();
  }
}

declare namespace google.maps.Data {
  /**
   * The properties of a <code>addfeature</code> event.
   */
  export interface AddFeatureEvent {
    /**
     * The feature that was added to the <code>FeatureCollection</code>.
     */
    feature: google.maps.Data.Feature;
  }
  /**
   * Optional parameters for importing GeoJSON.
   */
  export interface GeoJsonOptions {
    /**
     * The name of the Feature property to use as the feature ID. If not specified, the GeoJSON Feature id will be used.
     */
    idPropertyName?: string | null;
  }
  /**
   * DataOptions object used to define the properties that a developer can set on a <code>Data</code> object.
   */
  export interface DataOptions {
    /**
     * The position of the drawing controls on the map.
     * @defaultValue {@link google.maps.ControlPosition.TOP_LEFT}
     */
    controlPosition?: google.maps.ControlPosition;
    /**
     * Describes which drawing modes are available for the user to select, in the order they are displayed. This should not include the <code>null</code> drawing mode, which is added by default. If <code>null</code>, drawing controls are disabled and not displayed. Possible drawing modes are <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     * @defaultValue <code>null</code>
     */
    controls?: string[] | null;
    /**
     * The current drawing mode of the given Data layer. A drawing mode of <code>null</code> means that the user can interact with the map as normal, and clicks do not draw anything. Possible drawing modes are <code>null</code>, <code>"Point"</code>, <code>"LineString"</code> or <code>"Polygon"</code>.
     * @defaultValue <code>null</code>
     */
    drawingMode?: string | null;
    /**
     * When drawing is enabled and a user draws a Geometry (a Point, Line String or Polygon), this function is called with that Geometry and should return a Feature that is to be added to the Data layer. If a featureFactory is not supplied, a Feature with no id and no properties will be created from that Geometry instead. Defaults to <code>null</code>.
     */
    featureFactory?: ((arg0: google.maps.Data.Geometry) => google.maps.Data.Feature) | null;
    /**
     * Map on which to display the features in the collection.
     */
    map: google.maps.Map;
    /**
     * Style for all features in the collection. For more details, see the <code><a href='#Data'>setStyle()</a></code> method above.
     */
    style?: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions;
  }
  /**
   * Optional parameters for creating <code>Data.Feature</code> objects.
   */
  export interface FeatureOptions {
    /**
     * The feature geometry. If none is specified when a feature is constructed, the feature&#39;s geometry will be <code>null</code>. If a <code>LatLng</code> object or <code>LatLngLiteral</code> is given, this will be converted to a <code>Data.Point</code> geometry.
     */
    geometry?: google.maps.Data.Geometry | google.maps.LatLng | google.maps.LatLngLiteral | null;
    /**
     * Feature ID is optional. If provided, it can be used to look up the feature in a <code>Data</code> object using the <code>getFeatureById()</code> method. Note that a feature&#39;s ID cannot be subsequently changed.
     */
    id?: number | string;
    /**
     * The feature properties. This is an arbitrary mapping of property names to values.
     */
    properties?: object | null;
  }
  /**
   * A superclass for the various geometry objects.
   */
  export interface Geometry {
    /**
     * Repeatedly invokes the given function, passing a point from the geometry to the function on each invocation.
     */
    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns the type of the geometry object. Possibilities are <code>"Point"</code>, <code>"MultiPoint"</code>, <code>"LineString"</code>, <code>"MultiLineString"</code>, <code>"LinearRing"</code>, <code>"Polygon"</code>, <code>"MultiPolygon"</code>, or <code>"GeometryCollection"</code>.
     */
    getType(): string;
  }
  /**
   * A Point geometry contains a single <code>LatLng</code>.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Point implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.Point</code> from the given <code>LatLng</code> or <code>LatLngLiteral</code>.
     * @param latLng
     */
    constructor(latLng: google.maps.LatLng | google.maps.LatLngLiteral);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns the contained <code>LatLng</code>.
     */
    get(): google.maps.LatLng;
    /**
     * Returns the string <code>"Point"</code>.
     */
    getType(): string;
  }
  /**
   * A feature has a geometry, an id, and a set of properties.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Feature {
    /**
     * Constructs a Feature with the given options.
     * @param options
     */
    constructor(options?: google.maps.Data.FeatureOptions | null);
    /**
     * Repeatedly invokes the given function, passing a property value and name on each invocation. The order of iteration through the properties is undefined.
     */
    forEachProperty(callback: (arg0: unknown, arg1: string) => void): void;
    /**
     * Returns the feature&#39;s geometry.
     */
    getGeometry(): google.maps.Data.Geometry | null;
    /**
     * Returns the feature ID.
     */
    getId(): number | string | undefined;
    /**
     * Returns the value of the requested property, or <code>undefined</code> if the property does not exist.
     */
    getProperty(name: string): unknown;
    /**
     * Removes the property with the given name.
     */
    removeProperty(name: string): void;
    /**
     * Sets the feature&#39;s geometry.
     */
    setGeometry(newGeometry: google.maps.Data.Geometry | google.maps.LatLng | google.maps.LatLngLiteral | null): void;
    /**
     * Sets the value of the specified property. If <code>newValue</code> is <code>undefined</code> this is equivalent to calling <code>removeProperty</code>.
     */
    setProperty(name: string, newValue: unknown): void;
    /**
     * Exports the feature to a GeoJSON object.
     */
    toGeoJson(callback: (arg0: object) => void): void;
  }
  /**
   * The properties of a <code>setgeometry</code> event.
   */
  export interface SetGeometryEvent {
    /**
     * The feature whose geometry was set.
     */
    feature: google.maps.Data.Feature;
    /**
     * The new feature geometry.
     */
    newGeometry?: google.maps.Data.Geometry;
    /**
     * The previous feature geometry.
     */
    oldGeometry?: google.maps.Data.Geometry;
  }
  /**
   * The properties of a <code>setproperty</code> event.
   */
  export interface SetPropertyEvent {
    /**
     * The feature whose property was set.
     */
    feature: google.maps.Data.Feature;
    /**
     * The property name.
     */
    name: string;
    /**
     * The new value.
     */
    newValue: unknown;
    /**
     * The previous value. Will be <code>undefined</code> if the property was added.
     */
    oldValue: unknown;
  }
  /**
   * The properties of a <code>removeproperty</code> event.
   */
  export interface RemovePropertyEvent {
    /**
     * The feature whose property was removed.
     */
    feature: google.maps.Data.Feature;
    /**
     * The property name.
     */
    name: string;
    /**
     * The previous value.
     */
    oldValue: unknown;
  }
  /**
   * This object is passed to mouse event handlers on a <code>Data</code> object.
   */
  export interface MouseEvent extends google.maps.MapMouseEvent {
    /**
     * The feature which generated the mouse event.
     */
    feature: google.maps.Data.Feature;
  }
  /**
   * The properties of a <code>removefeature</code> event.
   */
  export interface RemoveFeatureEvent {
    /**
     * The feature that was removed from the <code>FeatureCollection</code>.
     */
    feature: google.maps.Data.Feature;
  }
  /**
   * These options specify the way a Feature should appear when displayed on a map.
   */
  export interface StyleOptions {
    /**
     * The animation to play when marker is added to a map. Only applies to point geometries.
     */
    animation?: google.maps.Animation;
    /**
     * If <code>true</code>, the marker receives mouse and touch events.
     * @defaultValue <code>true</code>
     */
    clickable?: boolean;
    /**
     * Mouse cursor to show on hover. Only applies to point geometries.
     */
    cursor?: string;
    /**
     * If <code>true</code>, the object can be dragged across the map and the underlying feature will have its geometry updated.
     * @defaultValue <code>false</code>
     */
    draggable?: boolean;
    /**
     * If <code>true</code>, the object can be edited by dragging control points and the underlying feature will have its geometry updated. Only applies to LineString and Polygon geometries.
     * @defaultValue <code>false</code>
     */
    editable?: boolean;
    /**
     * The fill color. All CSS3 colors are supported except for extended named colors. Only applies to polygon geometries.
     */
    fillColor?: string;
    /**
     * The fill opacity between 0.0 and 1.0. Only applies to polygon geometries.
     */
    fillOpacity?: number;
    /**
     * Icon for the foreground. If a string is provided, it is treated as though it were an <code>Icon</code> with the string as <code>url</code>. Only applies to point geometries.
     */
    icon?: string | google.maps.Icon | google.maps.Symbol;
    /**
     * The icons to be rendered along a polyline. Only applies to line geometries.
     */
    icons?: google.maps.IconSequence[];
    /**
     * Adds a label to the marker. The label can either be a string, or a <code>MarkerLabel</code> object. Only applies to point geometries.
     */
    label?: string | google.maps.MarkerLabel;
    /**
     * The marker&#39;s opacity between 0.0 and 1.0. Only applies to point geometries.
     */
    opacity?: number;
    /**
     * Defines the image map used for hit detection. Only applies to point geometries.
     */
    shape?: google.maps.MarkerShape;
    /**
     * The stroke color. All CSS3 colors are supported except for extended named colors. Only applies to line and polygon geometries.
     */
    strokeColor?: string;
    /**
     * The stroke opacity between 0.0 and 1.0. Only applies to line and polygon geometries.
     */
    strokeOpacity?: number;
    /**
     * The stroke width in pixels. Only applies to line and polygon geometries.
     */
    strokeWeight?: number;
    /**
     * Rollover text. Only applies to point geometries.
     */
    title?: string;
    /**
     * Whether the feature is visible.
     * @defaultValue <code>true</code>
     */
    visible?: boolean;
    /**
     * All features are displayed on the map in order of their zIndex, with higher values displaying in front of features with lower values. Markers are always displayed in front of line-strings and polygons.
     */
    zIndex?: number;
  }

  export type StylingFunction = (arg0: google.maps.Data.Feature) => google.maps.Data.StyleOptions;
  /**
   * A GeometryCollection contains a number of geometry objects. Any <code>LatLng</code> or <code>LatLngLiteral</code> objects are automatically converted to <code>Data.Point</code> geometry objects.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class GeometryCollection implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.GeometryCollection</code> from the given geometry objects or <code>LatLng</code>s.
     * @param elements
     */
    constructor(elements: (google.maps.Data.Geometry | google.maps.LatLng | google.maps.LatLngLiteral)[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained geometry objects. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.Data.Geometry[];
    /**
     * Returns the <code>n</code>-th contained geometry object.
     */
    getAt(n: number): google.maps.Data.Geometry;
    /**
     * Returns the number of contained geometry objects.
     */
    getLength(): number;
    /**
     * Returns the string <code>"GeometryCollection"</code>.
     */
    getType(): string;
  }
  /**
   * A LineString geometry contains a number of <code>LatLng</code>s.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LineString implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.LineString</code> from the given <code>LatLng</code>s or <code>LatLngLiteral</code>s.
     * @param elements
     */
    constructor(elements: (google.maps.LatLng | google.maps.LatLngLiteral)[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>LatLngs</code>. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.LatLng[];
    /**
     * Returns the <code>n</code>-th contained <code>LatLng</code>.
     */
    getAt(n: number): google.maps.LatLng;
    /**
     * Returns the number of contained <code>LatLng</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"LineString"</code>.
     */
    getType(): string;
  }
  /**
   * A LinearRing geometry contains a number of <code>LatLng</code>s, representing a closed LineString. There is no need to make the first <code>LatLng</code> equal to the last <code>LatLng</code>. The LinearRing is closed implicitly.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class LinearRing implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.LinearRing</code> from the given <code>LatLng</code>s or <code>LatLngLiteral</code>s.
     * @param elements
     */
    constructor(elements: (google.maps.LatLng | google.maps.LatLngLiteral)[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>LatLng</code>s. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.LatLng[];
    /**
     * Returns the <code>n</code>-th contained <code>LatLng</code>.
     */
    getAt(n: number): google.maps.LatLng;
    /**
     * Returns the number of contained <code>LatLng</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"LinearRing"</code>.
     */
    getType(): string;
  }
  /**
   * A MultiLineString geometry contains a number of <code>LineString</code>s.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MultiLineString implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.MultiLineString</code> from the given <code>Data.LineString</code>s or arrays of positions.
     * @param elements
     */
    constructor(elements: (google.maps.Data.LineString | (google.maps.LatLng | google.maps.LatLngLiteral)[])[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>Data.LineString</code>s. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.Data.LineString[];
    /**
     * Returns the <code>n</code>-th contained <code>Data.LineString</code>.
     */
    getAt(n: number): google.maps.Data.LineString;
    /**
     * Returns the number of contained <code>Data.LineString</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"MultiLineString"</code>.
     */
    getType(): string;
  }
  /**
   * A MultiPoint geometry contains a number of <code>LatLng</code>s.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MultiPoint implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.MultiPoint</code> from the given <code>LatLng</code>s or <code>LatLngLiteral</code>s.
     * @param elements
     */
    constructor(elements: (google.maps.LatLng | google.maps.LatLngLiteral)[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>LatLng</code>s. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.LatLng[];
    /**
     * Returns the <code>n</code>-th contained <code>LatLng</code>.
     */
    getAt(n: number): google.maps.LatLng;
    /**
     * Returns the number of contained <code>LatLng</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"MultiPoint"</code>.
     */
    getType(): string;
  }
  /**
   * A Polygon geometry contains a number of <code>Data.LinearRing</code>s. The first linear-ring must be the polygon exterior boundary and subsequent linear-rings must be interior boundaries, also known as holes. See the <a href="https://developers.google.com/maps/documentation/javascript/examples/layer-data-polygon">sample polygon with a hole</a>.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class Polygon implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.Polygon</code> from the given <code>Data.LinearRing</code>s or arrays of positions.
     * @param elements
     */
    constructor(elements: (google.maps.Data.LinearRing | (google.maps.LatLng | google.maps.LatLngLiteral)[])[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>Data.LinearRing</code>s. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.Data.LinearRing[];
    /**
     * Returns the <code>n</code>-th contained <code>Data.LinearRing</code>.
     */
    getAt(n: number): google.maps.Data.LinearRing;
    /**
     * Returns the number of contained <code>Data.LinearRing</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"Polygon"</code>.
     */
    getType(): string;
  }
  /**
   * A MultiPolygon geometry contains a number of <code>Data.Polygon</code>s.
   * Access by calling `const {Data} = await google.maps.importLibrary("maps");`. See https://developers.google.com/maps/documentation/javascript/libraries.
   */
  export class MultiPolygon implements google.maps.Data.Geometry {
    /**
     * Constructs a <code>Data.MultiPolygon</code> from the given <code>Data.Polygon</code>s or arrays of positions.
     * @param elements
     */
    constructor(elements: (google.maps.Data.Polygon | (google.maps.Data.LinearRing | (google.maps.LatLng | google.maps.LatLngLiteral)[])[])[]);

    forEachLatLng(callback: (arg0: google.maps.LatLng) => void): void;
    /**
     * Returns an array of the contained <code>Data.Polygon</code>s. A new array is returned each time <code>getArray()</code> is called.
     */
    getArray(): google.maps.Data.Polygon[];
    /**
     * Returns the <code>n</code>-th contained <code>Data.Polygon</code>.
     */
    getAt(n: number): google.maps.Data.Polygon;
    /**
     * Returns the number of contained <code>Data.Polygon</code>s.
     */
    getLength(): number;
    /**
     * Returns the string <code>"MultiPolygon"</code>.
     */
    getType(): string;
  }
}
declare namespace google.maps {
  export interface HTMLElementTagNameMap {
    "gmp-map": google.maps.MapElement;
    "gmp-air-quality-meter": google.maps.airQuality.AirQualityMeterElement;
    "gmp-advanced-marker": google.maps.marker.AdvancedMarkerElement;
    "gmp-circle-path": google.maps.maps3d.CirclePathElement;
    "gmp-flattener": google.maps.maps3d.FlattenerElement;
    "gmp-marker-3d": google.maps.maps3d.Marker3DElement;
    "gmp-marker-3d-interactive": google.maps.maps3d.Marker3DInteractiveElement;
    "gmp-marker": google.maps.maps3d.MarkerElement;
    "gmp-marker-interactive": google.maps.maps3d.MarkerInteractiveElement;
    "gmp-model-3d": google.maps.maps3d.Model3DElement;
    "gmp-model-3d-interactive": google.maps.maps3d.Model3DInteractiveElement;
    "gmp-polygon-3d": google.maps.maps3d.Polygon3DElement;
    "gmp-polygon-3d-interactive": google.maps.maps3d.Polygon3DInteractiveElement;
    "gmp-polyline-3d": google.maps.maps3d.Polyline3DElement;
    "gmp-polyline-3d-interactive": google.maps.maps3d.Polyline3DInteractiveElement;
    "gmp-map-3d": google.maps.maps3d.Map3DElement;
    "gmp-popover": google.maps.maps3d.PopoverElement;
    "gmp-place-all-content": google.maps.places.PlaceAllContentElement;
    "gmp-place-accessible-entrance-icon": google.maps.places.PlaceAccessibleEntranceIconElement;
    "gmp-place-address": google.maps.places.PlaceAddressElement;
    "gmp-place-feature-list": google.maps.places.PlaceFeatureListElement;
    "gmp-place-media": google.maps.places.PlaceMediaElement;
    "gmp-place-open-now-status": google.maps.places.PlaceOpenNowStatusElement;
    "gmp-place-opening-hours": google.maps.places.PlaceOpeningHoursElement;
    "gmp-place-phone-number": google.maps.places.PlacePhoneNumberElement;
    "gmp-place-plus-code": google.maps.places.PlacePlusCodeElement;
    "gmp-place-price": google.maps.places.PlacePriceElement;
    "gmp-place-rating": google.maps.places.PlaceRatingElement;
    "gmp-place-review-summary": google.maps.places.PlaceReviewSummaryElement;
    "gmp-place-reviews": google.maps.places.PlaceReviewsElement;
    "gmp-place-summary": google.maps.places.PlaceSummaryElement;
    "gmp-place-type": google.maps.places.PlaceTypeElement;
    "gmp-place-type-specific-highlights": google.maps.places.PlaceTypeSpecificHighlightsElement;
    "gmp-place-website": google.maps.places.PlaceWebsiteElement;
    "gmp-place-attribution": google.maps.places.PlaceAttributionElement;
    "gmp-place-content-config": google.maps.places.PlaceContentConfigElement;
    "gmp-place-standard-content": google.maps.places.PlaceStandardContentElement;
    "gmp-place-details-location-request": google.maps.places.PlaceDetailsLocationRequestElement;
    "gmp-place-details-place-request": google.maps.places.PlaceDetailsPlaceRequestElement;
    "gmp-place-details-compact": google.maps.places.PlaceDetailsCompactElement;
    "gmp-place-details": google.maps.places.PlaceDetailsElement;
    "gmp-place-nearby-search-request": google.maps.places.PlaceNearbySearchRequestElement;
    "gmp-place-text-search-request": google.maps.places.PlaceTextSearchRequestElement;
    "gmp-place-search": google.maps.places.PlaceSearchElement;
    "gmp-basic-place-autocomplete": google.maps.places.BasicPlaceAutocompleteElement;
    "gmp-place-contextual-list-config": google.maps.places.PlaceContextualListConfigElement;
    "gmp-place-contextual": google.maps.places.PlaceContextualElement;
    "gmp-place-autocomplete": google.maps.places.PlaceAutocompleteElement;
    "gmp-route-3d": google.maps.routes.Route3DElement;
  }
}
declare interface HTMLElementTagNameMap extends google.maps.HTMLElementTagNameMap {}
declare namespace google.maps {
  export interface HTMLElementEventMapTagNameMap {
    "gmp-map": google.maps.MapElementEventMap;
    "gmp-air-quality-meter": google.maps.airQuality.AirQualityMeterElementEventMap;
    "gmp-advanced-marker": google.maps.marker.AdvancedMarkerElementEventMap;
    "gmp-circle-path": google.maps.maps3d.CirclePathElementEventMap;
    "gmp-flattener": google.maps.maps3d.FlattenerElementEventMap;
    "gmp-marker-3d": google.maps.maps3d.Marker3DElementEventMap;
    "gmp-marker-3d-interactive": google.maps.maps3d.Marker3DInteractiveElementEventMap;
    "gmp-marker": google.maps.maps3d.MarkerElementEventMap;
    "gmp-marker-interactive": google.maps.maps3d.MarkerInteractiveElementEventMap;
    "gmp-model-3d": google.maps.maps3d.Model3DElementEventMap;
    "gmp-model-3d-interactive": google.maps.maps3d.Model3DInteractiveElementEventMap;
    "gmp-polygon-3d": google.maps.maps3d.Polygon3DElementEventMap;
    "gmp-polygon-3d-interactive": google.maps.maps3d.Polygon3DInteractiveElementEventMap;
    "gmp-polyline-3d": google.maps.maps3d.Polyline3DElementEventMap;
    "gmp-polyline-3d-interactive": google.maps.maps3d.Polyline3DInteractiveElementEventMap;
    "gmp-map-3d": google.maps.maps3d.Map3DElementEventMap;
    "gmp-popover": google.maps.maps3d.PopoverElementEventMap;
    "gmp-place-all-content": google.maps.places.PlaceAllContentElementEventMap;
    "gmp-place-accessible-entrance-icon": google.maps.places.PlaceAccessibleEntranceIconElementEventMap;
    "gmp-place-address": google.maps.places.PlaceAddressElementEventMap;
    "gmp-place-feature-list": google.maps.places.PlaceFeatureListElementEventMap;
    "gmp-place-media": google.maps.places.PlaceMediaElementEventMap;
    "gmp-place-open-now-status": google.maps.places.PlaceOpenNowStatusElementEventMap;
    "gmp-place-opening-hours": google.maps.places.PlaceOpeningHoursElementEventMap;
    "gmp-place-phone-number": google.maps.places.PlacePhoneNumberElementEventMap;
    "gmp-place-plus-code": google.maps.places.PlacePlusCodeElementEventMap;
    "gmp-place-price": google.maps.places.PlacePriceElementEventMap;
    "gmp-place-rating": google.maps.places.PlaceRatingElementEventMap;
    "gmp-place-review-summary": google.maps.places.PlaceReviewSummaryElementEventMap;
    "gmp-place-reviews": google.maps.places.PlaceReviewsElementEventMap;
    "gmp-place-summary": google.maps.places.PlaceSummaryElementEventMap;
    "gmp-place-type": google.maps.places.PlaceTypeElementEventMap;
    "gmp-place-type-specific-highlights": google.maps.places.PlaceTypeSpecificHighlightsElementEventMap;
    "gmp-place-website": google.maps.places.PlaceWebsiteElementEventMap;
    "gmp-place-attribution": google.maps.places.PlaceAttributionElementEventMap;
    "gmp-place-content-config": google.maps.places.PlaceContentConfigElementEventMap;
    "gmp-place-standard-content": google.maps.places.PlaceStandardContentElementEventMap;
    "gmp-place-details-location-request": google.maps.places.PlaceDetailsLocationRequestElementEventMap;
    "gmp-place-details-place-request": google.maps.places.PlaceDetailsPlaceRequestElementEventMap;
    "gmp-place-details-compact": google.maps.places.PlaceDetailsCompactElementEventMap;
    "gmp-place-details": google.maps.places.PlaceDetailsElementEventMap;
    "gmp-place-nearby-search-request": google.maps.places.PlaceNearbySearchRequestElementEventMap;
    "gmp-place-text-search-request": google.maps.places.PlaceTextSearchRequestElementEventMap;
    "gmp-place-search": google.maps.places.PlaceSearchElementEventMap;
    "gmp-basic-place-autocomplete": google.maps.places.BasicPlaceAutocompleteElementEventMap;
    "gmp-place-contextual-list-config": google.maps.places.PlaceContextualListConfigElementEventMap;
    "gmp-place-contextual": google.maps.places.PlaceContextualElementEventMap;
    "gmp-place-autocomplete": google.maps.places.PlaceAutocompleteElementEventMap;
    "gmp-route-3d": google.maps.routes.Route3DElementEventMap;
  }
}
declare namespace google.maps {
  export interface CSSProperties {
    "--gmp-button-border-color"?: string;
    "--gmp-button-border-radius"?: string;
    "--gmp-button-border-width"?: string;
    "--gmp-card-border-radius"?: string;
    "--gmp-collage-border-radius-outer"?: string;
    "--gmp-dialog-border-radius"?: string;
    "--gmp-mat-color-disabled-surface"?: string;
    "--gmp-mat-color-info"?: string;
    "--gmp-mat-color-negative"?: string;
    "--gmp-mat-color-neutral-container"?: string;
    "--gmp-mat-color-on-neutral-container"?: string;
    "--gmp-mat-color-on-positive-container"?: string;
    "--gmp-mat-color-on-secondary-container"?: string;
    "--gmp-mat-color-on-surface"?: string;
    "--gmp-mat-color-on-surface-variant"?: string;
    "--gmp-mat-color-outline-decorative"?: string;
    "--gmp-mat-color-positive"?: string;
    "--gmp-mat-color-positive-container"?: string;
    "--gmp-mat-color-primary"?: string;
    "--gmp-mat-color-secondary-container"?: string;
    "--gmp-mat-color-surface"?: string;
    "--gmp-mat-font-body-medium"?: string;
    "--gmp-mat-font-body-small"?: string;
    "--gmp-mat-font-display-small"?: string;
    "--gmp-mat-font-family"?: string;
    "--gmp-mat-font-headline-medium"?: string;
    "--gmp-mat-font-label-large"?: string;
    "--gmp-mat-font-label-medium"?: string;
    "--gmp-mat-font-title-medium"?: string;
    "--gmp-mat-font-title-small"?: string;
    "--gmp-mat-spacing-extra-large"?: string;
    "--gmp-mat-spacing-extra-small"?: string;
    "--gmp-mat-spacing-large"?: string;
    "--gmp-mat-spacing-medium"?: string;
    "--gmp-mat-spacing-small"?: string;
    "--gmp-mat-spacing-two-extra-large"?: string;
    "--gmp-popover-max-width"?: string;
    "--gmp-popover-min-width"?: string;
    "--gmp-popover-pixel-offset-x"?: string;
    "--gmp-popover-pixel-offset-y"?: string;
    "--gmp-star-rating-color"?: string;
    "--gmp-thumbnail-border-radius"?: string;
  }
}