diff --git a/dist/index.html b/dist/index.html
index f5ba1e02..02b817c0 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -16,6 +16,7 @@
Maps JSAPI Samples
3d-label-toggle
3d-localization
3d-map-45-degree
+ 3d-map-events
3d-map-roadmap
3d-map-styling
3d-marker-click-event
diff --git a/dist/samples/3d-map-events/app/.eslintsrc.json b/dist/samples/3d-map-events/app/.eslintsrc.json
new file mode 100644
index 00000000..4c44dab0
--- /dev/null
+++ b/dist/samples/3d-map-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/3d-map-events/app/README.md b/dist/samples/3d-map-events/app/README.md
new file mode 100644
index 00000000..450037d9
--- /dev/null
+++ b/dist/samples/3d-map-events/app/README.md
@@ -0,0 +1,41 @@
+# Google Maps JavaScript Sample
+
+## 3d-map-events
+
+Sample generated from 3d-map-events
+
+## Setup
+
+### Before starting run:
+
+`npm i`
+
+### Run an example on a local web server
+
+`cd samples/3d-map-events`
+`npm start`
+
+### Build an individual example
+
+`cd samples/3d-map-events`
+`npm run build`
+
+From 'samples':
+
+`npm run build --workspace=3d-map-events/`
+
+### Build all of the examples.
+
+From 'samples':
+
+`npm run build-all`
+
+### Run lint to check for problems
+
+`cd samples/3d-map-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/3d-map-events/app/index.html b/dist/samples/3d-map-events/app/index.html
new file mode 100644
index 00000000..ebad594d
--- /dev/null
+++ b/dist/samples/3d-map-events/app/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 3d-map-events
+
+
+
+
+
+
+
+
+
+
gmp-centerchange
+
gmp-click
+
gmp-headingchange
+
gmp-rangechange
+
gmp-rollchange
+
gmp-steadychange
+
gmp-tiltchange
+
+
+
+
diff --git a/dist/samples/3d-map-events/app/index.ts b/dist/samples/3d-map-events/app/index.ts
new file mode 100644
index 00000000..317e7272
--- /dev/null
+++ b/dist/samples/3d-map-events/app/index.ts
@@ -0,0 +1,29 @@
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// [START maps_3d_map_events]
+const mapElement = document.querySelector('gmp-map-3d');
+
+async function init() {
+ // Import the needed libraries.
+ await google.maps.importLibrary('maps3d');
+
+ const events = [...document.querySelectorAll('div > p')].map(
+ (i) => i.textContent
+ );
+ for (const event of events) {
+ mapElement?.addEventListener(event, () => {
+ const eventElement = document.querySelector(`#${event}`);
+ eventElement?.classList.add('active');
+ setTimeout(() => {
+ eventElement?.classList.remove('active');
+ }, 1000);
+ });
+ }
+}
+
+init();
+// [END maps_3d_map_events]
diff --git a/dist/samples/3d-map-events/app/package.json b/dist/samples/3d-map-events/app/package.json
new file mode 100644
index 00000000..382a927d
--- /dev/null
+++ b/dist/samples/3d-map-events/app/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@js-api-samples/3d-map-events",
+ "version": "1.0.0",
+ "scripts": {
+ "build": "tsc && bash ../jsfiddle.sh 3d-map-events && bash ../app.sh 3d-map-events && bash ../docs.sh 3d-map-events && npm run build:vite --workspace=. && bash ../dist.sh 3d-map-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/3d-map-events/app/style.css b/dist/samples/3d-map-events/app/style.css
new file mode 100644
index 00000000..07b4b686
--- /dev/null
+++ b/dist/samples/3d-map-events/app/style.css
@@ -0,0 +1,32 @@
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/* [START maps_3d_map_events] */
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+body {
+ display: flex;
+ flex-direction: row;
+}
+gmp-map-3d {
+ flex-grow: 1;
+}
+.myaside {
+ flex-basis: 25%;
+ font-family:
+ Droid Sans Mono,
+ monospace;
+ font-size: 15px;
+ padding: 2px;
+}
+.myaside > p.active {
+ background-color: #9cf;
+}
+/* [END maps_3d_map_events] */
diff --git a/dist/samples/3d-map-events/app/tsconfig.json b/dist/samples/3d-map-events/app/tsconfig.json
new file mode 100644
index 00000000..5ba470c0
--- /dev/null
+++ b/dist/samples/3d-map-events/app/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "rootDir": "."
+ },
+ "include": [
+ "./*.ts",
+ ]
+}
diff --git a/dist/samples/3d-map-events/dist/assets/index-C66U5p_u.js b/dist/samples/3d-map-events/dist/assets/index-C66U5p_u.js
new file mode 100644
index 00000000..d0811b84
--- /dev/null
+++ b/dist/samples/3d-map-events/dist/assets/index-C66U5p_u.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)}})();var e=document.querySelector(`gmp-map-3d`);async function t(){await google.maps.importLibrary(`maps3d`);let t=[...document.querySelectorAll(`div > p`)].map(e=>e.textContent);for(let n of t)e?.addEventListener(n,()=>{let e=document.querySelector(`#${n}`);e?.classList.add(`active`),setTimeout(()=>{e?.classList.remove(`active`)},1e3)})}t();
\ No newline at end of file
diff --git a/dist/samples/3d-map-events/dist/assets/index-SqEftstQ.css b/dist/samples/3d-map-events/dist/assets/index-SqEftstQ.css
new file mode 100644
index 00000000..bdb12a42
--- /dev/null
+++ b/dist/samples/3d-map-events/dist/assets/index-SqEftstQ.css
@@ -0,0 +1 @@
+html,body{height:100%;margin:0;padding:0}body{flex-direction:row;display:flex}gmp-map-3d{flex-grow:1}.myaside{flex-basis:25%;padding:2px;font-family:Droid Sans Mono,monospace;font-size:15px}.myaside>p.active{background-color:#9cf}
diff --git a/dist/samples/3d-map-events/dist/index.html b/dist/samples/3d-map-events/dist/index.html
new file mode 100644
index 00000000..d37e9781
--- /dev/null
+++ b/dist/samples/3d-map-events/dist/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 3d-map-events
+
+
+
+
+
+
+
+
+
+
gmp-centerchange
+
gmp-click
+
gmp-headingchange
+
gmp-rangechange
+
gmp-rollchange
+
gmp-steadychange
+
gmp-tiltchange
+
+
+
+
diff --git a/dist/samples/3d-map-events/docs/index.html b/dist/samples/3d-map-events/docs/index.html
new file mode 100644
index 00000000..ebad594d
--- /dev/null
+++ b/dist/samples/3d-map-events/docs/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 3d-map-events
+
+
+
+
+
+
+
+
+
+
gmp-centerchange
+
gmp-click
+
gmp-headingchange
+
gmp-rangechange
+
gmp-rollchange
+
gmp-steadychange
+
gmp-tiltchange
+
+
+
+
diff --git a/dist/samples/3d-map-events/docs/index.js b/dist/samples/3d-map-events/docs/index.js
new file mode 100644
index 00000000..acbc55e3
--- /dev/null
+++ b/dist/samples/3d-map-events/docs/index.js
@@ -0,0 +1,24 @@
+"use strict";
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+// [START maps_3d_map_events]
+const mapElement = document.querySelector('gmp-map-3d');
+async function init() {
+ // Import the needed libraries.
+ await google.maps.importLibrary('maps3d');
+ const events = [...document.querySelectorAll('div > p')].map((i) => i.textContent);
+ for (const event of events) {
+ mapElement?.addEventListener(event, () => {
+ const eventElement = document.querySelector(`#${event}`);
+ eventElement?.classList.add('active');
+ setTimeout(() => {
+ eventElement?.classList.remove('active');
+ }, 1000);
+ });
+ }
+}
+init();
+// [END maps_3d_map_events]
diff --git a/dist/samples/3d-map-events/docs/index.ts b/dist/samples/3d-map-events/docs/index.ts
new file mode 100644
index 00000000..317e7272
--- /dev/null
+++ b/dist/samples/3d-map-events/docs/index.ts
@@ -0,0 +1,29 @@
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// [START maps_3d_map_events]
+const mapElement = document.querySelector('gmp-map-3d');
+
+async function init() {
+ // Import the needed libraries.
+ await google.maps.importLibrary('maps3d');
+
+ const events = [...document.querySelectorAll('div > p')].map(
+ (i) => i.textContent
+ );
+ for (const event of events) {
+ mapElement?.addEventListener(event, () => {
+ const eventElement = document.querySelector(`#${event}`);
+ eventElement?.classList.add('active');
+ setTimeout(() => {
+ eventElement?.classList.remove('active');
+ }, 1000);
+ });
+ }
+}
+
+init();
+// [END maps_3d_map_events]
diff --git a/dist/samples/3d-map-events/docs/style.css b/dist/samples/3d-map-events/docs/style.css
new file mode 100644
index 00000000..07b4b686
--- /dev/null
+++ b/dist/samples/3d-map-events/docs/style.css
@@ -0,0 +1,32 @@
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/* [START maps_3d_map_events] */
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+body {
+ display: flex;
+ flex-direction: row;
+}
+gmp-map-3d {
+ flex-grow: 1;
+}
+.myaside {
+ flex-basis: 25%;
+ font-family:
+ Droid Sans Mono,
+ monospace;
+ font-size: 15px;
+ padding: 2px;
+}
+.myaside > p.active {
+ background-color: #9cf;
+}
+/* [END maps_3d_map_events] */
diff --git a/dist/samples/3d-map-events/jsfiddle/demo.css b/dist/samples/3d-map-events/jsfiddle/demo.css
new file mode 100644
index 00000000..17f15501
--- /dev/null
+++ b/dist/samples/3d-map-events/jsfiddle/demo.css
@@ -0,0 +1,32 @@
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+body {
+ display: flex;
+ flex-direction: row;
+}
+gmp-map-3d {
+ flex-grow: 1;
+}
+.myaside {
+ flex-basis: 25%;
+ font-family:
+ Droid Sans Mono,
+ monospace;
+ font-size: 15px;
+ padding: 2px;
+}
+.myaside > p.active {
+ background-color: #9cf;
+}
+
diff --git a/dist/samples/3d-map-events/jsfiddle/demo.details b/dist/samples/3d-map-events/jsfiddle/demo.details
new file mode 100644
index 00000000..243aa2b3
--- /dev/null
+++ b/dist/samples/3d-map-events/jsfiddle/demo.details
@@ -0,0 +1,7 @@
+name: 3d-map-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/3d-map-events/jsfiddle/demo.html b/dist/samples/3d-map-events/jsfiddle/demo.html
new file mode 100644
index 00000000..e5dfed79
--- /dev/null
+++ b/dist/samples/3d-map-events/jsfiddle/demo.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 3d-map-events
+
+
+
+
+
+
+
+
+
+
gmp-centerchange
+
gmp-click
+
gmp-headingchange
+
gmp-rangechange
+
gmp-rollchange
+
gmp-steadychange
+
gmp-tiltchange
+
+
+
+
diff --git a/dist/samples/3d-map-events/jsfiddle/demo.js b/dist/samples/3d-map-events/jsfiddle/demo.js
new file mode 100644
index 00000000..4f07c9f0
--- /dev/null
+++ b/dist/samples/3d-map-events/jsfiddle/demo.js
@@ -0,0 +1,24 @@
+"use strict";
+/*
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+const mapElement = document.querySelector('gmp-map-3d');
+async function init() {
+ // Import the needed libraries.
+ await google.maps.importLibrary('maps3d');
+ const events = [...document.querySelectorAll('div > p')].map((i) => i.textContent);
+ for (const event of events) {
+ mapElement?.addEventListener(event, () => {
+ const eventElement = document.querySelector(`#${event}`);
+ eventElement?.classList.add('active');
+ setTimeout(() => {
+ eventElement?.classList.remove('active');
+ }, 1000);
+ });
+ }
+}
+init();
+
diff --git a/index.html b/index.html
index f5ba1e02..02b817c0 100644
--- a/index.html
+++ b/index.html
@@ -16,6 +16,7 @@ Maps JSAPI Samples
3d-label-toggle
3d-localization
3d-map-45-degree
+ 3d-map-events
3d-map-roadmap
3d-map-styling
3d-marker-click-event
diff --git a/package-lock.json b/package-lock.json
index 7dd7a718..76c0d317 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -464,6 +464,10 @@
"resolved": "samples/3d-map-45-degree",
"link": true
},
+ "node_modules/@js-api-samples/3d-map-events": {
+ "resolved": "samples/3d-map-events",
+ "link": true
+ },
"node_modules/@js-api-samples/3d-map-roadmap": {
"resolved": "samples/3d-map-roadmap",
"link": true
@@ -5222,6 +5226,10 @@
"name": "@js-api-samples/3d-map-45-degree",
"version": "1.0.0"
},
+ "samples/3d-map-events": {
+ "name": "@js-api-samples/3d-map-events",
+ "version": "1.0.0"
+ },
"samples/3d-map-roadmap": {
"name": "@js-api-samples/3d-map-roadmap",
"version": "1.0.0"