Address, map, hours and directions — the most visited section of restaurant, spa and clinic sites, and the source of LocalBusiness SEO. The map is a ConsentGate facade (a greyscale static image with an accent pin; the keyless Google Maps or OpenStreetMap iframe loads after a click or functional consent — no Maps JS API, no key). Hours run through the OpeningHours module: IANA time zone, ranges past midnight, special days, Intl weekday names, week start and 12/24 h. “Open now” is a ~1 KB island that renders nothing without JS, so a cached page never shows a stale status.
The map loads from Google Maps, which may set cookies.
Visit
Find us
Valet from 18:00. The closest ferry pier is Caddebostan, a seven-minute walk.
+90 216 000 00 00Opening hours
| Sunday | 12 PM–10 PM |
|---|---|
| Monday | Closed |
| Tuesday | 5 PM–11:30 PM |
| Wednesday | 5 PM–11:30 PM |
| ThursdayToday | 5 PM–11:30 PM |
| Friday | 5 PM–1 AM |
| Saturday | 12 PM–1 AM |
Installation
The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";
Usage
import { MapHours, isOpenAt, hoursStatus } from "@vamos-ui/react/blocks";
const hours = { timeZone: "Europe/Istanbul", weekly: { fri: [{ open: "17:00", close: "01:00" }] },
special: [{ date: "2027-01-01", closed: true, note: "New Year’s Day" }] };
<MapHours title="Find *us*" businessType="Restaurant" directions={["google", "apple", "yandex"]}
branches={[{ name: "Kıyı Meyhane", address, phone: "+902160000000", hours, mapImage }]} />
isOpenAt(hours, new Date()); // past midnight + special days, in Europe/Istanbul
hoursStatus(hours).closesAt; // "01:00"Examples
Info (no map)
Address / Hours / Contact in three typographic columns; consecutive days with the same hours are grouped.
Opening hours
Address
Bağdat Caddesi 41234728 Caddebostan/KadıköyİstanbulValet from 18:00. The closest ferry pier is Caddebostan, a seven-minute walk.
Directions in Google Maps (opens in a new tab)Hours
- Sun12 PM–10 PM
- MonClosed
- Tue–Thu5 PM–11:30 PM
- Fri5 PM–1 AM
- Sat12 PM–1 AM
Branches (three-branch clinic)
A radio location picker with open/closed per branch; the selected branch's map, address and hours (0 JS).
Locations
Three clinics, one team
The map loads from Google Maps, which may set cookies.
Defne Clinic Nişantaşı
Entrance next to the pharmacy; lift to the third floor.
+90 212 230 44 55| Sunday | Closed |
|---|---|
| Monday | 9 AM–1 PM, 2 PM–7 PM |
| Tuesday | 9 AM–1 PM, 2 PM–7 PM |
| Wednesday | 9 AM–1 PM, 2 PM–7 PM |
| ThursdayToday | 9 AM–1 PM, 2 PM–7 PM |
| Friday | 9 AM–1 PM, 2 PM–5 PM |
| Saturday | 10 AM–2 PM |
The map loads from Google Maps, which may set cookies.
Defne Clinic Moda
| Sunday | Closed |
|---|---|
| Monday | 9 AM–1 PM, 2 PM–7 PM |
| Tuesday | 9 AM–1 PM, 2 PM–7 PM |
| Wednesday | 9 AM–1 PM, 2 PM–7 PM |
| ThursdayToday | 9 AM–1 PM, 2 PM–7 PM |
| Friday | 9 AM–1 PM, 2 PM–5 PM |
| Saturday | 10 AM–2 PM |
The map loads from Google Maps, which may set cookies.
Defne Clinic Ataşehir
Free parking under the building, level −1.
+90 216 555 77 88| Sunday | Closed |
|---|---|
| Monday | 9 AM–1 PM, 2 PM–7 PM |
| Tuesday | 9 AM–1 PM, 2 PM–7 PM |
| Wednesday | 9 AM–1 PM, 2 PM–7 PM |
| ThursdayToday | 9 AM–1 PM, 2 PM–7 PM |
| Friday | 9 AM–1 PM, 2 PM–5 PM |
| Saturday | Closed |
Special days, past midnight, Turkish
New Year's Eve overrides Thursday with 19:00–03:00; Monday-first, 24-hour, Turkish weekday names.
Yılbaşı saatleri
Adres
Bağdat Caddesi 41234728 Caddebostan/KadıköyİstanbulValet from 18:00. The closest ferry pier is Caddebostan, a seven-minute walk.
Yandex Maps ile yol tarifi (opens in a new tab)Çalışma saatleri
- PztKapalı
- Sal–Per17:00–23:30
- Cum17:00–01:00
- Cmt12:00–01:00
- Paz12:00–22:00
API
MapHours
| Prop | Type | Default |
|---|---|---|
variantNo map image falls back to info; one branch falls back to map-split. | "map-split" | "info" | "branches" | "map-split" |
branches{ name, address: AddressValue, phone?, email?, hours: OpeningHours, mapImage?, placeUrl?, mapEmbedUrl?, notes? } — 1–12. | Branch[] | — |
businessTypeJSON-LD @type. | "LocalBusiness" | "Restaurant" | "DaySpa" | "BeautySalon" | "MedicalClinic" | "ProfessionalService" | "LocalBusiness" |
mapProviderEmbed loaded by the facade (osm needs geo). | "google" | "osm" | "none" | "google" |
directionsDirection links (Yandex is common in Turkey). | ("google" | "apple" | "yandex" | "waze")[] | ["google","apple"] |
showOpenNowThe client-side status island. | boolean | true |
nowPin the clock (previews, tests). Default: render time for the table, live clock for the island. | string (ISO) | — |
eyebrow / title / leadSection header. | ReactNode | — |
labels / localeStatus line keys: openNow (“Open”), openUntil (“until {time}”), closingSoon + closingSoonUntil (“open until {time}”), openAllDay, closed / closedToday, opensTodayAt / opensTomorrowAt / opensAt ({day}). TR templates get {timeTo} / {timeAt} with the right suffix (“01:00’e kadar”, “yarın 12:00’de açılıyor”). Also Load map, Directions… | Partial<Site2Labels> / string | — |
theme / anchor / id / className / headingLevel / components / editModeShared block props. | BlockBaseProps | — |
OpeningHours helpers
| Prop | Type | Default |
|---|---|---|
isOpenAt(hours, at?)Open at an instant, computed in hours.timeZone. | boolean | — |
hoursStatus(hours, at?, { soonMinutes }){ state: open | closing-soon | closed, closesAt, opensAt: { time, weekday, dayOffset }, allDay, special }. | OpenStatus | — |
weekRows(hours, { locale, at })Seven rows in locale order with today and special-day notes. | WeekRow[] | — |
summarizeHours / formatTime / formatRange / weekStartOf / orderedWeekIntl-based formatting. | functions | — |
openingHoursJsonLd(hours) / localBusinessJsonLd(props)schema.org nodes without the renderer. | object[] | — |
HoursTable / OpenNow
| Prop | Type | Default |
|---|---|---|
hours / labels / locale / nowThe table and the island on their own (e.g. in a footer). | — | — |