# Hours Table With Map Slot

> Opening hours split pairing a seven row hours table with an embedded map, the address, and directions copy covering transit and step free access.

A shadcn/ui block from the [@7ovr](https://7ovr.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/7ovr/location-1).

- Page, with a live preview: https://shadcn.exchange/r/7ovr/location-1
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/7ovr/location-1-light-71de075d560e5c74.png
- Registry item: https://7ovr.com/r/location-1.json
- Categories: location
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://7ovr.com/r/location-1.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Files

### `registry/blocks/location/1/location-block.tsx`

```tsx
const ADDRESS = "Vicolo del Cinque 34, 00153 Roma, Italy"

const hours: { day: string; open: string }[] = [
  { day: "Monday", open: "Closed" },
  { day: "Tuesday", open: "5 PM – 11 PM" },
  { day: "Wednesday", open: "5 PM – 11 PM" },
  { day: "Thursday", open: "5 PM – 11 PM" },
  { day: "Friday", open: "12 PM – 11:30 PM" },
  { day: "Saturday", open: "12 PM – 11:30 PM" },
  { day: "Sunday", open: "12 PM – 10 PM" },
]

export default function LocationBlock() {
  return (
    <section className="w-full bg-background px-6 py-16 text-foreground sm:py-24">
      <div className="mx-auto grid w-full max-w-5xl grid-cols-1 items-start gap-10 md:grid-cols-2 md:gap-14">
        <div>
          <h2 className="font-heading text-3xl font-bold tracking-tight text-balance sm:text-4xl">
            Opening Hours
          </h2>
          <p className="mt-4 text-pretty text-muted-foreground">
            The kitchen closes half an hour before we do. The bar usually
            carries on a little longer.
          </p>

          <table className="mt-8 w-full text-sm">
            <caption className="sr-only">Opening hours by day</caption>
            <tbody>
              {hours.map((row) => (
                <tr key={row.day} className="border-b border-border">
                  <th
                    scope="row"
                    className="py-2.5 text-left font-normal text-muted-foreground"
                  >
                    {row.day}
                  </th>
                  <td className="py-2.5 text-right font-medium tabular-nums">
                    {row.open}
                  </td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>

        <div className="flex flex-col gap-6">
          <div className="relative aspect-4/3 w-full overflow-hidden rounded-xl border border-border bg-card">
            <iframe
              title={`Map of ${ADDRESS}`}
              src={`https://www.google.com/maps?q=${encodeURIComponent(ADDRESS)}&z=16&output=embed`}
              loading="lazy"
              referrerPolicy="no-referrer-when-downgrade"
              allowFullScreen
              className="absolute inset-0 size-full border-0 dark:brightness-90 dark:contrast-90 dark:hue-rotate-180 dark:invert"
            />
          </div>

          <div className="flex flex-col gap-4">
            <div>
              <h3 className="font-heading text-sm font-semibold">Address</h3>
              <p className="mt-1 text-sm text-muted-foreground">
                Vicolo del Cinque 34
                <br />
                00153 Roma, Italy
              </p>
            </div>
            <div>
              <h3 className="font-heading text-sm font-semibold">
                Getting Here
              </h3>
              <p className="mt-1 text-sm text-muted-foreground">
                Tram to Belli, then four minutes on foot. Step-free from the
                street, with two accessible tables you can reserve by phone.
              </p>
            </div>
          </div>
        </div>
      </div>
    </section>
  )
}
```
