diff --git a/lib/src/Components/Map/Subcomponents/Controls/FullscreenControl.tsx b/lib/src/Components/Map/Subcomponents/Controls/FullscreenControl.tsx
new file mode 100644
index 00000000..621d3955
--- /dev/null
+++ b/lib/src/Components/Map/Subcomponents/Controls/FullscreenControl.tsx
@@ -0,0 +1,41 @@
+import ArrowsPointingInIcon from '@heroicons/react/24/outline/ArrowsPointingInIcon'
+import ArrowsPointingOutIcon from '@heroicons/react/24/outline/ArrowsPointingOutIcon'
+import { useEffect, useState } from 'react'
+
+export const FullscreenControl = () => {
+ const [isFullscreen, setIsFullscreen] = useState(false)
+
+ useEffect(() => {
+ const handleFullscreenChange = () => {
+ setIsFullscreen(document.fullscreenElement != null)
+ }
+
+ document.addEventListener('fullscreenchange', handleFullscreenChange)
+ return () => {
+ document.removeEventListener('fullscreenchange', handleFullscreenChange)
+ }
+ }, [])
+
+ const toggleFullscreen = () => {
+ if (!document.fullscreenElement) {
+ void document.documentElement.requestFullscreen()
+ } else {
+ void document.exitFullscreen()
+ }
+ }
+
+ return (
+
+
+ {isFullscreen ? (
+
+ ) : (
+
+ )}
+
+
+ )
+}
diff --git a/lib/src/Components/Map/UtopiaMap.tsx b/lib/src/Components/Map/UtopiaMap.tsx
index 3ca2a6e3..939cf424 100644
--- a/lib/src/Components/Map/UtopiaMap.tsx
+++ b/lib/src/Components/Map/UtopiaMap.tsx
@@ -53,6 +53,7 @@ function UtopiaMap({
showLayerControl = true,
showZoomControl = false,
showThemeControl = false,
+ showFullscreenControl = false,
defaultTheme,
donationWidget,
expandLayerControl,
@@ -81,6 +82,8 @@ function UtopiaMap({
showZoomControl?: boolean
/** show a widget to switch the theme */
showThemeControl?: boolean
+ /** show fullscreen control widget (default false) */
+ showFullscreenControl?: boolean
/** the defaut theme */
defaultTheme?: string
/** ask to donate to the Utopia Project OpenCollective campaign (default false) */
@@ -106,6 +109,7 @@ function UtopiaMap({
showFilterControl={showFilterControl}
showGratitudeControl={showGratitudeControl}
showLayerControl={showLayerControl}
+ showFullscreenControl={showFullscreenControl}
donationWidget={donationWidget}
showThemeControl={showThemeControl}
defaultTheme={defaultTheme}
diff --git a/lib/src/Components/Map/UtopiaMapInner.tsx b/lib/src/Components/Map/UtopiaMapInner.tsx
index d197f92a..7cfc5d96 100644
--- a/lib/src/Components/Map/UtopiaMapInner.tsx
+++ b/lib/src/Components/Map/UtopiaMapInner.tsx
@@ -36,6 +36,7 @@ import { useTags } from './hooks/useTags'
import AddButton from './Subcomponents/AddButton'
import { Control } from './Subcomponents/Controls/Control'
import { FilterControl } from './Subcomponents/Controls/FilterControl'
+import { FullscreenControl } from './Subcomponents/Controls/FullscreenControl'
import { GratitudeControl } from './Subcomponents/Controls/GratitudeControl'
import { LayerControl } from './Subcomponents/Controls/LayerControl'
import { SearchControl } from './Subcomponents/Controls/SearchControl'
@@ -51,6 +52,7 @@ export function UtopiaMapInner({
showFilterControl = false,
showGratitudeControl = false,
showLayerControl = true,
+ showFullscreenControl = false,
showThemeControl = false,
defaultTheme = '',
donationWidget,
@@ -63,6 +65,7 @@ export function UtopiaMapInner({
showFilterControl?: boolean
showLayerControl?: boolean
showGratitudeControl?: boolean
+ showFullscreenControl?: boolean
donationWidget?: boolean
showThemeControl?: boolean
defaultTheme?: string
@@ -279,6 +282,7 @@ export function UtopiaMapInner({
{showFilterControl && }
{showLayerControl && }
{showGratitudeControl && }
+ {showFullscreenControl && }