diff --git a/dist/index.html b/dist/index.html index b580a5fd..6358680f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -136,6 +136,7 @@

Maps JSAPI Samples

  • ui-kit-place-search-nearby
  • ui-kit-place-search-text
  • weather-api-current-compact
  • +
  • web-components-events
  • web-components-map
  • web-components-markers
  • diff --git a/dist/samples/web-components-events/app/.eslintsrc.json b/dist/samples/web-components-events/app/.eslintsrc.json new file mode 100644 index 00000000..4c44dab0 --- /dev/null +++ b/dist/samples/web-components-events/app/.eslintsrc.json @@ -0,0 +1,13 @@ +{ + "extends": [ + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "rules": { + "@typescript-eslint/ban-ts-comment": 0, + "@typescript-eslint/no-this-alias": 1, + "@typescript-eslint/no-empty-function": 1, + "@typescript-eslint/explicit-module-boundary-types": 1, + "@typescript-eslint/no-unused-vars": 1 + } +} diff --git a/dist/samples/web-components-events/app/README.md b/dist/samples/web-components-events/app/README.md new file mode 100644 index 00000000..c7d8b898 --- /dev/null +++ b/dist/samples/web-components-events/app/README.md @@ -0,0 +1,41 @@ +# Google Maps JavaScript Sample + +## web-components-events + +This sample demonstrates map events using the Maps JavaScript API web components. + +## Setup + +### Before starting run: + +`npm i` + +### Run an example on a local web server + +`cd samples/web-components-events` +`npm start` + +### Build an individual example + +`cd samples/web-components-events` +`npm run build` + +From 'samples': + +`npm run build --workspace=web-components-events/` + +### Build all of the examples. + +From 'samples': + +`npm run build-all` + +### Run lint to check for problems + +`cd samples/web-components-events` +`npx eslint index.ts` + +## Feedback + +For feedback related to this sample, please open a new issue on +[GitHub](https://github.com/googlemaps-samples/js-api-samples/issues). diff --git a/dist/samples/web-components-events/app/index.html b/dist/samples/web-components-events/app/index.html new file mode 100644 index 00000000..f6f8b939 --- /dev/null +++ b/dist/samples/web-components-events/app/index.html @@ -0,0 +1,39 @@ + + + + + + Add a Map Web Component with Events + + + + + + + + + + + + + + + diff --git a/dist/samples/web-components-events/app/index.ts b/dist/samples/web-components-events/app/index.ts new file mode 100644 index 00000000..c7c820af --- /dev/null +++ b/dist/samples/web-components-events/app/index.ts @@ -0,0 +1,35 @@ +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// [START maps_web_components_events] +// This example adds a map using web components. +async function initMap(): Promise { + await google.maps.importLibrary("maps"); + await google.maps.importLibrary("marker"); + + console.log('Maps JavaScript API loaded.'); + + const advancedMarkers = document.querySelectorAll("#marker-click-event-example gmp-advanced-marker"); + + for (const markerElement of advancedMarkers) { + const advancedMarker = markerElement as google.maps.marker.AdvancedMarkerElement; + + customElements.whenDefined(advancedMarker.localName).then(async () => { + advancedMarker.addEventListener('gmp-click', () => { + const infoWindow = new google.maps.InfoWindow({ + content: advancedMarker.title, + }); + + infoWindow.open({ + anchor: advancedMarker, + }); + }); + }); + } +} + +initMap(); +// [END maps_web_components_events] diff --git a/dist/samples/web-components-events/app/package.json b/dist/samples/web-components-events/app/package.json new file mode 100644 index 00000000..91e619b9 --- /dev/null +++ b/dist/samples/web-components-events/app/package.json @@ -0,0 +1,14 @@ +{ + "name": "@js-api-samples/web-components-events", + "version": "1.0.0", + "scripts": { + "build": "tsc && bash ../jsfiddle.sh web-components-events && bash ../app.sh web-components-events && bash ../docs.sh web-components-events && npm run build:vite --workspace=. && bash ../dist.sh web-components-events", + "test": "tsc && npm run build:vite --workspace=.", + "start": "tsc && vite build --base './' && vite", + "build:vite": "vite build --base './'", + "preview": "vite preview" + }, + "dependencies": { + + } +} diff --git a/dist/samples/web-components-events/app/style.css b/dist/samples/web-components-events/app/style.css new file mode 100644 index 00000000..a2eaae43 --- /dev/null +++ b/dist/samples/web-components-events/app/style.css @@ -0,0 +1,18 @@ +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +/* [START maps_web_components_events] */ + +/* + * Optional: Makes the sample page fill the window. + */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +/* [END maps_web_components_events] */ \ No newline at end of file diff --git a/dist/samples/web-components-events/app/tsconfig.json b/dist/samples/web-components-events/app/tsconfig.json new file mode 100644 index 00000000..5ba470c0 --- /dev/null +++ b/dist/samples/web-components-events/app/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "." + }, + "include": [ + "./*.ts", + ] +} diff --git a/dist/samples/web-components-events/dist/assets/index-549u98Rk.css b/dist/samples/web-components-events/dist/assets/index-549u98Rk.css new file mode 100644 index 00000000..37abb1c4 --- /dev/null +++ b/dist/samples/web-components-events/dist/assets/index-549u98Rk.css @@ -0,0 +1 @@ +html,body{height:100%;margin:0;padding:0} diff --git a/dist/samples/web-components-events/dist/assets/index-C1e0lIS_.js b/dist/samples/web-components-events/dist/assets/index-C1e0lIS_.js new file mode 100644 index 00000000..19dfd28f --- /dev/null +++ b/dist/samples/web-components-events/dist/assets/index-C1e0lIS_.js @@ -0,0 +1 @@ +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();async function e(){await google.maps.importLibrary(`maps`),await google.maps.importLibrary(`marker`),console.log(`Maps JavaScript API loaded.`);let e=document.querySelectorAll(`#marker-click-event-example gmp-advanced-marker`);for(let t of e){let e=t;customElements.whenDefined(e.localName).then(async()=>{e.addEventListener(`gmp-click`,()=>{new google.maps.InfoWindow({content:e.title}).open({anchor:e})})})}}e(); \ No newline at end of file diff --git a/dist/samples/web-components-events/dist/index.html b/dist/samples/web-components-events/dist/index.html new file mode 100644 index 00000000..4fe0d68b --- /dev/null +++ b/dist/samples/web-components-events/dist/index.html @@ -0,0 +1,39 @@ + + + + + + Add a Map Web Component with Events + + + + + + + + + + + + + + + diff --git a/dist/samples/web-components-events/docs/index.html b/dist/samples/web-components-events/docs/index.html new file mode 100644 index 00000000..f6f8b939 --- /dev/null +++ b/dist/samples/web-components-events/docs/index.html @@ -0,0 +1,39 @@ + + + + + + Add a Map Web Component with Events + + + + + + + + + + + + + + + diff --git a/dist/samples/web-components-events/docs/index.js b/dist/samples/web-components-events/docs/index.js new file mode 100644 index 00000000..33ce5bc0 --- /dev/null +++ b/dist/samples/web-components-events/docs/index.js @@ -0,0 +1,29 @@ +"use strict"; +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +// [START maps_web_components_events] +// This example adds a map using web components. +async function initMap() { + await google.maps.importLibrary("maps"); + await google.maps.importLibrary("marker"); + console.log('Maps JavaScript API loaded.'); + const advancedMarkers = document.querySelectorAll("#marker-click-event-example gmp-advanced-marker"); + for (const markerElement of advancedMarkers) { + const advancedMarker = markerElement; + customElements.whenDefined(advancedMarker.localName).then(async () => { + advancedMarker.addEventListener('gmp-click', () => { + const infoWindow = new google.maps.InfoWindow({ + content: advancedMarker.title, + }); + infoWindow.open({ + anchor: advancedMarker, + }); + }); + }); + } +} +initMap(); +// [END maps_web_components_events] diff --git a/dist/samples/web-components-events/docs/index.ts b/dist/samples/web-components-events/docs/index.ts new file mode 100644 index 00000000..c7c820af --- /dev/null +++ b/dist/samples/web-components-events/docs/index.ts @@ -0,0 +1,35 @@ +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// [START maps_web_components_events] +// This example adds a map using web components. +async function initMap(): Promise { + await google.maps.importLibrary("maps"); + await google.maps.importLibrary("marker"); + + console.log('Maps JavaScript API loaded.'); + + const advancedMarkers = document.querySelectorAll("#marker-click-event-example gmp-advanced-marker"); + + for (const markerElement of advancedMarkers) { + const advancedMarker = markerElement as google.maps.marker.AdvancedMarkerElement; + + customElements.whenDefined(advancedMarker.localName).then(async () => { + advancedMarker.addEventListener('gmp-click', () => { + const infoWindow = new google.maps.InfoWindow({ + content: advancedMarker.title, + }); + + infoWindow.open({ + anchor: advancedMarker, + }); + }); + }); + } +} + +initMap(); +// [END maps_web_components_events] diff --git a/dist/samples/web-components-events/docs/style.css b/dist/samples/web-components-events/docs/style.css new file mode 100644 index 00000000..a2eaae43 --- /dev/null +++ b/dist/samples/web-components-events/docs/style.css @@ -0,0 +1,18 @@ +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +/* [START maps_web_components_events] */ + +/* + * Optional: Makes the sample page fill the window. + */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +/* [END maps_web_components_events] */ \ No newline at end of file diff --git a/dist/samples/web-components-events/jsfiddle/demo.css b/dist/samples/web-components-events/jsfiddle/demo.css new file mode 100644 index 00000000..f488152d --- /dev/null +++ b/dist/samples/web-components-events/jsfiddle/demo.css @@ -0,0 +1,17 @@ +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + + +/* + * Optional: Makes the sample page fill the window. + */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + diff --git a/dist/samples/web-components-events/jsfiddle/demo.details b/dist/samples/web-components-events/jsfiddle/demo.details new file mode 100644 index 00000000..87b74240 --- /dev/null +++ b/dist/samples/web-components-events/jsfiddle/demo.details @@ -0,0 +1,7 @@ +name: web-components-events +authors: + - Geo Developer IX Documentation Team +tags: + - google maps +load_type: h +description: Sample code supporting Google Maps Platform JavaScript API documentation. diff --git a/dist/samples/web-components-events/jsfiddle/demo.html b/dist/samples/web-components-events/jsfiddle/demo.html new file mode 100644 index 00000000..e4e09f29 --- /dev/null +++ b/dist/samples/web-components-events/jsfiddle/demo.html @@ -0,0 +1,39 @@ + + + + + + Add a Map Web Component with Events + + + + + + + + + + + + + + + diff --git a/dist/samples/web-components-events/jsfiddle/demo.js b/dist/samples/web-components-events/jsfiddle/demo.js new file mode 100644 index 00000000..190d156b --- /dev/null +++ b/dist/samples/web-components-events/jsfiddle/demo.js @@ -0,0 +1,29 @@ +"use strict"; +/** + * @license + * Copyright 2026 Google LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// This example adds a map using web components. +async function initMap() { + await google.maps.importLibrary("maps"); + await google.maps.importLibrary("marker"); + console.log('Maps JavaScript API loaded.'); + const advancedMarkers = document.querySelectorAll("#marker-click-event-example gmp-advanced-marker"); + for (const markerElement of advancedMarkers) { + const advancedMarker = markerElement; + customElements.whenDefined(advancedMarker.localName).then(async () => { + advancedMarker.addEventListener('gmp-click', () => { + const infoWindow = new google.maps.InfoWindow({ + content: advancedMarker.title, + }); + infoWindow.open({ + anchor: advancedMarker, + }); + }); + }); + } +} +initMap(); + diff --git a/index.html b/index.html index b580a5fd..6358680f 100644 --- a/index.html +++ b/index.html @@ -136,6 +136,7 @@

    Maps JSAPI Samples

  • ui-kit-place-search-nearby
  • ui-kit-place-search-text
  • weather-api-current-compact
  • +
  • web-components-events
  • web-components-map
  • web-components-markers
  • diff --git a/package-lock.json b/package-lock.json index f73f8c00..47ea7eb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -931,6 +931,10 @@ "resolved": "samples/weather-api-current-compact", "link": true }, + "node_modules/@js-api-samples/web-components-events": { + "resolved": "samples/web-components-events", + "link": true + }, "node_modules/@js-api-samples/web-components-map": { "resolved": "samples/web-components-map", "link": true @@ -5973,6 +5977,10 @@ "name": "@js-api-samples/weather-api-current-compact", "version": "1.0.0" }, + "samples/web-components-events": { + "name": "@js-api-samples/web-components-events", + "version": "1.0.0" + }, "samples/web-components-map": { "name": "@js-api-samples/web-components-map", "version": "1.0.0"