diff --git a/eslint.config.mjs b/eslint.config.mjs index 63458d0c..c2845b97 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -101,6 +101,7 @@ export default tseslint.config( rules: { '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-explicit-any': 'off', 'react/display-name': 'off' } }, diff --git a/examples/map-3d-markers/package.json b/examples/map-3d-markers/package.json index 1acd7690..739e585f 100644 --- a/examples/map-3d-markers/package.json +++ b/examples/map-3d-markers/package.json @@ -4,8 +4,8 @@ "@vis.gl/react-google-maps": "^1.8.0-rc.8", "react": "^19.0.0", "react-dom": "^19.0.0", - "typescript": "^5.4.5", - "vite": "^6.0.11" + "typescript": "^6.0.3", + "vite": "^8.0.8" }, "scripts": { "start": "vite", diff --git a/examples/map-3d-markers/types/google.maps.d.ts b/examples/map-3d-markers/types/google.maps.d.ts deleted file mode 100644 index 9335d8bc..00000000 --- a/examples/map-3d-markers/types/google.maps.d.ts +++ /dev/null @@ -1,766 +0,0 @@ -/* eslint-disable @typescript-eslint/no-empty-object-type */ -declare namespace google.maps { - /** - * Namespace for 3D Maps functionality. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map - */ - namespace maps3d { - /** - * Specifies a mode the map should be rendered in. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#MapMode - */ - enum MapMode { - /** This map mode displays a transparent layer of major streets on satellite imagery. */ - HYBRID = 'HYBRID', - /** This map mode displays satellite or photorealistic imagery. */ - SATELLITE = 'SATELLITE' - } - - /** - * Specifies how gesture events should be handled on the map element. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#GestureHandling - */ - enum GestureHandling { - /** - * This lets the map choose whether to use cooperative or greedy gesture handling. - * This is the default behavior if not specified. - * 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' - } - - /** - * Customization options for the FlyCameraAround Animation. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#FlyAroundAnimationOptions - */ - interface FlyAroundAnimationOptions { - /** - * The central point at which the camera should look at during the orbit animation. - */ - camera: 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. - */ - repeatCount?: number; - /** - * @deprecated Please use repeatCount instead. - */ - rounds?: number; - } - - /** - * Customization options for the FlyCameraTo Animation. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#FlyToAnimationOptions - */ - interface FlyToAnimationOptions { - /** - * The location at which the camera should point at the end of the animation. - */ - endCamera: CameraOptions; - /** - * The duration of the animation in milliseconds. - * A duration of 0 will teleport the camera straight to the end position. - */ - durationMillis?: number; - } - - /** - * CameraOptions object used to define the properties that can be set on a camera object. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#CameraOptions - */ - interface CameraOptions { - center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral; - heading?: number; - range?: number; - roll?: number; - tilt?: number; - } - - /** - * This event is created from monitoring a steady state of Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#SteadyChangeEvent - */ - class SteadyChangeEvent extends Event { - /** - * Indicates whether Map3DElement is steady (i.e. all rendering for the current scene has completed) or not. - */ - isSteady: boolean; - } - - /** - * This event is created from clicking a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#LocationClickEvent - */ - class LocationClickEvent extends Event { - /** - * The latitude/longitude/altitude that was below the cursor when the event occurred. - */ - position?: google.maps.LatLngAltitude; - } - - /** - * This event is created from clicking on a place icon on a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PlaceClickEvent - */ - class PlaceClickEvent extends LocationClickEvent { - /** - * The place id of the map feature. - */ - placeId: string; - - /** - * Fetches a Place for this place id. - */ - fetchPlace(): Promise; - } - - /** - * Shows a position on a 3D map. - * Note that the position must be set for the Marker3DElement to display. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DElement - */ - class Marker3DElement - extends HTMLElement - implements Marker3DElementOptions - { - constructor(options?: Marker3DElementOptions); - - /** - * Specifies how the altitude component of the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * An enumeration specifying how a Marker3DElement should behave when it collides with another Marker3DElement or with the basemap labels. - * @default CollisionBehavior.REQUIRED - */ - collisionBehavior?: google.maps.marker.CollisionBehavior; - - /** - * Specifies whether this marker should be drawn or not when it's occluded. - * @default false - */ - drawsWhenOccluded?: boolean; - - /** - * Specifies whether to connect the marker to the ground. - * @default false - */ - extruded?: boolean; - - /** - * Text to be displayed by this marker. - */ - label?: string; - - /** - * The location of the tip of the marker. - */ - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - - /** - * Specifies whether this marker should preserve its size or not regardless of distance from camera. - * @default false - */ - sizePreserved?: boolean; - - /** - * The zIndex compared to other markers. - */ - zIndex?: number; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Marker3DElementOptions object used to define the properties that can be set on a Marker3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DElementOptions - */ - interface Marker3DElementOptions { - altitudeMode?: AltitudeMode; - collisionBehavior?: google.maps.marker.CollisionBehavior; - drawsWhenOccluded?: boolean; - extruded?: boolean; - label?: string; - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - sizePreserved?: boolean; - zIndex?: number; - } - - /** - * Shows a position on a 3D map with interactive capabilities. - * Unlike Marker3DElement, Marker3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DInteractiveElement - */ - class Marker3DInteractiveElement - extends Marker3DElement - implements Marker3DInteractiveElementOptions - { - constructor(options?: Marker3DInteractiveElementOptions); - - /** - * When set, the popover element will be open on this marker's click. - */ - gmpPopoverTargetElement?: PopoverElement; - - /** - * Rollover text. - */ - title: string; - } - - /** - * Marker3DInteractiveElementOptions object used to define the properties that can be set on a Marker3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DInteractiveElementOptions - */ - interface Marker3DInteractiveElementOptions extends Marker3DElementOptions { - gmpPopoverTargetElement?: PopoverElement; - title?: string; - } - - /** - * A 3D model which allows the rendering of gLTF models. - * Note that the position and the src must be set for the Model3DElement to display. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DElement - */ - class Model3DElement extends HTMLElement implements Model3DElementOptions { - constructor(options?: Model3DElementOptions); - - /** - * Specifies how altitude in the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Describes rotation of a 3D model's coordinate system to position the model on the 3D Map. - */ - orientation?: - | google.maps.Orientation3D - | google.maps.Orientation3DLiteral; - - /** - * Sets the Model3DElement's position. - */ - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - - /** - * Scales the model along the x, y, and z axes in the model's coordinate space. - * @default 1 - */ - scale?: number | google.maps.Vector3D | google.maps.Vector3DLiteral; - - /** - * Specifies the url of the 3D model. At this time, only models in the .glb format are supported. - */ - src?: string | URL; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Model3DElementOptions object used to define the properties that can be set on a Model3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DElementOptions - */ - interface Model3DElementOptions { - altitudeMode?: AltitudeMode; - orientation?: - | google.maps.Orientation3D - | google.maps.Orientation3DLiteral; - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - scale?: number | google.maps.Vector3D | google.maps.Vector3DLiteral; - src?: string | URL; - } - - /** - * A 3D model with interactive capabilities. - * Unlike Model3DElement, Model3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DInteractiveElement - */ - class Model3DInteractiveElement - extends Model3DElement - implements Model3DInteractiveElementOptions - { - constructor(options?: Model3DElementOptions); - } - - /** - * Model3DInteractiveElementOptions object used to define the properties that can be set on a Model3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DInteractiveElementOptions - */ - interface Model3DInteractiveElementOptions extends Model3DElementOptions {} - - /** - * A 3D polyline is a linear overlay of connected line segments on a 3D map. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DElement - */ - class Polyline3DElement - extends HTMLElement - implements Polyline3DElementOptions - { - constructor(options?: Polyline3DElementOptions); - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Specifies whether parts of the polyline which could be occluded are drawn or not. - * @default false - */ - drawsOccludedSegments?: boolean; - - /** - * Specifies whether to connect the polyline to the ground. - * @default false - */ - extruded?: boolean; - - /** - * When true, edges of the polyline are interpreted as geodesic. - * @default false - */ - geodesic?: boolean; - - /** - * The outer color. All CSS3 colors are supported. - */ - outerColor?: string; - - /** - * The outer width is between 0.0 and 1.0. This is a percentage of the strokeWidth. - */ - outerWidth?: number; - - /** - * The ordered sequence of coordinates of the Polyline. - */ - path?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * The stroke color. All CSS3 colors are supported. - */ - strokeColor?: string; - - /** - * The stroke width in pixels. - */ - strokeWidth?: number; - - /** - * The zIndex compared to other polys. - */ - zIndex?: number; - - /** - * @deprecated Use path instead. - */ - coordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Polyline3DElementOptions object used to define the properties that can be set on a Polyline3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DElementOptions - */ - interface Polyline3DElementOptions { - altitudeMode?: AltitudeMode; - /** @deprecated Use path instead. */ - coordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - drawsOccludedSegments?: boolean; - extruded?: boolean; - geodesic?: boolean; - outerColor?: string; - outerWidth?: number; - strokeColor?: string; - strokeWidth?: number; - zIndex?: number; - } - - /** - * A 3D polyline with interactive capabilities. - * Unlike Polyline3DElement, Polyline3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DInteractiveElement - */ - class Polyline3DInteractiveElement - extends Polyline3DElement - implements Polyline3DInteractiveElementOptions - { - constructor(options?: Polyline3DElementOptions); - } - - /** - * Polyline3DInteractiveElementOptions object used to define the properties that can be set on a Polyline3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DInteractiveElementOptions - */ - interface Polyline3DInteractiveElementOptions extends Polyline3DElementOptions {} - - /** - * A 3D polygon defines a series of connected coordinates in an ordered sequence. - * Polygons form a closed loop and define a filled region. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DElement - */ - class Polygon3DElement - extends HTMLElement - implements Polygon3DElementOptions - { - constructor(options?: Polygon3DElementOptions); - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Specifies whether parts of the polygon which could be occluded are drawn or not. - * @default false - */ - drawsOccludedSegments?: boolean; - - /** - * Specifies whether to connect the polygon to the ground. - * @default false - */ - extruded?: boolean; - - /** - * The fill color. All CSS3 colors are supported. - */ - fillColor?: string; - - /** - * When true, edges of the polygon are interpreted as geodesic. - * @default false - */ - geodesic?: boolean; - - /** - * The ordered sequence of coordinates that designates a closed loop. - */ - innerPaths?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - - /** - * The ordered sequence of coordinates that designates a closed loop. - */ - path?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * The stroke color. All CSS3 colors are supported. - */ - strokeColor?: string; - - /** - * The stroke width in pixels. - */ - strokeWidth?: number; - - /** - * The zIndex compared to other polys. - */ - zIndex?: number; - - /** - * @deprecated Use path instead. - */ - outerCoordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * @deprecated Use innerPaths instead. - */ - innerCoordinates?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Polygon3DElementOptions object used to define the properties that can be set on a Polygon3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DElementOptions - */ - interface Polygon3DElementOptions { - altitudeMode?: AltitudeMode; - drawsOccludedSegments?: boolean; - extruded?: boolean; - fillColor?: string; - geodesic?: boolean; - /** @deprecated Use innerPaths instead. */ - innerCoordinates?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - /** @deprecated Use path instead. */ - outerCoordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - strokeColor?: string; - strokeWidth?: number; - zIndex?: number; - } - - /** - * A 3D polygon with interactive capabilities. - * Unlike Polygon3DElement, Polygon3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DInteractiveElement - */ - class Polygon3DInteractiveElement - extends Polygon3DElement - implements Polygon3DInteractiveElementOptions - { - constructor(options?: Polygon3DElementOptions); - } - - /** - * Polygon3DInteractiveElementOptions object used to define the properties that can be set on a Polygon3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DInteractiveElementOptions - */ - interface Polygon3DInteractiveElementOptions extends Polygon3DElementOptions {} - - /** - * A custom HTML element that renders a popover. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PopoverElement - */ - class PopoverElement extends HTMLElement implements PopoverElementOptions { - constructor(options?: PopoverElementOptions); - - /** - * Specifies how the altitude component of the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * - */ - autoPanDisabled?: boolean; - - /** - * Specifies whether this popover should be "light dismissed" or not. - * @default false - */ - lightDismissDisabled?: boolean; - - /** - * Specifies whether this popover should be open or not. - * @default false - */ - open?: boolean; - - /** - * The position at which to display this popover. - */ - positionAnchor?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitudeLiteral - | Marker3DInteractiveElement - | string; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * PopoverElementOptions object used to define the properties that can be set on a PopoverElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PopoverElementOptions - */ - interface PopoverElementOptions { - altitudeMode?: AltitudeMode; - autoPanDisabled?: boolean; - lightDismissDisabled?: boolean; - open?: boolean; - positionAnchor?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitudeLiteral - | string - | Marker3DInteractiveElement; - } - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#AltitudeMode - */ - enum AltitudeMode { - /** - * Allows to express objects relative to the average mean sea level. - */ - ABSOLUTE = 'ABSOLUTE', - /** - * Allows to express objects placed on the ground. - */ - CLAMP_TO_GROUND = 'CLAMP_TO_GROUND', - /** - * Allows to express objects relative to the ground surface. - */ - RELATIVE_TO_GROUND = 'RELATIVE_TO_GROUND', - /** - * Allows to express objects relative to the highest of ground+building+water surface. - */ - RELATIVE_TO_MESH = 'RELATIVE_TO_MESH' - } - - /** - * Map3DElementOptions object used to define the properties that can be set on a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Map3DElementOptions - */ - interface Map3DElementOptions { - bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral; - center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral; - defaultLabelsDisabled?: boolean; - defaultUIDisabled?: boolean; - gestureHandling?: GestureHandling; - heading?: number; - maxAltitude?: number; - maxHeading?: number; - maxTilt?: number; - minAltitude?: number; - minHeading?: number; - minTilt?: number; - mode?: MapMode; - range?: number; - roll?: number; - tilt?: number; - } - - /** - * Augmentation for Map3DElement to add animation methods. - * The base Map3DElement class is defined in @types/google.maps. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Map3DElement - */ - interface Map3DElement { - /** - * Starts an animation that makes the camera orbit around a point. - * @param options Configuration options for the animation - */ - flyCameraAround(options: FlyAroundAnimationOptions): void; - - /** - * Starts an animation that moves the camera to a new position. - * @param options Configuration options for the animation - */ - flyCameraTo(options: FlyToAnimationOptions): void; - - /** - * Stops any currently running camera animation. - */ - stopCameraAnimation(): void; - } - } -} diff --git a/examples/map-3d/package.json b/examples/map-3d/package.json index acc037e2..46c5f275 100644 --- a/examples/map-3d/package.json +++ b/examples/map-3d/package.json @@ -5,7 +5,7 @@ "@vis.gl/react-google-maps": "latest", "react": "^19.0.0", "react-dom": "^19.0.0", - "typescript": "^5.4.5", + "typescript": "^6.0.3", "vite": "^8.0.0" }, "scripts": { diff --git a/examples/nextjs/package.json b/examples/nextjs/package.json index 25e0bee8..e55a66f3 100644 --- a/examples/nextjs/package.json +++ b/examples/nextjs/package.json @@ -16,6 +16,6 @@ "@types/react-dom": "^19.1.9", "eslint": "^10.0.3", "eslint-config-next": "^16.1.1", - "typescript": "^5" + "typescript": "^6.0.3" } } diff --git a/package-lock.json b/package-lock.json index b9228cb0..485f25af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -700,9 +700,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", - "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", "optional": true, @@ -712,9 +712,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", - "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, "license": "MIT", "optional": true, @@ -907,29 +907,43 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1084,9 +1098,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { @@ -1560,9 +1574,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.124.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.124.0.tgz", - "integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==", + "version": "0.126.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.126.0.tgz", + "integrity": "sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==", "dev": true, "license": "MIT", "funding": { @@ -1594,9 +1608,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz", - "integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.16.tgz", + "integrity": "sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==", "cpu": [ "arm64" ], @@ -1611,9 +1625,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz", - "integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.16.tgz", + "integrity": "sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==", "cpu": [ "arm64" ], @@ -1628,9 +1642,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz", - "integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.16.tgz", + "integrity": "sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==", "cpu": [ "x64" ], @@ -1645,9 +1659,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz", - "integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.16.tgz", + "integrity": "sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==", "cpu": [ "x64" ], @@ -1662,9 +1676,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz", - "integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.16.tgz", + "integrity": "sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==", "cpu": [ "arm" ], @@ -1679,9 +1693,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz", - "integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.16.tgz", + "integrity": "sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==", "cpu": [ "arm64" ], @@ -1696,9 +1710,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz", - "integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.16.tgz", + "integrity": "sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==", "cpu": [ "arm64" ], @@ -1713,9 +1727,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz", - "integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.16.tgz", + "integrity": "sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==", "cpu": [ "ppc64" ], @@ -1730,9 +1744,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz", - "integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.16.tgz", + "integrity": "sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==", "cpu": [ "s390x" ], @@ -1747,9 +1761,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz", - "integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.16.tgz", + "integrity": "sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==", "cpu": [ "x64" ], @@ -1764,9 +1778,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz", - "integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.16.tgz", + "integrity": "sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==", "cpu": [ "x64" ], @@ -1781,9 +1795,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz", - "integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.16.tgz", + "integrity": "sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==", "cpu": [ "arm64" ], @@ -1798,9 +1812,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz", - "integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.16.tgz", + "integrity": "sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==", "cpu": [ "wasm32" ], @@ -1810,16 +1824,39 @@ "dependencies": { "@emnapi/core": "1.9.2", "@emnapi/runtime": "1.9.2", - "@napi-rs/wasm-runtime": "^1.1.3" + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.3.tgz", - "integrity": "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "dev": true, "license": "MIT", "optional": true, @@ -1836,9 +1873,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz", - "integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.16.tgz", + "integrity": "sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==", "cpu": [ "arm64" ], @@ -1853,9 +1890,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz", - "integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.16.tgz", + "integrity": "sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==", "cpu": [ "x64" ], @@ -1870,9 +1907,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz", - "integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.16.tgz", + "integrity": "sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==", "dev": true, "license": "MIT" }, @@ -2001,9 +2038,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", - "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", "cpu": [ "arm" ], @@ -2015,9 +2052,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", - "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", "cpu": [ "arm64" ], @@ -2029,9 +2066,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", - "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", "cpu": [ "arm64" ], @@ -2043,9 +2080,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", - "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", "cpu": [ "x64" ], @@ -2057,9 +2094,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", - "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", "cpu": [ "arm64" ], @@ -2071,9 +2108,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", - "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", "cpu": [ "x64" ], @@ -2085,9 +2122,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", - "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", "cpu": [ "arm" ], @@ -2099,9 +2136,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", - "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", "cpu": [ "arm" ], @@ -2113,9 +2150,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", - "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", "cpu": [ "arm64" ], @@ -2127,9 +2164,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", - "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", "cpu": [ "arm64" ], @@ -2141,9 +2178,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", - "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", "cpu": [ "loong64" ], @@ -2155,9 +2192,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", - "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", "cpu": [ "loong64" ], @@ -2169,9 +2206,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", - "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", "cpu": [ "ppc64" ], @@ -2183,9 +2220,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", - "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", "cpu": [ "ppc64" ], @@ -2197,9 +2234,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", - "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", "cpu": [ "riscv64" ], @@ -2211,9 +2248,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", - "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", "cpu": [ "riscv64" ], @@ -2225,9 +2262,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", - "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", "cpu": [ "s390x" ], @@ -2239,9 +2276,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", - "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", "cpu": [ "x64" ], @@ -2253,9 +2290,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", - "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", "cpu": [ "x64" ], @@ -2267,9 +2304,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", - "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", "cpu": [ "x64" ], @@ -2281,9 +2318,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", - "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", "cpu": [ "arm64" ], @@ -2295,9 +2332,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", - "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", "cpu": [ "arm64" ], @@ -2309,9 +2346,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", - "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", "cpu": [ "ia32" ], @@ -2323,9 +2360,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", - "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", "cpu": [ "x64" ], @@ -2337,9 +2374,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", - "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", "cpu": [ "x64" ], @@ -2368,9 +2405,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.2.0.tgz", - "integrity": "sha512-+SM3gQi95RWZLlD+Npy/UC5mHftlXwnVJMRpMyiqjrF4yNnbvi/Ubh3x9sLw6gxWSuibOn00uiLu1CKozehWlQ==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.2.tgz", + "integrity": "sha512-mrn35Jl2pCpns+mE3HaZa1yPN5EYCRgiMI+135COjr2hr8Cls9DXqIZ57vZe2cz7y2XVSq92tcs6kGQcT1J8Rw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2539,9 +2576,9 @@ "license": "MIT" }, "node_modules/@types/google.maps": { - "version": "3.58.1", - "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", - "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==", + "version": "3.64.0", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.64.0.tgz", + "integrity": "sha512-dN0H6tB4lgLQLovcbPXFYYOEV41TpyyJghzb5jrzjB96FZmjeOghevVdC+BMGd6YqyCqXaggyEtqRXLRjzCBZA==", "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { @@ -2637,13 +2674,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~7.19.0" } }, "node_modules/@types/react": { @@ -2705,17 +2742,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.1.tgz", - "integrity": "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.1", - "@typescript-eslint/type-utils": "8.58.1", - "@typescript-eslint/utils": "8.58.1", - "@typescript-eslint/visitor-keys": "8.58.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -2728,7 +2765,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.58.1", + "@typescript-eslint/parser": "^8.59.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -2744,16 +2781,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.1.tgz", - "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.58.1", - "@typescript-eslint/types": "8.58.1", - "@typescript-eslint/typescript-estree": "8.58.1", - "@typescript-eslint/visitor-keys": "8.58.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "engines": { @@ -2769,14 +2806,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.1.tgz", - "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.58.1", - "@typescript-eslint/types": "^8.58.1", + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "engines": { @@ -2791,14 +2828,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.1.tgz", - "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.1", - "@typescript-eslint/visitor-keys": "8.58.1" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2809,9 +2846,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.1.tgz", - "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "dev": true, "license": "MIT", "engines": { @@ -2826,15 +2863,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.1.tgz", - "integrity": "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.1", - "@typescript-eslint/typescript-estree": "8.58.1", - "@typescript-eslint/utils": "8.58.1", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2851,9 +2888,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.1.tgz", - "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "dev": true, "license": "MIT", "engines": { @@ -2865,16 +2902,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.1.tgz", - "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.58.1", - "@typescript-eslint/tsconfig-utils": "8.58.1", - "@typescript-eslint/types": "8.58.1", - "@typescript-eslint/visitor-keys": "8.58.1", + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2945,16 +2982,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.1.tgz", - "integrity": "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.1", - "@typescript-eslint/types": "8.58.1", - "@typescript-eslint/typescript-estree": "8.58.1" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2969,13 +3006,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.1.tgz", - "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3682,9 +3719,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.13.tgz", - "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", + "version": "2.10.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", + "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3695,9 +3732,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3770,15 +3807,15 @@ "license": "MIT" }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -3840,9 +3877,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001784", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz", - "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==", + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", "dev": true, "funding": [ { @@ -4315,9 +4352,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.330", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.330.tgz", - "integrity": "sha512-jFNydB5kFtYUobh4IkWUnXeyDbjf/r9gcUEXe1xcrcUxIGfTdzPXA+ld6zBRbwvgIGVzDll/LTIiDztEtckSnA==", + "version": "1.5.343", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.343.tgz", + "integrity": "sha512-YHnQ3MXI08icvL9ZKnEBy05F2EQ8ob01UaMOuMbM8l+4UcAq6MPPbBTJBbsBUg3H8JeZNt+O4fjsoWth3p6IFg==", "dev": true, "license": "ISC" }, @@ -4365,9 +4402,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -4454,16 +4491,16 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.1.tgz", - "integrity": "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.24.1", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", @@ -4475,8 +4512,7 @@ "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", - "math-intrinsics": "^1.1.0", - "safe-array-concat": "^1.1.3" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4675,9 +4711,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", - "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { @@ -4691,7 +4727,7 @@ "node": ">=18" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { @@ -5233,9 +5269,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -5412,9 +5448,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "dev": true, "license": "MIT", "dependencies": { @@ -7896,9 +7932,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, "license": "MIT" }, @@ -8603,9 +8639,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "dev": true, "funding": [ { @@ -8642,9 +8678,9 @@ } }, "node_modules/prettier": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz", - "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { @@ -8848,12 +8884,13 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -8902,14 +8939,14 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.15", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.15.tgz", - "integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==", + "version": "1.0.0-rc.16", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.16.tgz", + "integrity": "sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.124.0", - "@rolldown/pluginutils": "1.0.0-rc.15" + "@oxc-project/types": "=0.126.0", + "@rolldown/pluginutils": "1.0.0-rc.16" }, "bin": { "rolldown": "bin/cli.mjs" @@ -8918,27 +8955,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.15", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.15", - "@rolldown/binding-darwin-x64": "1.0.0-rc.15", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.15", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" + "@rolldown/binding-android-arm64": "1.0.0-rc.16", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.16", + "@rolldown/binding-darwin-x64": "1.0.0-rc.16", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.16", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.16", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.16", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.16", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.16", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.16", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.16", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.16", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.16", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.16", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.16", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.16" } }, "node_modules/rollup": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", - "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8952,31 +8989,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.1", - "@rollup/rollup-android-arm64": "4.60.1", - "@rollup/rollup-darwin-arm64": "4.60.1", - "@rollup/rollup-darwin-x64": "4.60.1", - "@rollup/rollup-freebsd-arm64": "4.60.1", - "@rollup/rollup-freebsd-x64": "4.60.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", - "@rollup/rollup-linux-arm-musleabihf": "4.60.1", - "@rollup/rollup-linux-arm64-gnu": "4.60.1", - "@rollup/rollup-linux-arm64-musl": "4.60.1", - "@rollup/rollup-linux-loong64-gnu": "4.60.1", - "@rollup/rollup-linux-loong64-musl": "4.60.1", - "@rollup/rollup-linux-ppc64-gnu": "4.60.1", - "@rollup/rollup-linux-ppc64-musl": "4.60.1", - "@rollup/rollup-linux-riscv64-gnu": "4.60.1", - "@rollup/rollup-linux-riscv64-musl": "4.60.1", - "@rollup/rollup-linux-s390x-gnu": "4.60.1", - "@rollup/rollup-linux-x64-gnu": "4.60.1", - "@rollup/rollup-linux-x64-musl": "4.60.1", - "@rollup/rollup-openbsd-x64": "4.60.1", - "@rollup/rollup-openharmony-arm64": "4.60.1", - "@rollup/rollup-win32-arm64-msvc": "4.60.1", - "@rollup/rollup-win32-ia32-msvc": "4.60.1", - "@rollup/rollup-win32-x64-gnu": "4.60.1", - "@rollup/rollup-win32-x64-msvc": "4.60.1", + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", "fsevents": "~2.3.2" } }, @@ -9014,15 +9051,15 @@ "license": "MIT" }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -9211,14 +9248,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -9774,14 +9811,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -10057,9 +10094,9 @@ } }, "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10071,16 +10108,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.58.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.1.tgz", - "integrity": "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz", + "integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.58.1", - "@typescript-eslint/parser": "8.58.1", - "@typescript-eslint/typescript-estree": "8.58.1", - "@typescript-eslint/utils": "8.58.1" + "@typescript-eslint/eslint-plugin": "8.59.0", + "@typescript-eslint/parser": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10128,9 +10165,9 @@ } }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "dev": true, "license": "MIT" }, @@ -10237,17 +10274,17 @@ } }, "node_modules/vite": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz", - "integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.9.tgz", + "integrity": "sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.15", - "tinyglobby": "^0.2.15" + "postcss": "^8.5.10", + "rolldown": "1.0.0-rc.16", + "tinyglobby": "^0.2.16" }, "bin": { "vite": "bin/vite.js" diff --git a/src/components/__tests__/__utils__/wait-for-mock-instance.ts b/src/components/__tests__/__utils__/wait-for-mock-instance.ts index b904c1bc..0f9cf884 100644 --- a/src/components/__tests__/__utils__/wait-for-mock-instance.ts +++ b/src/components/__tests__/__utils__/wait-for-mock-instance.ts @@ -2,7 +2,6 @@ import {waitFor} from '@testing-library/react'; import {mockInstances} from '@googlemaps/jest-mocks'; type Constructable = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any new (...args: any[]): unknown; }; diff --git a/src/components/__tests__/__utils__/wait-for-spy.ts b/src/components/__tests__/__utils__/wait-for-spy.ts index 3eb05e4b..5f37a51d 100644 --- a/src/components/__tests__/__utils__/wait-for-spy.ts +++ b/src/components/__tests__/__utils__/wait-for-spy.ts @@ -5,7 +5,7 @@ import {waitFor} from '@testing-library/react'; * arguments passed to the last call. * @param spy */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any + export async function waitForSpy any>( spy: | jest.Mock, Parameters> diff --git a/src/components/__tests__/advanced-marker.test.tsx b/src/components/__tests__/advanced-marker.test.tsx index b56cc401..e29c9bca 100644 --- a/src/components/__tests__/advanced-marker.test.tsx +++ b/src/components/__tests__/advanced-marker.test.tsx @@ -166,7 +166,7 @@ describe('map and marker-library loaded', () => { describe('anchoring with modern API', () => { beforeEach(() => { - google.maps.version = '3.62.9'; + (google.maps as any).version = '3.62.9'; }); test('anchorLeft/anchorTop should have precedence over anchorPoint', async () => { @@ -213,7 +213,7 @@ describe('map and marker-library loaded', () => { describe('anchoring with legacy API', () => { beforeEach(() => { - google.maps.version = '3.61.0'; + (google.maps as any).version = '3.61.0'; }); test('anchorPoint is applied as css transform', async () => { diff --git a/src/components/__tests__/api-provider.test.tsx b/src/components/__tests__/api-provider.test.tsx index abdcba5d..e0b228bd 100644 --- a/src/components/__tests__/api-provider.test.tsx +++ b/src/components/__tests__/api-provider.test.tsx @@ -75,7 +75,11 @@ beforeEach(() => { resetImportLibraryPromise(); // Mock google.maps.Settings (missing in @googlemaps/jest-mocks) - settingsInstance = {fetchAppCheckToken: null} as google.maps.Settings; + settingsInstance = { + fetchAppCheckToken: async () => ({token: ''}), + experienceIds: [] + } as google.maps.Settings; + google.maps.Settings = { getInstance: () => settingsInstance } as unknown as typeof google.maps.Settings; diff --git a/src/components/__tests__/marker.test.tsx b/src/components/__tests__/marker.test.tsx index 3605a9f0..2b2722d1 100644 --- a/src/components/__tests__/marker.test.tsx +++ b/src/components/__tests__/marker.test.tsx @@ -23,7 +23,7 @@ beforeEach(() => { // overwrite marker mock so we can spy on the constructor createMarkerSpy = jest.fn(); google.maps.Marker = class extends google.maps.Marker { - constructor(opts?: google.maps.MarkerOptions | null) { + constructor(opts?: google.maps.MarkerOptions) { createMarkerSpy(opts); super(opts); } diff --git a/src/components/advanced-marker.tsx b/src/components/advanced-marker.tsx index ca9d521d..d447048d 100644 --- a/src/components/advanced-marker.tsx +++ b/src/components/advanced-marker.tsx @@ -237,6 +237,7 @@ function useAdvancedMarker(props: AdvancedMarkerProps) { const newMarker = new markerLibrary.AdvancedMarkerElement(); newMarker.map = map; + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setMarker(newMarker); // create the container for marker content if there are children diff --git a/src/components/api-provider.tsx b/src/components/api-provider.tsx index 45b69ea1..91d36127 100644 --- a/src/components/api-provider.tsx +++ b/src/components/api-provider.tsx @@ -263,6 +263,7 @@ function useGoogleMapsApiLoader(props: APIProviderProps) { listeners.add(setStatus); // sync component state on mount (shouldn't be different from the initial state) + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional synchronization of status from singleton setStatus(loadingStatus); return () => { @@ -374,8 +375,6 @@ function useGoogleMapsApiLoader(props: APIProviderProps) { const settings = google.maps.Settings.getInstance(); if (fetchAppCheckToken) { settings.fetchAppCheckToken = fetchAppCheckToken; - } else if (settings.fetchAppCheckToken) { - settings.fetchAppCheckToken = null; } }, [status, fetchAppCheckToken]); diff --git a/src/components/circle.tsx b/src/components/circle.tsx index c839b1b4..f32ad35e 100644 --- a/src/components/circle.tsx +++ b/src/components/circle.tsx @@ -89,6 +89,7 @@ function useCircle(props: CircleProps) { radius: radius ?? defaultRadius }); newCircle.setMap(map); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setCircle(newCircle); return () => { diff --git a/src/components/info-window.tsx b/src/components/info-window.tsx index e50af6ac..0f5170ac 100644 --- a/src/components/info-window.tsx +++ b/src/components/info-window.tsx @@ -98,6 +98,7 @@ export const InfoWindow: FunctionComponent< const infoWindow = new google.maps.InfoWindow(opts); infoWindow.setContent(contentContainerRef.current); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setInfoWindow(infoWindow); // unmount: remove infoWindow and content elements (note: close is called in a different effect-cleanup) @@ -241,6 +242,7 @@ export const InfoWindow: FunctionComponent< }; }, [infoWindow, anchor, map, shouldFocus, infoWindowOptions, pixelOffset]); + /* eslint-disable react-hooks/refs -- intentional access to refs during render to avoid cascading renders when creating portals */ return ( <> {contentContainerRef.current && @@ -250,4 +252,5 @@ export const InfoWindow: FunctionComponent< createPortal(headerContent, headerContainerRef.current)} ); + /* eslint-enable react-hooks/refs */ }; diff --git a/src/components/map/use-map-instance.ts b/src/components/map/use-map-instance.ts index a7d0d183..b2b21e4c 100644 --- a/src/components/map/use-map-instance.ts +++ b/src/components/map/use-map-instance.ts @@ -166,6 +166,7 @@ export function useMapInstance( }); } + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setMap(map); addMapInstance(map, id); diff --git a/src/components/marker-3d.tsx b/src/components/marker-3d.tsx index 84c8b89c..ae3d43b7 100644 --- a/src/components/marker-3d.tsx +++ b/src/components/marker-3d.tsx @@ -223,6 +223,7 @@ export const Marker3D = forwardRef(function Marker3D( 'altitudeMode', altitudeMode as google.maps.maps3d.AltitudeMode ); + usePropBinding(marker, 'collisionBehavior', collisionBehavior); usePropBinding(marker, 'drawsWhenOccluded', drawsWhenOccluded); usePropBinding(marker, 'extruded', extruded); diff --git a/src/components/marker.tsx b/src/components/marker.tsx index 1472cc8d..7f61d347 100644 --- a/src/components/marker.tsx +++ b/src/components/marker.tsx @@ -51,6 +51,7 @@ function useMarker(props: MarkerProps) { const newMarker = new google.maps.Marker(markerOptions); newMarker.setMap(map); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setMarker(newMarker); return () => { diff --git a/src/components/polygon.tsx b/src/components/polygon.tsx index 800318c1..6c556db4 100644 --- a/src/components/polygon.tsx +++ b/src/components/polygon.tsx @@ -136,6 +136,7 @@ function usePolygon(props: PolygonProps) { } instance.setMap(map); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setPolygon(instance); return () => { diff --git a/src/components/polyline.tsx b/src/components/polyline.tsx index 20c99997..e792ef98 100644 --- a/src/components/polyline.tsx +++ b/src/components/polyline.tsx @@ -122,6 +122,7 @@ function usePolyline(props: PolylineProps) { } instance.setMap(map); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setPolyline(instance); return () => { diff --git a/src/components/popover.tsx b/src/components/popover.tsx index cbb7f634..5ce7a7d4 100644 --- a/src/components/popover.tsx +++ b/src/components/popover.tsx @@ -19,10 +19,10 @@ import {AltitudeMode} from './marker-3d'; export {AltitudeMode}; /** - * Event props for Popover component. + * Event props for the Popover component. */ type PopoverEventProps = { - /** Called when the popover is closed via light dismiss (click outside). */ + /** Called when the popover is closed via 'light dismiss' (click outside). */ onClose?: () => void; /** @@ -171,7 +171,7 @@ Popover.displayName = 'Popover'; */ function usePopoverCloseObserver( popover: google.maps.maps3d.PopoverElement | null, - open: boolean | undefined, + open: boolean | null | undefined, onClose?: () => void ) { const previousOpenState = useRef(undefined); diff --git a/src/components/rectangle.tsx b/src/components/rectangle.tsx index 5b8ff0b7..543c6784 100644 --- a/src/components/rectangle.tsx +++ b/src/components/rectangle.tsx @@ -84,6 +84,7 @@ function useRectangle(props: RectangleProps) { bounds: bounds ?? defaultBounds }); newRectangle.setMap(map); + // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional to sync the imperative instance with state setRectangle(newRectangle); return () => { diff --git a/src/hooks/__tests__/__utils__/wait-for-mock-instance.ts b/src/hooks/__tests__/__utils__/wait-for-mock-instance.ts index b904c1bc..0f9cf884 100644 --- a/src/hooks/__tests__/__utils__/wait-for-mock-instance.ts +++ b/src/hooks/__tests__/__utils__/wait-for-mock-instance.ts @@ -2,7 +2,6 @@ import {waitFor} from '@testing-library/react'; import {mockInstances} from '@googlemaps/jest-mocks'; type Constructable = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any new (...args: any[]): unknown; }; diff --git a/src/hooks/use-prop-binding.ts b/src/hooks/use-prop-binding.ts index dc502b20..2a039fbe 100644 --- a/src/hooks/use-prop-binding.ts +++ b/src/hooks/use-prop-binding.ts @@ -1,6 +1,8 @@ /* eslint-disable react-hooks/immutability -- Google Maps API objects are designed to be mutated */ import {useEffect} from 'react'; +import type {GmpWritableElementProp} from '../../types/writable'; + /** * Internally used to copy values from props into API-Objects * whenever they change. @@ -13,11 +15,14 @@ import {useEffect} from 'react'; export function usePropBinding( object: T | null, prop: K, - value: T[K] + value: GmpWritableElementProp ) { useEffect(() => { if (!object) return; - object[prop] = value; + // We use any here because GmpWritableElementProp is a broader type than T[K] + // and can't be assigned directly without this cast. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (object as any)[prop] = value; }, [object, prop, value]); } diff --git a/tsconfig.test.json b/tsconfig.test.json index 177ef3b7..a495bee6 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -3,6 +3,7 @@ "include": ["./src/**/*", "./types/**/*"], "exclude": ["./examples/**/*"], "compilerOptions": { - "noEmit": false + "noEmit": false, + "types": ["jest", "node", "google.maps"] } } diff --git a/types/README.md b/types/README.md new file mode 100644 index 00000000..d3695ac9 --- /dev/null +++ b/types/README.md @@ -0,0 +1,40 @@ +# Special Type Definitions + +## `writable.d.ts`: Google Maps Writable Type Mapping + +The Maps API has very precise typings for the accepted and returned values +for the custom-element properties. This is done by providing separate types +for the getter and setter methods. For example, `marker.position` always +returns a `google.maps.LatLngAltitude` object, but can be set as either +`google.maps.LatLngLiteral`, `google.maps.LatLngAltitudeLiteral` or an +object. Additionally, all setters typically accept `null` and `undefined` as +values. + +This table describes how the `GmpWritableElementProp` utility maps +those "Read" types (from element getters) to their broader "Write" types +(for element setters) within the `@vis.gl/react-google-maps` library. + +| Read Type (from Getter) | Inferred Write Type (from Setter) | +| :--------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `google.maps.LatLngAltitude` | `google.maps.LatLng` \| `google.maps.LatLngLiteral` \| `google.maps.LatLngAltitude` \| `google.maps.LatLngAltitudeLiteral` \| `string` \| `null` \| `undefined` | +| `google.maps.LatLng` | `google.maps.LatLng` \| `google.maps.LatLngLiteral` \| `string` \| `null` \| `undefined` | +| `google.maps.LatLngBounds` | `google.maps.LatLngBounds` \| `google.maps.LatLngBoundsLiteral` \| `null` \| `undefined` | +| `google.maps.Circle` | `google.maps.Circle` \| `google.maps.CircleLiteral` \| `null` \| `undefined` | +| `google.maps.Orientation3D` | `google.maps.Orientation3D` \| `google.maps.Orientation3DLiteral` \| `null` \| `undefined` | +| `google.maps.Vector3D` | `google.maps.Vector3D` \| `google.maps.Vector3DLiteral` \| `number` \| `null` \| `undefined` | +| `google.maps.places.Place` | `google.maps.places.Place` \| `string` \| `null` \| `undefined` | +| `URL` | `URL` \| `string` \| `null` \| `undefined` | +| `Array` (e.g. `string[]`) | `Iterable>` \| `null` \| `undefined` | +| `Array>` | `Iterable>>` \| `null` \| `undefined` | +| `any` (Fallback) | `T` \| `null` \| `undefined` | + +### Critical Logic Notes: + +1. **Distributive Unions:** The mapping uses `V extends unknown` to ensure that + union types (e.g., `LatLng | string`) are split and each member is mapped individually. +2. **Order of Precedence:** `LatLngAltitude` is checked before `LatLng` to + ensure the more specific 3D coordinate type is correctly expanded before the 2D check matches. +3. **Recursive Iterables:** Array types are converted to `Iterable`, and + the inner types are recursively mapped via `GmpBaseWritableType`. +4. **Consistency:** All properties, regardless of mapping, are expanded to + include `| null | undefined`. diff --git a/types/google.maps.d.ts b/types/google.maps.d.ts deleted file mode 100644 index d9d0dc84..00000000 --- a/types/google.maps.d.ts +++ /dev/null @@ -1,1726 +0,0 @@ -/* eslint-disable - @typescript-eslint/triple-slash-reference, - @typescript-eslint/no-empty-object-type */ - -/// - -/** - * Type extensions for @types/google.maps to include newer properties - * not yet available in the published type definitions. - */ - -declare namespace google.maps { - interface MapOptions { - /** - * Attribution IDs for internal usage tracking. - * @see https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions.internalUsageAttributionIds - */ - internalUsageAttributionIds?: Iterable | null; - } - - namespace marker { - interface AdvancedMarkerElementOptions { - /** - * A CSS length-percentage 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. The default value is "-%50". - */ - anchorLeft?: string; - /** - * A CSS length-percentage 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. The default value is "-%100". - */ - anchorTop?: string; - } - - interface AdvancedMarkerElement { - /** - * A CSS length-percentage 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. The default value is "-%50". - */ - anchorLeft?: string; - /** - * A CSS length-percentage 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. The default value is "-%100". - */ - anchorTop?: string; - } - } - - /** - * Namespace for 3D Maps functionality. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map - */ - namespace maps3d { - /** - * Specifies a mode the map should be rendered in. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#MapMode - */ - enum MapMode { - /** This map mode displays a transparent layer of major streets on satellite imagery. */ - HYBRID = 'HYBRID', - /** This map mode displays satellite or photorealistic imagery. */ - SATELLITE = 'SATELLITE' - } - - /** - * Specifies how gesture events should be handled on the map element. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#GestureHandling - */ - enum GestureHandling { - /** - * This lets the map choose whether to use cooperative or greedy gesture handling. - * This is the default behavior if not specified. - * 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' - } - - /** - * Customization options for the FlyCameraAround Animation. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#FlyAroundAnimationOptions - */ - interface FlyAroundAnimationOptions { - /** - * The central point at which the camera should look at during the orbit animation. - */ - camera: 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. - */ - repeatCount?: number; - /** - * @deprecated Please use repeatCount instead. - */ - rounds?: number; - } - - /** - * Customization options for the FlyCameraTo Animation. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#FlyToAnimationOptions - */ - interface FlyToAnimationOptions { - /** - * The location at which the camera should point at the end of the animation. - */ - endCamera: CameraOptions; - /** - * The duration of the animation in milliseconds. - * A duration of 0 will teleport the camera straight to the end position. - */ - durationMillis?: number; - } - - /** - * CameraOptions object used to define the properties that can be set on a camera object. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#CameraOptions - */ - interface CameraOptions { - center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral; - heading?: number; - range?: number; - roll?: number; - tilt?: number; - } - - /** - * This event is created from monitoring a steady state of Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#SteadyChangeEvent - */ - class SteadyChangeEvent extends Event { - /** - * Indicates whether Map3DElement is steady (i.e. all rendering for the current scene has completed) or not. - */ - isSteady: boolean; - } - - /** - * This event is created from clicking a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#LocationClickEvent - */ - class LocationClickEvent extends Event { - /** - * The latitude/longitude/altitude that was below the cursor when the event occurred. - */ - position?: google.maps.LatLngAltitude; - } - - /** - * This event is created from clicking on a place icon on a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PlaceClickEvent - */ - class PlaceClickEvent extends LocationClickEvent { - /** - * The place id of the map feature. - */ - placeId: string; - - /** - * Fetches a Place for this place id. - */ - fetchPlace(): Promise; - } - - /** - * Shows a position on a 3D map. - * Note that the position must be set for the Marker3DElement to display. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DElement - */ - class Marker3DElement - extends HTMLElement - implements Marker3DElementOptions - { - constructor(options?: Marker3DElementOptions); - - /** - * Specifies how the altitude component of the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * An enumeration specifying how a Marker3DElement should behave when it collides with another Marker3DElement or with the basemap labels. - * @default CollisionBehavior.REQUIRED - */ - collisionBehavior?: google.maps.marker.CollisionBehavior; - - /** - * Specifies whether this marker should be drawn or not when it's occluded. - * @default false - */ - drawsWhenOccluded?: boolean; - - /** - * Specifies whether to connect the marker to the ground. - * @default false - */ - extruded?: boolean; - - /** - * Text to be displayed by this marker. - */ - label?: string; - - /** - * The location of the tip of the marker. - */ - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - - /** - * Specifies whether this marker should preserve its size or not regardless of distance from camera. - * @default false - */ - sizePreserved?: boolean; - - /** - * The zIndex compared to other markers. - */ - zIndex?: number; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Marker3DElementOptions object used to define the properties that can be set on a Marker3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DElementOptions - */ - interface Marker3DElementOptions { - altitudeMode?: AltitudeMode; - collisionBehavior?: google.maps.marker.CollisionBehavior; - drawsWhenOccluded?: boolean; - extruded?: boolean; - label?: string; - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - sizePreserved?: boolean; - zIndex?: number; - } - - /** - * Shows a position on a 3D map with interactive capabilities. - * Unlike Marker3DElement, Marker3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DInteractiveElement - */ - class Marker3DInteractiveElement - extends Marker3DElement - implements Marker3DInteractiveElementOptions - { - constructor(options?: Marker3DInteractiveElementOptions); - - /** - * When set, the popover element will be open on this marker's click. - */ - gmpPopoverTargetElement?: PopoverElement; - - /** - * Rollover text. - */ - title: string; - } - - /** - * Marker3DInteractiveElementOptions object used to define the properties that can be set on a Marker3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Marker3DInteractiveElementOptions - */ - interface Marker3DInteractiveElementOptions extends Marker3DElementOptions { - gmpPopoverTargetElement?: PopoverElement; - title?: string; - } - - /** - * A 3D model which allows the rendering of gLTF models. - * Note that the position and the src must be set for the Model3DElement to display. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DElement - */ - class Model3DElement extends HTMLElement implements Model3DElementOptions { - constructor(options?: Model3DElementOptions); - - /** - * Specifies how altitude in the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Describes rotation of a 3D model's coordinate system to position the model on the 3D Map. - */ - orientation?: - | google.maps.Orientation3D - | google.maps.Orientation3DLiteral; - - /** - * Sets the Model3DElement's position. - */ - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - - /** - * Scales the model along the x, y, and z axes in the model's coordinate space. - * @default 1 - */ - scale?: number | google.maps.Vector3D | google.maps.Vector3DLiteral; - - /** - * Specifies the url of the 3D model. At this time, only models in the .glb format are supported. - */ - src?: string | URL; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Model3DElementOptions object used to define the properties that can be set on a Model3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DElementOptions - */ - interface Model3DElementOptions { - altitudeMode?: AltitudeMode; - orientation?: - | google.maps.Orientation3D - | google.maps.Orientation3DLiteral; - position?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral; - scale?: number | google.maps.Vector3D | google.maps.Vector3DLiteral; - src?: string | URL; - } - - /** - * A 3D model with interactive capabilities. - * Unlike Model3DElement, Model3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DInteractiveElement - */ - class Model3DInteractiveElement - extends Model3DElement - implements Model3DInteractiveElementOptions - { - constructor(options?: Model3DElementOptions); - } - - /** - * Model3DInteractiveElementOptions object used to define the properties that can be set on a Model3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Model3DInteractiveElementOptions - */ - interface Model3DInteractiveElementOptions extends Model3DElementOptions {} - - /** - * A 3D polyline is a linear overlay of connected line segments on a 3D map. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DElement - */ - class Polyline3DElement - extends HTMLElement - implements Polyline3DElementOptions - { - constructor(options?: Polyline3DElementOptions); - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Specifies whether parts of the polyline which could be occluded are drawn or not. - * @default false - */ - drawsOccludedSegments?: boolean; - - /** - * Specifies whether to connect the polyline to the ground. - * @default false - */ - extruded?: boolean; - - /** - * When true, edges of the polyline are interpreted as geodesic. - * @default false - */ - geodesic?: boolean; - - /** - * The outer color. All CSS3 colors are supported. - */ - outerColor?: string; - - /** - * The outer width is between 0.0 and 1.0. This is a percentage of the strokeWidth. - */ - outerWidth?: number; - - /** - * The ordered sequence of coordinates of the Polyline. - */ - path?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * The stroke color. All CSS3 colors are supported. - */ - strokeColor?: string; - - /** - * The stroke width in pixels. - */ - strokeWidth?: number; - - /** - * The zIndex compared to other polys. - */ - zIndex?: number; - - /** - * @deprecated Use path instead. - */ - coordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Polyline3DElementOptions object used to define the properties that can be set on a Polyline3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DElementOptions - */ - interface Polyline3DElementOptions { - altitudeMode?: AltitudeMode; - /** @deprecated Use path instead. */ - coordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - drawsOccludedSegments?: boolean; - extruded?: boolean; - geodesic?: boolean; - outerColor?: string; - outerWidth?: number; - strokeColor?: string; - strokeWidth?: number; - zIndex?: number; - } - - /** - * A 3D polyline with interactive capabilities. - * Unlike Polyline3DElement, Polyline3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DInteractiveElement - */ - class Polyline3DInteractiveElement - extends Polyline3DElement - implements Polyline3DInteractiveElementOptions - { - constructor(options?: Polyline3DElementOptions); - } - - /** - * Polyline3DInteractiveElementOptions object used to define the properties that can be set on a Polyline3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polyline3DInteractiveElementOptions - */ - interface Polyline3DInteractiveElementOptions extends Polyline3DElementOptions {} - - /** - * A 3D polygon defines a series of connected coordinates in an ordered sequence. - * Polygons form a closed loop and define a filled region. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DElement - */ - class Polygon3DElement - extends HTMLElement - implements Polygon3DElementOptions - { - constructor(options?: Polygon3DElementOptions); - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Specifies whether parts of the polygon which could be occluded are drawn or not. - * @default false - */ - drawsOccludedSegments?: boolean; - - /** - * Specifies whether to connect the polygon to the ground. - * @default false - */ - extruded?: boolean; - - /** - * The fill color. All CSS3 colors are supported. - */ - fillColor?: string; - - /** - * When true, edges of the polygon are interpreted as geodesic. - * @default false - */ - geodesic?: boolean; - - /** - * The ordered sequence of coordinates that designates a closed loop. - */ - innerPaths?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - - /** - * The ordered sequence of coordinates that designates a closed loop. - */ - path?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * The stroke color. All CSS3 colors are supported. - */ - strokeColor?: string; - - /** - * The stroke width in pixels. - */ - strokeWidth?: number; - - /** - * The zIndex compared to other polys. - */ - zIndex?: number; - - /** - * @deprecated Use path instead. - */ - outerCoordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - - /** - * @deprecated Use innerPaths instead. - */ - innerCoordinates?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * Polygon3DElementOptions object used to define the properties that can be set on a Polygon3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DElementOptions - */ - interface Polygon3DElementOptions { - altitudeMode?: AltitudeMode; - drawsOccludedSegments?: boolean; - extruded?: boolean; - fillColor?: string; - geodesic?: boolean; - /** @deprecated Use innerPaths instead. */ - innerCoordinates?: Iterable< - Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - > - >; - /** @deprecated Use path instead. */ - outerCoordinates?: Iterable< - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | google.maps.LatLngLiteral - >; - strokeColor?: string; - strokeWidth?: number; - zIndex?: number; - } - - /** - * A 3D polygon with interactive capabilities. - * Unlike Polygon3DElement, Polygon3DInteractiveElement receives a gmp-click event. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DInteractiveElement - */ - class Polygon3DInteractiveElement - extends Polygon3DElement - implements Polygon3DInteractiveElementOptions - { - constructor(options?: Polygon3DElementOptions); - } - - /** - * Polygon3DInteractiveElementOptions object used to define the properties that can be set on a Polygon3DInteractiveElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Polygon3DInteractiveElementOptions - */ - interface Polygon3DInteractiveElementOptions extends Polygon3DElementOptions {} - - /** - * A custom HTML element that renders a popover. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PopoverElement - */ - class PopoverElement extends HTMLElement implements PopoverElementOptions { - constructor(options?: PopoverElementOptions); - - /** - * Specifies how the altitude component of the position is interpreted. - * @default AltitudeMode.CLAMP_TO_GROUND - */ - altitudeMode?: AltitudeMode; - - /** - * Specifies whether this popover should be "light dismissed" or not. - * @default false - */ - lightDismissDisabled?: boolean; - - autoPanDisabled?: boolean; - - /** - * Specifies whether this popover should be open or not. - * @default false - */ - open?: boolean; - - /** - * The position at which to display this popover. - */ - positionAnchor?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitudeLiteral - | Marker3DInteractiveElement - | string; - - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | AddEventListenerOptions - ): void; - - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: boolean | EventListenerOptions - ): void; - } - - /** - * PopoverElementOptions object used to define the properties that can be set on a PopoverElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#PopoverElementOptions - */ - interface PopoverElementOptions { - altitudeMode?: AltitudeMode; - autoPanDisabled?: boolean; - lightDismissDisabled?: boolean; - open?: boolean; - positionAnchor?: - | google.maps.LatLngLiteral - | google.maps.LatLngAltitudeLiteral - | string - | Marker3DInteractiveElement; - } - - /** - * Specifies how altitude components in the coordinates are interpreted. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#AltitudeMode - */ - enum AltitudeMode { - /** - * Allows to express objects relative to the average mean sea level. - */ - ABSOLUTE = 'ABSOLUTE', - /** - * Allows to express objects placed on the ground. - */ - CLAMP_TO_GROUND = 'CLAMP_TO_GROUND', - /** - * Allows to express objects relative to the ground surface. - */ - RELATIVE_TO_GROUND = 'RELATIVE_TO_GROUND', - /** - * Allows to express objects relative to the highest of ground+building+water surface. - */ - RELATIVE_TO_MESH = 'RELATIVE_TO_MESH' - } - - /** - * Map3DElementOptions object used to define the properties that can be set on a Map3DElement. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Map3DElementOptions - */ - interface Map3DElementOptions { - bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral; - center?: google.maps.LatLngAltitude | google.maps.LatLngAltitudeLiteral; - defaultLabelsDisabled?: boolean; - defaultUIDisabled?: boolean; - gestureHandling?: GestureHandling; - heading?: number; - maxAltitude?: number; - maxHeading?: number; - maxTilt?: number; - minAltitude?: number; - minHeading?: number; - minTilt?: number; - mode?: MapMode; - range?: number; - roll?: number; - tilt?: number; - } - - /** - * Augmentation for Map3DElement to add animation methods. - * The base Map3DElement class is defined in @types/google.maps. - * @see https://developers.google.com/maps/documentation/javascript/reference/3d-map#Map3DElement - */ - interface Map3DElement { - /** - * Starts an animation that makes the camera orbit around a point. - * @param options Configuration options for the animation - */ - flyCameraAround(options: FlyAroundAnimationOptions): void; - - /** - * Starts an animation that moves the camera to a new position. - * @param options Configuration options for the animation - */ - flyCameraTo(options: FlyToAnimationOptions): void; - - /** - * Stops any currently running camera animation. - */ - stopCameraAnimation(): void; - } - } - - interface MapsAppCheckTokenResult { - token: string; - } - - interface Settings { - fetchAppCheckToken: - | (() => Promise) - | null; - } - - /** - * Maps3D Library interface for use with importLibrary('maps3d'). - */ - interface Maps3DLibrary { - Map3DElement: typeof maps3d.Map3DElement; - Marker3DElement: typeof maps3d.Marker3DElement; - Marker3DInteractiveElement: typeof maps3d.Marker3DInteractiveElement; - Model3DElement: typeof maps3d.Model3DElement; - Model3DInteractiveElement: typeof maps3d.Model3DInteractiveElement; - Polyline3DElement: typeof maps3d.Polyline3DElement; - Polyline3DInteractiveElement: typeof maps3d.Polyline3DInteractiveElement; - Polygon3DElement: typeof maps3d.Polygon3DElement; - Polygon3DInteractiveElement: typeof maps3d.Polygon3DInteractiveElement; - PopoverElement: typeof maps3d.PopoverElement; - AltitudeMode: typeof maps3d.AltitudeMode; - GestureHandling: typeof maps3d.GestureHandling; - MapMode: typeof maps3d.MapMode; - } -} - -namespace google.maps.marker { - interface AdvancedMarkerElementOptions { - anchorLeft?: string; - anchorTop?: string; - } - - interface AdvancedMarkerElement { - anchorLeft?: string; - anchorTop?: string; - } - - interface PinElementOptions { - /** @deprecated use glyphSrc or glyphText instead */ - glyph?: string | Element | URL | null; - /** @deprecated use DOM children instead */ - readonly element?: HTMLElement | null; - - glyphColor?: string | null; - glyphSrc?: string | URL | null; - glyphText?: string | null; - } - - interface PinElement { - /** @deprecated use glyphSrc or glyphText instead */ - glyph?: string | Element | URL | null; - glyphColor?: string | null; - glyphSrc?: string | URL | null; - glyphText?: string | null; - } -} - -declare namespace google.maps.places { - export class AccessibilityOptions { - hasWheelchairAccessibleEntrance: boolean | null; - hasWheelchairAccessibleParking: boolean | null; - hasWheelchairAccessibleRestroom: boolean | null; - hasWheelchairAccessibleSeating: boolean | null; - } - - export class AddressComponent { - longText: string | null; - shortText: string | null; - types: string[]; - } - - export class Attribution { - provider: string | null; - providerURI: string | null; - } - - export enum AttributionColor { - BLACK = 'BLACK', - GRAY = 'GRAY', - WHITE = 'WHITE' - } - - export class AuthorAttribution { - displayName: string; - photoURI: string | null; - uri: string | null; - } - - export class AutocompleteSessionToken { - constructor(); - } - - export enum BusinessStatus { - CLOSED_PERMANENTLY = 'CLOSED_PERMANENTLY', - CLOSED_TEMPORARILY = 'CLOSED_TEMPORARILY', - OPERATIONAL = 'OPERATIONAL' - } - - export interface ComponentRestrictions { - country: string | string[] | null; - } - - export class ConnectorAggregation { - availabilityLastUpdateTime: Date | null; - availableCount: number | null; - count: number; - maxChargeRateKw: number; - outOfServiceCount: number | null; - type: google.maps.places.EVConnectorType | null; - } - - export class EVChargeOptions { - connectorAggregations: google.maps.places.ConnectorAggregation[]; - connectorCount: number; - } - - export enum EVConnectorType { - CCS_COMBO_1 = 'CCS_COMBO_1', - CCS_COMBO_2 = 'CCS_COMBO_2', - CHADEMO = 'CHADEMO', - J1772 = 'J1772', - NACS = 'NACS', - OTHER = 'OTHER', - TESLA = 'TESLA', - TYPE_2 = 'TYPE_2', - UNSPECIFIED_GB_T = 'UNSPECIFIED_GB_T', - UNSPECIFIED_WALL_OUTLET = 'UNSPECIFIED_WALL_OUTLET' - } - - export interface EVSearchOptions { - connectorTypes?: google.maps.places.EVConnectorType[]; - minimumChargingRateKw?: number; - } - - export interface FetchFieldsRequest { - fields: string[]; - } - - export class FormattableText { - matches: google.maps.places.StringRange[]; - text: string; - } - - export class FuelOptions { - fuelPrices: google.maps.places.FuelPrice[]; - } - - export class FuelPrice { - price: google.maps.places.Money | null; - type: google.maps.places.FuelType | null; - updateTime: Date | null; - } - - export enum FuelType { - BIO_DIESEL = 'BIO_DIESEL', - DIESEL = 'DIESEL', - DIESEL_PLUS = 'DIESEL_PLUS', - E100 = 'E100', - E80 = 'E80', - E85 = 'E85', - LPG = 'LPG', - METHANE = 'METHANE', - MIDGRADE = 'MIDGRADE', - PREMIUM = 'PREMIUM', - REGULAR_UNLEADED = 'REGULAR_UNLEADED', - SP100 = 'SP100', - SP91 = 'SP91', - SP91_E10 = 'SP91_E10', - SP92 = 'SP92', - SP95 = 'SP95', - SP95_E10 = 'SP95_E10', - SP98 = 'SP98', - SP99 = 'SP99', - TRUCK_DIESEL = 'TRUCK_DIESEL' - } - - export type LocationBias = - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngBounds - | google.maps.LatLngBoundsLiteral - | google.maps.Circle - | google.maps.CircleLiteral - | string; - - export type LocationRestriction = - | google.maps.LatLngBounds - | google.maps.LatLngBoundsLiteral; - - export class Money { - currencyCode: string; - nanos: number; - units: number; - toString(): string; - } - - export class OpeningHours { - periods: google.maps.places.OpeningHoursPeriod[]; - weekdayDescriptions: string[]; - } - - export class OpeningHoursPeriod { - close: google.maps.places.OpeningHoursPoint | null; - open: google.maps.places.OpeningHoursPoint; - } - - export class OpeningHoursPoint { - day: number; - hour: number; - minute: number; - } - - export class ParkingOptions { - hasFreeGarageParking: boolean | null; - hasFreeParkingLot: boolean | null; - hasFreeStreetParking: boolean | null; - hasPaidGarageParking: boolean | null; - hasPaidParkingLot: boolean | null; - hasPaidStreetParking: boolean | null; - hasValetParking: boolean | null; - } - - export class PaymentOptions { - acceptsCashOnly: boolean | null; - acceptsCreditCards: boolean | null; - acceptsDebitCards: boolean | null; - acceptsNFC: boolean | null; - } - - export class Photo { - authorAttributions: google.maps.places.AuthorAttribution[]; - heightPx: number; - widthPx: number; - getURI(options?: google.maps.places.PhotoOptions): string; - } - - export interface PhotoOptions { - maxHeight?: number | null; - maxWidth?: number | null; - } - - export class Place implements google.maps.places.PlaceOptions { - constructor(options: google.maps.places.PlaceOptions); - accessibilityOptions?: google.maps.places.AccessibilityOptions | null; - addressComponents?: google.maps.places.AddressComponent[]; - adrFormatAddress?: string | null; - allowsDogs?: boolean | null; - attributions?: google.maps.places.Attribution[]; - businessStatus?: google.maps.places.BusinessStatus | null; - displayName?: string | null; - displayNameLanguageCode?: string | null; - editorialSummary?: string | null; - editorialSummaryLanguageCode?: string | null; - evChargeOptions?: google.maps.places.EVChargeOptions | null; - formattedAddress?: string | null; - fuelOptions?: google.maps.places.FuelOptions | null; - googleMapsURI?: string | null; - hasCurbsidePickup?: boolean | null; - hasDelivery?: boolean | null; - hasDineIn?: boolean | null; - hasLiveMusic?: boolean | null; - hasMenuForChildren?: boolean | null; - hasOutdoorSeating?: boolean | null; - hasRestroom?: boolean | null; - hasTakeout?: boolean | null; - iconBackgroundColor?: string | null; - id: string; - internationalPhoneNumber?: string | null; - isGoodForChildren?: boolean | null; - isGoodForGroups?: boolean | null; - isGoodForWatchingSports?: boolean | null; - isReservable?: boolean | null; - location?: google.maps.LatLng | null; - nationalPhoneNumber?: string | null; - parkingOptions?: google.maps.places.ParkingOptions | null; - paymentOptions?: google.maps.places.PaymentOptions | null; - photos?: google.maps.places.Photo[]; - plusCode?: google.maps.places.PlusCode | null; - postalAddress?: google.maps.places.PostalAddress | null; - priceLevel?: google.maps.places.PriceLevel | null; - priceRange?: google.maps.places.PriceRange | null; - primaryType?: string | null; - primaryTypeDisplayName?: string | null; - primaryTypeDisplayNameLanguageCode?: string | null; - rating?: number | null; - regularOpeningHours?: google.maps.places.OpeningHours | null; - requestedLanguage?: string | null; - requestedRegion?: string | null; - reviews?: google.maps.places.Review[]; - servesBeer?: boolean | null; - servesBreakfast?: boolean | null; - servesBrunch?: boolean | null; - servesCocktails?: boolean | null; - servesCoffee?: boolean | null; - servesDessert?: boolean | null; - servesDinner?: boolean | null; - servesLunch?: boolean | null; - servesVegetarianFood?: boolean | null; - servesWine?: boolean | null; - svgIconMaskURI?: string | null; - types?: string[]; - userRatingCount?: number | null; - utcOffsetMinutes?: number | null; - viewport?: google.maps.LatLngBounds | null; - websiteURI?: string | null; - openingHours?: google.maps.places.OpeningHours | null; - hasWiFi?: boolean | null; - static searchByText( - request: google.maps.places.SearchByTextRequest - ): Promise<{places: google.maps.places.Place[]}>; - 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}>; - getNextOpeningTime(date?: Date): Promise; - isOpen(date?: Date): Promise; - toJSON(): object; - } - - export class PlaceAccessibleEntranceIconElement - extends HTMLElement - implements google.maps.places.PlaceAccessibleEntranceIconElementOptions - { - constructor( - options?: google.maps.places.PlaceAccessibleEntranceIconElementOptions - ); - } - - export interface PlaceAccessibleEntranceIconElementOptions {} - - export class PlaceAddressElement - extends HTMLElement - implements google.maps.places.PlaceAddressElementOptions - { - constructor(options?: google.maps.places.PlaceAddressElementOptions); - } - - export interface PlaceAddressElementOptions {} - - export class PlaceAllContentElement - extends HTMLElement - implements google.maps.places.PlaceAllContentElementOptions - { - constructor(options?: google.maps.places.PlaceAllContentElementOptions); - } - - export interface PlaceAllContentElementOptions {} - - export interface PlaceAspectRating { - rating: number; - type: string; - } - - export class PlaceAttributionElement - extends HTMLElement - implements google.maps.places.PlaceAttributionElementOptions - { - constructor(options?: google.maps.places.PlaceAttributionElementOptions); - darkSchemeColor?: google.maps.places.AttributionColor | null; - lightSchemeColor?: google.maps.places.AttributionColor | null; - } - - export interface PlaceAttributionElementOptions { - darkSchemeColor?: google.maps.places.AttributionColor | null; - lightSchemeColor?: google.maps.places.AttributionColor | null; - } - - export class PlaceAutocompleteElement - extends HTMLElement - implements google.maps.places.PlaceAutocompleteElementOptions - { - constructor(options: google.maps.places.PlaceAutocompleteElementOptions); - includedPrimaryTypes: string[] | null; - includedRegionCodes: string[] | null; - locationBias: google.maps.places.LocationBias | null; - locationRestriction: google.maps.places.LocationRestriction | null; - name: string | null; - origin?: - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | null; - requestedLanguage: string | null; - requestedRegion: string | null; - unitSystem?: google.maps.UnitSystem | null; - } - - export interface PlaceAutocompleteElementOptions { - locationBias?: google.maps.places.LocationBias | null; - locationRestriction?: google.maps.places.LocationRestriction | null; - name?: string | null; - requestedLanguage?: string | null; - } - - export class PlaceContentConfigElement - extends HTMLElement - implements google.maps.places.PlaceContentConfigElementOptions - { - constructor(options?: google.maps.places.PlaceContentConfigElementOptions); - } - - export interface PlaceContentConfigElementOptions {} - - export class PlaceContextualElement - extends HTMLElement - implements google.maps.places.PlaceContextualElementOptions - { - contextToken?: string | null; - } - - export interface PlaceContextualElementOptions { - contextToken?: string | null; - } - - export class PlaceContextualListConfigElement - extends HTMLElement - implements google.maps.places.PlaceContextualListConfigElementOptions - { - layout?: google.maps.places.PlaceContextualListLayout | null; - mapHidden?: boolean | null; - } - - export interface PlaceContextualListConfigElementOptions { - layout?: google.maps.places.PlaceContextualListLayout | null; - mapHidden?: boolean | null; - } - - export enum PlaceContextualListLayout { - COMPACT = 'COMPACT', - VERTICAL = 'VERTICAL' - } - - export class PlaceDetailsCompactElement - extends HTMLElement - implements google.maps.places.PlaceDetailsCompactElementOptions - { - constructor(options?: google.maps.places.PlaceDetailsCompactElementOptions); - orientation?: google.maps.places.PlaceDetailsOrientation | null; - place?: google.maps.places.Place; - truncationPreferred: boolean; - } - - export interface PlaceDetailsCompactElementOptions { - orientation?: google.maps.places.PlaceDetailsOrientation | null; - truncationPreferred?: boolean | null; - } - - export class PlaceDetailsElement - extends HTMLElement - implements google.maps.places.PlaceDetailsElementOptions - { - place?: google.maps.places.Place; - } - - export interface PlaceDetailsElementOptions {} - - export class PlaceDetailsLocationRequestElement - extends HTMLElement - implements google.maps.places.PlaceDetailsLocationRequestElementOptions - { - constructor( - options?: google.maps.places.PlaceDetailsLocationRequestElementOptions - ); - location?: - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | null; - } - - export interface PlaceDetailsLocationRequestElementOptions { - location?: - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - | google.maps.LatLngAltitudeLiteral - | null; - } - - export enum PlaceDetailsOrientation { - HORIZONTAL = 'HORIZONTAL', - VERTICAL = 'VERTICAL' - } - - export class PlaceDetailsPlaceRequestElement - extends HTMLElement - implements google.maps.places.PlaceDetailsPlaceRequestElementOptions - { - constructor( - options?: google.maps.places.PlaceDetailsPlaceRequestElementOptions - ); - place: google.maps.places.Place | null; - } - - export interface PlaceDetailsPlaceRequestElementOptions { - place?: google.maps.places.Place | string | null; - } - - export interface PlaceDetailsRequest { - fields?: string[]; - language?: string | null; - placeId: string; - region?: string | null; - sessionToken?: google.maps.places.AutocompleteSessionToken; - } - - export class PlaceFeatureListElement - extends HTMLElement - implements google.maps.places.PlaceFeatureListElementOptions {} - - export interface PlaceFeatureListElementOptions {} - - export interface PlaceGeometry { - location?: google.maps.LatLng; - viewport?: google.maps.LatLngBounds; - } - - export class PlaceListElement - extends HTMLElement - implements google.maps.places.PlaceListElementOptions - { - constructor(options?: google.maps.places.PlaceListElementOptions); - places: google.maps.places.Place[]; - selectable: boolean; - configureFromSearchByTextRequest( - request: google.maps.places.SearchByTextRequest - ): Promise; - configureFromSearchNearbyRequest( - request: google.maps.places.SearchNearbyRequest - ): Promise; - } - - export interface PlaceListElementOptions { - selectable?: boolean | null; - } - - export class PlaceMediaElement - extends HTMLElement - implements google.maps.places.PlaceMediaElementOptions - { - constructor(options?: google.maps.places.PlaceMediaElementOptions); - lightboxPreferred?: boolean | null; - } - - export interface PlaceMediaElementOptions { - lightboxPreferred?: boolean | null; - } - - export class PlaceOpenNowStatusElement - extends HTMLElement - implements google.maps.places.PlaceOpenNowStatusElementOptions - { - constructor(options?: google.maps.places.PlaceOpenNowStatusElementOptions); - } - - export interface PlaceOpenNowStatusElementOptions {} - - export interface PlaceOpeningHours { - periods?: google.maps.places.PlaceOpeningHoursPeriod[]; - weekday_text?: string[]; - open_now?: boolean; - isOpen(date?: Date): boolean | undefined; - } - - export class PlaceOpeningHoursElement - extends HTMLElement - implements google.maps.places.PlaceOpeningHoursElementOptions {} - - export interface PlaceOpeningHoursElementOptions {} - - export interface PlaceOpeningHoursPeriod { - close?: google.maps.places.PlaceOpeningHoursTime; - open: google.maps.places.PlaceOpeningHoursTime; - } - - export interface PlaceOpeningHoursTime { - day: number; - hours: number; - minutes: number; - nextDate?: number; - time: string; - } - - export interface PlaceOptions { - id: string; - requestedLanguage?: string | null; - requestedRegion?: string | null; - } - - export class PlacePhoneNumberElement - extends HTMLElement - implements google.maps.places.PlacePhoneNumberElementOptions {} - - export interface PlacePhoneNumberElementOptions {} - - export interface PlacePhoto { - height: number; - html_attributions: string[]; - width: number; - getUrl(opts?: google.maps.places.PhotoOptions): string; - } - - export interface PlacePlusCode { - compound_code?: string; - global_code: string; - } - - export class PlacePlusCodeElement - extends HTMLElement - implements google.maps.places.PlacePlusCodeElementOptions {} - - export interface PlacePlusCodeElementOptions {} - - export class PlacePrediction { - distanceMeters: number | null; - mainText: google.maps.places.FormattableText | null; - placeId: string; - secondaryText: google.maps.places.FormattableText | null; - text: google.maps.places.FormattableText; - types: string[]; - fetchAddressValidation( - request: google.maps.addressValidation.AddressValidationRequest - ): Promise; - toPlace(): google.maps.places.Place; - } - - export class PlacePriceElement - extends HTMLElement - implements google.maps.places.PlacePriceElementOptions - { - constructor(options?: google.maps.places.PlacePriceElementOptions); - } - - export interface PlacePriceElementOptions {} - - export class PlaceRatingElement - extends HTMLElement - implements google.maps.places.PlaceRatingElementOptions - { - constructor(options?: google.maps.places.PlaceRatingElementOptions); - } - - export interface PlaceRatingElementOptions {} - - export interface PlaceResult { - address_components?: google.maps.GeocoderAddressComponent[]; - adr_address?: string; - aspects?: google.maps.places.PlaceAspectRating[]; - business_status?: google.maps.places.BusinessStatus; - formatted_address?: string; - formatted_phone_number?: string; - geometry?: google.maps.places.PlaceGeometry; - html_attributions?: string[]; - icon?: string; - icon_background_color?: string; - icon_mask_base_uri?: string; - international_phone_number?: string; - name?: string; - opening_hours?: google.maps.places.PlaceOpeningHours; - photos?: google.maps.places.PlacePhoto[]; - place_id?: string; - plus_code?: google.maps.places.PlacePlusCode; - price_level?: number; - rating?: number; - reviews?: google.maps.places.PlaceReview[]; - types?: string[]; - url?: string; - user_ratings_total?: number; - utc_offset_minutes?: number; - vicinity?: string; - website?: string; - utc_offset?: number; - permanently_closed?: boolean; - } - - export interface PlaceReview { - author_name: string; - author_url?: string; - language: string; - profile_photo_url: string; - rating?: number; - relative_time_description: string; - text: string; - time: number; - aspects?: google.maps.places.PlaceAspectRating[]; - } - - export class PlaceReviewsElement - extends HTMLElement - implements google.maps.places.PlaceReviewsElementOptions {} - - export interface PlaceReviewsElementOptions {} - - export interface PlaceSearchPagination { - hasNextPage: boolean; - nextPage(): void; - } - - export interface PlaceSearchRequest { - bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral; - keyword?: string; - language?: string | null; - location?: google.maps.LatLng | google.maps.LatLngLiteral; - maxPriceLevel?: number; - minPriceLevel?: number; - openNow?: boolean; - radius?: number; - rankBy?: google.maps.places.RankBy; - type?: string; - name?: string; - } - - export class PlaceStandardContentElement - extends HTMLElement - implements google.maps.places.PlaceStandardContentElementOptions - { - constructor( - options?: google.maps.places.PlaceStandardContentElementOptions - ); - } - - export interface PlaceStandardContentElementOptions {} - - export class PlaceSummaryElement - extends HTMLElement - implements google.maps.places.PlaceSummaryElementOptions {} - - export interface PlaceSummaryElementOptions {} - - export class PlaceTypeElement - extends HTMLElement - implements google.maps.places.PlaceTypeElementOptions - { - constructor(options?: google.maps.places.PlaceTypeElementOptions); - } - - export interface PlaceTypeElementOptions {} - - export class PlaceTypeSpecificHighlightsElement - extends HTMLElement - implements google.maps.places.PlaceTypeSpecificHighlightsElementOptions {} - - export interface PlaceTypeSpecificHighlightsElementOptions {} - - export class PlaceWebsiteElement - extends HTMLElement - implements google.maps.places.PlaceWebsiteElementOptions {} - - export interface PlaceWebsiteElementOptions {} - - export class PlusCode { - compoundCode: string | null; - globalCode: string | null; - } - - export class PostalAddress - implements google.maps.places.PostalAddressLiteral - { - addressLines: string[]; - administrativeArea: string | null; - languageCode: string | null; - locality: string | null; - organization: string | null; - postalCode: string | null; - recipients: string[]; - regionCode: string; - sortingCode: string | null; - sublocality: string | null; - } - - export interface PostalAddressLiteral { - addressLines?: Iterable; - administrativeArea?: string | null; - languageCode?: string | null; - locality?: string | null; - organization?: string | null; - postalCode?: string | null; - recipients?: Iterable; - regionCode: string; - sortingCode?: string | null; - sublocality?: string | null; - } - - export interface PredictionSubstring { - length: number; - offset: number; - } - - export interface PredictionTerm { - offset: number; - value: string; - } - - export enum PriceLevel { - EXPENSIVE = 'EXPENSIVE', - FREE = 'FREE', - INEXPENSIVE = 'INEXPENSIVE', - MODERATE = 'MODERATE', - VERY_EXPENSIVE = 'VERY_EXPENSIVE' - } - - export class PriceRange { - endPrice: google.maps.places.Money | null; - startPrice: google.maps.places.Money; - } - - export enum RankBy { - DISTANCE = 0.0, - PROMINENCE = 1.0 - } - - export class Review { - authorAttribution: google.maps.places.AuthorAttribution | null; - publishTime: Date | null; - rating: number | null; - relativePublishTimeDescription: string | null; - text: string | null; - textLanguageCode: string | null; - } - - export enum SearchByTextRankPreference { - DISTANCE = 'DISTANCE', - RELEVANCE = 'RELEVANCE' - } - - export interface SearchByTextRequest { - evSearchOptions?: google.maps.places.EVSearchOptions; - fields?: string[]; - includedType?: string; - isOpenNow?: boolean; - language?: string; - locationBias?: - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngBounds - | google.maps.LatLngBoundsLiteral - | google.maps.CircleLiteral - | google.maps.Circle; - locationRestriction?: - | google.maps.LatLngBounds - | google.maps.LatLngBoundsLiteral; - maxResultCount?: number; - minRating?: number; - priceLevels?: google.maps.places.PriceLevel[]; - rankPreference?: google.maps.places.SearchByTextRankPreference; - region?: string; - textQuery?: string; - useStrictTypeFiltering?: boolean; - query?: string; - rankBy?: google.maps.places.SearchByTextRankPreference; - } - - export enum SearchNearbyRankPreference { - DISTANCE = 'DISTANCE', - POPULARITY = 'POPULARITY' - } - - export interface SearchNearbyRequest { - excludedPrimaryTypes?: string[]; - excludedTypes?: string[]; - fields?: string[]; - includedPrimaryTypes?: string[]; - includedTypes?: string[]; - language?: string; - locationRestriction: google.maps.Circle | google.maps.CircleLiteral; - maxResultCount?: number; - rankPreference?: google.maps.places.SearchNearbyRankPreference; - region?: string; - } - - export class StringRange { - endOffset: number; - startOffset: number; - } - - export interface StructuredFormatting { - main_text: string; - main_text_matched_substrings: google.maps.places.PredictionSubstring[]; - secondary_text: string; - } - - export interface TextSearchRequest { - bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral; - language?: string | null; - location?: google.maps.LatLng | google.maps.LatLngLiteral; - query?: string; - radius?: number; - region?: string | null; - type?: string; - } -} - -declare namespace google.maps.elevation { - export class ElevationElement - extends HTMLElement - implements google.maps.elevation.ElevationElementOptions - { - constructor(options?: google.maps.elevation.ElevationElementOptions); - path?: - | ( - | google.maps.LatLng - | google.maps.LatLngLiteral - | google.maps.LatLngAltitude - )[] - | null; - unitSystem?: google.maps.UnitSystem | null; - } - - export interface ElevationElementOptions { - path?: (google.maps.LatLng | google.maps.LatLngLiteral)[] | null; - unitSystem?: google.maps.UnitSystem | null; - } -} diff --git a/types/writable/index.d.ts b/types/writable/index.d.ts new file mode 100644 index 00000000..868fa20a --- /dev/null +++ b/types/writable/index.d.ts @@ -0,0 +1,61 @@ +/** + * Maps base Google Maps types to their broader "write" equivalents. + * + * This is used to handle the fact that many Google Maps API properties + * accept a wider range of types in their setters than what their getters return. + */ +export type GmpBaseWritableElementType = + // Handle unions by distributing the mapping over each member + V extends unknown + ? // 1. Path/Array patterns (support Iterable for performance where possible) + V extends Array> + ? Iterable>> + : V extends Array + ? Iterable> + : // 2. Geometry & Coordinate patterns (3D) + // Some 3D elements specifically want Altitude variants + V extends google.maps.LatLngAltitude + ? + | google.maps.LatLng + | google.maps.LatLngLiteral + | google.maps.LatLngAltitude + | google.maps.LatLngAltitudeLiteral + | string + : // 3. Geometry & Coordinate patterns (2D) + V extends google.maps.LatLng + ? google.maps.LatLng | google.maps.LatLngLiteral | string + : V extends google.maps.LatLngBounds + ? google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral + : V extends google.maps.Circle + ? google.maps.Circle | google.maps.CircleLiteral + : // 4. Specialized Classes/Interfaces + V extends google.maps.Orientation3D + ? google.maps.Orientation3D | google.maps.Orientation3DLiteral + : V extends google.maps.Vector3D + ? + | google.maps.Vector3D + | google.maps.Vector3DLiteral + | number + : V extends google.maps.places.Place + ? google.maps.places.Place | string + : V extends URL + ? URL | string + : // 5. Default Fallback + V + : never; + +/** + * The final writable type for a GMP property, ensuring support + * for the expanded types plus null and undefined. + */ +export type GmpWritableElementProp = + | GmpBaseWritableElementType> + | null + | undefined; + +/** + * Transforms a type T into its writable counterpart for use with custom elements. + */ +export type GmpWritableElement = { + [K in keyof T]?: GmpWritableElementProp; +};