diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index a1bf91b2..00000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/samples/.DS_Store b/samples/.DS_Store
deleted file mode 100644
index 3d3bc3e9..00000000
Binary files a/samples/.DS_Store and /dev/null differ
diff --git a/samples/.gitignore b/samples/.gitignore
index 68c5d18f..86647843 100644
--- a/samples/.gitignore
+++ b/samples/.gitignore
@@ -3,3 +3,4 @@ node_modules/
/playwright-report/
/blob-report/
/playwright/.cache/
+**/.DS_Store
\ No newline at end of file
diff --git a/samples/3d-camera-to-around/index.html b/samples/3d-camera-to-around/index.html
new file mode 100644
index 00000000..f0af56bb
--- /dev/null
+++ b/samples/3d-camera-to-around/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
Click on a marker to get the name of the Google Office.
+
+
+
+
+
+
+
diff --git a/samples/3d-marker-interactive/index.ts b/samples/3d-marker-interactive/index.ts
new file mode 100644
index 00000000..81fad67f
--- /dev/null
+++ b/samples/3d-marker-interactive/index.ts
@@ -0,0 +1,84 @@
+/*
+* @license
+* Copyright 2025 Google LLC. All Rights Reserved.
+* SPDX-License-Identifier: Apache-2.0
+*/
+
+// @ts-nocheck
+// [START maps_3d_marker_interactive]
+async function init() {
+ // Request needed libraries.
+ const { Map3DElement, Marker3DInteractiveElement, PopoverElement } = await google.maps.importLibrary("maps3d");
+
+ const map = new Map3DElement({
+ center: { lat: 37.4690, lng: -122.1074, altitude: 0 },
+ tilt: 67.5,
+ range: 45000,
+ mode: 'HYBRID'
+ });
+
+ map.mode = "SATELLITE";
+
+ for (const position of positions) {
+ const popover = new PopoverElement({
+ open: true,
+ });
+
+ popover.append(position.name);
+
+ const interactiveMarker = new Marker3DInteractiveElement({
+ position,
+ gmpPopoverTargetElement: popover
+ });
+
+ map.append(interactiveMarker);
+ map.append(popover);
+ }
+
+ document.body.append(map);
+}
+
+const positions = [{
+ lat: 37.50981071450543,
+ lng: -122.20280629839084,
+ name: "Google Redwood City",
+}, {
+ lat: 37.423897572754754,
+ lng: -122.09167346506989,
+ name: "Google West Campus",
+}, {
+ lat: 37.42333982824077,
+ lng: -122.06647571637265,
+ name: "Google Bay View",
+}, {
+ lat: 37.42193728115661,
+ lng: -122.08531908774293,
+ name: "Googleplex",
+}, {
+ lat: 37.39982552146971,
+ lng: -122.057934225745,
+ name: "Google Quad Campus",
+}, {
+ lat: 37.40317922575345,
+ lng: -122.03276863941647,
+ name: "Google Tech Corners",
+}, {
+ lat: 37.41181058680138,
+ lng: -121.9538960231151,
+ name: "Google San Jose",
+}, {
+ lat: 37.62759428242346,
+ lng: -122.42615377188994,
+ name: "Google San Bruno",
+}, {
+ lat: 37.40369749797231,
+ lng: -122.14812537955007,
+ name: "Google Palo Alto",
+}, {
+ lat: 37.793664664297964,
+ lng: -122.39504580413139,
+ name: "Google San Francisco",
+}];
+
+init();
+// [END maps_3d_marker_interactive]
diff --git a/samples/3d-marker-interactive/package.json b/samples/3d-marker-interactive/package.json
new file mode 100644
index 00000000..d70799ff
--- /dev/null
+++ b/samples/3d-marker-interactive/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@js-api-samples/3d-marker-interactive",
+ "version": "1.0.0",
+ "scripts": {
+ "build": "tsc && bash ../jsfiddle.sh 3d-marker-interactive && bash ../app.sh 3d-marker-interactive && bash ../docs.sh 3d-marker-interactive && npm run build:vite --workspace=. && bash ../dist.sh 3d-marker-interactive",
+ "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/samples/3d-marker-interactive/style.css b/samples/3d-marker-interactive/style.css
new file mode 100644
index 00000000..ef9f6866
--- /dev/null
+++ b/samples/3d-marker-interactive/style.css
@@ -0,0 +1,40 @@
+/*
+* @license
+* Copyright 2025 Google LLC. All Rights Reserved.
+* SPDX-License-Identifier: Apache-2.0
+*/
+/* [START maps_3d_marker_interactive] */
+/* * Always set the map height explicitly to define the size of the div element
+ * that contains the map.
+ */
+html,
+map {
+ height: 100%;
+}
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+.textContainer {
+ background-color: #4d90fe;
+ box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
+ margin: 10px;
+ font: 400 18px Roboto, Arial, sans-serif;
+ overflow: hidden;
+ position: absolute;
+ left: 50%;
+ bottom: 5px;
+ transform: translateX(-50%);
+ border: 1px solid white;
+ border-radius: 2px;
+ padding: 5px;
+ z-index: 1000;
+}
+
+.text {
+ color: white;
+ font-size: 1em;
+ text-align: center;
+}
+/* [END maps_3d_marker_interactive] */
diff --git a/samples/3d-marker-interactive/tsconfig.json b/samples/3d-marker-interactive/tsconfig.json
new file mode 100644
index 00000000..366aabb0
--- /dev/null
+++ b/samples/3d-marker-interactive/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "compilerOptions": {
+ "module": "esnext",
+ "target": "esnext",
+ "strict": true,
+ "noImplicitAny": false,
+ "lib": [
+ "es2015",
+ "esnext",
+ "es6",
+ "dom",
+ "dom.iterable"
+ ],
+ "moduleResolution": "Node",
+ "jsx": "preserve"
+ }
+}
diff --git a/samples/3d-places-autocomplete/index.html b/samples/3d-places-autocomplete/index.html
new file mode 100644
index 00000000..98b9d9e8
--- /dev/null
+++ b/samples/3d-places-autocomplete/index.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+