Merged in feat/SW-1456-country-dynamic-map (pull request #1310)

feat(SW-1456): Added map and fetching hotels by country

* feat(SW-1456): Added map and fetching hotels by country


Approved-by: Fredrik Thorsson
Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-02-12 09:15:33 +00:00
parent 3901c3ac77
commit bcfa84324f
33 changed files with 2211 additions and 187 deletions

View File

@@ -1,4 +1,4 @@
import { getHotels } from "@/lib/trpc/memoizedRequests"
import { getHotelsByCSFilter } from "@/lib/trpc/memoizedRequests"
import SectionContainer from "@/components/Section/Container"
import Title from "@/components/TempDesignSystem/Text/Title"
@@ -13,7 +13,7 @@ export default async function HotelListing({
hotelsToInclude,
contentType,
}: HotelListingProps) {
const hotels = await getHotels({
const hotels = await getHotelsByCSFilter({
locationFilter,
hotelsToInclude: hotelsToInclude,
})
@@ -27,7 +27,7 @@ export default async function HotelListing({
<Title level="h4" as="h3" textTransform="capitalize">
{heading}
</Title>
{hotels.map(({ data, url }) => (
{hotels.map(({ url, ...data }) => (
<HotelListingItem
key={data.hotel.name}
hotel={data.hotel}

View File

@@ -0,0 +1,32 @@
import { env } from "@/env/server"
import { getHotelsByCountry } from "@/lib/trpc/memoizedRequests"
import Title from "@/components/TempDesignSystem/Text/Title"
import Map from "../../Map"
import type { Country } from "@/types/enums/country"
interface CountryMapProps {
country: Country
}
export function preloadHotels(country: Country) {
void getHotelsByCountry(country)
}
export default async function CountryMap({ country }: CountryMapProps) {
const hotels = await getHotelsByCountry(country)
return (
<Map
hotels={hotels}
mapId={env.GOOGLE_DYNAMIC_MAP_ID}
apiKey={env.GOOGLE_STATIC_MAP_KEY}
>
<div>
<Title level="h2" as="h3">
{country}
</Title>
</div>
</Map>
)
}

View File

@@ -0,0 +1,23 @@
.countryMap {
--destination-map-height: 100dvh;
position: absolute;
top: 0;
left: 0;
height: var(--destination-map-height);
width: 100dvw;
z-index: var(--hotel-dynamic-map-z-index);
display: flex;
background-color: var(--Base-Surface-Primary-light-Normal);
}
.wrapper {
position: absolute;
top: 0;
left: 0;
}
.closeButton {
pointer-events: initial;
box-shadow: var(--button-box-shadow);
gap: var(--Spacing-x-half);
}

View File

@@ -16,6 +16,7 @@ import SidebarContentWrapper from "../SidebarContentWrapper"
import DestinationPageSidePeek from "../Sidepeek"
import StaticMap from "../StaticMap"
import TopImages from "../TopImages"
import CountryMap, { preloadHotels } from "./CountryMap"
import styles from "./destinationCountryPage.module.css"
@@ -41,6 +42,8 @@ export default async function DestinationCountryPage() {
destination_settings,
} = destinationCountryPage
preloadHotels(destination_settings.country)
return (
<>
<div className={styles.pageContainer}>
@@ -72,6 +75,7 @@ export default async function DestinationCountryPage() {
</SidebarContentWrapper>
</aside>
</div>
<CountryMap country={destination_settings.country} />
<Suspense fallback={null}>
<TrackingSDK pageData={tracking} />
</Suspense>

View File

@@ -0,0 +1,66 @@
.mapWrapper {
--button-box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);
width: 100%;
height: 100%;
position: relative;
z-index: 0;
}
.mapWrapper::after {
content: "";
position: absolute;
top: 0;
right: 0;
background: linear-gradient(
43deg,
rgba(172, 172, 172, 0) 57.66%,
rgba(0, 0, 0, 0.25) 92.45%
);
width: 100%;
height: 100%;
pointer-events: none;
}
.ctaButtons {
position: absolute;
top: var(--Spacing-x2);
right: var(--Spacing-x2);
z-index: 1;
display: flex;
flex-direction: column;
gap: var(--Spacing-x7);
align-items: flex-end;
pointer-events: none;
}
.zoomButtons {
display: grid;
gap: var(--Spacing-x1);
}
.closeButton {
pointer-events: initial;
box-shadow: var(--button-box-shadow);
gap: var(--Spacing-x-half);
}
.zoomButton {
width: var(--Spacing-x5);
height: var(--Spacing-x5);
padding: 0;
pointer-events: initial;
box-shadow: var(--button-box-shadow);
}
@media screen and (min-width: 768px) {
.ctaButtons {
top: var(--Spacing-x4);
right: var(--Spacing-x4);
bottom: var(--Spacing-x4);
justify-content: space-between;
}
.zoomButtons {
display: flex;
}
}

View File

@@ -0,0 +1,119 @@
"use client"
import "client-only"
import { Map, type MapProps, useMap } from "@vis.gl/react-google-maps"
import { type PropsWithChildren, useEffect } from "react"
import { useIntl } from "react-intl"
import { CloseLargeIcon, MinusIcon, PlusIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button"
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
import styles from "./dynamicMap.module.css"
import type { DestinationMarker } from "@/types/components/maps/destinationMarkers"
interface DynamicMapProps {
markers: DestinationMarker[]
mapId: string
onTilesLoaded?: () => void
onClose?: () => void
}
export default function DynamicMap({
markers,
mapId,
onTilesLoaded,
onClose,
children,
}: PropsWithChildren<DynamicMapProps>) {
const intl = useIntl()
const map = useMap()
useEffect(() => {
if (map) {
const bounds = new google.maps.LatLngBounds()
markers.forEach((marker) => {
bounds.extend(marker.coordinates)
})
map.fitBounds(bounds)
}
}, [map, markers])
useHandleKeyUp((event: KeyboardEvent) => {
if (event.key === "Escape" && onClose) {
onClose()
}
})
function zoomIn() {
const currentZoom = map && map.getZoom()
console.log(currentZoom)
if (currentZoom) {
map.setZoom(currentZoom + 1)
}
}
function zoomOut() {
const currentZoom = map && map.getZoom()
console.log(currentZoom)
if (currentZoom) {
map.setZoom(currentZoom - 1)
}
}
const mapOptions: MapProps = {
defaultCenter: markers[0].coordinates, // Default center will be overridden by the bounds
minZoom: 3,
defaultZoom: 8,
disableDefaultUI: true,
clickableIcons: false,
gestureHandling: "greedy",
mapId,
}
return (
<div className={styles.mapWrapper}>
<Map {...mapOptions} onTilesLoaded={onTilesLoaded}>
{children}
</Map>
<div className={styles.ctaButtons}>
<Button
theme="base"
intent="inverted"
variant="icon"
size="small"
className={styles.closeButton}
onClick={onClose}
>
<CloseLargeIcon color="burgundy" />
<span>{intl.formatMessage({ id: "Close the map" })}</span>
</Button>
<div className={styles.zoomButtons}>
<Button
theme="base"
intent="inverted"
variant="icon"
size="small"
className={styles.zoomButton}
onClick={zoomOut}
aria-label={intl.formatMessage({ id: "Zoom in" })}
>
<MinusIcon color="burgundy" width={20} height={20} />
</Button>
<Button
theme="base"
intent="inverted"
variant="icon"
size="small"
className={styles.zoomButton}
onClick={zoomIn}
aria-label={intl.formatMessage({ id: "Zoom out" })}
>
<PlusIcon color="burgundy" width={20} height={20} />
</Button>
</div>
</div>
</div>
)
}

View File

@@ -0,0 +1,29 @@
"use client"
import {
AdvancedMarker,
AdvancedMarkerAnchorPoint,
} from "@vis.gl/react-google-maps"
import HotelMarkerByType from "@/components/Maps/Markers"
import styles from "./mapContent.module.css"
import type { DestinationMarker } from "@/types/components/maps/destinationMarkers"
interface MapContentProps {
markers: DestinationMarker[]
}
export default function MapContent({ markers }: MapContentProps) {
return markers.map((item) => (
<AdvancedMarker
key={item.name}
className={styles.advancedMarker}
position={item.coordinates}
anchorPoint={AdvancedMarkerAnchorPoint.BOTTOM_CENTER}
>
<HotelMarkerByType hotelId={item.id} hotelType={item.type} />
</AdvancedMarker>
))
}

View File

@@ -0,0 +1,15 @@
"use client"
import { APIProvider } from "@vis.gl/react-google-maps"
import type { PropsWithChildren } from "react"
interface MapContainerProps {
apiKey: string
}
export default function MapProvider({
apiKey,
children,
}: PropsWithChildren<MapContainerProps>) {
return <APIProvider apiKey={apiKey}>{children}</APIProvider>
}

View File

@@ -0,0 +1,129 @@
"use client"
import { useSearchParams } from "next/navigation"
import {
type PropsWithChildren,
useCallback,
useEffect,
useMemo,
useRef,
useState,
} from "react"
import { Dialog, Modal } from "react-aria-components"
import { debounce } from "@/utils/debounce"
import DynamicMap from "./DynamicMap"
import MapContent from "./MapContent"
import MapProvider from "./MapProvider"
import styles from "./map.module.css"
import type { DestinationMarker } from "@/types/components/maps/destinationMarkers"
import type { HotelDataWithUrl } from "@/types/hotel"
interface MapProps {
hotels: HotelDataWithUrl[]
mapId: string
apiKey: string
}
export default function Map({
hotels,
mapId,
apiKey,
children,
}: PropsWithChildren<MapProps>) {
const searchParams = useSearchParams()
const isMapView = useMemo(
() => searchParams.get("view") === "map",
[searchParams]
)
const rootDiv = useRef<HTMLDivElement | null>(null)
const [mapHeight, setMapHeight] = useState("0px")
const [scrollHeightWhenOpened, setScrollHeightWhenOpened] = useState(0)
const markers = hotels
.map(({ hotel }) => ({
id: hotel.id,
type: hotel.hotelType || "regular",
name: hotel.name,
coordinates: hotel.location
? {
lat: hotel.location.latitude,
lng: hotel.location.longitude,
}
: null,
}))
.filter((item): item is DestinationMarker => !!item.coordinates)
// Calculate the height of the map based on the viewport height from the start-point (below the header and booking widget)
const handleMapHeight = useCallback(() => {
const topPosition = rootDiv.current?.getBoundingClientRect().top ?? 0
const scrollY = window.scrollY
setMapHeight(`calc(100dvh - ${topPosition + scrollY}px)`)
}, [])
// Making sure the map is always opened at the top of the page,
// just below the header and booking widget as these should stay visible.
// When closing, the page should scroll back to the position it was before opening the map.
useEffect(() => {
// Skip the first render
if (!rootDiv.current) {
return
}
if (isMapView && scrollHeightWhenOpened === 0) {
const scrollY = window.scrollY
setScrollHeightWhenOpened(scrollY)
window.scrollTo({ top: 0, behavior: "instant" })
} else if (!isMapView && scrollHeightWhenOpened !== 0) {
window.scrollTo({ top: scrollHeightWhenOpened, behavior: "instant" })
setScrollHeightWhenOpened(0)
}
}, [isMapView, scrollHeightWhenOpened, rootDiv])
useEffect(() => {
const debouncedResizeHandler = debounce(function () {
handleMapHeight()
})
const observer = new ResizeObserver(debouncedResizeHandler)
observer.observe(document.documentElement)
return () => {
if (observer) {
observer.unobserve(document.documentElement)
}
}
}, [rootDiv, isMapView, handleMapHeight])
function handleClose() {
window.history.pushState({}, "", window.location.pathname)
}
return (
<MapProvider apiKey={apiKey}>
<div className={styles.wrapper} ref={rootDiv}>
<Modal
isOpen={isMapView}
UNSTABLE_portalContainer={rootDiv.current || undefined}
>
<Dialog
className={styles.dialog}
style={
{ "--destination-map-height": mapHeight } as React.CSSProperties
}
aria-label={"Mapview"}
>
<aside className={styles.sidebar}>{children}</aside>
<DynamicMap markers={markers} mapId={mapId} onClose={handleClose}>
<MapContent markers={markers} />
</DynamicMap>
</Dialog>
</Modal>
</div>
</MapProvider>
)
}

View File

@@ -0,0 +1,35 @@
.dialog {
--destination-map-height: 100dvh;
position: absolute;
top: 0;
left: 0;
height: var(--destination-map-height);
width: 100dvw;
z-index: var(--hotel-dynamic-map-z-index);
display: flex;
background-color: var(--Base-Surface-Primary-light-Normal);
}
.sidebar {
width: 100%;
max-width: 400px;
background-color: var(--Base-Surface-Primary-Normal);
overflow-y: auto;
padding: var(--Spacing-x4);
display: flex;
flex-direction: column;
gap: var(--Spacing-x4);
}
.wrapper {
position: absolute;
top: 0;
left: 0;
}
.closeButton {
pointer-events: initial;
box-shadow: var(--button-box-shadow);
gap: var(--Spacing-x-half);
}

View File

@@ -1,3 +1,5 @@
import Link from "next/link"
import { MapIcon } from "@/components/Icons"
import StaticMap from "@/components/Maps/StaticMap"
import Button from "@/components/TempDesignSystem/Button"
@@ -36,10 +38,12 @@ export default async function DestinationStaticMap({
size="small"
theme="base"
className={styles.button}
asChild
>
{/* TODO: Decide on how the map should load */}
<MapIcon />
{intl.formatMessage({ id: "See on map" })}
<Link href="?view=map">
<MapIcon />
{intl.formatMessage({ id: "See on map" })}
</Link>
</Button>
</div>
)

View File

@@ -0,0 +1,123 @@
export default function DowntownCamperMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="85"
height="104"
viewBox="0 0 85 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17546)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.6266 71.6347C64.2931 67.7384 73.5 55.9444 73.5 42C73.5 24.8792 59.6208 11 42.5 11C25.3792 11 11.5 24.8792 11.5 42C11.5 56.0928 20.9039 67.9892 33.779 71.7564L41.1302 83.3734C41.9242 84.6282 43.7607 84.6106 44.5305 83.3407L51.6266 71.6347Z"
fill="white"
/>
<path
d="M15.5 42C15.5 27.0883 27.5883 15 42.5 15C57.4117 15 69.5 27.0883 69.5 42C69.5 56.9117 57.4117 69 42.5 69C27.5883 69 15.5 56.9117 15.5 42Z"
fill="#834722"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M32.2911 55.4289H42.605C42.615 55.4289 42.6262 55.4291 42.6361 55.4291C49.7871 55.4291 55.3233 51.2755 56.6904 44.9956H51.5568C50.4279 48.8944 47.0625 51.2876 42.6342 51.2876H37.0518V32.7123H42.6436C46.8966 32.7194 50.2196 35.0087 51.4506 38.728H56.6458C55.2074 32.6272 49.6958 28.5827 42.6519 28.5708H32.2911V55.4289ZM42.6378 56.9162H30.7969V27.0836H42.6531C50.782 27.0975 57.0669 32.0267 58.2941 39.3492L58.4391 40.2153H50.3177L50.1707 39.6617C49.2774 36.2986 46.3929 34.2058 42.6423 34.1995H38.546V49.8H42.6322C46.5402 49.8 49.4566 47.6136 50.2476 44.0897L50.3781 43.5082H58.4564L58.3257 44.3637C57.1773 51.8752 50.8747 56.9162 42.6378 56.9162Z"
fill="#FCFCFC"
/>
</g>
<g filter="url(#filter1_d_342_17546)">
<rect x="36.5" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42.5" cy="95" r="4" fill="#834722" />
</g>
<defs>
<filter
id="filter0_d_342_17546"
x="0.5"
y="0"
width="84"
height="95.3039"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17546"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17546"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17546"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17546"
x="33.5"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17546"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17546"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17546"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,78 @@
export default function DowntownCamperSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17476)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#834722"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M29.2411 47.2059H37.0796C37.0873 47.2059 37.0958 47.2061 37.1033 47.2061C42.538 47.2061 46.7455 44.0493 47.7846 39.2766H43.883C43.0251 42.2397 40.4673 44.0585 37.1018 44.0585H32.8592V29.9413H37.109C40.3413 29.9468 42.8667 31.6866 43.8023 34.5133H47.7507C46.6575 29.8767 42.4686 26.8029 37.1153 26.7938H29.2411V47.2059ZM37.1046 48.3363H28.1055V25.6636H37.1162C43.2942 25.6741 48.0707 29.4203 49.0033 34.9854L49.1135 35.6436H42.9413L42.8296 35.2229C42.1507 32.667 39.9584 31.0764 37.108 31.0716H33.9948V42.928H37.1003C40.0704 42.928 42.2868 41.2663 42.888 38.5882L42.9872 38.1462H49.1267L49.0274 38.7964C48.1546 44.5052 43.3646 48.3363 37.1046 48.3363Z"
fill="#FCFCFC"
/>
</g>
<defs>
<filter
id="filter0_d_342_17476"
x="0"
y="0"
width="74"
height="83.1913"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17476"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17476"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17476"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,173 @@
export default function GrandHotelMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="84"
height="104"
viewBox="0 0 84 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17583)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.1266 71.6347C63.7931 67.7384 73 55.9444 73 42C73 24.8792 59.1208 11 42 11C24.8792 11 11 24.8792 11 42C11 56.0928 20.4039 67.9892 33.279 71.7564L40.6302 83.3733C41.4242 84.6282 43.2607 84.6105 44.0305 83.3406L51.1266 71.6347Z"
fill="white"
/>
<path
d="M15 42C15 27.0883 27.0883 15 42 15C56.9117 15 69 27.0883 69 42C69 56.9117 56.9117 69 42 69C27.0883 69 15 56.9117 15 42Z"
fill="#DBA7B1"
/>
<path
d="M23.5717 44.819C20.3827 44.819 18.668 43.2709 18.668 40.218C18.668 38.4614 19.5882 36.9958 21.1066 36.314C21.9011 35.9666 22.6934 35.7712 23.8122 35.7712C24.8186 35.7712 25.6263 35.9948 26.3634 36.0643C26.2774 36.4269 26.1802 37.3888 26.1516 38.0576C26.1251 38.0923 26.0633 38.1097 26.0037 38.1097C25.964 38.1097 25.9242 38.101 25.8978 38.0858C25.7985 37.011 25.6153 36.6918 25.1761 36.4682C24.7237 36.2445 24.1124 36.1208 23.2627 36.1208C20.7822 36.1208 19.7207 37.8209 19.7207 40.1637C19.7207 42.5066 21.0801 44.4998 23.746 44.4998C24.1852 44.4998 24.6663 44.4303 24.8804 44.3456C25.1496 44.2349 25.2622 44.0525 25.2909 43.6487C25.3196 43.2014 25.3615 42.5478 25.3196 42.0875C25.2776 41.5859 25.1916 41.4318 24.7391 41.3623C24.5118 41.321 24.4125 41.321 24.044 41.2776C24.002 41.2494 24.002 41.0974 24.044 41.0692C24.5692 41.0692 25.1629 41.1104 25.7455 41.1104C26.3281 41.1104 26.6525 41.0974 27.0078 41.0692C27.0365 41.1104 27.0365 41.2515 26.9946 41.2776C26.754 41.3189 26.626 41.3471 26.5135 41.3883C26.2575 41.4578 26.2023 41.6815 26.1736 42.0853C26.1449 42.5174 26.1162 43.3816 26.1604 43.7312C26.1891 43.9961 26.2023 44.0373 26.4716 44.122C26.4848 44.1633 26.4716 44.2892 26.4429 44.3174C26.1162 44.3739 24.7414 44.819 23.5805 44.819"
fill="black"
/>
<path
d="M44.4878 44.6105C44.1347 44.5975 43.327 44.5693 43.0003 44.5693C42.6737 44.5693 41.7247 44.5823 41.4268 44.6105C41.4114 44.5823 41.3981 44.4303 41.4268 44.4021C41.7093 44.3608 41.9366 44.3326 42.1352 44.2631C42.3625 44.1654 42.3625 44.0677 42.3052 43.8723C42.1485 43.273 41.61 41.7813 41.3407 41.0148L41.2414 40.9454C41.1002 40.9323 40.8023 40.9323 39.9239 40.9323C38.975 40.9323 38.9043 40.9323 38.7631 40.9454C38.7212 40.9454 38.6638 41.0018 38.6505 41.0431C38.3681 41.7683 37.7854 43.3012 37.7303 43.7051C37.6883 43.9569 37.6729 44.1784 38.1407 44.2913C38.3107 44.3326 38.3681 44.3478 38.7366 44.4021C38.7653 44.4303 38.7499 44.5845 38.7234 44.6105C38.4674 44.6105 37.9443 44.5693 37.3198 44.5693C36.7394 44.5693 36.1148 44.5975 35.8169 44.5975C35.1923 44.5975 34.9098 44.3608 34.442 43.8723C33.9035 43.3012 32.7692 41.6554 32.202 40.9019C32.0894 40.7347 31.9747 40.6783 31.8754 40.6783C31.8268 40.6761 31.765 40.6739 31.6966 40.6739C31.4163 40.6739 31.0058 40.6913 30.8138 40.6913C30.7852 40.6913 30.7565 40.7608 30.7565 40.789C30.7565 41.5273 30.7565 42.9777 30.7852 43.4945C30.7984 44.0937 30.9132 44.1914 31.1669 44.2609C31.3788 44.3174 31.6481 44.3586 31.9041 44.3999C31.946 44.4281 31.9327 44.5671 31.8908 44.6083C31.7054 44.6083 30.9132 44.5671 30.3173 44.5671C29.4389 44.5671 28.9424 44.6083 28.7305 44.6083C28.6732 44.5953 28.6732 44.4129 28.7305 44.3999C29.013 44.3586 29.2823 44.3304 29.4257 44.2892C29.7656 44.2045 29.8516 44.0112 29.8649 43.4945C29.8781 43.1188 29.8936 41.1234 29.8936 40.3852C29.8936 39.5774 29.8936 37.3866 29.8649 36.885C29.8516 36.5354 29.7656 36.3422 29.4103 36.2705C29.2271 36.2293 28.9711 36.2011 28.7305 36.1859C28.7018 36.1576 28.7173 35.9904 28.7438 35.9774C29.0836 35.9774 29.7347 36.0187 30.1187 36.0187C31.0544 36.0187 31.7054 35.9904 32.202 35.9904C33.8042 35.9904 34.5832 36.9675 34.5832 38.0966C34.5832 39.3234 33.7336 39.9791 32.9391 40.3265C32.9104 40.3548 32.9104 40.383 32.9258 40.396C33.4776 41.2754 34.7818 42.9625 35.4351 43.603C35.9449 44.1046 36.2141 44.2436 36.554 44.2436C36.8232 44.2436 36.9093 44.1459 37.1344 43.6161C37.9995 41.6076 39.487 37.5777 39.7981 36.7417C39.8974 36.4616 39.9681 36.1837 39.9967 36.0035C40.01 36.0035 40.1247 36.0165 40.3234 36.0165C40.5352 36.0165 40.6345 36.0035 40.65 36.0035C40.6787 36.1294 40.7361 36.3943 40.8199 36.6592C41.0759 37.3562 42.7179 42.3893 43.1438 43.4228C43.5123 44.2457 43.5697 44.287 44.5187 44.3977C44.5474 44.439 44.5187 44.5931 44.49 44.6062M40.0939 37.1369L40.0365 37.1499C39.8092 37.7362 39.1007 39.7707 38.8889 40.3852C38.8889 40.4416 38.9021 40.4698 38.9463 40.4829C39.0743 40.4959 39.4274 40.4959 40.1932 40.4959C40.5043 40.4959 41.0583 40.4959 41.1289 40.4829C41.1421 40.4829 41.1708 40.4416 41.1576 40.3852C40.8177 39.3256 40.3079 37.7492 40.0939 37.1369ZM31.3369 36.3009C31.1802 36.3009 30.9816 36.314 30.869 36.3574C30.8403 36.3704 30.7984 36.4681 30.7984 36.5246C30.7565 36.9979 30.7565 39.2713 30.7565 40.1919C30.7565 40.2201 30.7984 40.2614 30.8138 40.2614C31.0566 40.2896 31.4185 40.3157 31.7584 40.3157C32.074 40.3157 32.3719 40.294 32.5441 40.2332C33.0252 40.066 33.6784 39.5774 33.6784 38.3789C33.6784 37.0544 32.9126 36.3009 31.3391 36.3009"
fill="black"
/>
<path
d="M53.9494 44.6386C53.8854 44.6321 53.7442 44.6278 53.6007 44.6278C53.4573 44.6278 53.3116 44.6321 53.241 44.6386C52.5326 43.5921 48.0393 38.2116 47.4015 37.443L47.3442 37.4581C47.3309 38.8391 47.3309 42.5325 47.3574 43.3424C47.3861 44.0394 47.598 44.1935 47.8959 44.276C48.0945 44.3455 48.3924 44.3737 48.6462 44.402C48.6882 44.4172 48.6595 44.5974 48.6308 44.6104C48.3615 44.6104 47.7524 44.5692 47.0286 44.5692C46.3908 44.5692 45.9384 44.6104 45.6537 44.6104C45.625 44.5822 45.625 44.415 45.6537 44.402C45.9229 44.3737 46.0509 44.3607 46.2341 44.3043C46.5607 44.2218 46.7858 44.0676 46.8145 43.3424C46.8432 42.7018 46.8984 40.1354 46.9271 37.2063C46.9271 37.0803 46.8564 36.8154 46.6711 36.62C46.3731 36.2856 46.0487 36.2574 45.4661 36.1879C45.4528 36.1597 45.4661 36.0055 45.4948 35.9795C45.6934 35.9795 46.3444 36.0207 46.7836 36.0207C47.0661 36.0207 47.2515 36.0207 47.3795 36.0077C47.4214 36.0924 47.5494 36.3008 47.9312 36.7612C49.5753 38.7414 52.9342 42.7431 53.444 43.3141L53.486 43.2859C53.486 41.4034 53.5146 38.0574 53.4286 37.0803C53.3999 36.7047 53.3425 36.4528 52.9475 36.3269C52.7069 36.2574 52.409 36.2162 52.0824 36.1879C52.0404 36.1597 52.0691 36.0055 52.0956 35.9795C52.4487 35.9795 53.0446 36.0207 53.7111 36.0207C54.1083 36.0207 54.8454 35.9795 54.9999 35.9795C55.0286 36.0077 55.0286 36.1597 54.9999 36.1879C54.7461 36.2292 54.6313 36.2444 54.4482 36.2987C54.0929 36.3964 54.009 36.6895 53.9935 37.0087C53.9229 38.0401 53.9362 40.9257 53.9097 42.7952C53.9097 43.4227 53.9229 44.2022 53.9384 44.6365"
fill="black"
/>
<path
d="M60.4332 44.667C59.6255 44.667 59.2282 44.6257 58.0233 44.6105C57.9195 44.6105 57.5642 44.604 57.242 44.604C57.0809 44.604 56.9286 44.604 56.8205 44.6105C56.7786 44.5975 56.7786 44.4021 56.8205 44.4021C57.1052 44.3608 57.359 44.3326 57.5709 44.2762C57.8114 44.2067 57.9968 44.1502 58.0387 43.564C58.0806 42.6303 58.0806 41.2776 58.0806 40.1203C58.0806 39.4233 58.0806 37.6103 58.052 37.1217C58.0233 36.5507 57.9813 36.3835 57.6128 36.2988C57.4429 36.2575 57.2442 36.2141 56.9331 36.1881C56.9044 36.1598 56.9331 35.9926 56.9618 35.9796C57.3149 35.9926 58.1248 36.0209 58.4911 36.0209C59.4269 36.0209 60.036 35.9644 61.1416 35.9644C62.3753 35.9644 63.4368 36.2858 64.1893 36.9393C65.0831 37.721 65.4782 38.8088 65.4782 40.0899C65.4782 42.1809 64.3593 43.3251 63.4235 43.8832C62.5584 44.3977 61.6095 44.6648 60.4332 44.6648M59.9808 36.301C59.6829 36.301 59.3143 36.3292 59.1731 36.3705C59.1024 36.3987 59.0031 36.453 58.9899 36.6766C58.9612 37.011 58.9612 38.9782 58.9612 40.1898C58.9612 41.4014 58.9612 43.0342 58.9899 43.4793C59.0031 43.6877 59.076 43.8831 59.3011 44.0091C59.5703 44.1632 60.1949 44.261 61.0578 44.261C61.8235 44.261 62.6445 44.1068 63.311 43.4945C64.0062 42.854 64.4586 41.9463 64.4586 40.3287C64.4586 38.9196 64.0194 37.7492 62.8564 36.9415C62.1899 36.4812 61.2122 36.301 59.9786 36.301"
fill="black"
/>
<path
d="M26.5355 51.7106C26.306 51.7106 26.1692 51.6932 25.9044 51.6932C25.6395 51.6932 25.399 51.7041 25.2622 51.7106C25.2445 51.6889 25.2511 51.6433 25.2622 51.6259C25.3593 51.615 25.4409 51.6085 25.5491 51.5803C25.6704 51.5456 25.6991 51.5021 25.7035 51.298C25.7102 51.1569 25.7102 50.4121 25.7102 50.0604C25.7102 50.0387 25.6991 50.0213 25.6881 50.0213C25.6086 50.0148 25.0282 50.0148 24.7237 50.0148C24.322 50.0148 23.7306 50.0148 23.6666 50.0213L23.6445 50.056C23.6445 50.3448 23.6511 51.1352 23.6555 51.2199C23.6732 51.4109 23.6622 51.5238 23.799 51.5651C23.8784 51.5868 23.9248 51.6042 24.1146 51.6281L24.0969 51.7127C23.9182 51.7062 23.7019 51.6954 23.4834 51.6954C23.2649 51.6954 22.9427 51.7062 22.8125 51.7127V51.6281C22.9339 51.6107 23.0354 51.5933 23.106 51.5716C23.2715 51.5217 23.2715 51.3914 23.2848 51.1373C23.2914 50.9289 23.2914 50.3644 23.2914 49.878C23.2914 49.3308 23.2848 48.6751 23.2804 48.5969C23.2693 48.4276 23.2164 48.3776 23.1303 48.3537C23.0442 48.332 22.9582 48.3255 22.8147 48.3038V48.2191C22.9979 48.2191 23.298 48.2365 23.4746 48.2365C23.7835 48.2365 23.9115 48.2256 24.066 48.2191L24.0594 48.3038C23.991 48.3103 23.8806 48.3255 23.8233 48.3429C23.7085 48.3776 23.6622 48.4058 23.6577 48.5904C23.6467 48.8162 23.6467 49.2005 23.6467 49.7868C23.6467 49.8085 23.6577 49.8259 23.6688 49.8324C23.6798 49.8389 23.7615 49.8433 24.7369 49.8433C25.3063 49.8433 25.6373 49.8433 25.6903 49.8389L25.7124 49.8107C25.7124 49.5176 25.7124 48.7272 25.7013 48.5513C25.6947 48.4449 25.666 48.382 25.5866 48.3537C25.4828 48.3255 25.3968 48.3147 25.2931 48.3038V48.2191C25.4012 48.2191 25.6439 48.2365 25.9066 48.2365C26.1427 48.2365 26.423 48.2191 26.5157 48.2191V48.3038C26.4119 48.3212 26.3215 48.332 26.2575 48.3537C26.1361 48.3928 26.092 48.4319 26.0853 48.6751C26.0787 48.8336 26.0677 49.3135 26.0677 49.9583C26.0677 50.449 26.0743 51.1504 26.0853 51.3197C26.0964 51.4717 26.1251 51.5347 26.2354 51.5738C26.3104 51.602 26.3855 51.6129 26.551 51.6302C26.562 51.6476 26.562 51.6975 26.5399 51.7149"
fill="black"
/>
<path
d="M29.2671 51.7954C28.7727 51.7954 28.3137 51.5739 28.0268 51.2634C27.6935 50.8965 27.5391 50.4101 27.5391 49.9259C27.5391 49.5242 27.6604 49.1746 27.8546 48.8815C28.1702 48.4234 28.8124 48.1302 29.3708 48.1302C30.5007 48.1302 31.0767 48.9771 31.0767 49.8977C31.0767 50.371 30.962 50.7228 30.7391 51.0441C30.4124 51.5348 29.832 51.7954 29.2693 51.7954M29.1744 48.2931C28.9515 48.2931 28.7617 48.343 28.6006 48.4277C28.146 48.6818 27.9518 49.2246 27.9518 49.8108C27.9518 50.3971 28.1746 51.0528 28.7087 51.3981C28.9162 51.5327 29.1744 51.613 29.49 51.613C29.7592 51.613 30.002 51.5348 30.1675 51.3981C30.5581 51.0876 30.6949 50.6186 30.6949 50.0757C30.6949 49.4895 30.4831 48.8772 29.9953 48.545C29.7769 48.3865 29.5076 48.2909 29.1744 48.2909"
fill="black"
/>
<path
d="M34.3066 51.7106C34.141 51.7106 33.8122 51.6932 33.618 51.6932C33.3024 51.6932 33.0045 51.7106 32.8368 51.7106C32.8191 51.6889 32.8191 51.6433 32.8368 51.6259C33.0199 51.6085 33.1457 51.5912 33.2164 51.576C33.3951 51.5478 33.4128 51.424 33.4238 51.1699C33.4304 51.0071 33.4348 49.3395 33.4348 48.4254C33.4348 48.4037 33.4128 48.3863 33.3995 48.3863C33.3554 48.3842 33.2208 48.382 33.0707 48.382C32.8588 48.382 32.6139 48.3842 32.5433 48.3907C32.4572 48.3907 32.3888 48.4406 32.3358 48.5253C32.2608 48.6317 32.1857 48.8423 32.1239 49.0225L32.0312 49.0052C32.071 48.7728 32.1239 48.3777 32.135 48.1518L32.1637 48.1453C32.2497 48.1909 32.4506 48.23 32.594 48.23H34.7237C34.9179 48.23 35.0326 48.2235 35.2114 48.1627L35.2335 48.1736C35.1827 48.3364 35.1408 48.7164 35.1187 48.9986C35.1165 49.0095 35.0966 49.0138 35.0746 49.0138C35.0503 49.0138 35.0238 49.0073 35.0216 48.9986C35.0106 48.8619 34.9863 48.6643 34.9421 48.5514C34.9024 48.4493 34.8384 48.3994 34.7237 48.3929C34.6089 48.3842 34.4213 48.382 34.2448 48.382C34.0682 48.382 33.9005 48.3842 33.8299 48.3885L33.8012 48.4385C33.8012 49.2462 33.8122 50.8964 33.8233 51.1613C33.8409 51.5174 33.9093 51.5456 34.0351 51.5782C34.1146 51.5999 34.1962 51.6129 34.3154 51.6237L34.3044 51.7084"
fill="black"
/>
<path
d="M38.0892 51.7108C37.8024 51.7108 37.6236 51.6934 36.7298 51.6934C36.3458 51.6934 36.2068 51.7108 35.9883 51.7108V51.6261C36.1317 51.6152 36.2465 51.6087 36.3502 51.5805C36.487 51.5457 36.5334 51.4849 36.551 51.2526C36.5577 51.1679 36.5621 50.5013 36.5621 49.8348C36.5621 49.2746 36.5555 48.7339 36.551 48.6492C36.54 48.4234 36.5157 48.3735 36.3723 48.3387C36.3039 48.3214 36.2222 48.304 36.1075 48.2931L36.1141 48.215C36.2399 48.215 36.4076 48.2323 36.7232 48.2323H37.831C38.0429 48.2323 38.3254 48.2258 38.4115 48.215L38.4291 48.2323C38.3784 48.4191 38.343 48.7643 38.3254 48.9489L38.2327 48.9554C38.2217 48.7969 38.204 48.6948 38.1863 48.6232C38.1466 48.4885 38.1069 48.3974 37.8597 48.3865C37.7737 48.3822 37.5243 48.38 37.3102 48.38C37.1557 48.38 37.0189 48.38 36.9792 48.3865C36.9395 48.393 36.9218 48.4364 36.9218 48.4647C36.9108 48.6688 36.9041 49.7414 36.9108 49.7913C36.9108 49.813 36.9174 49.8369 36.9284 49.8369C36.9836 49.8413 37.105 49.8434 37.2462 49.8434C37.4735 49.8434 37.745 49.8391 37.8487 49.8326C38.0319 49.8217 38.0672 49.7305 38.0959 49.6459C38.1179 49.5829 38.1356 49.5112 38.1532 49.4374L38.2504 49.4439C38.2327 49.5351 38.2106 49.7653 38.2106 49.9477C38.2106 50.1908 38.2217 50.3146 38.2217 50.3993C38.2128 50.4123 38.1864 50.4188 38.1643 50.4188C38.1466 50.4188 38.1312 50.4145 38.1246 50.4036C38.1135 50.319 38.1069 50.2734 38.0892 50.2104C38.0716 50.1431 38.0495 50.0237 37.8531 50.0128C37.7472 50.0063 37.4801 50.0019 37.255 50.0019C37.116 50.0019 36.9924 50.0019 36.9328 50.0085L36.9108 50.0541C36.9064 50.1496 36.9108 50.9921 36.9218 51.3243C36.9284 51.4719 37.0012 51.5153 37.0586 51.5284C37.1734 51.5501 37.3808 51.5631 37.7869 51.5631C38.1378 51.5631 38.2062 51.4893 38.2812 51.4155C38.3673 51.3416 38.4997 51.1267 38.5902 50.9074L38.6652 50.9465C38.6366 51.1267 38.4931 51.5457 38.4291 51.6521C38.3938 51.7086 38.3761 51.7151 38.0848 51.7151"
fill="black"
/>
<path
d="M41.7889 51.7151C41.4954 51.7151 40.3941 51.6934 40.147 51.6934C39.9174 51.6934 39.5732 51.7108 39.4805 51.7108V51.6261C39.6063 51.6087 39.7034 51.6044 39.785 51.587C39.9064 51.5588 39.9682 51.5197 39.9792 51.333C39.9903 51.1744 39.9969 51.0681 39.9969 49.7566C39.9969 49.1703 39.9969 48.836 39.9903 48.7165C39.9792 48.4343 39.9682 48.3778 39.7894 48.3387C39.721 48.3214 39.5665 48.304 39.5092 48.2996L39.5202 48.215C39.6416 48.215 39.8424 48.2323 40.158 48.2323C40.4383 48.2323 40.6567 48.215 40.7561 48.215C40.7737 48.2215 40.7781 48.2931 40.7561 48.2996C40.6413 48.317 40.5905 48.3214 40.5155 48.3387C40.3787 48.3735 40.3721 48.4451 40.3654 48.5863C40.3588 48.773 40.3588 49.4331 40.3544 49.8977C40.3478 50.3884 40.3544 51.0507 40.3654 51.3482C40.3721 51.4393 40.4162 51.4958 40.4581 51.511C40.5332 51.5479 40.8465 51.5609 41.1224 51.5609C41.2747 51.5609 41.4137 51.5566 41.4976 51.5501C41.619 51.5436 41.7161 51.4871 41.8132 51.3699C41.8926 51.2743 42.0316 51.0485 42.1398 50.788C42.1442 50.7858 42.1486 50.7836 42.1574 50.7836C42.1839 50.7836 42.2214 50.7988 42.2259 50.8162C42.1795 51.0377 42.0471 51.4936 41.9676 51.6456C41.939 51.6804 41.8882 51.7129 41.7889 51.7129"
fill="black"
/>
<path
d="M48.2671 51.7518C47.7727 51.7518 47.3137 51.5303 47.0268 51.2198C46.6935 50.8528 46.5391 50.3665 46.5391 49.8823C46.5391 49.4806 46.6604 49.131 46.8546 48.8379C47.1702 48.3797 47.8124 48.0866 48.3708 48.0866C49.5007 48.0866 50.0767 48.9334 50.0767 49.8541C50.0767 50.3296 49.962 50.6791 49.7391 51.0005C49.4124 51.4912 48.832 51.7518 48.2693 51.7518M48.1744 48.2495C47.9515 48.2495 47.7617 48.2994 47.6006 48.3841C47.146 48.6381 46.9518 49.1809 46.9518 49.7672C46.9518 50.3534 47.1746 51.0092 47.7087 51.3544C47.9162 51.489 48.1744 51.5694 48.49 51.5694C48.7592 51.5694 49.002 51.4912 49.1675 51.3544C49.5581 51.0439 49.6949 50.5749 49.6949 50.0321C49.6949 49.4437 49.4831 48.8335 48.9953 48.5013C48.7769 48.3428 48.5076 48.2473 48.1744 48.2473"
fill="black"
/>
<path
d="M52.0273 51.7517C51.7183 51.7517 51.3895 51.6605 51.2703 51.5823C51.2129 51.5041 51.1556 50.983 51.1445 50.8202C51.1534 50.8028 51.1931 50.7941 51.2174 50.7941C51.2262 50.7941 51.2328 50.7941 51.2372 50.7985C51.3299 51.1437 51.4447 51.363 51.6212 51.4759C51.7647 51.578 51.9434 51.617 52.195 51.617C52.5503 51.617 52.8549 51.4021 52.8549 50.9505C52.8549 50.5488 52.579 50.3403 52.0736 50.0363C51.6433 49.7758 51.288 49.4827 51.288 49.0093C51.288 48.4448 51.7536 48.0887 52.3495 48.0887C52.6827 48.0887 52.9012 48.1517 53.1307 48.1734C53.0954 48.3536 53.0557 48.6185 53.0336 48.8856L52.9365 48.8921C52.9145 48.5012 52.8505 48.3775 52.7136 48.2993C52.5923 48.232 52.4621 48.2038 52.2723 48.2038C51.8485 48.2038 51.6234 48.5034 51.619 48.8356C51.6124 49.1635 51.7867 49.3611 52.0096 49.5239C52.2281 49.6759 52.4974 49.8127 52.6629 49.9191C52.9101 50.0819 53.219 50.3143 53.219 50.7485C53.219 51.2957 52.771 51.7538 52.0317 51.7538"
fill="black"
/>
<path
d="M56.4647 51.6715C56.1711 51.6715 55.0699 51.6497 54.8227 51.6497C54.5932 51.6497 54.2489 51.6671 54.1562 51.6671V51.5824C54.282 51.5651 54.3814 51.5607 54.4608 51.5434C54.5822 51.5151 54.644 51.476 54.655 51.2893C54.666 51.1308 54.6727 51.0244 54.6727 49.7129C54.6727 49.1245 54.6727 48.7923 54.666 48.6729C54.655 48.3906 54.644 48.3342 54.4652 48.2951C54.3968 48.2777 54.2423 48.2603 54.1849 48.256L54.196 48.1713C54.3174 48.1713 54.5182 48.1887 54.8338 48.1887C55.114 48.1887 55.3325 48.1713 55.4318 48.1713C55.4495 48.1778 55.4539 48.2495 55.4318 48.256C55.3171 48.2734 55.2641 48.2777 55.1913 48.2951C55.0545 48.3298 55.0478 48.4015 55.0412 48.5426C55.0346 48.7293 55.0346 49.3894 55.0302 49.8519C55.0236 50.3426 55.0302 51.0049 55.0412 51.3045C55.0478 51.3957 55.092 51.4522 55.1339 51.4674C55.2089 51.5043 55.5223 51.5173 55.7982 51.5173C55.9505 51.5173 56.0895 51.513 56.1734 51.5064C56.2947 51.4999 56.3918 51.4435 56.4889 51.3262C56.5684 51.2307 56.7074 51.0049 56.8156 50.7443C56.82 50.7421 56.8244 50.74 56.8332 50.74C56.8575 50.74 56.8972 50.7552 56.9016 50.7725C56.8553 50.994 56.7229 51.45 56.6434 51.602C56.6147 51.6367 56.564 51.6693 56.4647 51.6693"
fill="black"
/>
<path
d="M59.5405 51.7518C59.0462 51.7518 58.5871 51.5303 58.3002 51.2198C57.967 50.8528 57.8125 50.3665 57.8125 49.8823C57.8125 49.4806 57.9339 49.131 58.1281 48.8379C58.4437 48.3797 59.0859 48.0866 59.6442 48.0866C60.7742 48.0866 61.3479 48.9334 61.3479 49.8541C61.3479 50.3296 61.2332 50.6791 61.0103 51.0005C60.6837 51.4912 60.1033 51.7518 59.5405 51.7518ZM59.45 48.2495C59.2271 48.2495 59.0373 48.2994 58.8762 48.3841C58.4216 48.6381 58.2274 49.1809 58.2274 49.7672C58.2274 50.3534 58.4503 51.0092 58.9844 51.3544C59.1918 51.489 59.45 51.5694 59.7656 51.5694C60.0348 51.5694 60.2754 51.4912 60.4431 51.3544C60.8337 51.0439 60.9706 50.5749 60.9706 50.0321C60.9706 49.4437 60.7587 48.8335 60.271 48.5013C60.0525 48.3428 59.7833 48.2473 59.45 48.2473"
fill="black"
/>
<path
d="M44.5937 53.5453H44.4922V46.7709H44.5937V53.5453Z"
fill="black"
/>
</g>
<g filter="url(#filter1_d_342_17583)">
<rect x="36" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42" cy="95" r="4" fill="#DBA7B1" />
</g>
<defs>
<filter
id="filter0_d_342_17583"
x="0"
y="0"
width="84"
height="95.3039"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17583"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17583"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17583"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17583"
x="33"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17583"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17583"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17583"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,128 @@
export default function GrandHotelSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17608)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#DBA7B1"
/>
<path
d="M22.9964 39.1425C20.5727 39.1425 19.2695 37.9659 19.2695 35.6457C19.2695 34.3107 19.9689 33.1968 21.1229 32.6787C21.7267 32.4146 22.3288 32.2661 23.1792 32.2661C23.944 32.2661 24.5579 32.4361 25.1181 32.4889C25.0527 32.7645 24.9789 33.4955 24.9571 34.0038C24.9369 34.0302 24.89 34.0434 24.8447 34.0434C24.8145 34.0434 24.7843 34.0368 24.7642 34.0252C24.6887 33.2084 24.5495 32.9658 24.2157 32.7958C23.8719 32.6259 23.4073 32.5318 22.7615 32.5318C20.8763 32.5318 20.0696 33.8239 20.0696 35.6044C20.0696 37.385 21.1028 38.8999 23.1289 38.8999C23.4626 38.8999 23.8283 38.8471 23.991 38.7827C24.1956 38.6985 24.2811 38.5599 24.3029 38.253C24.3247 37.9131 24.3566 37.4164 24.3247 37.0665C24.2929 36.6853 24.2275 36.5682 23.8836 36.5154C23.7109 36.484 23.6354 36.484 23.3553 36.451C23.3234 36.4295 23.3234 36.314 23.3553 36.2926C23.7545 36.2926 24.2057 36.3239 24.6484 36.3239C25.0912 36.3239 25.3378 36.314 25.6078 36.2926C25.6296 36.3239 25.6296 36.4312 25.5978 36.451C25.4149 36.4823 25.3177 36.5038 25.2321 36.5352C25.0376 36.588 24.9956 36.7579 24.9738 37.0649C24.952 37.3932 24.9302 38.05 24.9638 38.3157C24.9856 38.517 24.9956 38.5484 25.2003 38.6127C25.2103 38.6441 25.2003 38.7398 25.1785 38.7613C24.9302 38.8042 23.8853 39.1425 23.0031 39.1425"
fill="black"
/>
<path
d="M38.891 38.9839C38.6227 38.974 38.0088 38.9526 37.7606 38.9526C37.5123 38.9526 36.7911 38.9625 36.5647 38.9839C36.553 38.9625 36.5429 38.847 36.5647 38.8255C36.7794 38.7942 36.9521 38.7727 37.1031 38.7199C37.2758 38.6457 37.2758 38.5714 37.2322 38.4229C37.1132 37.9674 36.7039 36.8337 36.4993 36.2512L36.4238 36.1984C36.3165 36.1885 36.09 36.1885 35.4225 36.1885C34.7013 36.1885 34.6476 36.1885 34.5403 36.1984C34.5084 36.1984 34.4648 36.2413 34.4547 36.2727C34.24 36.8238 33.7972 37.9889 33.7553 38.2958C33.7234 38.4872 33.7117 38.6556 34.0673 38.7414C34.1964 38.7727 34.24 38.7843 34.5201 38.8255C34.5419 38.847 34.5302 38.9641 34.5101 38.9839C34.3155 38.9839 33.918 38.9526 33.4433 38.9526C33.0022 38.9526 32.5276 38.974 32.3011 38.974C31.8265 38.974 31.6118 38.7942 31.2562 38.4229C30.847 37.9889 29.9849 36.738 29.5538 36.1654C29.4683 36.0384 29.3811 35.9954 29.3056 35.9954C29.2687 35.9938 29.2217 35.9921 29.1697 35.9921C28.9567 35.9921 28.6448 36.0053 28.4988 36.0053C28.477 36.0053 28.4552 36.0582 28.4552 36.0796C28.4552 36.6407 28.4552 37.743 28.477 38.1357C28.4871 38.5912 28.5743 38.6655 28.7672 38.7183C28.9282 38.7612 29.1328 38.7925 29.3274 38.8239C29.3593 38.8453 29.3492 38.9509 29.3173 38.9823C29.1764 38.9823 28.5743 38.9509 28.1215 38.9509C27.4539 38.9509 27.0765 38.9823 26.9155 38.9823C26.8719 38.9724 26.8719 38.8338 26.9155 38.8239C27.1302 38.7925 27.3348 38.7711 27.4439 38.7397C27.7021 38.6754 27.7676 38.5285 27.7776 38.1357C27.7877 37.8503 27.7994 36.3337 27.7994 35.7727C27.7994 35.1588 27.7994 33.4938 27.7776 33.1126C27.7676 32.8469 27.7021 32.7 27.4321 32.6456C27.2929 32.6142 27.0983 32.5928 26.9155 32.5812C26.8937 32.5598 26.9055 32.4327 26.9256 32.4228C27.1839 32.4228 27.6787 32.4541 27.9705 32.4541C28.6817 32.4541 29.1764 32.4327 29.5538 32.4327C30.7715 32.4327 31.3636 33.1753 31.3636 34.0334C31.3636 34.9657 30.7178 35.4641 30.114 35.7281C30.0922 35.7496 30.0922 35.771 30.104 35.7809C30.5233 36.4492 31.5145 37.7314 32.011 38.2183C32.3984 38.5994 32.603 38.7051 32.8613 38.7051C33.066 38.7051 33.1314 38.6308 33.3025 38.2282C33.9599 36.7017 35.0904 33.639 35.3269 33.0037C35.4024 32.7908 35.456 32.5796 35.4778 32.4426C35.4879 32.4426 35.5751 32.4525 35.7261 32.4525C35.8871 32.4525 35.9626 32.4426 35.9743 32.4426C35.9961 32.5383 36.0397 32.7396 36.1035 32.9409C36.298 33.4707 37.5459 37.2958 37.8696 38.0813C38.1497 38.7067 38.1933 38.7381 38.9145 38.8222C38.9363 38.8536 38.9145 38.9707 38.8927 38.9806M35.5516 33.304L35.508 33.3139C35.3353 33.7594 34.7969 35.3057 34.6359 35.7727C34.6359 35.8156 34.6459 35.837 34.6795 35.8469C34.7768 35.8568 35.0451 35.8568 35.6271 35.8568C35.8636 35.8568 36.2846 35.8568 36.3383 35.8469C36.3483 35.8469 36.3701 35.8156 36.3601 35.7727C36.1018 34.9674 35.7143 33.7693 35.5516 33.304ZM28.8963 32.6687C28.7773 32.6687 28.6263 32.6786 28.5408 32.7116C28.519 32.7215 28.4871 32.7957 28.4871 32.8386C28.4552 33.1984 28.4552 34.9261 28.4552 35.6258C28.4552 35.6473 28.4871 35.6786 28.4988 35.6786C28.6833 35.7001 28.9584 35.7199 29.2167 35.7199C29.4565 35.7199 29.683 35.7034 29.8138 35.6572C30.1794 35.5301 30.6759 35.1588 30.6759 34.2479C30.6759 33.2413 30.0939 32.6687 28.898 32.6687"
fill="black"
/>
<path
d="M46.0801 39.0053C46.0315 39.0004 45.9242 38.9971 45.8151 38.9971C45.7061 38.9971 45.5954 39.0004 45.5417 39.0053C45.0034 38.2099 41.5885 34.1208 41.1038 33.5366L41.0602 33.5482C41.0501 34.5977 41.0501 37.4046 41.0702 38.0202C41.092 38.5499 41.253 38.667 41.4795 38.7297C41.6304 38.7826 41.8568 38.804 42.0497 38.8255C42.0816 38.837 42.0598 38.974 42.038 38.9839C41.8334 38.9839 41.3704 38.9525 40.8203 38.9525C40.3356 38.9525 39.9918 38.9839 39.7754 38.9839C39.7536 38.9624 39.7536 38.8354 39.7754 38.8255C39.98 38.804 40.0773 38.7941 40.2165 38.7512C40.4647 38.6885 40.6358 38.5713 40.6576 38.0202C40.6794 37.5334 40.7214 35.5828 40.7432 33.3567C40.7432 33.261 40.6895 33.0597 40.5486 32.9112C40.3222 32.6571 40.0756 32.6356 39.6328 32.5828C39.6228 32.5613 39.6328 32.4442 39.6546 32.4244C39.8056 32.4244 40.3004 32.4557 40.6341 32.4557C40.8488 32.4557 40.9897 32.4557 41.087 32.4458C41.1189 32.5102 41.2161 32.6686 41.5063 33.0184C42.7558 34.5234 45.3086 37.5647 45.6961 37.9987L45.7279 37.9773C45.7279 36.5466 45.7497 34.0036 45.6843 33.261C45.6625 32.9755 45.6189 32.7841 45.3187 32.6884C45.1359 32.6356 44.9094 32.6042 44.6612 32.5828C44.6293 32.5613 44.6511 32.4442 44.6713 32.4244C44.9396 32.4244 45.3925 32.4557 45.899 32.4557C46.2009 32.4557 46.7611 32.4244 46.8785 32.4244C46.9003 32.4458 46.9003 32.5613 46.8785 32.5828C46.6856 32.6141 46.5984 32.6257 46.4592 32.667C46.1892 32.7412 46.1254 32.964 46.1137 33.2066C46.06 33.9904 46.0701 36.1835 46.05 37.6043C46.05 38.0812 46.06 38.6736 46.0718 39.0037"
fill="black"
/>
<path
d="M51.0078 39.0269C50.394 39.0269 50.0921 38.9956 49.1763 38.984C49.0974 38.984 48.8274 38.9791 48.5825 38.9791C48.4601 38.9791 48.3444 38.9791 48.2622 38.984C48.2303 38.9741 48.2303 38.8256 48.2622 38.8256C48.4785 38.7942 48.6714 38.7728 48.8324 38.7299C49.0153 38.6771 49.1562 38.6342 49.188 38.1886C49.2199 37.479 49.2199 36.451 49.2199 35.5714C49.2199 35.0417 49.2199 33.6638 49.1981 33.2925C49.1763 32.8585 49.1444 32.7315 48.8643 32.6671C48.7352 32.6357 48.5842 32.6027 48.3477 32.5829C48.3259 32.5615 48.3477 32.4344 48.3695 32.4245C48.6379 32.4344 49.2534 32.4559 49.5319 32.4559C50.243 32.4559 50.7059 32.413 51.5462 32.413C52.4838 32.413 53.2906 32.6572 53.8625 33.1539C54.5418 33.748 54.842 34.5747 54.842 35.5483C54.842 37.1375 53.9916 38.0071 53.2805 38.4312C52.623 38.8223 51.9018 39.0253 51.0078 39.0253M50.664 32.6687C50.4376 32.6687 50.1575 32.6902 50.0501 32.7215C49.9964 32.743 49.921 32.7843 49.9109 32.9542C49.8891 33.2084 49.8891 34.7034 49.8891 35.6242C49.8891 36.545 49.8891 37.786 49.9109 38.1243C49.921 38.2827 49.9763 38.4312 50.1474 38.5269C50.352 38.6441 50.8267 38.7183 51.4825 38.7183C52.0645 38.7183 52.6884 38.6012 53.1949 38.1358C53.7233 37.649 54.0671 36.9592 54.0671 35.7298C54.0671 34.6589 53.7333 33.7694 52.8494 33.1555C52.3429 32.8057 51.5999 32.6687 50.6623 32.6687"
fill="black"
/>
<path
d="M25.2475 44.38C25.073 44.38 24.9691 44.3668 24.7678 44.3668C24.5665 44.3668 24.3837 44.3751 24.2797 44.38C24.2663 44.3635 24.2713 44.3288 24.2797 44.3156C24.3535 44.3074 24.4156 44.3024 24.4977 44.281C24.59 44.2546 24.6118 44.2216 24.6152 44.0665C24.6202 43.9592 24.6202 43.3932 24.6202 43.1259C24.6202 43.1094 24.6118 43.0962 24.6034 43.0962C24.543 43.0912 24.1019 43.0912 23.8705 43.0912C23.5652 43.0912 23.1157 43.0912 23.0671 43.0962L23.0503 43.1226C23.0503 43.342 23.0553 43.9427 23.0587 44.0071C23.0721 44.1523 23.0637 44.2381 23.1677 44.2694C23.2281 44.2859 23.2633 44.2991 23.4075 44.3173L23.3941 44.3817C23.2583 44.3767 23.0939 44.3685 22.9279 44.3685C22.7618 44.3685 22.5169 44.3767 22.418 44.3817V44.3173C22.5102 44.3041 22.5874 44.2909 22.641 44.2744C22.7668 44.2364 22.7668 44.1374 22.7769 43.9444C22.7819 43.7859 22.7819 43.3569 22.7819 42.9872C22.7819 42.5714 22.7769 42.073 22.7735 42.0136C22.7652 41.8849 22.7249 41.847 22.6595 41.8288C22.5941 41.8123 22.5287 41.8074 22.4196 41.7909V41.7265C22.5589 41.7265 22.787 41.7397 22.9211 41.7397C23.156 41.7397 23.2532 41.7315 23.3706 41.7265L23.3656 41.7909C23.3136 41.7958 23.2298 41.8074 23.1861 41.8206C23.0989 41.847 23.0637 41.8684 23.0604 42.0087C23.052 42.1803 23.052 42.4724 23.052 42.9179C23.052 42.9344 23.0604 42.9476 23.0687 42.9526C23.0771 42.9575 23.1392 42.9608 23.8805 42.9608C24.3133 42.9608 24.5648 42.9608 24.6051 42.9575L24.6219 42.9361C24.6219 42.7133 24.6219 42.1126 24.6135 41.979C24.6084 41.8981 24.5866 41.8503 24.5263 41.8288C24.4474 41.8074 24.382 41.7991 24.3032 41.7909V41.7265C24.3854 41.7265 24.5699 41.7397 24.7695 41.7397C24.9489 41.7397 25.1619 41.7265 25.2324 41.7265V41.7909C25.1536 41.8041 25.0848 41.8123 25.0361 41.8288C24.9439 41.8585 24.9104 41.8882 24.9053 42.073C24.9003 42.1935 24.8919 42.5582 24.8919 43.0483C24.8919 43.4212 24.8969 43.9543 24.9053 44.083C24.9137 44.1985 24.9355 44.2463 25.0194 44.276C25.0764 44.2975 25.1334 44.3057 25.2592 44.3189C25.2676 44.3322 25.2676 44.3701 25.2508 44.3833"
fill="black"
/>
<path
d="M27.325 44.4445C26.9493 44.4445 26.6004 44.2762 26.3824 44.0402C26.1291 43.7613 26.0117 43.3917 26.0117 43.0237C26.0117 42.7184 26.104 42.4527 26.2516 42.23C26.4914 41.8818 26.9795 41.659 27.4038 41.659C28.2626 41.659 28.7003 42.3026 28.7003 43.0023C28.7003 43.362 28.6131 43.6293 28.4437 43.8736C28.1955 44.2465 27.7544 44.4445 27.3267 44.4445M27.2546 41.7828C27.0852 41.7828 26.9409 41.8207 26.8185 41.8851C26.473 42.0781 26.3254 42.4907 26.3254 42.9362C26.3254 43.3818 26.4948 43.8802 26.9007 44.1425C27.0583 44.2448 27.2546 44.3059 27.4944 44.3059C27.699 44.3059 27.8835 44.2465 28.0093 44.1425C28.3062 43.9066 28.4102 43.5501 28.4102 43.1376C28.4102 42.692 28.2492 42.2267 27.8785 41.9742C27.7124 41.8537 27.5078 41.7811 27.2546 41.7811"
fill="black"
/>
<path
d="M31.155 44.3801C31.0292 44.3801 30.7793 44.3669 30.6317 44.3669C30.3919 44.3669 30.1654 44.3801 30.038 44.3801C30.0246 44.3636 30.0246 44.3289 30.038 44.3157C30.1772 44.3025 30.2728 44.2893 30.3265 44.2778C30.4623 44.2563 30.4757 44.1623 30.4841 43.9692C30.4892 43.8454 30.4925 42.5781 30.4925 41.8833C30.4925 41.8668 30.4757 41.8536 30.4657 41.8536C30.4321 41.852 30.3298 41.8503 30.2158 41.8503C30.0547 41.8503 29.8686 41.852 29.8149 41.8569C29.7495 41.8569 29.6975 41.8949 29.6572 41.9593C29.6002 42.0401 29.5432 42.2002 29.4962 42.3371L29.4258 42.3239C29.456 42.1474 29.4962 41.847 29.5046 41.6754L29.5264 41.6705C29.5918 41.7051 29.7445 41.7348 29.8535 41.7348H31.472C31.6196 41.7348 31.7068 41.7299 31.8427 41.6837L31.8595 41.6919C31.8209 41.8157 31.789 42.1045 31.7722 42.319C31.7706 42.3272 31.7555 42.3305 31.7387 42.3305C31.7202 42.3305 31.7001 42.3256 31.6984 42.319C31.6901 42.215 31.6716 42.0649 31.6381 41.9791C31.6079 41.9015 31.5592 41.8635 31.472 41.8586C31.3848 41.852 31.2422 41.8503 31.1081 41.8503C30.9739 41.8503 30.8464 41.852 30.7927 41.8553L30.7709 41.8932C30.7709 42.5071 30.7793 43.7613 30.7877 43.9626C30.8011 44.2332 30.8531 44.2547 30.9487 44.2794C31.0091 44.2959 31.0712 44.3058 31.1617 44.3141L31.1533 44.3784"
fill="black"
/>
<path
d="M34.0264 44.3801C33.8084 44.3801 33.6725 44.3669 32.9932 44.3669C32.7014 44.3669 32.5957 44.3801 32.4297 44.3801V44.3158C32.5387 44.3075 32.6259 44.3026 32.7048 44.2811C32.8087 44.2547 32.844 44.2085 32.8574 44.0319C32.8624 43.9676 32.8658 43.461 32.8658 42.9544C32.8658 42.5286 32.8607 42.1177 32.8574 42.0534C32.849 41.8817 32.8305 41.8438 32.7215 41.8174C32.6695 41.8042 32.6075 41.791 32.5203 41.7827L32.5253 41.7233C32.6209 41.7233 32.7484 41.7365 32.9882 41.7365H33.8302C33.9912 41.7365 34.2059 41.7316 34.2713 41.7233L34.2847 41.7365C34.2461 41.8784 34.2193 42.1408 34.2059 42.2811L34.1354 42.286C34.1271 42.1656 34.1136 42.088 34.1002 42.0336C34.07 41.9312 34.0398 41.8619 33.852 41.8537C33.7866 41.8504 33.597 41.8487 33.4344 41.8487C33.3169 41.8487 33.213 41.8487 33.1828 41.8537C33.1526 41.8586 33.1392 41.8916 33.1392 41.9131C33.1308 42.0682 33.1257 42.8834 33.1308 42.9214C33.1308 42.9379 33.1358 42.956 33.1442 42.956C33.1861 42.9593 33.2784 42.961 33.3857 42.961C33.5585 42.961 33.7648 42.9577 33.8436 42.9527C33.9828 42.9445 34.0097 42.8752 34.0315 42.8108C34.0482 42.7629 34.0616 42.7085 34.0751 42.6524L34.1489 42.6573C34.1354 42.7266 34.1187 42.9016 34.1187 43.0402C34.1187 43.225 34.1271 43.3191 34.1271 43.3834C34.1203 43.3933 34.1002 43.3983 34.0834 43.3983C34.07 43.3983 34.0583 43.395 34.0533 43.3867C34.0449 43.3224 34.0398 43.2877 34.0264 43.2399C34.013 43.1887 33.9962 43.0979 33.847 43.0897C33.7664 43.0847 33.5635 43.0814 33.3924 43.0814C33.2868 43.0814 33.1928 43.0814 33.1475 43.0864L33.1308 43.121C33.1274 43.1936 33.1308 43.8339 33.1392 44.0864C33.1442 44.1986 33.1995 44.2316 33.2431 44.2415C33.3304 44.258 33.488 44.2679 33.7966 44.2679C34.0633 44.2679 34.1153 44.2118 34.1723 44.1557C34.2378 44.0996 34.3384 43.9362 34.4072 43.7696L34.4642 43.7993C34.4424 43.9362 34.3334 44.2547 34.2847 44.3356C34.2579 44.3785 34.2445 44.3834 34.0231 44.3834"
fill="black"
/>
<path
d="M36.8403 44.3834C36.6173 44.3834 35.7803 44.3669 35.5925 44.3669C35.418 44.3669 35.1564 44.3801 35.0859 44.3801V44.3158C35.1815 44.3026 35.2553 44.2993 35.3174 44.2861C35.4096 44.2646 35.4566 44.2349 35.465 44.093C35.4734 43.9725 35.4784 43.8917 35.4784 42.895C35.4784 42.4494 35.4784 42.1953 35.4734 42.1045C35.465 41.89 35.4566 41.8471 35.3208 41.8174C35.2688 41.8042 35.1514 41.791 35.1077 41.7877L35.1161 41.7233C35.2084 41.7233 35.361 41.7365 35.6009 41.7365C35.8139 41.7365 35.9799 41.7233 36.0554 41.7233C36.0688 41.7283 36.0722 41.7827 36.0554 41.7877C35.9682 41.8009 35.9296 41.8042 35.8726 41.8174C35.7686 41.8438 35.7635 41.8982 35.7585 42.0055C35.7535 42.1474 35.7535 42.6491 35.7501 43.0022C35.7451 43.3752 35.7501 43.8785 35.7585 44.1045C35.7635 44.1739 35.7971 44.2168 35.829 44.2283C35.886 44.2564 36.1242 44.2663 36.3338 44.2663C36.4495 44.2663 36.5552 44.263 36.6189 44.258C36.7112 44.2531 36.785 44.2102 36.8588 44.1211C36.9192 44.0484 37.0248 43.8768 37.107 43.6788C37.1104 43.6771 37.1137 43.6755 37.1204 43.6755C37.1406 43.6755 37.1691 43.6871 37.1724 43.7003C37.1372 43.8686 37.0366 44.2151 36.9762 44.3306C36.9544 44.357 36.9158 44.3818 36.8403 44.3818"
fill="black"
/>
<path
d="M41.7625 44.4114C41.3868 44.4114 41.0379 44.2431 40.8199 44.0071C40.5666 43.7282 40.4492 43.3586 40.4492 42.9906C40.4492 42.6853 40.5415 42.4196 40.6891 42.1968C40.9289 41.8486 41.417 41.6259 41.8413 41.6259C42.7001 41.6259 43.1378 42.2694 43.1378 42.9691C43.1378 43.3305 43.0506 43.5962 42.8812 43.8404C42.633 44.2134 42.1919 44.4114 41.7642 44.4114M41.6921 41.7496C41.5227 41.7496 41.3784 41.7876 41.256 41.8519C40.9105 42.045 40.7629 42.4576 40.7629 42.9031C40.7629 43.3487 40.9323 43.847 41.3382 44.1094C41.4958 44.2117 41.6921 44.2728 41.9319 44.2728C42.1365 44.2728 42.321 44.2134 42.4468 44.1094C42.7437 43.8734 42.8477 43.517 42.8477 43.1044C42.8477 42.6572 42.6867 42.1935 42.316 41.941C42.1499 41.8206 41.9453 41.748 41.6921 41.748"
fill="black"
/>
<path
d="M44.6201 44.4113C44.3853 44.4113 44.1354 44.342 44.0448 44.2826C44.0012 44.2232 43.9576 43.8271 43.9492 43.7034C43.9559 43.6902 43.9861 43.6836 44.0046 43.6836C44.0113 43.6836 44.0163 43.6836 44.0197 43.6869C44.0901 43.9493 44.1773 44.1159 44.3115 44.2017C44.4205 44.2793 44.5564 44.309 44.7476 44.309C45.0176 44.309 45.2491 44.1456 45.2491 43.8024C45.2491 43.4971 45.0394 43.3387 44.6553 43.1077C44.3283 42.9096 44.0582 42.6869 44.0582 42.3271C44.0582 41.8981 44.4121 41.6274 44.865 41.6274C45.1183 41.6274 45.2843 41.6753 45.4587 41.6918C45.4319 41.8288 45.4017 42.0301 45.3849 42.2331L45.3111 42.238C45.2944 41.941 45.2457 41.8469 45.1417 41.7875C45.0495 41.7364 44.9505 41.7149 44.8063 41.7149C44.4843 41.7149 44.3132 41.9426 44.3098 42.1951C44.3048 42.4443 44.4373 42.5945 44.6067 42.7182C44.7727 42.8337 44.9774 42.9377 45.1032 43.0185C45.291 43.1423 45.5258 43.3189 45.5258 43.6489C45.5258 44.0648 45.1853 44.413 44.6235 44.413"
fill="black"
/>
<path
d="M47.9927 44.3503C47.7696 44.3503 46.9327 44.3338 46.7448 44.3338C46.5704 44.3338 46.3087 44.347 46.2383 44.347V44.2826C46.3339 44.2694 46.4094 44.2661 46.4697 44.2529C46.562 44.2315 46.609 44.2018 46.6173 44.0599C46.6257 43.9394 46.6308 43.8585 46.6308 42.8618C46.6308 42.4146 46.6308 42.1621 46.6257 42.0714C46.6173 41.8569 46.609 41.8139 46.4731 41.7842C46.4211 41.771 46.3037 41.7578 46.2601 41.7545L46.2685 41.6902C46.3607 41.6902 46.5134 41.7034 46.7532 41.7034C46.9662 41.7034 47.1323 41.6902 47.2077 41.6902C47.2211 41.6951 47.2245 41.7496 47.2077 41.7545C47.1205 41.7677 47.0803 41.771 47.0249 41.7842C46.9209 41.8106 46.9159 41.8651 46.9109 41.9724C46.9058 42.1143 46.9058 42.6159 46.9025 42.9674C46.8974 43.3404 46.9025 43.8437 46.9109 44.0714C46.9159 44.1407 46.9494 44.1836 46.9813 44.1952C47.0383 44.2232 47.2765 44.2331 47.4862 44.2331C47.6019 44.2331 47.7075 44.2298 47.7713 44.2249C47.8635 44.2199 47.9373 44.177 48.0111 44.0879C48.0715 44.0153 48.1772 43.8437 48.2594 43.6457C48.2627 43.644 48.2661 43.6424 48.2728 43.6424C48.2912 43.6424 48.3214 43.6539 48.3248 43.6671C48.2895 43.8354 48.1889 44.182 48.1285 44.2975C48.1067 44.3239 48.0682 44.3486 47.9927 44.3486"
fill="black"
/>
<path
d="M50.3328 44.4114C49.9571 44.4114 49.6082 44.2431 49.3902 44.0071C49.1369 43.7282 49.0195 43.3586 49.0195 42.9906C49.0195 42.6853 49.1118 42.4196 49.2594 42.1968C49.4992 41.8486 49.9873 41.6259 50.4116 41.6259C51.2704 41.6259 51.7065 42.2694 51.7065 42.9691C51.7065 43.3305 51.6193 43.5962 51.4499 43.8404C51.2016 44.2134 50.7605 44.4114 50.3328 44.4114ZM50.264 41.7496C50.0946 41.7496 49.9504 41.7876 49.828 41.8519C49.4824 42.045 49.3349 42.4576 49.3349 42.9031C49.3349 43.3487 49.5043 43.847 49.9101 44.1094C50.0678 44.2117 50.264 44.2728 50.5039 44.2728C50.7085 44.2728 50.8913 44.2134 51.0188 44.1094C51.3157 43.8734 51.4197 43.517 51.4197 43.1044C51.4197 42.6572 51.2586 42.1935 50.888 41.941C50.7219 41.8206 50.5173 41.748 50.264 41.748"
fill="black"
/>
<path
d="M38.9717 45.7744H38.8945V40.6259H38.9717V45.7744Z"
fill="black"
/>
</g>
<defs>
<filter
id="filter0_d_342_17608"
x="0"
y="0"
width="74"
height="83.1913"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17608"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17608"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17608"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,121 @@
export default function HaymarketMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="84"
height="104"
viewBox="0 0 84 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17399)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.1266 71.6347C63.7931 67.7384 73 55.9444 73 42C73 24.8792 59.1208 11 42 11C24.8792 11 11 24.8792 11 42C11 56.0928 20.4039 67.9892 33.279 71.7564L40.6302 83.3733C41.4242 84.6282 43.2607 84.6105 44.0305 83.3406L51.1266 71.6347Z"
fill="white"
/>
<path
d="M15 42C15 27.0883 27.0883 15 42 15C56.9117 15 69 27.0883 69 42C69 56.9117 56.9117 69 42 69C27.0883 69 15 56.9117 15 42Z"
fill="#946F54"
/>
<path
d="M41.9999 61.1489C52.5845 61.1489 61.2342 52.5561 61.2342 42.0285C61.2342 31.5008 52.5845 22.8511 41.9999 22.8511C31.4154 22.8511 22.7656 31.4439 22.7656 41.9716C22.7656 52.4992 31.4154 61.1489 41.9999 61.1489ZM35.3988 36.4517H48.6579L41.9999 47.8898L35.3988 36.4517ZM35.3988 35.7119L38.5855 30.1351H45.4143L48.601 35.7119H35.3988ZM48.8856 59.1003C46.78 59.9539 44.6176 60.3523 42.3414 60.4092V48.7434L48.8856 37.4191V59.1003ZM49.6253 25.2411C56.2265 28.2003 60.4944 34.8014 60.4944 41.9716C60.4944 49.1417 56.2265 55.7429 49.6253 58.7589V25.2411ZM48.8856 24.8997V34.6876L42.5121 23.5909C44.6745 23.6478 46.8369 24.103 48.8856 24.8997ZM45.0159 29.3953H38.9839L41.9999 24.2168L45.0159 29.3953ZM35.1143 24.8997C37.1629 24.103 39.3253 23.6478 41.5447 23.5909L35.1143 34.6876V24.8997ZM35.1143 37.4191L41.6585 48.7434V60.4092C39.3822 60.3523 37.2198 59.897 35.1143 59.1003V37.4191ZM34.3745 25.2411V58.7589C27.7734 55.7998 23.5054 49.1986 23.5054 41.9716C23.5054 34.7445 27.7734 28.2003 34.3745 25.2411Z"
fill="white"
/>
</g>
<g filter="url(#filter1_d_342_17399)">
<rect x="36" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42" cy="95" r="4" fill="#946F54" />
</g>
<defs>
<filter
id="filter0_d_342_17399"
x="0"
y="0"
width="84"
height="95.3039"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17399"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17399"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17399"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17399"
x="33"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17399"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17399"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17399"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,76 @@
export default function HaymarketSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17490)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#946F54"
/>
<path
d="M37.0009 51.5532C45.0451 51.5532 51.6189 45.0227 51.6189 37.0217C51.6189 29.0206 45.0451 22.4468 37.0009 22.4468C28.9566 22.4468 22.3828 28.9774 22.3828 36.9784C22.3828 44.9794 28.9566 51.5532 37.0009 51.5532ZM31.984 32.7833H42.061L37.0009 41.4763L31.984 32.7833ZM31.984 32.221L34.406 27.9827H39.5958L42.0177 32.221H31.984ZM42.234 49.9963C40.6338 50.645 38.9903 50.9477 37.2604 50.991V42.125L42.234 33.5185V49.9963ZM42.7962 24.2633C47.8131 26.5122 51.0567 31.5291 51.0567 36.9784C51.0567 42.4277 47.8131 47.4446 42.7962 49.7368V24.2633ZM42.234 24.0038V31.4426L37.3901 23.0091C39.0336 23.0523 40.677 23.3983 42.234 24.0038ZM39.2931 27.4204H34.7087L37.0009 23.4848L39.2931 27.4204ZM31.7678 24.0038C33.3247 23.3983 34.9682 23.0523 36.6549 23.0091L31.7678 31.4426V24.0038ZM31.7678 33.5185L36.7414 42.125V50.991C35.0114 50.9477 33.368 50.6018 31.7678 49.9963V33.5185ZM31.2055 24.2633V49.7368C26.1887 47.4878 22.945 42.471 22.945 36.9784C22.945 31.4858 26.1887 26.5122 31.2055 24.2633Z"
fill="white"
/>
</g>
<defs>
<filter
id="filter0_d_342_17490"
x="0"
y="0"
width="74"
height="83.1913"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17490"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17490"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17490"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,125 @@
export default function HotelNorgeMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="84"
height="104"
viewBox="0 0 84 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17401)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.1266 71.6347C63.7931 67.7384 73 55.9444 73 42C73 24.8792 59.1208 11 42 11C24.8792 11 11 24.8792 11 42C11 56.0928 20.4039 67.9892 33.279 71.7564L40.6302 83.3734C41.4242 84.6282 43.2607 84.6106 44.0305 83.3407L51.1266 71.6347Z"
fill="white"
/>
<path
d="M15 42C15 27.0883 27.0883 15 42 15C56.9117 15 69 27.0883 69 42C69 56.9117 56.9117 69 42 69C27.0883 69 15 56.9117 15 42Z"
fill="#181E34"
/>
<path
d="M42.1021 51.9094V32.0813L52.3585 51.9103H42.1021V51.9094ZM42.2843 31.162H52.5407V50.9901L42.2843 31.162ZM31.0769 41.9503H41.5145V51.9103H31.0769V41.9503ZM31.0769 31.162H41.5145V41.3813H31.0769V31.162ZM30.4883 52.4783H53.1273V30.593H30.4883V52.4774V52.4783Z"
fill="white"
/>
<path
d="M27.4967 27.7017H56.1187V55.3697H27.4967V27.7017ZM26.9141 55.9329H56.7013V27.1385H26.9141V55.9329Z"
fill="white"
/>
</g>
<g filter="url(#filter1_d_342_17401)">
<rect x="36" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42" cy="95" r="4" fill="#181E34" />
</g>
<defs>
<filter
id="filter0_d_342_17401"
x="0"
y="0"
width="84"
height="95.304"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17401"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17401"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17401"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17401"
x="33"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17401"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17401"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17401"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,80 @@
export default function HotelNorgeSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17518)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#181E34"
/>
<path
d="M37.0765 44.5311V29.4618L44.8713 44.5318H37.0765V44.5311ZM37.2149 28.7631H45.0098V43.8325L37.2149 28.7631ZM28.6973 36.9622H36.6299V44.5318H28.6973V36.9622ZM28.6973 28.7631H36.6299V36.5298H28.6973V28.7631ZM28.25 44.9635H45.4556V28.3307H28.25V44.9628V44.9635Z"
fill="white"
/>
<path
d="M25.9779 26.1333H47.7307V47.161H25.9779V26.1333ZM25.5352 47.589H48.1735V25.7053H25.5352V47.589Z"
fill="white"
/>
</g>
<defs>
<filter
id="filter0_d_342_17518"
x="0"
y="0"
width="74"
height="83.1914"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17518"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17518"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17518"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,141 @@
export default function MarskiMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="84"
height="104"
viewBox="0 0 84 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17400)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.1266 71.6347C63.7931 67.7384 73 55.9444 73 42C73 24.8792 59.1208 11 42 11C24.8792 11 11 24.8792 11 42C11 56.0928 20.4039 67.9892 33.279 71.7564L40.6302 83.3733C41.4242 84.6282 43.2607 84.6105 44.0305 83.3406L51.1266 71.6347Z"
fill="white"
/>
<path
d="M15 42C15 27.0883 27.0883 15 42 15C56.9117 15 69 27.0883 69 42C69 56.9117 56.9117 69 42 69C27.0883 69 15 56.9117 15 42Z"
fill="#122937"
/>
<path
d="M20.101 42.8954H20.0869L19.3878 39.895H17.2422V44.9953H18.6679V41.724H18.682L19.5321 44.9953H20.6563L21.5059 41.724H21.52V44.9953H22.9457V39.895H20.8001L20.101 42.8954Z"
fill="white"
/>
<path
d="M30.6587 39.895H29.1853L27.3828 44.9946H28.8978L29.1174 44.2662H30.6734L30.8789 44.9946H32.4416L30.6587 39.895ZM29.4459 43.1739L29.9186 41.6023H29.9321L30.3706 43.1739H29.4452H29.4459Z"
fill="white"
/>
<path
d="M41.4558 43.9017C41.4007 43.2663 41.1475 42.7947 40.7359 42.6303C41.2362 42.4378 41.4692 41.8802 41.4692 41.3518C41.4692 40.3876 40.7285 39.895 39.8722 39.895H37V44.9946H38.5083V43.2159H39.3101C39.9065 43.2159 39.9475 43.7232 39.9884 44.2089C40.0092 44.4733 40.0362 44.7372 40.112 44.9946H41.6203C41.4833 44.7588 41.4765 44.1515 41.4558 43.9017ZM39.2961 42.123H38.5077V41.109H39.2135C39.7891 41.109 39.9609 41.2945 39.9609 41.6163C39.9609 42.0733 39.5768 42.1236 39.2961 42.1236V42.123Z"
fill="white"
/>
<path
d="M49.1044 41.8883C48.412 41.6882 47.7129 41.6098 47.6854 41.2453C47.6854 40.9598 48.0212 40.9024 48.2267 40.9024C48.3778 40.9024 48.549 40.9381 48.6726 41.0312C48.7961 41.1172 48.8781 41.2453 48.8506 41.4384H50.2763C50.2353 40.1957 49.2958 39.7744 48.2334 39.7744C47.2255 39.7744 46.2591 40.2817 46.2591 41.4601C46.2591 42.4887 47.1435 42.7098 47.9178 42.9386C48.7613 43.1884 48.9735 43.2598 48.9735 43.5243C48.9735 43.9029 48.5967 43.9889 48.3496 43.9889C48.0689 43.9889 47.7398 43.9245 47.6297 43.6173C47.5955 43.5243 47.5747 43.4102 47.5747 43.2815H46.0664C46.0805 44.9098 47.6634 45.1169 48.2187 45.1169C49.3087 45.1169 50.4806 44.6886 50.4806 43.3599C50.4806 42.4243 49.7955 42.0885 49.1032 41.889L49.1044 41.8883Z"
fill="white"
/>
<path
d="M59.8402 39.895H57.9827L56.6389 41.6526H56.6255V39.895H55.1172V44.9953H56.6255V43.4881L57.0432 43.0095L58.25 44.9953H60.1277L58.0647 41.8884L59.8402 39.895Z"
fill="white"
/>
<path
d="M66.1841 39.895H64.6758V44.9946H66.1841V39.895Z"
fill="white"
/>
</g>
<g filter="url(#filter1_d_342_17400)">
<rect x="36" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42" cy="95" r="4" fill="#122937" />
</g>
<defs>
<filter
id="filter0_d_342_17400"
x="0"
y="0"
width="84"
height="95.3039"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17400"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17400"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17400"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17400"
x="33"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17400"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17400"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17400"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,96 @@
export default function MarskiSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17504)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#122937"
/>
<path
d="M20.3602 37.6805H20.3495L19.8182 35.4001H18.1875V39.2764H19.271V36.7902H19.2817L19.9279 39.2764H20.7822L21.4279 36.7902H21.4386V39.2764H22.5221V35.4001H20.8915L20.3602 37.6805Z"
fill="white"
/>
<path
d="M28.3803 35.4001H27.2605L25.8906 39.2759H27.042L27.2089 38.7223H28.3915L28.5477 39.2759H29.7353L28.3803 35.4001ZM27.4585 37.8921L27.8179 36.6977H27.8281L28.1614 37.8921H27.4581H27.4585Z"
fill="white"
/>
<path
d="M36.5856 38.4452C36.5438 37.9624 36.3513 37.6039 36.0385 37.479C36.4187 37.3327 36.5958 36.9089 36.5958 36.5074C36.5958 35.7745 36.0329 35.4001 35.3821 35.4001H33.1992V39.2759H34.3455V37.9241H34.9549C35.4081 37.9241 35.4393 38.3096 35.4704 38.6787C35.4862 38.8797 35.5067 39.0802 35.5643 39.2759H36.7106C36.6065 39.0967 36.6014 38.6351 36.5856 38.4452ZM34.9442 37.0934H34.3451V36.3228H34.8815C35.3189 36.3228 35.4495 36.4638 35.4495 36.7084C35.4495 37.0557 35.1576 37.0939 34.9442 37.0939V37.0934Z"
fill="white"
/>
<path
d="M42.3987 36.9152C41.8725 36.7631 41.3412 36.7035 41.3203 36.4265C41.3203 36.2095 41.5755 36.1659 41.7317 36.1659C41.8465 36.1659 41.9766 36.193 42.0705 36.2637C42.1644 36.3291 42.2267 36.4265 42.2058 36.5732H43.2894C43.2582 35.6287 42.5442 35.3086 41.7368 35.3086C40.9707 35.3086 40.2363 35.6941 40.2363 36.5897C40.2363 37.3714 40.9084 37.5395 41.4969 37.7134C42.1379 37.9033 42.2992 37.9575 42.2992 38.1585C42.2992 38.4462 42.0129 38.5116 41.8251 38.5116C41.6117 38.5116 41.3617 38.4627 41.278 38.2292C41.2519 38.1585 41.2361 38.0718 41.2361 37.974H40.0898C40.1005 39.2115 41.3035 39.3689 41.7256 39.3689C42.554 39.3689 43.4446 39.0434 43.4446 38.0335C43.4446 37.3225 42.924 37.0673 42.3978 36.9157L42.3987 36.9152Z"
fill="white"
/>
<path
d="M50.5583 35.4001H49.1465L48.1253 36.736H48.115V35.4001H46.9688V39.2764H48.115V38.1309L48.4325 37.7672L49.3497 39.2764H50.7767L49.2088 36.9152L50.5583 35.4001Z"
fill="white"
/>
<path
d="M55.3807 35.4001H54.2344V39.2759H55.3807V35.4001Z"
fill="white"
/>
</g>
<defs>
<filter
id="filter0_d_342_17504"
x="0"
y="0"
width="74"
height="83.1913"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17504"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17504"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17504"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,123 @@
export default function ScandicGoMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="84"
height="104"
viewBox="0 0 84 104"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17402)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M51.1266 71.6347C63.7931 67.7384 73 55.9444 73 42C73 24.8792 59.1208 11 42 11C24.8792 11 11 24.8792 11 42C11 56.0928 20.4039 67.9892 33.279 71.7564L40.6302 83.3734C41.4242 84.6282 43.2607 84.6106 44.0305 83.3407L51.1266 71.6347Z"
fill="white"
/>
<path
d="M15 42C15 27.0883 27.0883 15 42 15C56.9117 15 69 27.0883 69 42C69 56.9117 56.9117 69 42 69C27.0883 69 15 56.9117 15 42Z"
fill="#21331F"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M22.9062 41.99C22.9062 36.2534 27.6397 31.7263 33.9909 31.7263C37.2849 31.7263 40.1024 33.2914 42.0042 35.4164L40.2524 36.8327C38.6993 35.0973 36.4851 33.9122 33.9909 33.9122C28.8754 33.9122 25.2061 37.4931 25.2061 41.99C25.2061 45.9976 28.5644 50.0877 33.8309 50.0877C35.9868 50.0877 37.6643 49.3143 38.8316 48.3044C39.954 47.3333 40.5546 46.1905 40.6954 45.3659C40.0044 45.4725 39.3358 45.514 38.7051 45.4976C37.1582 45.4574 35.7113 45.0627 34.7483 44.2863C34.2541 43.8879 33.8594 43.3629 33.7056 42.7197C33.5496 42.0678 33.6679 41.4049 33.9996 40.7895L33.9996 40.7894C34.543 39.7812 35.5483 39.2858 36.5696 39.1613C37.5732 39.039 38.6572 39.2556 39.6214 39.707C40.8259 40.2709 41.9507 41.2585 42.5614 42.5959C44.0494 42.0067 45.5871 41.0208 46.962 39.5131C47.0693 39.3856 47.1668 39.2768 47.2483 39.1859C47.269 39.1628 47.2887 39.1408 47.3072 39.12L49.0809 40.5112C48.9688 40.6436 48.8555 40.773 48.7411 40.8994C48.2526 41.4863 47.6327 42.431 47.6327 43.9714C47.6327 46.4703 49.7027 48.8781 52.9939 48.8781C55.7057 48.8781 58.0456 46.6218 58.0631 43.9175C58.0652 43.5835 58.0347 43.2642 57.9761 42.9604C56.4521 43.3565 55.0345 43.3638 53.8329 43.0876C52.5968 42.8034 51.5283 42.1981 50.9058 41.3355C50.2476 40.4235 50.1388 39.2642 50.8437 38.2319C51.4852 37.2922 52.5541 36.9223 53.5809 36.9038C54.601 36.8854 55.6891 37.1993 56.6658 37.7424C57.644 38.2862 58.5695 39.0946 59.2498 40.132C60.0329 39.7355 60.8548 39.1979 61.6965 38.4863L63.2249 40.1196C62.1948 40.9905 61.1593 41.6589 60.1462 42.1518C60.2895 42.7071 60.3668 43.301 60.3628 43.9308V43.9309C60.3381 47.7692 57.0408 51.064 52.9939 51.064C48.3521 51.064 45.3328 47.5996 45.3328 43.9714C45.3328 43.8754 45.3346 43.7809 45.338 43.6879C44.5768 44.136 43.8039 44.493 43.0375 44.7676C43.0393 44.9797 43.0292 45.1969 43.0063 45.4191C42.8544 46.8961 41.9069 48.5995 40.3797 49.9208C38.8232 51.2676 36.604 52.2736 33.8309 52.2736C27.144 52.2736 22.9062 47.057 22.9062 41.99ZM57.0399 40.9297C56.6058 40.3811 56.0697 39.9433 55.5045 39.6291C54.8137 39.245 54.1385 39.08 53.6245 39.0893C53.1174 39.0984 52.8816 39.2625 52.7729 39.4218L52.7728 39.4219C52.6209 39.6444 52.619 39.8451 52.8023 40.099C53.0212 40.4023 53.5286 40.7687 54.3736 40.963C55.0843 41.1263 55.9953 41.1536 57.0399 40.9297ZM40.3188 43.2095C39.9289 42.5181 39.3038 41.9949 38.6052 41.668C37.9674 41.3694 37.3375 41.2715 36.8621 41.3295C36.4044 41.3853 36.1657 41.565 36.0466 41.7859C35.923 42.0153 35.9291 42.1555 35.9482 42.2351C35.9693 42.3236 36.0367 42.4587 36.236 42.6194C36.6598 42.9611 37.525 43.2803 38.768 43.3126C39.251 43.3251 39.7723 43.2934 40.3188 43.2095Z"
fill="#F5FF73"
/>
</g>
<g filter="url(#filter1_d_342_17402)">
<rect x="36" y="89" width="12" height="12" rx="6" fill="white" />
<circle cx="42" cy="95" r="4" fill="#21331F" />
</g>
<defs>
<filter
id="filter0_d_342_17402"
x="0"
y="0"
width="84"
height="95.304"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17402"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17402"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17402"
result="shape"
/>
</filter>
<filter
id="filter1_d_342_17402"
x="33"
y="86"
width="18"
height="18"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="1"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17402"
/>
<feOffset />
<feGaussianBlur stdDeviation="1" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17402"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17402"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,78 @@
export default function ScandicGoSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_342_17532)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#21331F"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M22.4883 36.9924C22.4883 32.6326 26.0857 29.192 30.9126 29.192C33.416 29.192 35.5574 30.3815 37.0027 31.9965L35.6713 33.0728C34.491 31.7539 32.8082 30.8533 30.9126 30.8533C27.0248 30.8533 24.2361 33.5748 24.2361 36.9924C24.2361 40.0382 26.7885 43.1467 30.7911 43.1467C32.4295 43.1467 33.7044 42.5589 34.5915 41.7913C35.4445 41.0533 35.901 40.1848 36.0081 39.5581C35.4828 39.6391 34.9748 39.6707 34.4954 39.6582C33.3198 39.6277 32.2202 39.3277 31.4882 38.7376C31.1127 38.4348 30.8127 38.0358 30.6958 37.547C30.5772 37.0515 30.6672 36.5478 30.9192 36.08L30.9192 36.08C31.3322 35.3137 32.0963 34.9373 32.8724 34.8426C33.6351 34.7497 34.459 34.9143 35.1918 35.2573C36.1072 35.6859 36.962 36.4365 37.4262 37.4529C38.5571 37.0051 39.7258 36.2558 40.7707 35.11C40.8522 35.0131 40.9263 34.9304 40.9882 34.8613C41.004 34.8437 41.0189 34.827 41.033 34.8112L42.381 35.8685C42.2958 35.9691 42.2097 36.0675 42.1228 36.1636C41.7515 36.6096 41.2803 37.3276 41.2803 38.4983C41.2803 40.3974 42.8536 42.2274 45.3549 42.2274C47.4159 42.2274 49.1942 40.5126 49.2075 38.4573C49.2091 38.2035 49.1859 37.9608 49.1414 37.7299C47.9831 38.031 46.9058 38.0365 45.9926 37.8266C45.0531 37.6106 44.2411 37.1506 43.7679 36.495C43.2677 35.8019 43.185 34.9208 43.7207 34.1362C44.2083 33.4221 45.0207 33.1409 45.801 33.1269C46.5763 33.1129 47.4033 33.3515 48.1456 33.7642C48.8889 34.1776 49.5923 34.7919 50.1094 35.5803C50.7045 35.279 51.3292 34.8704 51.9689 34.3296L53.1305 35.5709C52.3476 36.2328 51.5606 36.7408 50.7906 37.1154C50.8996 37.5374 50.9583 37.9888 50.9553 38.4674V38.4675C50.9365 41.3846 48.4305 43.8887 45.3549 43.8887C41.8271 43.8887 39.5325 41.2557 39.5325 38.4983C39.5325 38.4253 39.5338 38.3535 39.5364 38.2828C38.9579 38.6234 38.3705 38.8947 37.7881 39.1034C37.7894 39.2646 37.7817 39.4297 37.7643 39.5986C37.6488 40.721 36.9288 42.0156 35.7681 43.0198C34.5851 44.0434 32.8986 44.808 30.7911 44.808C25.709 44.808 22.4883 40.8433 22.4883 36.9924ZM48.4298 36.1866C48.0999 35.7696 47.6925 35.437 47.263 35.1981C46.7379 34.9062 46.2248 34.7808 45.8342 34.7878C45.4487 34.7948 45.2695 34.9196 45.1869 35.0406L45.1869 35.0406C45.0714 35.2097 45.07 35.3623 45.2093 35.5553C45.3756 35.7857 45.7613 36.0643 46.4035 36.2119C46.9436 36.336 47.6359 36.3568 48.4298 36.1866ZM35.7218 37.9192C35.4255 37.3938 34.9504 36.9962 34.4195 36.7477C33.9347 36.5207 33.4561 36.4464 33.0948 36.4904C32.7469 36.5328 32.5654 36.6694 32.4749 36.8373C32.381 37.0116 32.3856 37.1182 32.4001 37.1787C32.4162 37.2459 32.4674 37.3486 32.6189 37.4707C32.941 37.7304 33.5985 37.973 34.5432 37.9976C34.9103 38.0071 35.3065 37.983 35.7218 37.9192Z"
fill="#F5FF73"
/>
</g>
<defs>
<filter
id="filter0_d_342_17532"
x="0"
y="0"
width="74"
height="83.1914"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_342_17532"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_342_17532"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_342_17532"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,112 @@
export default function ScandicSmallMarker({
className,
...props
}: React.SVGAttributes<HTMLOrSVGElement>) {
return (
<svg
className={className}
width="74"
height="84"
viewBox="0 0 74 84"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g filter="url(#filter0_d_88_16539)">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.6566 61.8543C55.2791 58.5858 63 48.6945 63 37C63 22.6406 51.3594 11 37 11C22.6406 11 11 22.6406 11 37C11 48.8202 18.8877 58.7981 29.6867 61.9573L35.5739 71.2608C36.368 72.5157 38.2044 72.498 38.9742 71.2281L44.6566 61.8543Z"
fill="white"
/>
<path
d="M15 37C15 24.8497 24.8497 15 37 15C49.1503 15 59 24.8497 59 37C59 49.1503 49.1503 59 37 59C24.8497 59 15 49.1503 15 37Z"
fill="#CD0921"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M29.9577 40.078C29.4784 40.1976 28.999 40.2374 28.5197 40.2374C26.8021 40.2374 25.6836 39.4403 25.6836 37.567C25.6836 35.7735 26.842 35.0162 28.4797 35.0162C28.9591 35.0162 29.4384 35.0561 29.9178 35.1358V36.0126C29.5583 35.9728 29.2786 35.9329 28.9591 35.9329C27.6409 35.9329 27.0018 36.3315 27.0018 37.6468C27.0018 38.8823 27.601 39.3207 28.9591 39.3207C29.3186 39.3207 29.5982 39.2809 29.9178 39.241V40.078H29.9577Z"
fill="white"
/>
<path
d="M47.6406 40.1174H48.9189V35.0955H47.6406V40.1174ZM47.6406 34.0991H48.9189V32.9432H47.6406V34.0991Z"
fill="white"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M46.6107 39.9978C46.371 40.0377 45.4922 40.1971 44.6134 40.1971C42.9757 40.1971 41.7773 39.4398 41.7773 37.6064C41.7773 35.8528 42.8559 34.9759 44.4936 34.9759C44.7333 34.9759 45.1327 35.0158 45.3324 35.0158V32.9432H46.6107C46.6107 33.1824 46.6107 39.8782 46.6107 39.9978ZM45.3724 39.2405V35.9723C45.2126 35.9723 44.933 35.9325 44.6534 35.9325C43.495 35.9325 43.0556 36.4905 43.0556 37.6463C43.0556 38.6826 43.455 39.3203 44.6134 39.3203C44.8531 39.3203 45.0928 39.2804 45.3724 39.2405Z"
fill="white"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M40.9431 40.1179H39.7048V36.8098C39.7048 36.2518 39.4651 35.9329 38.6662 35.9329C38.107 35.9329 37.5078 36.0525 37.5078 36.0525V40.1179H36.2695V35.2554C36.3494 35.2554 37.9472 35.0162 38.866 35.0162C39.9844 35.0162 40.983 35.2155 40.983 36.7301V40.1179H40.9431Z"
fill="white"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M35.2235 40.1168C34.3447 40.1965 33.6656 40.2363 32.9067 40.2363C31.6284 40.2363 30.5898 40.037 30.5898 38.6022C30.5898 37.2072 31.8681 37.1275 33.0265 37.0877C33.3061 37.0877 33.6257 37.0877 33.9452 37.0877C33.9452 36.2108 33.9053 35.892 32.627 35.892C31.9879 35.892 31.3089 36.0115 30.9094 36.0913V35.1746C31.3887 35.055 32.1477 35.0151 32.7069 34.9753C34.145 34.9753 35.2235 35.1347 35.2235 36.6492V40.1168ZM33.9452 39.3595V37.9247C33.7056 37.9247 33.2662 37.9247 33.1064 37.9247C32.3474 37.9247 31.8681 37.9645 31.8681 38.6819C31.8681 39.3993 32.4673 39.4392 33.0664 39.4392C33.4259 39.3993 33.6257 39.3993 33.9452 39.3595Z"
fill="white"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M54.0046 40.078C53.5252 40.1976 53.0459 40.2374 52.5666 40.2374C50.8489 40.2374 49.7305 39.4403 49.7305 37.567C49.7305 35.7735 50.8889 35.0162 52.5266 35.0162C53.006 35.0162 53.4853 35.0561 53.9646 35.1358V36.0126C53.6051 35.9728 53.3255 35.9329 53.006 35.9329C51.6878 35.9329 51.0487 36.3315 51.0487 37.6468C51.0487 38.8823 51.6478 39.3207 53.006 39.3207C53.3655 39.3207 53.6451 39.2809 53.9646 39.241V40.078H54.0046Z"
fill="white"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M25.04 38.1237C25.04 39.5984 23.8816 40.2361 22.164 40.2361C21.0455 40.2361 20.2466 40.0368 20.1268 39.997V38.9607C20.5262 39.0404 21.3651 39.2397 22.0841 39.2397C22.8031 39.2397 23.7218 39.0803 23.7218 38.2832C23.7218 37.765 23.3224 37.5657 22.6034 37.3665C22.3237 37.2868 22.0441 37.207 21.7645 37.1273C20.8058 36.8483 20.0469 36.4498 20.0469 35.3338C20.0469 33.7395 21.3251 33.341 22.8031 33.341C23.6819 33.341 24.4009 33.5004 24.5207 33.5403V34.4968C24.3609 34.457 23.6819 34.2975 22.9229 34.2975C22.2039 34.2975 21.3651 34.3772 21.3651 35.1744C21.3651 35.7722 21.8444 35.9316 22.5235 36.0911C22.843 36.2106 23.1626 36.2505 23.4821 36.3701C24.321 36.6092 25.04 37.0078 25.04 38.1237Z"
fill="white"
/>
</g>
<defs>
<filter
id="filter0_d_88_16539"
x="0"
y="0"
width="74"
height="83.1913"
filterUnits="userSpaceOnUse"
colorInterpolationFilters="sRGB"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/>
<feMorphology
radius="3"
operator="dilate"
in="SourceAlpha"
result="effect1_dropShadow_88_16539"
/>
<feOffset />
<feGaussianBlur stdDeviation="4" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
/>
<feBlend
mode="normal"
in2="BackgroundImageFix"
result="effect1_dropShadow_88_16539"
/>
<feBlend
mode="normal"
in="SourceGraphic"
in2="effect1_dropShadow_88_16539"
result="shape"
/>
</filter>
</defs>
</svg>
)
}

View File

@@ -0,0 +1,52 @@
import DowntownCamperMarker from "./DowntownCamper"
import DowntownCamperSmallMarker from "./DowntownCamperSmall"
import GrandHotelMarker from "./GrandHotel"
import GrandHotelSmallMarker from "./GrandHotelSmall"
import HaymarketMarker from "./Haymarket"
import HaymarketSmallMarker from "./HaymarketSmall"
import HotelNorgeMarker from "./HotelNorge"
import HotelNorgeSmallMarker from "./HotelNorgeSmall"
import MarskiMarker from "./Marski"
import MarskiSmallMarker from "./MarskiSmall"
import ScandicMarker from "./Scandic"
import ScandicGoMarker from "./ScandicGo"
import ScandicGoSmallMarker from "./ScandicGoSmall"
import ScandicSmallMarker from "./ScandicSmall"
import { HotelTypeEnum } from "@/types/enums/hotelType"
import { SignatureHotelEnum } from "@/types/enums/signatureHotel"
interface HotelMarkerByTypeProps {
hotelId: string
hotelType: string
smallSize?: boolean
}
export default function HotelMarkerByType({
hotelId,
hotelType,
smallSize = true,
}: HotelMarkerByTypeProps) {
if (hotelType === HotelTypeEnum.ScandicGo) {
return smallSize ? <ScandicGoSmallMarker /> : <ScandicGoMarker />
}
switch (hotelId) {
case SignatureHotelEnum.Haymarket:
return smallSize ? <HaymarketSmallMarker /> : <HaymarketMarker />
case SignatureHotelEnum.HotelNorge:
return smallSize ? <HotelNorgeSmallMarker /> : <HotelNorgeMarker />
case SignatureHotelEnum.DowntownCamper:
return smallSize ? (
<DowntownCamperSmallMarker />
) : (
<DowntownCamperMarker />
)
case SignatureHotelEnum.GrandHotelOslo:
return smallSize ? <GrandHotelSmallMarker /> : <GrandHotelMarker />
case SignatureHotelEnum.Marski:
return smallSize ? <MarskiSmallMarker /> : <MarskiMarker />
default:
return smallSize ? <ScandicSmallMarker /> : <ScandicMarker />
}
}

View File

@@ -13,7 +13,7 @@ import type {
} from "@/types/trpc/routers/hotel/hotel"
import type { Lang } from "@/constants/languages"
import type {
GetHotelsInput,
GetHotelsByCSFilterInput,
GetRoomsAvailabilityInput,
GetSelectedRoomAvailabilityInput,
} from "@/server/routers/hotels/input"
@@ -67,10 +67,10 @@ export const getUserTracking = cache(async function getMemoizedUserTracking() {
return serverClient().user.tracking()
})
export const getHotels = cache(async function getMemoizedHotels(
input: GetHotelsInput
export const getHotelsByCSFilter = cache(async function getMemoizedHotels(
input: GetHotelsByCSFilterInput
) {
return serverClient().hotel.hotels.get(input)
return serverClient().hotel.hotels.byCSFilter.get(input)
})
export const getHotel = cache(async function getMemoizedHotelData(
@@ -206,6 +206,13 @@ export const getDestinationCityPagesByCountry = cache(
})
}
)
export const getHotelsByCountry = cache(
async function getMemoizedHotelsByCountry(country: Country) {
return serverClient().hotel.hotels.byCountry.get({
country,
})
}
)
export const getDestinationCityPage = cache(
async function getMemoizedDestinationCityPage() {
return serverClient().contentstack.destinationCityPage.get()

View File

@@ -244,7 +244,6 @@ export const destinationOverviewPageQueryRouter = router({
const hotelIdsParams = new URLSearchParams({
language: apiLang,
city: city.id,
onlyBasicInfo: "true",
})
const hotels = await getHotelIdsByCityId(

View File

@@ -63,7 +63,7 @@ export const hotelInputSchema = z.object({
language: z.nativeEnum(Lang),
})
export const getHotelsInput = z.object({
export const getHotelsByCSFilterInput = z.object({
locationFilter: z
.object({
city: z.string().nullable(),
@@ -73,7 +73,8 @@ export const getHotelsInput = z.object({
.nullable(),
hotelsToInclude: z.array(z.string()),
})
export interface GetHotelsInput extends z.infer<typeof getHotelsInput> {}
export interface GetHotelsByCSFilterInput
extends z.infer<typeof getHotelsByCSFilterInput> {}
export const nearbyHotelIdsInput = z.object({
hotelId: z.string(),
@@ -116,3 +117,7 @@ export const getAdditionalDataInputSchema = z.object({
hotelId: z.string(),
language: z.string(),
})
export const getHotelsByCountryInput = z.object({
country: z.nativeEnum(Country),
})

View File

@@ -24,8 +24,9 @@ import {
breakfastPackageInputSchema,
cityCoordinatesInputSchema,
getAdditionalDataInputSchema,
getHotelsByCountryInput,
getHotelsByCSFilterInput,
getHotelsByHotelIdsAvailabilityInputSchema,
getHotelsInput,
getMeetingRoomsInputSchema,
hotelInputSchema,
hotelsAvailabilityInputSchema,
@@ -59,8 +60,7 @@ import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHote
import { BreakfastPackageEnum } from "@/types/enums/breakfast"
import { HotelTypeEnum } from "@/types/enums/hotelType"
import type { RequestOptionsWithOutBody } from "@/types/fetch"
import type { HotelData } from "@/types/hotel"
import type { HotelPageUrl } from "@/types/trpc/routers/contentstack/hotelPage"
import type { HotelDataWithUrl } from "@/types/hotel"
import type { HotelInput } from "@/types/trpc/routers/hotel/hotel"
import type { CityLocation } from "@/types/trpc/routers/hotel/locations"
@@ -833,207 +833,251 @@ export const hotelQueryRouter = router({
return getHotel(input, ctx.serviceToken)
}),
hotels: router({
get: contentStackBaseWithServiceProcedure
.input(getHotelsInput)
.query(async function ({ ctx, input }) {
const { locationFilter, hotelsToInclude } = input
byCountry: router({
get: contentStackBaseWithServiceProcedure
.input(getHotelsByCountryInput)
.query(async ({ ctx, input }) => {
const { lang, serviceToken } = ctx
const { country } = input
const language = ctx.lang
const apiLang = toApiLang(language)
const options: RequestOptionsWithOutBody = {
// needs to clear default option as only
// cache or next.revalidate is permitted
cache: undefined,
headers: {
Authorization: `Bearer ${ctx.serviceToken}`,
},
next: {
revalidate: env.CACHE_TIME_HOTELS,
},
}
let hotelsToFetch: string[] = []
metrics.hotels.counter.add(1, {
input: JSON.stringify(input),
language,
})
console.info(
"api.hotel.hotels start",
JSON.stringify({
query: {
...input,
language,
const options: RequestOptionsWithOutBody = {
// needs to clear default option as only
// cache or next.revalidate is permitted
cache: undefined,
headers: {
Authorization: `Bearer ${serviceToken}`,
},
next: {
revalidate: env.CACHE_TIME_HOTELS,
},
})
)
if (hotelsToInclude.length) {
hotelsToFetch = hotelsToInclude
} else if (locationFilter?.city) {
const locationsParams = new URLSearchParams({
language: apiLang,
})
const locations = await getLocations(
language,
options,
locationsParams,
null
)
if (!locations || "error" in locations) {
return []
}
const cityId = locations
.filter(
(loc): loc is CityLocation =>
"type" in loc && loc.type === "cities"
)
.find((loc) => loc.cityIdentifier === locationFilter.city)?.id
if (!cityId) {
metrics.hotels.fail.add(1, {
input: JSON.stringify(input),
language,
error_type: "not_found",
error: `CityId not found for cityIdentifier: ${locationFilter.city}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { ...input, language },
error: `CityId not found for cityIdentifier: ${locationFilter.city}`,
})
)
return []
}
const hotelIdsParams = new URLSearchParams({
language: apiLang,
city: cityId,
onlyBasicInfo: "true",
})
const hotelIds = await getHotelIdsByCityId(
cityId,
options,
hotelIdsParams
)
if (!hotelIds?.length) {
metrics.hotels.fail.add(1, {
cityId,
language,
error_type: "not_found",
error: `No hotelIds found for cityId: ${cityId}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { cityId, language },
error: `No hotelIds found for cityId: ${cityId}`,
})
)
return []
}
const filteredHotelIds = hotelIds.filter(
(id) => !locationFilter.excluded.includes(id)
)
hotelsToFetch = filteredHotelIds
} else if (locationFilter?.country) {
const hotelIdsParams = new URLSearchParams({
language: ApiLang.En,
country: locationFilter.country,
onlyBasicInfo: "true",
country,
})
const hotelIds = await getHotelIdsByCountry(
locationFilter.country,
country,
options,
hotelIdsParams
)
if (!hotelIds?.length) {
metrics.hotels.fail.add(1, {
const hotels = await Promise.all(
hotelIds.map(async (hotelId) => {
const [hotelData, url] = await Promise.all([
getHotel(
{ hotelId, isCardOnlyPayment: false, language: lang },
ctx.serviceToken
),
getHotelPageUrl(lang, hotelId),
])
return hotelData ? { ...hotelData, url } : null
})
)
return hotels.filter((hotel): hotel is HotelDataWithUrl => !!hotel)
}),
}),
byCSFilter: router({
get: contentStackBaseWithServiceProcedure
.input(getHotelsByCSFilterInput)
.query(async function ({ ctx, input }) {
const { locationFilter, hotelsToInclude } = input
const language = ctx.lang
const apiLang = toApiLang(language)
const options: RequestOptionsWithOutBody = {
// needs to clear default option as only
// cache or next.revalidate is permitted
cache: undefined,
headers: {
Authorization: `Bearer ${ctx.serviceToken}`,
},
next: {
revalidate: env.CACHE_TIME_HOTELS,
},
}
let hotelsToFetch: string[] = []
metrics.hotels.counter.add(1, {
input: JSON.stringify(input),
language,
})
console.info(
"api.hotel.hotels start",
JSON.stringify({
query: {
...input,
language,
},
})
)
if (hotelsToInclude.length) {
hotelsToFetch = hotelsToInclude
} else if (locationFilter?.city) {
const locationsParams = new URLSearchParams({
language: apiLang,
})
const locations = await getLocations(
language,
options,
locationsParams,
null
)
if (!locations || "error" in locations) {
return []
}
const cityId = locations
.filter(
(loc): loc is CityLocation =>
"type" in loc && loc.type === "cities"
)
.find((loc) => loc.cityIdentifier === locationFilter.city)?.id
if (!cityId) {
metrics.hotels.fail.add(1, {
input: JSON.stringify(input),
language,
error_type: "not_found",
error: `CityId not found for cityIdentifier: ${locationFilter.city}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { ...input, language },
error: `CityId not found for cityIdentifier: ${locationFilter.city}`,
})
)
return []
}
const hotelIdsParams = new URLSearchParams({
language: apiLang,
city: cityId,
})
const hotelIds = await getHotelIdsByCityId(
cityId,
options,
hotelIdsParams
)
if (!hotelIds?.length) {
metrics.hotels.fail.add(1, {
cityId,
language,
error_type: "not_found",
error: `No hotelIds found for cityId: ${cityId}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { cityId, language },
error: `No hotelIds found for cityId: ${cityId}`,
})
)
return []
}
const filteredHotelIds = hotelIds.filter(
(id) => !locationFilter.excluded.includes(id)
)
hotelsToFetch = filteredHotelIds
} else if (locationFilter?.country) {
const hotelIdsParams = new URLSearchParams({
language: ApiLang.En,
country: locationFilter.country,
})
const hotelIds = await getHotelIdsByCountry(
locationFilter.country,
options,
hotelIdsParams
)
if (!hotelIds?.length) {
metrics.hotels.fail.add(1, {
country: locationFilter.country,
language,
error_type: "not_found",
error: `No hotelIds found for country: ${locationFilter.country}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { country: locationFilter.country, language },
error: `No hotelIds found for cityId: ${locationFilter.country}`,
})
)
return []
}
const filteredHotelIds = hotelIds.filter(
(id) => !locationFilter.excluded.includes(id)
)
hotelsToFetch = filteredHotelIds
}
if (!hotelsToFetch.length) {
metrics.hotels.fail.add(1, {
input: JSON.stringify(input),
language,
error_type: "not_found",
error: `No hotelIds found for country: ${locationFilter.country}`,
error: `Couldn't find any hotels for given input: ${JSON.stringify(input)}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: { country: locationFilter.country, language },
error: `No hotelIds found for cityId: ${locationFilter.country}`,
query: JSON.stringify(input),
error: `Couldn't find any hotels for given input: ${JSON.stringify(input)}`,
})
)
return []
}
const filteredHotelIds = hotelIds.filter(
(id) => !locationFilter.excluded.includes(id)
)
const hotels = await Promise.all(
hotelsToFetch.map(async (hotelId) => {
const [hotelData, url] = await Promise.all([
getHotel(
{ hotelId, isCardOnlyPayment: false, language },
ctx.serviceToken
),
getHotelPageUrl(language, hotelId),
])
hotelsToFetch = filteredHotelIds
}
if (!hotelsToFetch.length) {
metrics.hotels.fail.add(1, {
input: JSON.stringify(input),
language,
error_type: "not_found",
error: `Couldn't find any hotels for given input: ${JSON.stringify(input)}`,
})
console.error(
"api.hotel.hotels not found error",
JSON.stringify({
query: JSON.stringify(input),
error: `Couldn't find any hotels for given input: ${JSON.stringify(input)}`,
return hotelData
? {
...hotelData,
url,
}
: null
})
)
return []
}
const hotels = await Promise.all(
hotelsToFetch.map(async (hotelId) => {
const [hotelData, url] = await Promise.all([
getHotel(
{ hotelId, isCardOnlyPayment: false, language },
ctx.serviceToken
),
getHotelPageUrl(language, hotelId),
])
return {
data: hotelData,
url,
}
metrics.hotels.success.add(1, {
input: JSON.stringify(input),
language,
})
)
metrics.hotels.success.add(1, {
input: JSON.stringify(input),
language,
})
console.info(
"api.hotels success",
JSON.stringify({
query: {
input: JSON.stringify(input),
language,
},
})
)
console.info(
"api.hotels success",
JSON.stringify({
query: {
input: JSON.stringify(input),
language,
},
})
)
return hotels.filter(
(hotel): hotel is { data: HotelData; url: HotelPageUrl } =>
!!hotel.data
)
}),
return hotels.filter((hotel): hotel is HotelDataWithUrl => !!hotel)
}),
}),
}),
nearbyHotelIds: serviceProcedure
.input(nearbyHotelIdsInput)

View File

@@ -432,7 +432,6 @@ export async function getHotelIdsByCityIdentifier(
const hotelIdsParams = new URLSearchParams({
language: apiLang,
city: cityId,
onlyBasicInfo: "true",
})
const options: RequestOptionsWithOutBody = {
// needs to clear default option as only

View File

@@ -0,0 +1,6 @@
export interface DestinationMarker {
id: string
type: string
name: string
coordinates: google.maps.LatLngLiteral
}

View File

@@ -68,3 +68,5 @@ export type HotelTripAdvisor =
export type AdditionalData = ReturnType<typeof transformAdditionalData>
export type ExtraPageSchema = z.output<typeof extraPageSchema>
export type HotelDataWithUrl = HotelData & { url: string }